software is built with flags to export code coverage reports while running
pre-building packages before testing allows recording coverage in package A despite not directly testing package A
the whole workspace is built, tared and passed further to each of the testing jobs
it is also passed to the final job that generates the coverage webpage (that needs source codes, therefore, passing the workspace)
Docker builder priming
Adds MRS PPA depending on the "variant" of the build (unstable, stable, testing)
calling apt update
installation mrs-uav-system-full
saved to Github's registry
/tmp/artifacts
Repository order determination
python script
clones all the repositories
does topological ordering of repositories containing ROS packages
for simplicity and minimizing edge cases treats all dependency types equally
Docker builder priming
Adds MRS PPA depending on the "variant" of the build (unstable, stable, testing)
installation of neccesary build tools
calling apt update
saved to Github's registry
loads the Docker builder image from Github's Docker registry
clones the repository
[optional] install git and gitman submodules
Runs the Docker builder image:
2. adds the passing rosdep.yaml from the artifacts
3. installs dependencies via rosdep
4. determines build order of ROS packages within the repository
5. for each ROS package:
1. determines if the package needs to be built (if the commit changed or if the based image changed or if its dependency was compiled (is in compiled.txt))
2. generates build using bloom-generate for each ROS package
3. builds .deb package
4. installs the .deb to satisfy dependencies later
5. adds the package to the passing rosdep.yaml
6. if compiled, ads the package name into compiled.txt
installs the created .deb fiiles into the into the builder image and squashes the image
Pushes the updated Docker buiilder image into the Github's docker registry
outputs the following into the /tmp/artifacts folder for the later jobs
Packages that can not be built using bloom-generate.
The pipeline for these is different: the docker build executes a script from each repository (.ci/build_package.sh) that is supposed to build the deb package. This procedure is different for each repository, so it is implemented within each package.
Specialities: PX4 is not compatible with bloom-generate, so the ROS package is build by catkin and the build artifacts are extracted from a catkin workspace