Motivation
Many of our CI workflows (Industrial CI, Codecov, and others) repeatedly run the same dependency-installation script on every job execution.
For example, vortex-auv runs scripts/ci_install_dependencies.sh before its builds.
This includes installing Python packages, compiler toolchains, and other system dependencies — all of which significantly increase CI runtime and resource usage.
By prebuilding a Docker image that already contains:
ros:humble-ros-base
- All CI-required dependencies
- The logic currently inside
ci_install_dependencies.sh
…we can remove these heavy setup steps entirely from our CI runs.
This will noticeably speed up CI pipelines, reduce duplicated work across repositories, and improve overall reliability and reproducibility.
Description
Introduce a new Docker image (hosted on GHCR under vortexntnu) that extends ros:humble-ros-base and pre-installs all common CI dependencies used across our repositories.
The image should mirror what ci_install_dependencies.sh currently performs (Python deps, GCC toolchain setup, etc.).
A new GitHub Actions workflow should:
- Detect changes to CI-related scripts (e.g.,
scripts/ci_install_dependencies.sh)
- Automatically build and publish a new version of the Docker image when these files change
- Tag and push the image to GHCR (e.g.,
ghcr.io/vortexntnu/ci-base:latest)
Industrial CI and other workflows (Codecov, testing workflows, etc.) should then accept a new docker_image input and use this prebuilt image as their base, removing the need to run manual install steps during the job. This will greatly reduce CI duration and improve reproducibility.
Task
-
In vortexntnu/vortex-ci
- Add a GitHub Actions workflow that:
- Uses
ros:humble-ros-base as the base image.
- Installs all dependencies currently defined in
vortex-auv/scripts/ci_install_dependencies.sh.
- Publishes the image to GHCR (
ghcr.io/vortexntnu/ci-base:latest).
- Triggers on:
- Changes to dependency installation scripts
- Manual dispatch
- Push to
main
- Document how to use
DOCKER_IMAGE in Industrial CI workflows.
-
Modify the reusable Industrial CI workflow
- Add a new input:
docker_image.
- If provided, pass it to Industrial CI via the
DOCKER_IMAGE environment variable.
- Update the example workflows to demonstrate using the new shared CI base image.
-
Update vortex-auv and other repos
- Remove (or bypass) the dependency-install step when a custom
DOCKER_IMAGE is supplied.
- Update existing CI workflows (Industrial CI, Codecov, etc.) to use the shared base image.
Deliverables
- A published Docker image (
ghcr.io/vortexntnu/ci-base:latest) with:
- ROS Humble base
- All CI-required dependencies pre-installed
- A GitHub Actions workflow that auto-builds the image when dependency scripts change.
- Updated
vortex-ci reusable workflows supporting a docker_image input.
- Updated documentation describing:
- Build triggers
- Tagging conventions
- How to use the image in CI
- Updated CI workflows in
vortex-auv (and optionally other repos) to use the new base image.
- Demonstration that CI time is reduced (e.g., before/after comparison).
References
Contacts
@kluge7
@Andeshog
Motivation
Many of our CI workflows (Industrial CI, Codecov, and others) repeatedly run the same dependency-installation script on every job execution.
For example,
vortex-auvrunsscripts/ci_install_dependencies.shbefore its builds.This includes installing Python packages, compiler toolchains, and other system dependencies — all of which significantly increase CI runtime and resource usage.
By prebuilding a Docker image that already contains:
ros:humble-ros-baseci_install_dependencies.sh…we can remove these heavy setup steps entirely from our CI runs.
This will noticeably speed up CI pipelines, reduce duplicated work across repositories, and improve overall reliability and reproducibility.
Description
Introduce a new Docker image (hosted on GHCR under
vortexntnu) that extendsros:humble-ros-baseand pre-installs all common CI dependencies used across our repositories.The image should mirror what
ci_install_dependencies.shcurrently performs (Python deps, GCC toolchain setup, etc.).A new GitHub Actions workflow should:
scripts/ci_install_dependencies.sh)ghcr.io/vortexntnu/ci-base:latest)Industrial CI and other workflows (Codecov, testing workflows, etc.) should then accept a new
docker_imageinput and use this prebuilt image as their base, removing the need to run manual install steps during the job. This will greatly reduce CI duration and improve reproducibility.Task
In
vortexntnu/vortex-ciros:humble-ros-baseas the base image.vortex-auv/scripts/ci_install_dependencies.sh.ghcr.io/vortexntnu/ci-base:latest).mainDOCKER_IMAGEin Industrial CI workflows.Modify the reusable Industrial CI workflow
docker_image.DOCKER_IMAGEenvironment variable.Update
vortex-auvand other reposDOCKER_IMAGEis supplied.Deliverables
ghcr.io/vortexntnu/ci-base:latest) with:vortex-cireusable workflows supporting adocker_imageinput.vortex-auv(and optionally other repos) to use the new base image.References
Contacts
@kluge7
@Andeshog