From 62fc467b026a4b4de7ed4c9db3e94f4c08197e61 Mon Sep 17 00:00:00 2001 From: Jan Rundshagen Date: Sun, 30 Mar 2025 09:11:38 +0200 Subject: [PATCH] ci: enhance release workflow with Docker image metadata extraction and artifact attestation --- .github/workflows/release-dev.yaml | 103 +++++++++++++++++++++++++++-- 1 file changed, 98 insertions(+), 5 deletions(-) diff --git a/.github/workflows/release-dev.yaml b/.github/workflows/release-dev.yaml index 94098b9..ef038d7 100644 --- a/.github/workflows/release-dev.yaml +++ b/.github/workflows/release-dev.yaml @@ -45,12 +45,105 @@ jobs: - test runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 - - name: Publish to Docker Hub - uses: jerray/publish-docker-action@87d84711629b0dc9f6bb127b568413cc92a2088e #master@2022-10-14 + # - uses: actions/checkout@v4 + # - name: Publish to Docker Hub + # uses: jerray/publish-docker-action@87d84711629b0dc9f6bb127b568413cc92a2088e #master@2022-10-14 + # with: + # username: ${{ secrets.DOCKERHUB_USERNAME }} + # password: ${{ secrets.DOCKERHUB_TOKEN }} + # file: dockerfiles/Dockerfile.self-contained + # repository: beatkind/watchtower + # tags: latest-dev + - name: Check out the repo + uses: actions/checkout@v4 + + - name: Log in to Docker Hub + uses: docker/login-action@74a5d142397b4f367a81961eba4e8cd7edddf772 with: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} + + - name: Extract metadata (tags, labels) for Docker + id: meta + uses: docker/metadata-action@9ec57ed1fcdbf14dcef7dfbe97b2010124a938b7 + with: + images: beatkind/watchtower + labels: | + org.opencontainers.image.created={{commit_date 'YYYY-MM-DDTHH:mm:ss.SSS[Z]'}} + org.opencontainers.image.authors=${{github.actor}} + org.opencontainers.image.source=${{github.repository}} + org.opencontainers.image.documentation=https://watchtower.devcdn.net + org.opencontainers.image.version=latest-dev + org.opencontainers.image.revision=${{github.sha}} + org.opencontainers.image.vendor=beatkind + org.opencontainers.image.licenses=Apache-2.0 + tags: | + type=raw,value=latest-dev + type=raw,value=latest-dev-${{ github.sha }} + + - name: Build and push Docker image + id: push + uses: docker/build-push-action@84ad562665bb303b549fec655d1b64f9945f3f91 + with: + context: . file: dockerfiles/Dockerfile.self-contained - repository: beatkind/watchtower - tags: latest-dev + push: true + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} + + - name: Generate artifact attestation + uses: actions/attest-build-provenance@v2 + with: + subject-name: index.docker.io/beatkind/watchtower + subject-digest: ${{ steps.push.outputs.digest }} + push-to-registry: true + + publish-github: + needs: + - build + - test + env: + REGISTRY: ghcr.io + IMAGE_NAME: ${{ github.repository }} + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v4 + - name: Log in to the Container registry + uses: docker/login-action@74a5d142397b4f367a81961eba4e8cd7edddf772 + with: + registry: ${{ env.REGISTRY }} + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + - name: Extract metadata (tags, labels) for Docker + id: meta + uses: docker/metadata-action@9ec57ed1fcdbf14dcef7dfbe97b2010124a938b7 + with: + images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} + labels: | + org.opencontainers.image.created={{commit_date 'YYYY-MM-DDTHH:mm:ss.SSS[Z]'}} + org.opencontainers.image.authors=${{github.actor}} + org.opencontainers.image.source=${{github.repository}} + org.opencontainers.image.documentation=https://watchtower.devcdn.net + org.opencontainers.image.version=latest-dev + org.opencontainers.image.revision=${{github.sha}} + org.opencontainers.image.vendor=beatkind + org.opencontainers.image.licenses=Apache-2.0 + tags: | + type=raw,value=latest-dev + type=raw,value=latest-dev-${{ github.sha }} + - name: Build and push Docker image + id: push + uses: docker/build-push-action@84ad562665bb303b549fec655d1b64f9945f3f91 + with: + context: . + file: dockerfiles/Dockerfile.self-contained + push: true + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} + - name: Generate artifact attestation + uses: actions/attest-build-provenance@v2 + with: + subject-name: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME}} + subject-digest: ${{ steps.push.outputs.digest }} + push-to-registry: true