diff --git a/.github/workflows/build-deploy-container.yml b/.github/workflows/build-deploy-container.yml index 141368426d..a3d19197fc 100644 --- a/.github/workflows/build-deploy-container.yml +++ b/.github/workflows/build-deploy-container.yml @@ -12,20 +12,37 @@ env: jobs: build-publish-webapp: + strategy: + fail-fast: false + matrix: + platform: + - linux/amd64 + - linux/arm64 name: Build and deploy webapp container runs-on: ubuntu-latest environment: production steps: + - name: Prepare + run: | + platform=${{ matrix.platform }} + echo "PLATFORM_PAIR=${platform//\//-}" >> $GITHUB_ENV + - name: Checkout - uses: actions/checkout@v2 + uses: actions/checkout@v4 + + - name: Set up QEMU + uses: docker/setup-qemu-action@v3 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 # Login to Container registry. - name: Log in to the Container registry - uses: docker/login-action@v1 + uses: docker/login-action@v3 with: - registry: ${{ env.REGISTRY }} - username: ${{ github.actor }} - password: ${{ secrets.GH_TOKEN }} + registry: ${{ env.REGISTRY }} + username: ${{ github.actor }} + password: ${{ secrets.GH_TOKEN }} - name: Extract metadata (tags, labels) for Docker id: meta @@ -35,14 +52,29 @@ jobs: # Builds and push the Docker image. - name: Build and push Docker image - uses: docker/build-push-action@v2 + uses: docker/build-push-action@v5 + id: build with: - context: . - file: ./packages/webapp/Dockerfile - push: true - tags: ghcr.io/bigcapitalhq/webapp:latest - labels: ${{ steps.meta.outputs.labels }} + context: . + file: ./packages/webapp/Dockerfile + platforms: ${{ matrix.platform }} + push: true + tags: ghcr.io/bigcapitalhq/webapp:latest + labels: ${{ steps.meta.outputs.labels }} + - 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@v4 + with: + name: digests-main-${{ env.PLATFORM_PAIR }} + path: /tmp/digests/* + if-no-files-found: error + retention-days: 1 # Send notification to Slack channel. - name: Slack Notification built and published webapp container successfully. uses: rtCamp/action-slack-notify@v2 @@ -53,12 +85,23 @@ jobs: name: Build and deploy server container runs-on: ubuntu-latest steps: - - name: Checkout code - uses: actions/checkout@v2 + - name: Prepare + run: | + platform=${{ matrix.platform }} + echo "PLATFORM_PAIR=${platform//\//-}" >> $GITHUB_ENV + + - name: Checkout + uses: actions/checkout@v4 + + - name: Set up QEMU + uses: docker/setup-qemu-action@v3 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 # Login to Container registry. - name: Log in to the Container registry - uses: docker/login-action@v1 + uses: docker/login-action@v3 with: registry: ${{ env.REGISTRY }} username: ${{ github.actor }} @@ -66,14 +109,30 @@ jobs: # Builds and push the Docker image. - name: Build and push Docker image - uses: docker/build-push-action@v2 + uses: docker/build-push-action@v5 + id: build with: context: ./ file: ./packages/server/Dockerfile + platforms: ${{ matrix.platform }} push: true tags: ghcr.io/bigcapitalhq/server:latest labels: ${{ steps.meta.outputs.labels }} + - 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@v4 + with: + name: digests-main-${{ env.PLATFORM_PAIR }} + path: /tmp/digests/* + if-no-files-found: error + retention-days: 1 + # Send notification to Slack channel. - name: Slack Notification built and published server container successfully. uses: rtCamp/action-slack-notify@v2