diff --git a/.github/workflows/docker_crossbuild_publish.yml b/.github/workflows/docker_crossbuild_publish.yml index a08a91b3..c62e267c 100644 --- a/.github/workflows/docker_crossbuild_publish.yml +++ b/.github/workflows/docker_crossbuild_publish.yml @@ -1,11 +1,12 @@ name: Cross-Compile Docker Build and Push on: - pull_request: - types: - - opened - - synchronize - - closed + release: + types: [published] + workflow_dispatch: + +env: + REGISTRY_IMAGE: ergoplatform/oracle-core jobs: build: @@ -23,45 +24,78 @@ jobs: uses: actions/checkout@v3 - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v1 + uses: docker/setup-buildx-action@v2 - name: Generate Docker metadata id: metadata - uses: docker/metadata-action@v3 + uses: docker/metadata-action@v4 with: - images: greenden/oracle-core - tags: | - type=ref,event=tag - - name: Build images - uses: docker/build-push-action@v3 + images: ${{ env.REGISTRY_IMAGE }} + + - name: Login to DockerHub + uses: docker/login-action@v2 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + + - name: Build and push by digest + id: build + uses: docker/build-push-action@v4 with: context: . platforms: ${{ matrix.platform }} - tags: ${{ steps.metadata.outputs.tags }} + labels: ${{ steps.metadata.outputs.labels }} + outputs: type=image,name=${{ env.REGISTRY_IMAGE }},push-by-digest=true,name-canonical=true,push=true build-args: | TARGETPLATFORM=${{ matrix.platform }} CCARCH=${{ matrix.ccarch }} - push: false - load: true - - push: + + - name: Export digest + run: | + mkdir -p /tmp/digests + digest="${{ steps.build.outputs.digest }}" + touch "/tmp/digests/${digest#sha256:}" + + - name: Upload digest + uses: actions/upload-artifact@v3 + with: + name: digests + path: /tmp/digests/* + if-no-files-found: error + retention-days: 1 + + merge: needs: build runs-on: ubuntu-latest steps: + - name: Download digests + uses: actions/download-artifact@v3 + with: + name: digests + path: /tmp/digests + - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v1 - + uses: docker/setup-buildx-action@v2 + + - name: Generate Docker metadata + id: metadata + uses: docker/metadata-action@v4 + with: + images: ${{ env.REGISTRY_IMAGE }} + flavor: | + latest=true + - name: Login to DockerHub uses: docker/login-action@v2 with: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} - - name: Combine and Push to DockerHub - uses: docker/build-push-action@v3 - with: - context: . - platforms: linux/amd64,linux/arm64 - tags: greenden/oracle-core:${{ github.ref_name }}, greenden/oracle-core:latest - push: true - + - name: Create manifest list and push + working-directory: /tmp/digests + run: | + docker buildx imagetools create $(jq -cr '.tags | map("-t " + .) | join(" ")' <<< "$DOCKER_METADATA_OUTPUT_JSON") \ + $(printf '${{ env.REGISTRY_IMAGE }}@sha256:%s ' *) + - name: Inspect image + run: | + docker buildx imagetools inspect ${{ env.REGISTRY_IMAGE }}:${{ steps.metadata.outputs.version }}