Skip to content

290 - Rename files and folders from rcdt to alliander. #138

290 - Rename files and folders from rcdt to alliander.

290 - Rename files and folders from rcdt to alliander. #138

Workflow file for this run

# SPDX-FileCopyrightText: Alliander N. V.
#
# SPDX-License-Identifier: Apache-2.0
name: docker
on:
push:
branches: [main]
pull_request:
branches: [main]
types: [opened, synchronize, reopened, ready_for_review]
jobs:
detect-changes:
# if: github.event_name == 'push' || github.event.pull_request.draft == false
if: false
runs-on: ubuntu-24.04
outputs:
matrix_ubuntu: ${{ steps.set-matrix.outputs.matrix_ubuntu }}
matrix_cuda: ${{ steps.set-matrix.outputs.matrix_cuda }}
expanded_matrix_ubuntu: ${{ steps.set-matrix.outputs.expanded_matrix_ubuntu }}
expanded_matrix_cuda: ${{ steps.set-matrix.outputs.expanded_matrix_cuda }}
has_core_changes: ${{ steps.set-matrix.outputs.has_core_changes }}
has_changes_ubuntu: ${{ steps.set-matrix.outputs.has_changes_ubuntu }}
has_changes_cuda: ${{ steps.set-matrix.outputs.has_changes_cuda }}
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Detect changed subdirectories
id: set-matrix
run: |
CHANGES=$(git diff --name-only origin/${{ github.base_ref }}...HEAD)
CHANGED_DIRS=()
CORE_CHANGED=false
if [[ "$CHANGES" == *"alliander_core/"* ]] ; then
CORE_CHANGED=true
echo "has_core_changes=true" >> $GITHUB_OUTPUT
echo "alliander_core changed -- will rebuild all components"
fi
for d in *alliander_* ; do
# If alliander_core has changes, we want to build all images anew
if [[ "$CORE_CHANGED" == true ]] || [[ "$CHANGES" == *"${d}/"* ]] ; then
CHANGED_DIRS+=("$d")
fi
done
echo "Changed directories: ${CHANGED_DIRS[*]}"
if [ ${#CHANGED_DIRS[@]} -eq 0 ]; then
echo "has_changes_ubuntu=false" >> $GITHUB_OUTPUT
echo "has_changes_cuda=false" >> $GITHUB_OUTPUT
echo "matrix_ubuntu={\"include\":[]}" >> $GITHUB_OUTPUT
echo "matrix_cuda={\"include\":[]}" >> $GITHUB_OUTPUT
echo "No components have changes."
exit 0
fi
CHANGED_JSON=$(printf '%s\n' "${CHANGED_DIRS[@]}" | jq -R . | jq -s -c '.')
parse_section() {
local section=$1
yq -o=json ".${section}" components.yml | jq -c --argjson changed "$CHANGED_JSON" '[
to_entries[] |
.key as $name |
if (.value | type) == "array" then
.value[] | . + {"name": $name}
else
.value + {"name": $name}
end |
{
"name": .name,
"base_image": .base_image,
"repository": .repository,
"dockerfile": .dockerfile
}
] | map(select(.name as $n | $changed | index($n)))'
}
# TODO remove if-statement after zed/realsense-arm64 is supported
expand_matrix() {
local original_matrix=$1
echo "$original_matrix" | jq -c '[
.[] |
if .name == "alliander_realsense" or .name == "alliander_zed" then
. + {"arch": "amd64", "runner": "ubuntu-24.04"}
else
(. + {"arch": "amd64", "runner": "ubuntu-24.04"}),
(. + {"arch": "arm64", "runner": "ubuntu-24.04-arm"})
end
]'
}
MATRIX_UBUNTU=$(parse_section "ubuntu_images")
MATRIX_CUDA=$(parse_section "cuda_images")
EXPANDED_MATRIX_UBUNTU=$(expand_matrix "$MATRIX_UBUNTU")
EXPANDED_MATRIX_CUDA=$(expand_matrix "$MATRIX_CUDA")
echo "Base change matrix: $EXPANDED_MATRIX_UBUNTU"
echo "CUDA change matrix: $EXPANDED_MATRIX_CUDA"
if [ "$MATRIX_UBUNTU" == "[]" ] || [ "$MATRIX_UBUNTU" == "null" ]; then
echo "has_changes_ubuntu=false" >> $GITHUB_OUTPUT
echo "matrix_ubuntu={\"include\":[]}" >> $GITHUB_OUTPUT
echo "expanded_matrix_ubuntu={\"include\":[]}" >> $GITHUB_OUTPUT
else
echo "has_changes_ubuntu=true" >> $GITHUB_OUTPUT
echo "matrix_ubuntu={\"include\":$MATRIX_UBUNTU}" >> $GITHUB_OUTPUT
echo "expanded_matrix_ubuntu={\"include\":$EXPANDED_MATRIX_UBUNTU}" >> $GITHUB_OUTPUT
fi
if [ "$MATRIX_CUDA" == "[]" ] || [ "$MATRIX_CUDA" == "null" ]; then
echo "has_changes_cuda=false" >> $GITHUB_OUTPUT
echo "matrix_cuda={\"include\":[]}" >> $GITHUB_OUTPUT
echo "expanded_matrix_cuda={\"include\":[]}" >> $GITHUB_OUTPUT
else
echo "has_changes_cuda=true" >> $GITHUB_OUTPUT
echo "matrix_cuda={\"include\":$MATRIX_CUDA}" >> $GITHUB_OUTPUT
echo "expanded_matrix_cuda={\"include\":$EXPANDED_MATRIX_CUDA}" >> $GITHUB_OUTPUT
fi
build-ubuntu:
strategy:
matrix:
runner: [ubuntu-24.04, ubuntu-24.04-arm]
runs-on: ${{ matrix.runner }}
if: needs.detect-changes.outputs.has_core_changes == 'true'
needs: detect-changes
steps:
- uses: actions/checkout@v4
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- uses: actions/checkout@v4
- name: Docker login
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_TOKEN }}
- name: Set architecture
id: arch
run: |
if [[ "${{ matrix.runner }}" == *"-arm"* ]]; then
echo "arch=arm64" >> $GITHUB_OUTPUT
else
echo "arch=amd64" >> $GITHUB_OUTPUT
fi
- name: Build and push base-${{ steps.arch.outputs.arch }}
uses: docker/build-push-action@v6
with:
push: true
context: .
file: alliander_core/alliander_core.Dockerfile
tags: allianderrobotics/base:latest-${{ steps.arch.outputs.arch }}
build-args: |
BASE_IMAGE=rcdt/robotics:ubuntu-noble-${{ steps.arch.outputs.arch }}
cache-from: |
type=gha
type=registry,ref=allianderrobotics/base:buildcache-${{ steps.arch.outputs.arch }}
cache-to: |
type=gha,mode=max
type=registry,ref=allianderrobotics/base:buildcache-${{ steps.arch.outputs.arch }}
- name: Create manifest for base
run: |
docker buildx imagetools create \
-t allianderrobotics/base:latest \
allianderrobotics/base:latest-amd64 \
allianderrobotics/base:latest-arm64
- run: df -h /
build-ubuntu-images:
strategy:
fail-fast: false
matrix: ${{ fromJson(needs.detect-changes.outputs.expanded_matrix_ubuntu) }}
runs-on: ${{ matrix.runner }}
needs: [detect-changes, build-ubuntu]
if: needs.detect-changes.outputs.has_changes_ubuntu == 'true'
steps:
- uses: actions/checkout@v4
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- uses: actions/checkout@v4
- name: Docker login
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_TOKEN }}
- name: Build and push ${{ matrix.repository }}-${{ matrix.arch }}
uses: docker/build-push-action@v6
with:
push: true
context: .
file: ${{ matrix.dockerfile }}
tags: allianderrobotics/${{ matrix.repository }}:latest-${{ matrix.arch }}
build-args: |
BASE_IMAGE=${{ matrix.base_image }}:latest-${{ matrix.arch }}
cache-from: |
type=gha
type=registry,ref=allianderrobotics/${{ matrix.repository }}:buildcache-${{ matrix.arch }}
type=registry,ref=allianderrobotics/base:buildcache-${{ matrix.arch }}
cache-to: |
type=gha,mode=max
type=registry,ref=allianderrobotics/${{ matrix.repository }}:buildcache-${{ matrix.arch }},mode=max
- run: df -h /
create-manifests-ubuntu:
strategy:
matrix: ${{ fromJson(needs.detect-changes.outputs.matrix_ubuntu) }}
needs: [detect-changes, build-ubuntu-images]
if: needs.detect-changes.outputs.has_changes_ubuntu == 'true'
runs-on: ubuntu-24.04
steps:
- name: Docker login
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_TOKEN }}
- name: Create manifest for ${{ matrix.repository }}
run: |
# TODO remove this when realsense-arm64 is supported
if docker manifest inspect allianderrobotics/${{ matrix.repository }}:latest-arm64 > /dev/null 2>&1; then
docker buildx imagetools create \
-t allianderrobotics/${{ matrix.repository }}:latest \
allianderrobotics/${{ matrix.repository }}:latest-amd64 \
allianderrobotics/${{ matrix.repository }}:latest-arm64
else
docker buildx imagetools create \
-t allianderrobotics/${{ matrix.repository }}:latest \
allianderrobotics/${{ matrix.repository }}:latest-amd64
fi
build-cuda:
strategy:
matrix:
runner: [ubuntu-24.04, ubuntu-24.04-arm]
runs-on: ${{ matrix.runner }}
if: needs.detect-changes.outputs.has_core_changes == 'true'
needs: [detect-changes, build-ubuntu-images]
steps:
- uses: actions/checkout@v4
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- uses: actions/checkout@v4
- name: Free disk space
uses: ./.github/actions/free-disk-space
with:
tool-cache: true
- name: Clear disk space
uses: ./.github/actions/clear-disk-space
- name: Docker login
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_TOKEN }}
- name: Set architecture
id: arch
run: |
if [[ "${{ matrix.runner }}" == *"-arm"* ]]; then
echo "arch=arm64" >> $GITHUB_OUTPUT
else
echo "arch=amd64" >> $GITHUB_OUTPUT
fi
- name: Build and push cuda-${{ steps.arch.outputs.arch }}
uses: docker/build-push-action@v6
with:
push: true
context: .
file: alliander_core/alliander_core.Dockerfile
tags: allianderrobotics/cuda:latest-${{ steps.arch.outputs.arch }}
build-args: |
BASE_IMAGE=rcdt/robotics:nvidia-cuda-12.9.1-cudnn-devel-ubuntu24.04-${{ steps.arch.outputs.arch }}
cache-from: |
type=gha
type=registry,ref=allianderrobotics/cuda:buildcache-${{ steps.arch.outputs.arch }}
cache-to: |
type=gha,mode=max
type=registry,ref=allianderrobotics/cuda:buildcache-${{ steps.arch.outputs.arch }},mode=max
- name: Create manifest for cuda
run: |
docker buildx imagetools create \
-t allianderrobotics/cuda:latest \
allianderrobotics/cuda:latest-amd64 \
allianderrobotics/cuda:latest-arm64
- run: df -h /
build-cuda-images:
strategy:
fail-fast: false
matrix: ${{ fromJson(needs.detect-changes.outputs.expanded_matrix_cuda) }}
runs-on: ${{ matrix.runner }}
needs: [detect-changes, build-cuda]
if: needs.detect-changes.outputs.has_changes_cuda == 'true'
steps:
- uses: actions/checkout@v4
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- uses: actions/checkout@v4
- name: Free disk space
uses: ./.github/actions/free-disk-space
with:
tool-cache: true
- name: Clear disk space
uses: ./.github/actions/clear-disk-space
- name: Docker login
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_TOKEN }}
- name: Build and push ${{ matrix.repository }}-${{ matrix.arch }}
uses: docker/build-push-action@v6
with:
push: true
context: .
file: ${{ matrix.dockerfile }}
tags: allianderrobotics/${{ matrix.repository }}:latest-${{ matrix.arch }}
build-args: |
BASE_IMAGE=${{ matrix.base_image }}:latest-${{ matrix.arch }}
cache-from: |
type=registry,ref=allianderrobotics/${{ matrix.repository }}:buildcache-${{ matrix.arch }}
type=registry,ref=allianderrobotics/cuda:buildcache-${{ matrix.arch }}
cache-to: type=registry,ref=allianderrobotics/${{ matrix.repository }}:buildcache-${{ matrix.arch }},mode=max
- run: df -h /
create-manifests-cuda:
strategy:
matrix: ${{ fromJson(needs.detect-changes.outputs.matrix_cuda) }}
needs: [detect-changes, build-cuda-images]
if: needs.detect-changes.outputs.has_changes_cuda == 'true'
runs-on: ubuntu-24.04
steps:
- name: Docker login
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_TOKEN }}
- name: Create manifest for ${{ matrix.repository }}
run: |
# TODO fix this once zed-arm64 is supported
if docker manifest inspect allianderrobotics/${{ matrix.repository }}:latest-arm64 > /dev/null 2>&1; then
docker buildx imagetools create \
-t allianderrobotics/${{ matrix.repository }}:latest \
allianderrobotics/${{ matrix.repository }}:latest-amd64 \
allianderrobotics/${{ matrix.repository }}:latest-arm64
else
docker buildx imagetools create \
-t allianderrobotics/${{ matrix.repository }}:latest \
allianderrobotics/${{ matrix.repository }}:latest-amd64
fi
linting:
runs-on: ubuntu-24.04
needs: [build-ubuntu-images, build-cuda-images]
steps:
- uses: actions/checkout@v4
- name: Set up python3
uses: actions/setup-python@v5
with:
python-version: "3.12"
cache: "pip"
- name: Install dependencies
run: pip install pyyaml mashumaro
- name: Run linting in alliander_tests container
run: python3 start.py --linting
test:
strategy:
fail-fast: false
matrix:
runner: [ubuntu-24.04, ubuntu-24.04-arm]
runs-on: ${{ matrix.runner }}
needs: [build-ubuntu-images, build-cuda-images]
steps:
- uses: actions/checkout@v4
- name: Free disk space
uses: ./.github/actions/free-disk-space
with:
tool-cache: true
- name: Clear disk space
uses: ./.github/actions/clear-disk-space
- name: Set up python3
uses: actions/setup-python@v5
with:
# need to specify version to circumvent externally-managed act python
# which won't let us install dependencies
python-version: "3.12"
cache: "pip"
- name: Install dependencies
run: pip install pyyaml mashumaro
# TODO remove difference between ARM and non-ARM when zed/realsense-arm64 is supported:
- name: Run tests in alliander_tests container (ubuntu-24.04)
if: ${{ matrix.runner }} == 'ubuntu-24.04'

Check warning on line 397 in .github/workflows/docker.yml

View workflow run for this annotation

GitHub Actions / docker

Workflow syntax warning

.github/workflows/docker.yml (Line: 397, Col: 13): Conditional expression contains literal text outside replacement tokens. This will cause the expression to always evaluate to truthy. Did you mean to put the entire expression inside ${{ }}?
run: python3 start.py --pytest-no-nvidia
- name: Run tests in alliander_tests container (ubuntu-24.04-arm)
if: ${{ matrix.runner }} == 'ubuntu-24.04-arm'

Check warning on line 400 in .github/workflows/docker.yml

View workflow run for this annotation

GitHub Actions / docker

Workflow syntax warning

.github/workflows/docker.yml (Line: 400, Col: 13): Conditional expression contains literal text outside replacement tokens. This will cause the expression to always evaluate to truthy. Did you mean to put the entire expression inside ${{ }}?
run: python3 start.py --pytest-no-nvidia --deselect=alliander_tests/src/alliander_tests/tests/test_camera.py