Buiild job for each repository
run even when previous tasks fail
Pipelines-to-PPA relation
Single MRS ROS build pipeline - dense view
Full test pipeline with coverage reporting - dense view
Single-repository build action - dense view
Single-repository test action - dense view
ROS1 -> ROS2 repository/branch relation
Release-candidate (with testing)
Branches of source repositories
Artifact ininitialization
Artifact ininitialization
Pre-building dependencies for coverage report [optional]
Build matrix determination
Test matrix determination
Delete docker builder image
delete builder images older than 7 days
loads the Docker builder image from Github's Docker registry
accesses the repository from the commit
[optional] install git and gitman submodules
Runs the Docker builder image:
installs dependencies via rosdep
determines build order of ROS packages within the repository
for each ROS package:
generates build using bloom-generate
for each ROS package
builds .deb
package
installs the .deb
to satisfy dependencies later
outputs the following into the /tmp/artifacts
folder for the later jobs
the new .deb
packages
ctu-mrs/ci_scripts (master)
single_package_pipeline.png
- To be able to install the system via apt-get
- To make sure the system is always tested and working - To automatically and safely propagate new changes into the stable release - To provide installation for AMD64 and ARM64 architectures
contains
scripts
dockerfiles
github actions
... for building a single repository within the MRS system
contains files that are reused in the Buildfarm
contains
scripts
dockerfiles
github actions
... for building MRS PPAs and testing MRS software
when executed, clonse CI Scripts into ci_scripts
.
ctu-mrs/ci_scripts (ros2)
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
Generic Github action link for the build is triggered
includes action from the CI Scripts repo link
Triggering Arm64 and Amd64 builds
loads the Docker builder image from Github's Docker registry
accesses the repository from the commit
[optional] install git and gitman submodules
Runs the Docker builder image:
installs dependencies via rosdep
determines build order of ROS packages within the repository
for each ROS package:
generates build using bloom-generate
for each ROS package
builds .deb
package
installs the .deb
to satisfy dependencies later
outputs the following into the /tmp/artifacts
folder for the later jobs
the new .deb
packages
.deb
packages are collected and commited to the PPA repository
New commit pushed to master
contains ros-noetic-desktop-full
prebuiilt by hand
versioned by date
delete builder images older than 7 days
contains ros-noetic-desktop-full
prebuiilt by hand
versioned by date
New commit pushed to devel
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
Generic Github action link for the build is triggered
includes action from the CI Scripts repo link
Triggering Arm64 and Amd64 builds
[optional] clones the package into the pre-compiled workspace
creates a new catkin/colcon workspace
when no is passed from the previous jobs
compiles the tests
runs the tests using rostest
Repository list determination
packages that have test: true
in the yaml
order of testing does not matter
package that have coverage: true
in the yaml
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)
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
contains ros-noetic-desktop-full
prebuiilt by hand
versioned by date
Cotains for each repository
name
address
CPU architectures
branches for
unstable
release candidate
relelase
If it should be tested
If it should be built for test coverage
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
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
rosdep.yaml
on-the-go updated list of built ROS packages
later commited to the PPA
compiled.txt
keeps track of what was buiilt, used to determine if a package should be rebuild due to its dependencies being updated
delete builder images older than 7 days
contains ros-noetic-desktop-full
prebuiilt by hand
versioned by date
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
the new .deb
packages
the passing rosdep.yml
the passing copiled.txt
.deb
packages are collected and commited to the PPA repository
rosdep.yml
is commited to the PPA
We have 3 pipeline types, two ROS and one non-ROS, each producing *.deb
packages into our PPAs.
Each pipeline is executed for AMD and ARM architectures .
Each pipeline is executed for each PPA variant (Stable, Unstable, Testing)
link to the repository list
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
link to the repository list
Packages are either MRS-developed or are in some way dependent on packages from this pipeline (e.g., on mrs_lib or mrs_msgs)
Cotains for each repository
name
address
CPU architectures
branches for
unstable
release candidate
relelase
If it should be tested
If it should be built for test coverage
Runs more than 1 hour of simulation BDD integration tests
release-candidate branches
mrs_msgs
mrs_lib
..
..
..
Build packages for testing and coverage generation
mrs_lib
mrs_uav_managers
..
..
mrs_lib
mrs_uav_managers
..
..
runs nightly
only core MRS developers can merge to release-candidate
runs tests after the build
if tests succeed, then it merges release-candidate
into release
runs nightly
only the release-candidate
pipeline can merge to release
stable-PPA
should therefore always be internally consistent and tested
runs nightly
all MRS developers can merge to master
also direct pushes are built into the unstable-PPA
therefore, can be broken at any time
however, quick fixes can propagate fast and can be quickly installed using apt-get
LCOV - MRS UAV System - Test coverage report
Merge release_candidate to release
mrs_lib
mrs_uav_managers
..
..
Runs more than 1 hour of simulation BDD integration tests