Could I suggest you make this very clear in the description of the action in the Marketplace?
As @tfoote already hints at, that doesn’t seem like a standard workflow, and might lead users to conclude they’ve done things according to accepted/best practices if/when they get things to work after using your action.
Again: this is not criticism. Different workflows can all lead to successful results.
slightly off-topic, but could you give an example how you make sure dependencies are installed? Do you run individual apt install .. and pip install .. commands? Or perhaps a wrapper .bash or .bat script?
I noticed this in the description of the action on the Marketplace page:
Although, The CI process is guaranteed to be fast (approximately 3-5 minutes, depends on each package) as almost every component of the ROS 2 has already been installed inside the Docker’s image.
The problem @rgov describes is related to this: if your builds start with a Docker image which contains “almost every component” already, it becomes harder to detect your own packages are not declaring all of their dependencies.
This is why the buildfarm (but also ros-tooling/action-ros-ci and industrial_ci) start with almost empty Docker images, such as ubuntu:focal or debian:buster. Any dependency not declared by the packages-to-be-built will not be present during the build, and will cause it to fail.
In a research project I’m involved in (robust-rosin/robust), we found such build-configuration errors make up a large part of the bug population in ROS and ROS 2. Being able to detect those early (as @rgov wants to do, and various CI tools support this, see below) avoids running into those.
At least industrial_ci supports this.
It allows you to hook all steps of the build process, one of which would allow you to clone additional repositories in underlays, or even build additional source packages after your main build has finished (to build separate test packages fi in a downstream/overlay workspace).
And this is, I believe, exactly what ros-tooling/action-ros-ci and industrial_ci do.
Same workflow for ROS 1 workspaces.
Perhaps @ipa-mdl can comment, but with industrial_ci, you could set this up by pruning the set of packages to-be-built before industrial_ci runs rosdep to install all dependencies.
You’d get something like this (all performed by industrial_ci, these are not separate steps you need to do yourself, or script):
- setup base build environment
- checkout copy of the repository to build
- prune
foo, so we’re left with bar
- run
rosdep install ..
- start the build
If bar would not build_depend on libjpeg, the build now fails.
The build with just foo will succeed, as it does declare the build_depend.