diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index d7cd167..57a3cdc 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -20,153 +20,25 @@ on: paths-ignore: - '**.md' -env: - DOCKERHUB_SLUG: anonaddy/anonaddy - jobs: - prepare: - runs-on: ubuntu-latest - outputs: - matrix: ${{ steps.platforms.outputs.matrix }} - steps: - - - name: Checkout - uses: actions/checkout@v4 - - - name: Create matrix - id: platforms - run: | - echo "matrix=$(docker buildx bake image-all --print | jq -cr '.target."image-all".platforms')" >>${GITHUB_OUTPUT} - - - name: Show matrix - run: | - echo ${{ steps.platforms.outputs.matrix }} - - - name: Docker meta - id: meta - uses: docker/metadata-action@v5 - with: - images: | - ${{ env.DOCKERHUB_SLUG }} - tags: | - type=match,pattern=(.*)-r,group=1 - type=ref,event=pr - type=edge - labels: | - org.opencontainers.image.title=addy.io - org.opencontainers.image.description=Anonymous Email Forwarding - org.opencontainers.image.vendor=CrazyMax - - - name: Rename meta bake definition file - run: | - mv "${{ steps.meta.outputs.bake-file }}" "/tmp/bake-meta.json" - - - name: Upload meta bake definition - uses: actions/upload-artifact@v4 - with: - name: bake-meta - path: /tmp/bake-meta.json - if-no-files-found: error - retention-days: 1 - build: - runs-on: ${{ startsWith(matrix.platform, 'linux/arm') && 'ubuntu-24.04-arm' || 'ubuntu-latest' }} - needs: - - prepare - strategy: - fail-fast: false - matrix: - platform: ${{ fromJson(needs.prepare.outputs.matrix) }} - steps: - - - name: Prepare - run: | - platform=${{ matrix.platform }} - echo "PLATFORM_PAIR=${platform//\//-}" >> $GITHUB_ENV - - - name: Download meta bake definition - uses: actions/download-artifact@v4 - with: - name: bake-meta - path: /tmp - - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 - with: - buildkitd-flags: "--debug" - - - name: Login to DockerHub - if: github.event_name != 'pull_request' - uses: docker/login-action@v3 - with: - username: ${{ secrets.DOCKER_USERNAME }} - password: ${{ secrets.DOCKER_PASSWORD }} - - - name: Build - id: bake - uses: docker/bake-action@v6 - with: - files: | - ./docker-bake.hcl - cwd:///tmp/bake-meta.json - targets: image - set: | - *.tags= - *.platform=${{ matrix.platform }} - *.cache-from=type=gha,scope=build-${{ env.PLATFORM_PAIR }} - *.cache-to=type=gha,scope=build-${{ env.PLATFORM_PAIR }} - *.output=type=image,"name=${{ env.DOCKERHUB_SLUG }}",push-by-digest=true,name-canonical=true,push=${{ github.event_name != 'pull_request' }} - - - name: Export digest - run: | - mkdir -p /tmp/digests - digest="${{ fromJSON(steps.bake.outputs.metadata).image['containerimage.digest'] }}" - touch "/tmp/digests/${digest#sha256:}" - - - name: Upload digest - uses: actions/upload-artifact@v4 - with: - name: digests-${{ env.PLATFORM_PAIR }} - path: /tmp/digests/* - if-no-files-found: error - retention-days: 1 - - merge: - runs-on: ubuntu-latest - if: github.event_name != 'pull_request' - needs: - - build - steps: - - - name: Download meta bake definition - uses: actions/download-artifact@v4 - with: - name: bake-meta - path: /tmp - - - name: Download digests - uses: actions/download-artifact@v4 - with: - path: /tmp/digests - pattern: digests-* - merge-multiple: true - - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 - - - name: Login to DockerHub - uses: docker/login-action@v3 - with: - username: ${{ secrets.DOCKER_USERNAME }} - password: ${{ secrets.DOCKER_PASSWORD }} - - - name: Create manifest list and push - working-directory: /tmp/digests - run: | - docker buildx imagetools create $(jq -cr '.target."docker-metadata-action".tags | map(select(startswith("${{ env.DOCKERHUB_SLUG }}")) | "-t " + .) | join(" ")' /tmp/bake-meta.json) \ - $(printf '${{ env.DOCKERHUB_SLUG }}@sha256:%s ' *) - - - name: Inspect image - run: | - tag=$(jq -r '.target."docker-metadata-action".args.DOCKER_META_VERSION' /tmp/bake-meta.json) - docker buildx imagetools inspect ${{ env.DOCKERHUB_SLUG }}:${tag} + uses: crazy-max/.github/.github/workflows/bake-distribute-mp.yml@0acc187b016a2946786f201397bbcfb2c530ffc7 + permissions: + # same as global permissions + contents: read + with: + target: image-all + push: ${{ github.event_name != 'pull_request' }} + set-meta-labels: true + meta-image: anonaddy/anonaddy + meta-tags: | + type=match,pattern=(.*)-r,group=1 + type=ref,event=pr + type=edge + meta-labels: | + org.opencontainers.image.title=addy.io + org.opencontainers.image.description=Anonymous Email Forwarding + org.opencontainers.image.vendor=CrazyMax + secrets: + login-username: ${{ secrets.DOCKER_USERNAME }} + login-password: ${{ secrets.DOCKER_PASSWORD }}