Fix syntax error #1677
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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@v6 | |
| - 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: | | |
| actionlint: 'actionlint/**' | |
| aws-cli: 'aws-cli/**' | |
| black: 'black/**' | |
| buildpack-deps/ubuntu/jammy: 'buildpack-deps/ubuntu/jammy/**' | |
| buildpack-deps/ubuntu/noble: 'buildpack-deps/ubuntu/noble/**' | |
| buildpack-deps/ubuntu/resolute: 'buildpack-deps/ubuntu/resolute/**' | |
| cinc/cinc-auditor: 'cinc/cinc-auditor/**' | |
| cmake/clang: 'cmake/clang/**' | |
| cmake/gcc: 'cmake/gcc/**' | |
| dokken/almalinux-8: 'dokken/almalinux-8/**' | |
| dokken/almalinux-9: 'dokken/almalinux-9/**' | |
| dokken/almalinux-10: 'dokken/almalinux-10/**' | |
| dokken/amazonlinux-2: 'dokken/amazonlinux-2/**' | |
| dokken/amazonlinux-2023: 'dokken/amazonlinux-2023/**' | |
| dokken/centos-stream-9: 'dokken/centos-stream-9/**' | |
| dokken/centos-stream-10: 'dokken/centos-stream-10/**' | |
| dokken/debian-11: 'dokken/debian-11/**' | |
| dokken/debian-12: 'dokken/debian-12/**' | |
| dokken/debian-13: 'dokken/debian-13/**' | |
| dokken/debian-14: 'dokken/debian-14/**' | |
| dokken/fedora-41: 'dokken/fedora-41/**' | |
| dokken/fedora-42: 'dokken/fedora-42/**' | |
| dokken/fedora-43: 'dokken/fedora-43/**' | |
| dokken/fedora-latest: 'dokken/fedora-latest/**' | |
| dokken/opensuse-leap-15: 'dokken/opensuse-leap-15/**' | |
| dokken/opensuse-leap-15.6: 'dokken/opensuse-leap-15.6/**' | |
| dokken/opensuse-leap-16.0: 'dokken/opensuse-leap-16.0/**' | |
| dokken/oraclelinux-7: 'dokken/oraclelinux-7/**' | |
| dokken/oraclelinux-8: 'dokken/oraclelinux-8/**' | |
| dokken/oraclelinux-9: 'dokken/oraclelinux-9/**' | |
| dokken/oraclelinux-10: 'dokken/oraclelinux-10/**' | |
| dokken/rockylinux-8: 'dokken/rockylinux-8/**' | |
| dokken/rockylinux-9: 'dokken/rockylinux-9/**' | |
| dokken/rockylinux-10: 'dokken/rockylinux-10/**' | |
| dokken/ubuntu-20.04: 'dokken/ubuntu-20.04/**' | |
| dokken/ubuntu-22.04: 'dokken/ubuntu-22.04/**' | |
| dokken/ubuntu-24.04: 'dokken/ubuntu-24.04/**' | |
| dokken/ubuntu-25.04: 'dokken/ubuntu-25.04/**' | |
| dokken/ubuntu-25.10: 'dokken/ubuntu-25.10/**' | |
| doctl: 'doctl/**' | |
| erlang/26/slim: 'erlang/26/slim/**' | |
| erlang/26: 'erlang/26/**' | |
| flake8: 'flake8/**' | |
| fpm: 'fpm/**' | |
| glab: 'glab/**' | |
| go2chef: 'go2chef/**' | |
| golang/1.24/noble: 'golang/1.24/noble/**' | |
| golang/1.25/noble: 'golang/1.25/noble/**' | |
| hadolint: 'hadolint/**' | |
| hashicorp/vagrant-libvirt: 'hashicorp/vagrant-libvirt/**' | |
| jsonnet: 'jsonnet/**' | |
| 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/**' | |
| livekit/livekit-cli: 'livekit/livekit-cli/**' | |
| livekit/livekit-generate: 'livekit/livekit-generate/**' | |
| livekit/livekit-server: 'livekit/livekit-server/**' | |
| markmaker: 'markmaker/**' | |
| meshcmd: 'meshcmd/**' | |
| node/20/noble-slim: 'node/20/noble-slim/**' | |
| node/22/noble-slim: 'node/22/noble-slim/**' | |
| node/24/noble-slim: 'node/24/noble-slim/**' | |
| pgweb: 'pgweb/**' | |
| postgres/15/noble: 'postgres/15/noble/**' | |
| postgres/16/noble: 'postgres/16/noble/**' | |
| postgres/17/noble: 'postgres/17/noble/**' | |
| prometheus/alertmanager: 'prometheus/alertmanager/**' | |
| prometheus/blackbox-exporter: 'prometheus/blackbox-exporter/**' | |
| prometheus/node-exporter: 'prometheus/node-exporter/**' | |
| prometheus/prometheus/3.x: 'prometheus/prometheus/3.x/**' | |
| prometheus/snmp-exporter: 'prometheus/snmp-exporter/**' | |
| prometheus/snmp-generator: 'prometheus/snmp-generator/**' | |
| pulumi/pulumi-base: 'pulumi/pulumi-base/**' | |
| pulumi/pulumi-nodejs: 'pulumi/pulumi-nodejs/**' | |
| pulumi/pulumi-python: 'pulumi/pulumi-python/**' | |
| redis/6.2/noble: 'redis/6.2/noble/**' | |
| redis/7.0/noble: 'redis/7.0/noble/**' | |
| redis/7.2/noble: 'redis/7.2/noble/**' | |
| redis/7.4/noble: 'redis/7.4/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/**' | |
| slidev: 'slidev/**' | |
| snmp: 'snmp/**' | |
| ubuntu-autoinstall: 'ubuntu-autoinstall/**' | |
| valkey/8.1/ubuntu: 'valkey/8.1/ubuntu/**' | |
| # 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@v6 | |
| - name: Get build parameters | |
| shell: bash | |
| working-directory: ${{ matrix.image }} | |
| run: | | |
| TOPLEVEL=$(git rev-parse --show-toplevel) | |
| { | |
| echo "run-lint-stage=$("${TOPLEVEL}/bin/run-lint-stage.sh")" | |
| echo "run-test-stage=$("${TOPLEVEL}/bin/run-test-stage.sh")" | |
| echo "test-entrypoint=$("${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@v6 | |
| - name: Get build parameters | |
| shell: bash | |
| working-directory: ${{ matrix.directory }} | |
| run: | | |
| TOPLEVEL=$(git rev-parse --show-toplevel) | |
| { | |
| echo "run-lint-stage=$("${TOPLEVEL}/bin/run-lint-stage.sh")" | |
| echo "run-test-stage=$("${TOPLEVEL}/bin/run-test-stage.sh")" | |
| echo "test-entrypoint=$("${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@v6 | |
| - uses: dorny/paths-filter@v3 | |
| id: self-hosted-filter | |
| with: | |
| base: ${{ github.ref }} | |
| filters: | | |
| dokken/cinc: 'dokken/cinc/**' | |
| gcc/13: 'gcc/13/**' | |
| gcc/14: 'gcc/14/**' | |
| gcc/15: 'gcc/15/**' | |
| pulumi/pulumi: 'pulumi/pulumi/**' | |
| 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/**' | |
| python/3.14/noble: 'python/3.14/noble/**' | |
| python/3.14/slim-noble: 'python/3.14/slim-noble/**' | |
| ros/humble/ubuntu/jammy: 'ros/humble/ubuntu/jammy/**' | |
| ros/jazzy/ubuntu/noble: 'ros/jazzy/ubuntu/noble/**' | |
| ros/kilted/ubuntu/noble: 'ros/kilted/ubuntu/noble/**' | |
| uv: 'uv/**' | |
| # 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@v6 | |
| - name: Get build parameters | |
| shell: bash | |
| working-directory: ${{ matrix.image }} | |
| run: | | |
| TOPLEVEL=$(git rev-parse --show-toplevel) | |
| { | |
| echo "run-lint-stage=$("${TOPLEVEL}/bin/run-lint-stage.sh")" | |
| echo "run-test-stage=$("${TOPLEVEL}/bin/run-test-stage.sh")" | |
| echo "test-entrypoint=$("${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 }} |