Skip to content

Update README.md

Update README.md #1145

Workflow file for this run

name: ci
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
workflow_dispatch:
inputs:
list:
description: 'Comma-separated list of directories in the form: ["dir1", "dir2"]'
required: true
default: ''
jobs:
# Job to run change detection
changes:
if: ${{ github.event_name != 'workflow_dispatch' }}
runs-on: ubuntu-latest
outputs:
# Expose matched filters as job 'images' output variable
images: ${{ steps.filter.outputs.changes }}
steps:
- uses: actions/checkout@v4
- name: Determine Paths to Build for Auto Trigger
uses: dorny/paths-filter@v3
id: filter
with:
# Use context to get the branch where commits were pushed.
# If there is only one long-lived branch (e.g. master),
# you can specify it directly.
# If it's not configured, the repository default branch is used.
base: ${{ github.ref }}
filters: |
aws-cli: 'aws-cli/**'
black: 'black/**'
buildpack-deps/ubuntu/jammy: 'buildpack-deps/ubuntu/jammy/**'
buildpack-deps/ubuntu/focal: 'buildpack-deps/ubuntu/focal/**'
buildpack-deps/ubuntu/noble: 'buildpack-deps/ubuntu/noble/**'
cinc/cinc-auditor: 'cinc/cinc-auditor/**'
cmake/clang: 'cmake/clang/**'
cmake/gcc: 'cmake/gcc/**'
dokken/almalinux-9: 'dokken/almalinux-9/**'
dokken/amazonlinux-2: 'dokken/amazonlinux-2/**'
dokken/amazonlinux-2023: 'dokken/amazonlinux-2023/**'
dokken/centos-stream-9: 'dokken/centos-stream-9/**'
dokken/cinc: 'dokken/cinc/**'
dokken/debian-11: 'dokken/debian-11/**'
dokken/debian-12: 'dokken/debian-12/**'
dokken/eurolinux-9: 'dokken/eurolinux-9/**'
dokken/opensuse-leap-15.3: 'dokken/opensuse-leap-15.3/**'
dokken/opensuse-leap-15.4: 'dokken/opensuse-leap-15.4/**'
dokken/opensuse-leap-15.5: 'dokken/opensuse-leap-15.5/**'
dokken/opensuse-leap-15.6: 'dokken/opensuse-leap-15.6/**'
dokken/oraclelinux-7: 'dokken/oraclelinux-7/**'
dokken/oraclelinux-8: 'dokken/oraclelinux-8/**'
dokken/oraclelinux-9: 'dokken/oraclelinux-9/**'
dokken/rockylinux-8: 'dokken/rockylinux-8/**'
dokken/rockylinux-9: 'dokken/rockylinux-9/**'
dokken/ubuntu-20.04: 'dokken/ubuntu-20.04/**'
dokken/ubuntu-22.04: 'dokken/ubuntu-22.04/**'
dokken/ubuntu-24.04: 'dokken/ubuntu-24.04/**'
doctl: 'doctl/**'
erlang/26/slim: 'erlang/26/slim/**'
erlang/26: 'erlang/26/**'
flake8: 'flake8/**'
fpm: 'fpm/**'
glab: 'glab/**'
go2chef: 'go2chef/**'
golang/1.22/noble: 'golang/1.22/noble/**'
golang/1.23/noble: 'golang/1.23/noble/**'
hadolint: 'hadolint/**'
hashicorp/vagrant-libvirt: 'hashicorp/vagrant-libvirt/**'
haskell/9.8/slim-jammy: 'haskell/9.8/slim-jammy/**'
jupyter/docker-stacks-foundation: 'jupyter/docker-stacks-foundation/**'
jupyter/base-notebook: 'jupyter/base-notebook/**'
jupyter/minimal-notebook: 'jupyter/minimal-notebook/**'
jupyter/scipy-notebook: 'jupyter/scipy-notebook/**'
jupyter/datascience-notebook: 'jupyter/datascience-notebook/**'
jupyter/tensorflow-notebook: 'jupyter/tensorflow-notebook/**'
meshcmd: 'meshcmd/**'
node/18/noble: 'node/18/noble/**'
node/20/noble: 'node/20/noble/**'
node/22/noble: 'node/22/noble/**'
opam: 'opam/**'
pgweb: 'pgweb/**'
postgres/15/noble: 'postgres/15/noble/**'
postgres/16/noble: 'postgres/16/noble/**'
prometheus/alertmanager: 'prometheus/alertmanager/**'
prometheus/blackbox-exporter: 'prometheus/blackbox-exporter/**'
prometheus/node-exporter: 'prometheus/node-exporter/**'
prometheus/prometheus/2.x: 'prometheus/prometheus/2.x/**'
prometheus/prometheus/3.x: 'prometheus/prometheus/3.x/**'
pulumi/pulumi-base: 'pulumi/pulumi-base/**'
pulumi/pulumi-python: 'pulumi/pulumi-python/**'
redis/7.0/jammy: 'redis/7.0/jammy/**'
redis/7.2/jammy: 'redis/7.2/jammy/**'
ruby/3.1/jammy: 'ruby/3.1/jammy/**'
ruby/3.1/noble: 'ruby/3.1/noble/**'
ruby/3.1/slim-jammy: 'ruby/3.1/slim-jammy/**'
ruby/3.1/slim-noble: 'ruby/3.1/slim-noble/**'
ruby/3.2/jammy: 'ruby/3.2/jammy/**'
ruby/3.2/noble: 'ruby/3.2/noble/**'
ruby/3.2/slim-jammy: 'ruby/3.2/slim-jammy/**'
ruby/3.2/slim-noble: 'ruby/3.2/slim-noble/**'
ruby/3.3/jammy: 'ruby/3.3/jammy/**'
ruby/3.3/noble: 'ruby/3.3/noble/**'
ruby/3.3/slim-jammy: 'ruby/3.3/slim-jammy/**'
ruby/3.3/slim-noble: 'ruby/3.3/slim-noble/**'
ruby/3.4/jammy: 'ruby/3.4/jammy/**'
ruby/3.4/noble: 'ruby/3.4/noble/**'
ruby/3.4/slim-jammy: 'ruby/3.4/slim-jammy/**'
ruby/3.4/slim-noble: 'ruby/3.4/slim-noble/**'
rust/noble/slim: 'rust/noble/slim/**'
shellcheck: 'shellcheck/**'
ubuntu-autoinstall: 'ubuntu-autoinstall/**'
# Job to build and test each of the modified images
build:
needs: changes
strategy:
matrix:
# Parse JSON array containing names of all filters matching any of changed files
# e.g. ['image1', 'image2'] if both image folders contains changes
image: ${{ fromJSON(needs.changes.outputs.images) }}
if: ${{ needs.changes.outputs.images != '' && needs.changes.outputs.images != '[]' }}
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Get build parameters
shell: bash
working-directory: ${{ matrix.image }}
run: |
echo "run-lint-stage=$($(git rev-parse --show-toplevel)/bin/run-lint-stage.sh)" >> $GITHUB_ENV
echo "run-test-stage=$($(git rev-parse --show-toplevel)/bin/run-test-stage.sh)" >> $GITHUB_ENV
echo "test-entrypoint=$($(git rev-parse --show-toplevel)/bin/test-entrypoint.sh)" >> $GITHUB_ENV
cat $GITHUB_ENV
- uses: boxcutter/container-build-publish-action@main
with:
workdir: ${{ matrix.image }}
build-type: 'hosted'
run-lint-stage: ${{ env.run-lint-stage }}
run-test-stage: ${{ env.run-test-stage }}
test-entrypoint: ${{ env.test-entrypoint }}
dockerhub-username: ${{ secrets.CONTAINER_REGISTRY_USERNAME }}
dockerhub-password: ${{ secrets.CONTAINER_DESCRIPTION_PASSWORD }}
# Job to build and test each of the modified images
manual-build:
strategy:
matrix:
directory: ${{ fromJSON(github.event.inputs.list) }}
if: ${{ github.event.inputs.list != '' && github.event.inputs.list != '[]' && github.event_name == 'workflow_dispatch' }}
runs-on: [self-hosted, multi-arch]
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Get build parameters
shell: bash
working-directory: ${{ matrix.directory }}
run: |
echo "run-lint-stage=$($(git rev-parse --show-toplevel)/bin/run-lint-stage.sh)" >> $GITHUB_ENV
echo "run-test-stage=$($(git rev-parse --show-toplevel)/bin/run-test-stage.sh)" >> $GITHUB_ENV
echo "test-entrypoint=$($(git rev-parse --show-toplevel)/bin/test-entrypoint.sh)" >> $GITHUB_ENV
cat $GITHUB_ENV
- uses: boxcutter/container-build-publish-action@main
with:
workdir: ${{ matrix.directory }}
build-type: 'local'
run-lint-stage: ${{ env.run-lint-stage }}
run-test-stage: ${{ env.run-test-stage }}
test-entrypoint: ${{ env.test-entrypoint }}
dockerhub-username: ${{ secrets.CONTAINER_REGISTRY_USERNAME }}
dockerhub-password: ${{ secrets.CONTAINER_DESCRIPTION_PASSWORD }}
# Job to run change detection
self-hosted-changes:
if: ${{ github.event_name != 'workflow_dispatch' }}
runs-on: [self-hosted, multi-arch]
outputs:
images: ${{ steps.self-hosted-filter.outputs.changes }}
steps:
- uses: actions/checkout@v4
- uses: dorny/paths-filter@v3
id: self-hosted-filter
with:
base: ${{ github.ref }}
filters: |
python/3.9/jammy: 'python/3.9/jammy/**'
python/3.9/noble: 'python/3.9/noble/**'
python/3.9/slim-jammy: 'python/3.9/slim-jammy/**'
python/3.9/slim-noble: 'python/3.9/slim-noble/**'
python/3.10/jammy: 'python/3.10/jammy/**'
python/3.10/noble: 'python/3.10/noble/**'
python/3.10/slim-jammy: 'python/3.10/slim-jammy/**'
python/3.10/slim-noble: 'python/3.10/slim-noble/**'
python/3.11/jammy: 'python/3.11/jammy/**'
python/3.11/noble: 'python/3.11/noble/**'
python/3.11/slim-jammy: 'python/3.11/slim-jammy/**'
python/3.11/slim-noble: 'python/3.11/slim-noble/**'
python/3.12/jammy: 'python/3.12/jammy/**'
python/3.12/noble: 'python/3.12/noble/**'
python/3.12/slim-jammy: 'python/3.12/slim-jammy/**'
python/3.12/slim-noble: 'python/3.12/slim-noble/**'
python/3.13/jammy: 'python/3.13/jammy/**'
python/3.13/noble: 'python/3.13/noble/**'
python/3.13/slim-jammy: 'python/3.13/slim-jammy/**'
python/3.13/slim-noble: 'python/3.13/slim-noble/**'
ros/humble/ubuntu/jammy: 'ros/humble/ubuntu/jammy/**'
ros/iron/ubuntu/jammy: 'ros/iron/ubuntu/jammy/**'
ros/jazzy/ubuntu/noble: 'ros/jazzy/ubuntu/noble/**'
ros/noetic/ubuntu/focal: 'ros/noetic/ubuntu/focal/**'
# Job to build and test each of the modified images
self-hosted-build:
needs: self-hosted-changes
strategy:
matrix:
# Parse JSON array containing names of all filters matching any of changed files
# e.g. ['image1', 'image2'] if both image folders contains changes
image: ${{ fromJSON(needs.self-hosted-changes.outputs.images) }}
if: ${{ needs.self-hosted-changes.outputs.images != '[]' && needs.self-hosted-changes.outputs.images != '' && github.event_name != 'workflow_dispatch'}}
runs-on: [self-hosted, multi-arch]
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Get build parameters
shell: bash
working-directory: ${{ matrix.image }}
run: |
echo "run-lint-stage=$($(git rev-parse --show-toplevel)/bin/run-lint-stage.sh)" >> $GITHUB_ENV
echo "run-test-stage=$($(git rev-parse --show-toplevel)/bin/run-test-stage.sh)" >> $GITHUB_ENV
echo "test-entrypoint=$($(git rev-parse --show-toplevel)/bin/test-entrypoint.sh)" >> $GITHUB_ENV
cat $GITHUB_ENV
- uses: boxcutter/container-build-publish-action@main
with:
workdir: ${{ matrix.image }}
build-type: 'local'
run-lint-stage: ${{ env.run-lint-stage }}
run-test-stage: ${{ env.run-test-stage }}
test-entrypoint: ${{ env.test-entrypoint }}
dockerhub-username: ${{ secrets.CONTAINER_REGISTRY_USERNAME }}
dockerhub-password: ${{ secrets.CONTAINER_DESCRIPTION_PASSWORD }}