diff --git a/.github/workflows/deployment-docker-image.yml b/.github/workflows/deployment-docker-image.yml index fb2fa4fcd..f70798295 100644 --- a/.github/workflows/deployment-docker-image.yml +++ b/.github/workflows/deployment-docker-image.yml @@ -15,13 +15,14 @@ on: description: Send notifications permissions: - contents: write - packages: write + contents: write # Required to update package.json version + packages: write # Required for pushing to GHCR env: SKIP_ENV_VALIDATION: true REGISTRY: ghcr.io IMAGE_NAME: ${{ github.repository }} + GHCR_REPO: ghcr.io/${{ github.repository }} TURBO_TELEMETRY_DISABLED: 1 concurrency: @@ -102,59 +103,123 @@ jobs: git pull origin dev git rebase ${{ github.ref_name }} git push origin dev - deploy: - name: Deploy docker image + build-amd64: + name: Build docker image for amd64 needs: release runs-on: ubuntu-latest - env: - NEXT_VERSION: ${{ needs.release.outputs.version }} - DEPLOY_LATEST: ${{ github.ref_name == 'main' }} - DEPLOY_BETA: ${{ github.ref_name == 'beta' }} + outputs: + digest: ${{ steps.build.outputs.digest }} steps: - uses: actions/checkout@v4 with: ref: ${{ needs.release.outputs.git_ref }} - - name: Discord notification - if: ${{ github.events.inputs.send-notifications != false }} - env: - DISCORD_WEBHOOK: ${{ secrets.DISCORD_WEBHOOK }} - uses: Ilshidur/action-discord@master + + - name: Docker meta + id: meta + uses: docker/metadata-action@v5 with: - args: "Deployment of an image for version '${{env.NEXT_VERSION}}' has been triggered: [run ${{ github.run_number }}](<${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}>)" + images: "${{ env.GHCR_REPO }}" + - name: Log in to the Container registry uses: docker/login-action@v3 with: registry: ${{ env.REGISTRY }} username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} - - name: Set up QEMU - uses: docker/setup-qemu-action@v3 + - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 + + - name: Build and push by digest + id: build + uses: docker/build-push-action@v6 + with: + context: . + network: host + platforms: linux/amd64 + labels: ${{ steps.meta.outputs.labels }} + outputs: type=image,"name=${{ env.GHCR_REPO }}",push-by-digest=true,name-canonical=true,push=true + env: + SKIP_ENV_VALIDATION: true + + build-arm64: + name: Build docker image for arm64 + needs: release + runs-on: ubuntu-24.04-arm + outputs: + digest: ${{ steps.build.outputs.digest }} + steps: + - uses: actions/checkout@v4 + with: + ref: ${{ needs.release.outputs.git_ref }} + - name: Docker meta id: meta uses: docker/metadata-action@v5 with: - images: "${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}" - tags: | - ${{ env.DEPLOY_LATEST == 'true' && 'type=raw,value=latest' || null }} - ${{ env.DEPLOY_BETA == 'true' && 'type=raw,value=beta' || null }} - type=raw,value=${{ env.NEXT_VERSION }} - - name: Build and push - id: buildPushAction + images: "${{ env.GHCR_REPO }}" + + - name: Log in to the Container registry + uses: docker/login-action@v3 + with: + registry: ${{ env.REGISTRY }} + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Build and push by digest + id: build uses: docker/build-push-action@v6 with: - platforms: linux/amd64,linux/arm64 context: . - push: true - tags: ${{ steps.meta.outputs.tags }} - labels: ${{ steps.meta.outputs.labels }} network: host + platforms: linux/arm64 + labels: ${{ steps.meta.outputs.labels }} + outputs: type=image,"name=${{ env.GHCR_REPO }}",push-by-digest=true,name-canonical=true,push=true env: SKIP_ENV_VALIDATION: true + + publish: + name: Complete deployment and notify + needs: [release, build-amd64, build-arm64] + runs-on: ubuntu-latest + env: + NEXT_VERSION: ${{ needs.release.outputs.version }} + DEPLOY_LATEST: ${{ github.ref_name == 'main' }} + DEPLOY_BETA: ${{ github.ref_name == 'beta' }} + steps: + - name: Log in to the Container registry + uses: docker/login-action@v3 + with: + registry: ${{ env.REGISTRY }} + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Publish beta + if: env.DEPLOY_BETA == 'true' + run: | + docker buildx imagetools create -t ${{ env.GHCR_REPO }}:beta \ + ${{ env.GHCR_REPO }}@${{ needs.build-amd64.outputs.digest }} \ + ${{ env.GHCR_REPO }}@${{ needs.build-arm64.outputs.digest }} + + - name: Publish latest + if: env.DEPLOY_LATEST == 'true' + run: | + docker buildx imagetools create -t ${{ env.GHCR_REPO }}:latest \ + ${{ env.GHCR_REPO }}@${{ needs.build-amd64.outputs.digest }} \ + ${{ env.GHCR_REPO }}@${{ needs.build-arm64.outputs.digest }} + + - name: Publish version + run: | + docker buildx imagetools create -t ${{ env.GHCR_REPO }}:${{ env.NEXT_VERSION }} \ + ${{ env.GHCR_REPO }}@${{ needs.build-amd64.outputs.digest }} \ + ${{ env.GHCR_REPO }}@${{ needs.build-arm64.outputs.digest }} + - name: Discord notification env: DISCORD_WEBHOOK: ${{ secrets.DISCORD_WEBHOOK }} uses: Ilshidur/action-discord@master with: - args: "Deployment of image has completed for branch ${{ github.ref_name }}. Image ID is '${{ steps.buildPushAction.outputs.imageid }}'." + args: "Successfully deployed images for branch **${{ github.ref_name }}**. Tagged as **${{env.NEXT_VERSION}}**."