diff --git a/.github/workflows/build-mailroom-push-tag-shared.yaml b/.github/workflows/build-mailroom-push-tag-shared.yaml index 84abb5464..26b87447d 100644 --- a/.github/workflows/build-mailroom-push-tag-shared.yaml +++ b/.github/workflows/build-mailroom-push-tag-shared.yaml @@ -10,7 +10,20 @@ on: jobs: docker: runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + platform: + - linux/amd64 + - linux/arm64 steps: + - name: Check out the repo + uses: actions/checkout@v4 + if: github.event_name != 'pull_request' + with: + ref: "${{env.GITHUB_SHA}}" + token: ${{ secrets.DEVOPS_GITHUB_PERMANENT_TOKEN }} + - name: Set variables run: | TAG="$( echo "${GITHUB_REF}" | cut -d'/' -f3 )" @@ -36,6 +49,8 @@ jobs: echo "MANIFESTS_REPOSITORY=weni-ai/kubernetes-manifests-platform" | tee -a "${GITHUB_ENV}" echo "MANIFESTS_APPLICATION=weni-flows/mailroom" | tee -a "${GITHUB_ENV}" echo "MANIFESTS_PATCH_TARGET=deployment.json" | tee -a "${GITHUB_ENV}" + platform=${{ matrix.platform }} + echo "PLATFORM_PAIR=${platform//\//-}" | tee -a "${GITHUB_ENV}" - name: Check out the repo uses: actions/checkout@v3 @@ -43,20 +58,21 @@ jobs: ref: "${{env.GITHUB_SHA}}" - name: Set up QEMU - uses: docker/setup-qemu-action@v2 + uses: docker/setup-qemu-action@v3 - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v2 + uses: docker/setup-buildx-action@v3 - name: Login to Registry - uses: docker/login-action@v2 + uses: docker/login-action@v3 with: registry: ${{ secrets.ECR_SHARED }} username: ${{ secrets.AWS_ACCESS_KEY_ID_SHARED }} password: ${{ secrets.AWS_SECRET_ACCESS_KEY_SHARED }} - name: Build and push - Mailroom Image - uses: docker/build-push-action@v3 + id: build + uses: docker/build-push-action@v6 with: context: . labels: | @@ -64,10 +80,78 @@ jobs: commit=${{env.COMMIT_SHA}} repository=${{env.IMAGE_SOURCE_URL}} file: docker/Dockerfile - platforms: linux/amd64,linux/arm64 - push: true - tags: "${{env.IMAGE_TAG}}" - no-cache: true + platforms: ${{ matrix.platform }} + # push: true + # tags: "${{env.IMAGE_TAG}}" + # no-cache: true + outputs: type=image,name=${{ secrets.ECR_SHARED }}/mailroom,push-by-digest=true,name-canonical=true,push=true + + - 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-${{ env.PLATFORM_PAIR }} + path: /tmp/digests/* + if-no-files-found: error + retention-days: 1 + + merge: + runs-on: ubuntu-latest + needs: + - docker + steps: + - name: Set variables + run: | + TAG="$( echo "${GITHUB_REF}" | cut -d'/' -f3 )" + if grep -qs -e '^.*.*-develop' <<< "${TAG}" ; then + echo "Found environment: DEVELOP - ${TAG}" + echo "MANIFESTS_ENVIRONMENT=develop" | tee -a "${GITHUB_ENV}" + elif grep -qs -e '^.*.*-staging' <<< "${TAG}" ; then + echo "Found environment: STAGING - ${TAG}" + echo "MANIFESTS_ENVIRONMENT=staging" | tee -a "${GITHUB_ENV}" + elif grep -qs -e '^.*.*' <<< "${TAG}" ; then + echo "No environment found, assuming: PRODUCTION - ${TAG}" + echo "MANIFESTS_ENVIRONMENT=production" | tee -a "${GITHUB_ENV}" + else + echo 'Not a valid tag. Skipping...' + exit 1 + fi + echo "TAG=$TAG" | tee -a "${GITHUB_ENV}" + VERSION="${TAG}" + echo "VERSION=${VERSION}" | tee -a "${GITHUB_ENV}" + echo "COMMIT_SHA=$GITHUB_SHA" | tee -a "${GITHUB_ENV}" + echo "IMAGE_TAG=${{ secrets.ECR_SHARED }}/mailroom:$TAG" | tee -a "${GITHUB_ENV}" + echo "MANIFESTS_REPOSITORY=weni-ai/kubernetes-manifests-platform" | tee -a "${GITHUB_ENV}" + echo "MANIFESTS_APPLICATION=weni-flows/mailroom" | tee -a "${GITHUB_ENV}" + echo "MANIFESTS_PATCH_TARGET=deployment.json" | tee -a "${GITHUB_ENV}" + - 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 ECR + uses: docker/login-action@v3 + if: github.event_name != 'pull_request' + with: + registry: ${{ secrets.ECR_SHARED }} + username: ${{ secrets.AWS_ACCESS_KEY_ID_SHARED }} + password: ${{ secrets.AWS_SECRET_ACCESS_KEY_SHARED }} + + - name: Create manifest list and push + working-directory: /tmp/digests + run: | + docker buildx imagetools create -t "${{ env.IMAGE_TAG }}" \ + $(printf '${{ secrets.ECR_SHARED }}/mailroom@sha256:%s ' *) - name: Check out Kubernetes Manifests uses: actions/checkout@master