Action Runner Image build dotnet by workflow_run #6766
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: "Action Runner Image build" | |
| run-name: "Action Runner Image build ${{ github.ref_name }} by ${{ github.event_name }}" | |
| on: | |
| workflow_dispatch: | |
| push: | |
| branches: | |
| - dotnet | |
| paths: | |
| - "build-image.yml" | |
| - "Dockerfile" | |
| - 'Dockerfile.dotnet' | |
| workflow_run: | |
| workflows: [ BASE build, RELEASE update ] | |
| types: [ completed ] | |
| permissions: | |
| contents: read | |
| packages: write | |
| concurrency: | |
| group: ${{ github.workflow }}-${{ github.ref_name }} | |
| cancel-in-progress: false | |
| jobs: | |
| pull-build-push: | |
| runs-on: ubuntu-latest | |
| # if: ${{ github.event.workflow_run.conclusion == 'success' || github.event_name == 'workflow_dispatch' }} | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| os: | |
| [ ubuntu-noble-dotnet, ubuntu-noble, ubuntu-jammy, debian-bookworm, debian-bookworm-dotnet ] | |
| include: | |
| - os: ubuntu-noble-dotnet | |
| distro-version: 24.04 | |
| distro: ubuntu | |
| codename: noble | |
| docker-codename: noble | |
| dockerfile: Dockerfile.dotnet | |
| - os: ubuntu-noble | |
| distro-version: 24.04 | |
| distro: ubuntu | |
| codename: noble | |
| docker-codename: noble | |
| has-latest: true | |
| - os: ubuntu-jammy | |
| distro-version: 22.04 | |
| distro: ubuntu | |
| codename: jammy | |
| docker-codename: jammy | |
| - os: debian-bookworm | |
| distro-version: 12 | |
| distro: debian | |
| codename: bookworm | |
| docker-codename: bookworm | |
| - os: debian-bookworm-dotnet | |
| distro-version: 12 | |
| distro: debian | |
| codename: bookworm | |
| docker-codename: bookworm | |
| env: | |
| RELEASE_IMAGE_NAME: ${{ vars.RELEASE_IMAGE_NAME }} | |
| FULL_TAG: '' | |
| BASE_BUILD_IMAGE: '' | |
| LATEST_FLAG: '' | |
| RELEASE_VERSION: ${{ vars.GH_RUNNER_VERSION }} | |
| REVISION: '${{ github.RUN_NUMBER }}.${{ github.RUN_ATTEMPT }}' | |
| DOCKERFILE: '' | |
| PREFIX: '' | |
| GIT_AUTHOR: '' | |
| TIMESTAMP: '' | |
| steps: | |
| - name: Copy Repo Files | |
| uses: actions/checkout@v6 | |
| - name: Set version by default | |
| shell: pwsh | |
| run: | | |
| $gitCommit = (git rev-parse --short HEAD) | |
| $gitAuthor = (git log -1 --pretty=format:'%an %cd') | |
| $timeStamp = (git log -1 --pretty=%ct) | |
| Write-Output 'PREFIX=${{ matrix.os }}' >> $env:GITHUB_ENV | |
| Write-Output 'FULL_TAG=${{ matrix.os }}-${{ env.RELEASE_VERSION }}-${{ github.RUN_NUMBER }}.${{ github.RUN_ATTEMPT }}' >> $env:GITHUB_ENV | |
| Write-Output 'BASE_BUILD_IMAGE=${{ env.RELEASE_IMAGE_NAME }}-base:${{ matrix.distro }}-${{ matrix.codename }}' >> $env:GITHUB_ENV | |
| Write-Output "GIT_COMMIT=$gitCommit" >> $env:GITHUB_ENV | |
| Write-Output "GIT_AUTHOR=$gitAuthor" >> $env:GITHUB_ENV | |
| Write-Output "TIMESTAMP=$timeStamp" >> $env:GITHUB_ENV | |
| $LatestFlag = ([string]::IsNullOrWhitespace('${{ matrix.has-latest }}') ? 'false' : 'true') | |
| Write-Output "LATEST_FLAG=$LatestFlag" >> $env:GITHUB_ENV | |
| if( [string]::IsNullOrWhitespace('${{ matrix.dockerfile }}') ) | |
| { | |
| Write-Output 'DOCKERFILE=Dockerfile' >> $env:GITHUB_ENV | |
| } | |
| else | |
| { | |
| Write-Output 'DOCKERFILE=${{ matrix.dockerfile }}' >> $env:GITHUB_ENV | |
| } | |
| - name: Set up QEMU | |
| uses: docker/setup-qemu-action@v3 | |
| - name: Set up Docker Buildx | |
| uses: docker/setup-buildx-action@v3 | |
| - name: Login to DockerHub | |
| uses: docker/login-action@v3 | |
| with: | |
| username: ${{ secrets.DOCKER_USER }} | |
| password: ${{ secrets.DOCKER_TOKEN }} | |
| - name: Login to GitHub Container Registry | |
| uses: docker/login-action@v3 | |
| with: | |
| registry: ghcr.io | |
| username: ${{ github.ACTOR }} | |
| password: ${{ secrets.GITHUB_TOKEN }} | |
| - name: Docker meta | |
| id: meta | |
| uses: docker/metadata-action@v5 | |
| with: | |
| labels: | | |
| org.opencontainers.image.name=${{ github.ACTOR }}/${{ env.RELEASE_IMAGE_NAME }} | |
| org.opencontainers.image.title=${{ github.event.repository.name }} | |
| org.opencontainers.image.version=${{ env.FULL_TAG }} | |
| org.opencontainers.image.base.name=${{ github.ACTOR }}/${{ env.BASE_BUILD_IMAGE }} | |
| org.opencontainers.image.revision=${{ env.REVISION }} | |
| org.opencontainers.image.ref.name=${{ github.ref_name }} | |
| org.opencontainers.image.authors=${{ env.GIT_AUTHOR }} | |
| org.opencontainers.image.created=${{ env.TIMESTAMP }} | |
| org.opencontainers.image.source=${{ github.server_url }}/${{ github.repository }}.git | |
| org.opencontainers.image.documentation=${{ github.server_url }}/${{ github.repository }}/wiki | |
| org.opencontainers.image.vendor=${{ github.repository_owner }} | |
| org.opencontainers.image.description=${{ github.event.repository.name }} ${{ matrix.distro }}-${{ matrix.codename }} ${{ env.GIT_AUTHOR }} | |
| org.opencontainers.image.licenses=MIT | |
| images: | | |
| ${{ github.ACTOR }}/${{ env.RELEASE_IMAGE_NAME }} | |
| ghcr.io/${{ github.ACTOR }}/${{ env.RELEASE_IMAGE_NAME }} | |
| flavor: | | |
| latest=false | |
| prefix= | |
| suffix= | |
| tags: | | |
| type=raw,value=${{ env.PREFIX }},enable=true | |
| type=raw,value=${{ env.FULL_TAG }},enable=true | |
| type=raw,value=latest,enable=${{ env.LATEST_FLAG }} | |
| type=raw,value=${{ env.PREFIX }}-latest,enable=${{ env.LATEST_FLAG }} | |
| type=raw,value=${{ env.RELEASE_VERSION }},enable=${{ env.LATEST_FLAG }} | |
| - name: Build and push | |
| uses: docker/build-push-action@v6 | |
| with: | |
| context: . | |
| file: ${{ env.DOCKERFILE }} | |
| provenance: true | |
| sbom: true | |
| pull: true | |
| push: ${{ github.event_name != 'pull_request' }} | |
| tags: ${{ steps.meta.outputs.tags }} | |
| labels: ${{ steps.meta.outputs.labels }} | |
| annotations: ${{ steps.meta.outputs.annotations }} | |
| attests: type=sbom,generator=image | |
| build-args: | | |
| BASE_IMAGE=${{ github.ACTOR }}/${{ env.BASE_BUILD_IMAGE }} | |
| CHOWN_USER=${{ vars.CHOWN_USER }} | |
| DISTRO=${{ matrix.distro }} | |
| DISTRO_VERSION=${{ matrix.distro-version }} | |
| GH_RUNNER_VERSION=${{ env.RELEASE_VERSION }} | |
| BUILDTIME=${{ fromJSON(steps.meta.outputs.json).labels['org.opencontainers.image.created'] }} | |
| VERSION=${{ fromJSON(steps.meta.outputs.json).labels['org.opencontainers.image.version'] }} | |
| REVISION=${{ fromJSON(steps.meta.outputs.json).labels['org.opencontainers.image.revision'] }} | |
| platforms: linux/amd64,linux/arm64 |