From f39e52aa2a1ac163f41b3f035535b6581a0642f3 Mon Sep 17 00:00:00 2001 From: Patrik Potocki Date: Fri, 16 Jan 2026 15:05:52 +0100 Subject: [PATCH 1/6] feat: add multi-arch Docker build support with backward compatibility - Add `multi_arch` input (default: false) to workflows for gradual rollout - Add matrix strategy for parallel builds on native amd64/arm64 runners - Create new `create-manifest` action for combining platform-specific images - Update `build-publish-docker` to push images with arch suffix - Update `build-image` to create platform-specific artifacts - Update `load-image-publish` to handle single/multi-arch manifests When multi_arch=false (default): only amd64 is built, manifest created with just amd64, preserving backward-compatible tags (e.g., oneclick-123) When multi_arch=true: both amd64 and arm64 built in parallel, multi-arch manifest created pointing to both images Co-Authored-By: Claude Opus 4.5 --- .github/actions/build-image/action.yml | 37 ++-- .../actions/build-publish-docker/action.yml | 65 +++++-- .github/actions/create-manifest/action.yml | 160 ++++++++++++++++++ .github/actions/load-image-publish/action.yml | 93 ++++++++-- .github/workflows/docker-api-service.yml | 72 +++++++- .github/workflows/docker-service-build.yml | 22 ++- .github/workflows/docker-service.yml | 37 +++- 7 files changed, 430 insertions(+), 56 deletions(-) create mode 100644 .github/actions/create-manifest/action.yml diff --git a/.github/actions/build-image/action.yml b/.github/actions/build-image/action.yml index da0ad9c..0d4231c 100644 --- a/.github/actions/build-image/action.yml +++ b/.github/actions/build-image/action.yml @@ -46,7 +46,11 @@ inputs: default: "tazerr" dockerhub_pull_token: description: "dockerhub pull token" - required: true + required: true + platform: + description: "Target platform (e.g., linux/amd64, linux/arm64)" + required: false + default: "linux/amd64" runs: using: composite steps: @@ -83,13 +87,20 @@ runs: known_hosts: ${{ inputs.ssh_known_hosts }} - name: Copy SSH Key shell: bash - run: cp ~/.ssh/id_rsa . + run: cp ~/.ssh/id_rsa . - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 with: buildkitd-config-inline: | [registry."dhi.io"] - mirrors = ["dhi.io"] + mirrors = ["dhi.io"] + - name: Set platform suffix + id: platform + shell: bash + run: | + PLATFORM="${{ inputs.platform }}" + PLATFORM_SUFFIX="${PLATFORM//\//-}" + echo "suffix=$PLATFORM_SUFFIX" >> $GITHUB_OUTPUT - name: Set tag shell: bash env: @@ -109,17 +120,17 @@ runs: uses: actions/cache@v3 with: path: /tmp/.buildx-cache - key: ${{ runner.os }}-buildx-${{ github.sha }} + key: ${{ runner.os }}-${{ steps.platform.outputs.suffix }}-buildx-${{ github.sha }} restore-keys: | - ${{ runner.os }}-buildx- + ${{ runner.os }}-${{ steps.platform.outputs.suffix }}-buildx- - name: Build and push if: github.ref == 'refs/heads/master' || github.ref == 'refs/heads/main' uses: docker/build-push-action@v3 with: context: . - platforms: linux/amd64 + platforms: ${{ inputs.platform }} push: false - outputs: type=docker,dest=${{ runner.temp }}/image${{inputs.tag-prefix}}.tar + outputs: type=docker,dest=${{ runner.temp }}/image${{inputs.tag-prefix}}-${{ steps.platform.outputs.suffix }}.tar tags: ${{ steps.login-ecr.outputs.registry }}/${{inputs.image}}:${{inputs.tag-prefix}}oneclick-${{ env.BUILD_NUMBER }} file: ${{inputs.dockerfile}} build-args: ${{ inputs.build-args }} @@ -130,9 +141,9 @@ runs: uses: docker/build-push-action@v3 with: context: . - platforms: linux/amd64 + platforms: ${{ inputs.platform }} push: false - outputs: type=docker,dest=${{ runner.temp }}/image${{inputs.tag-prefix}}.tar + outputs: type=docker,dest=${{ runner.temp }}/image${{inputs.tag-prefix}}-${{ steps.platform.outputs.suffix }}.tar tags: ${{ steps.login-ecr.outputs.registry }}/${{inputs.image}}:${{inputs.tag-prefix}}oneclickpr-${{ steps.findPr.outputs.pr }}-${{ env.BUILD_NUMBER }} file: ${{inputs.dockerfile}} build-args: ${{ inputs.build-args }} @@ -152,9 +163,9 @@ runs: uses: docker/build-push-action@v3 with: context: . - platforms: linux/amd64 + platforms: ${{ inputs.platform }} push: false - outputs: type=docker,dest=${{ runner.temp }}/image${{inputs.tag-prefix}}.tar + outputs: type=docker,dest=${{ runner.temp }}/image${{inputs.tag-prefix}}-${{ steps.platform.outputs.suffix }}.tar tags: ${{ steps.login-ecr.outputs.registry }}/${{inputs.image}}:${{inputs.tag-prefix}}oneclickrelease-${{ env.BUILD_NUMBER }} file: ${{inputs.dockerfile}} build-args: ${{ inputs.build-args }} @@ -175,5 +186,5 @@ runs: - name: Upload Docker Artifact uses: actions/upload-artifact@v4 with: - name: docker-image-${{inputs.image}}${{inputs.tag-prefix}} - path: ${{ runner.temp }}/image${{inputs.tag-prefix}}.tar \ No newline at end of file + name: docker-image-${{inputs.image}}${{inputs.tag-prefix}}-${{ steps.platform.outputs.suffix }} + path: ${{ runner.temp }}/image${{inputs.tag-prefix}}-${{ steps.platform.outputs.suffix }}.tar \ No newline at end of file diff --git a/.github/actions/build-publish-docker/action.yml b/.github/actions/build-publish-docker/action.yml index 969e953..fc97737 100644 --- a/.github/actions/build-publish-docker/action.yml +++ b/.github/actions/build-publish-docker/action.yml @@ -55,6 +55,17 @@ inputs: dockerhub_pull_token: description: "dockerhub pull token" required: true + platform: + description: "Target platform (e.g., linux/amd64, linux/arm64)" + required: false + default: "linux/amd64" +outputs: + image-tag: + description: "The pushed image tag (without registry)" + value: ${{ steps.set-output.outputs.image-tag }} + full-image: + description: "The full pushed image with registry" + value: ${{ steps.set-output.outputs.full-image }} runs: using: "composite" steps: @@ -96,7 +107,18 @@ runs: with: buildkitd-config-inline: | [registry."dhi.io"] - mirrors = ["dhi.io"] + mirrors = ["dhi.io"] + - name: Set platform suffix + id: platform + shell: bash + run: | + PLATFORM="${{ inputs.platform }}" + # Convert linux/amd64 to linux-amd64 + PLATFORM_SUFFIX="${PLATFORM//\//-}" + # Extract just the arch (amd64, arm64) + ARCH="${PLATFORM#*/}" + echo "suffix=$PLATFORM_SUFFIX" >> $GITHUB_OUTPUT + echo "arch=$ARCH" >> $GITHUB_OUTPUT - name: Set tag shell: bash env: @@ -116,17 +138,17 @@ runs: uses: actions/cache@v3 with: path: /tmp/.buildx-cache - key: ${{ runner.os }}-buildx-${{ github.sha }} + key: ${{ runner.os }}-${{ steps.platform.outputs.arch }}-buildx-${{ github.sha }} restore-keys: | - ${{ runner.os }}-buildx- + ${{ runner.os }}-${{ steps.platform.outputs.arch }}-buildx- - name: Build and push if: github.ref == 'refs/heads/master' || github.ref == 'refs/heads/main' uses: docker/build-push-action@v3 with: context: . - platforms: linux/amd64 + platforms: ${{ inputs.platform }} push: true - tags: ${{ steps.login-ecr.outputs.registry }}/${{inputs.image}}:${{inputs.tag-prefix}}oneclick-${{ env.BUILD_NUMBER }} + tags: ${{ steps.login-ecr.outputs.registry }}/${{inputs.image}}:${{inputs.tag-prefix}}oneclick-${{ env.BUILD_NUMBER }}-${{ steps.platform.outputs.arch }} file: ${{inputs.dockerfile}} build-args: ${{ inputs.build-args }} cache-from: type=local,src=/tmp/.buildx-cache @@ -136,9 +158,9 @@ runs: uses: docker/build-push-action@v3 with: context: . - platforms: linux/amd64 + platforms: ${{ inputs.platform }} push: true - tags: ${{ steps.login-ecr.outputs.registry }}/${{inputs.image}}:${{inputs.tag-prefix}}latest + tags: ${{ steps.login-ecr.outputs.registry }}/${{inputs.image}}:${{inputs.tag-prefix}}latest-${{ steps.platform.outputs.arch }} file: ${{inputs.dockerfile}} build-args: ${{ inputs.build-args }} cache-from: type=local,src=/tmp/.buildx-cache @@ -148,9 +170,9 @@ runs: uses: docker/build-push-action@v3 with: context: . - platforms: linux/amd64 + platforms: ${{ inputs.platform }} push: true - tags: ${{ steps.login-ecr.outputs.registry }}/${{inputs.image}}:${{inputs.tag-prefix}}oneclickpr-${{ steps.findPr.outputs.pr }}-${{ env.BUILD_NUMBER }} + tags: ${{ steps.login-ecr.outputs.registry }}/${{inputs.image}}:${{inputs.tag-prefix}}oneclickpr-${{ steps.findPr.outputs.pr }}-${{ env.BUILD_NUMBER }}-${{ steps.platform.outputs.arch }} file: ${{inputs.dockerfile}} build-args: ${{ inputs.build-args }} cache-from: type=local,src=/tmp/.buildx-cache @@ -169,9 +191,9 @@ runs: uses: docker/build-push-action@v3 with: context: . - platforms: linux/amd64 + platforms: ${{ inputs.platform }} push: true - tags: ${{ steps.login-ecr.outputs.registry }}/${{inputs.image}}:${{inputs.tag-prefix}}oneclickrelease-${{ env.BUILD_NUMBER }} + tags: ${{ steps.login-ecr.outputs.registry }}/${{inputs.image}}:${{inputs.tag-prefix}}oneclickrelease-${{ env.BUILD_NUMBER }}-${{ steps.platform.outputs.arch }} file: ${{inputs.dockerfile}} build-args: ${{ inputs.build-args }} cache-from: type=local,src=/tmp/.buildx-cache @@ -187,3 +209,24 @@ runs: run: | rm -rf /tmp/.buildx-cache mv /tmp/.buildx-cache-new /tmp/.buildx-cache + - name: Set outputs + id: set-output + shell: bash + run: | + # Determine the base tag (without arch suffix) + if [[ "${{ github.ref }}" == "refs/heads/master" || "${{ github.ref }}" == "refs/heads/main" ]]; then + BASE_TAG="${{ inputs.tag-prefix }}oneclick-${{ env.BUILD_NUMBER }}" + elif [[ "${{ github.ref }}" == *"release"* ]]; then + BASE_TAG="${{ inputs.tag-prefix }}oneclickrelease-${{ env.BUILD_NUMBER }}" + elif [[ -n "${{ steps.findPr.outputs.pr }}" ]]; then + BASE_TAG="${{ inputs.tag-prefix }}oneclickpr-${{ steps.findPr.outputs.pr }}-${{ env.BUILD_NUMBER }}" + else + BASE_TAG="${{ inputs.tag-prefix }}oneclick-${{ env.BUILD_NUMBER }}" + fi + + ARCH_TAG="${BASE_TAG}-${{ steps.platform.outputs.arch }}" + FULL_IMAGE="${{ steps.login-ecr.outputs.registry }}/${{ inputs.image }}:${ARCH_TAG}" + + echo "image-tag=${ARCH_TAG}" >> $GITHUB_OUTPUT + echo "full-image=${FULL_IMAGE}" >> $GITHUB_OUTPUT + echo "base-tag=${BASE_TAG}" >> $GITHUB_OUTPUT diff --git a/.github/actions/create-manifest/action.yml b/.github/actions/create-manifest/action.yml new file mode 100644 index 0000000..e8e31b4 --- /dev/null +++ b/.github/actions/create-manifest/action.yml @@ -0,0 +1,160 @@ +name: "Create Multi-Arch Manifest" +description: "Create and push a multi-arch manifest from platform-specific images" +inputs: + image: + description: "Image name (without registry)" + required: true + start-build-from: + description: "Build number offset" + required: false + default: "0" + ecr_aws_access_key_id: + description: "ECR AWS access key ID" + required: true + ecr_aws_secret_key: + description: "ECR AWS secret key" + required: true + dockerhub_username: + description: "Docker Hub username" + required: true + default: "tazerr" + dockerhub_pull_token: + description: "Docker Hub pull token" + required: true + latest_tag: + description: "Also create latest manifest" + required: false + default: "false" + tag-prefix: + description: "Tag prefix" + required: false + default: "" + github_token: + description: "GitHub token for PR detection" + required: false + default: "" + +runs: + using: "composite" + steps: + - name: Configure AWS credentials + uses: aws-actions/configure-aws-credentials@v1 + with: + aws-access-key-id: ${{ inputs.ecr_aws_access_key_id }} + aws-secret-access-key: ${{ inputs.ecr_aws_secret_key }} + aws-region: eu-west-1 + + - name: Login to Amazon ECR + id: login-ecr + uses: aws-actions/amazon-ecr-login@v1 + + - name: Docker Hub login + shell: bash + run: echo "${{ inputs.dockerhub_pull_token }}" | docker login -u "${{ inputs.dockerhub_username }}" --password-stdin + + - name: DHI registry login + shell: bash + run: echo "${{ inputs.dockerhub_pull_token }}" | docker login dhi.io -u "${{ inputs.dockerhub_username }}" --password-stdin + + - name: Set build number + shell: bash + env: + RUN_NUMBER: ${{ github.run_number }} + START_FROM: ${{ inputs.start-build-from }} + run: | + BUILD_NUMBER=$(($RUN_NUMBER + $START_FROM)) + echo "BUILD_NUMBER=$BUILD_NUMBER" >> $GITHUB_ENV + + - uses: jwalton/gh-find-current-pr@v1 + id: findPr + with: + state: open + + - name: Create and push manifest + shell: bash + run: | + REGISTRY="${{ steps.login-ecr.outputs.registry }}" + IMAGE="${{ inputs.image }}" + PREFIX="${{ inputs.tag-prefix }}" + + # Determine the base tag (same logic as build action) + if [[ "${{ github.ref }}" == "refs/heads/master" || "${{ github.ref }}" == "refs/heads/main" ]]; then + TAG="${PREFIX}oneclick-${{ env.BUILD_NUMBER }}" + elif [[ "${{ github.ref }}" == *"release"* ]]; then + TAG="${PREFIX}oneclickrelease-${{ env.BUILD_NUMBER }}" + elif [[ -n "${{ steps.findPr.outputs.pr }}" ]]; then + TAG="${PREFIX}oneclickpr-${{ steps.findPr.outputs.pr }}-${{ env.BUILD_NUMBER }}" + else + TAG="${PREFIX}oneclick-${{ env.BUILD_NUMBER }}" + fi + + AMD64_IMAGE="${REGISTRY}/${IMAGE}:${TAG}-amd64" + ARM64_IMAGE="${REGISTRY}/${IMAGE}:${TAG}-arm64" + MANIFEST_IMAGE="${REGISTRY}/${IMAGE}:${TAG}" + + echo "Creating manifest for ${MANIFEST_IMAGE}" + echo " - AMD64: ${AMD64_IMAGE}" + + # Check if ARM64 image exists + ARM64_EXISTS=false + if docker manifest inspect "${ARM64_IMAGE}" > /dev/null 2>&1; then + ARM64_EXISTS=true + echo " - ARM64: ${ARM64_IMAGE}" + else + echo " - ARM64: not available (single-arch build)" + fi + + # Create the manifest with available images + if [[ "$ARM64_EXISTS" == "true" ]]; then + docker manifest create "${MANIFEST_IMAGE}" \ + "${AMD64_IMAGE}" \ + "${ARM64_IMAGE}" + docker manifest annotate "${MANIFEST_IMAGE}" "${AMD64_IMAGE}" --os linux --arch amd64 + docker manifest annotate "${MANIFEST_IMAGE}" "${ARM64_IMAGE}" --os linux --arch arm64 + else + docker manifest create "${MANIFEST_IMAGE}" \ + "${AMD64_IMAGE}" + docker manifest annotate "${MANIFEST_IMAGE}" "${AMD64_IMAGE}" --os linux --arch amd64 + fi + + # Push the manifest + docker manifest push "${MANIFEST_IMAGE}" + + echo "Successfully pushed manifest: ${MANIFEST_IMAGE}" + docker manifest inspect "${MANIFEST_IMAGE}" + + - name: Create and push latest manifest + if: inputs.latest_tag == 'true' + shell: bash + run: | + REGISTRY="${{ steps.login-ecr.outputs.registry }}" + IMAGE="${{ inputs.image }}" + PREFIX="${{ inputs.tag-prefix }}" + + AMD64_IMAGE="${REGISTRY}/${IMAGE}:${PREFIX}latest-amd64" + ARM64_IMAGE="${REGISTRY}/${IMAGE}:${PREFIX}latest-arm64" + MANIFEST_IMAGE="${REGISTRY}/${IMAGE}:${PREFIX}latest" + + echo "Creating latest manifest for ${MANIFEST_IMAGE}" + + # Check if ARM64 image exists + ARM64_EXISTS=false + if docker manifest inspect "${ARM64_IMAGE}" > /dev/null 2>&1; then + ARM64_EXISTS=true + fi + + if [[ "$ARM64_EXISTS" == "true" ]]; then + docker manifest create "${MANIFEST_IMAGE}" \ + "${AMD64_IMAGE}" \ + "${ARM64_IMAGE}" + docker manifest annotate "${MANIFEST_IMAGE}" "${AMD64_IMAGE}" --os linux --arch amd64 + docker manifest annotate "${MANIFEST_IMAGE}" "${ARM64_IMAGE}" --os linux --arch arm64 + else + docker manifest create "${MANIFEST_IMAGE}" \ + "${AMD64_IMAGE}" + docker manifest annotate "${MANIFEST_IMAGE}" "${AMD64_IMAGE}" --os linux --arch amd64 + fi + + docker manifest push "${MANIFEST_IMAGE}" + + echo "Successfully pushed latest manifest: ${MANIFEST_IMAGE}" diff --git a/.github/actions/load-image-publish/action.yml b/.github/actions/load-image-publish/action.yml index edf1fd7..282ff5e 100644 --- a/.github/actions/load-image-publish/action.yml +++ b/.github/actions/load-image-publish/action.yml @@ -23,7 +23,15 @@ inputs: default: "tazerr" dockerhub_pull_token: description: "dockerhub pull token" - required: true + required: true + platforms: + description: "Platforms to publish (comma-separated, e.g., linux/amd64,linux/arm64)" + required: false + default: "linux/amd64,linux/arm64" + multi_arch: + description: "Whether to include arm64 (default: false, amd64 only)" + required: false + default: "false" outputs: image-tag: description: "Pushed image tag" @@ -49,19 +57,20 @@ runs: - name: DHI registry login shell: bash - run: echo "${{ inputs.dockerhub_pull_token }}" | docker login dhi.io -u "${{ inputs.dockerhub_username }}" --password-stdin + run: echo "${{ inputs.dockerhub_pull_token }}" | docker login dhi.io -u "${{ inputs.dockerhub_username }}" --password-stdin - - name: Download artifact + - name: Download amd64 artifact uses: actions/download-artifact@v4 with: - name: docker-image-${{inputs.image}}${{inputs.tag-prefix}} - path: ${{ runner.temp }} + name: docker-image-${{inputs.image}}${{inputs.tag-prefix}}-linux-amd64 + path: ${{ runner.temp }}/amd64 - - name: Load image - shell: bash - run: | - docker load --input ${{ runner.temp }}/image${{inputs.tag-prefix}}.tar - docker image ls -a + - name: Download arm64 artifact + if: inputs.multi_arch == 'true' + uses: actions/download-artifact@v4 + with: + name: docker-image-${{inputs.image}}${{inputs.tag-prefix}}-linux-arm64 + path: ${{ runner.temp }}/arm64 - name: Set tag shell: bash @@ -76,15 +85,19 @@ runs: id: findPr with: state: open + - name: Debug variables shell: bash run: | echo "github.ref: ${{ github.ref }}" echo "inputs.tag-prefix: ${{ inputs.tag-prefix }}" echo "env.BUILD_NUMBER: ${{ env.BUILD_NUMBER }}" - echo "steps.findPr.outputs.pr: ${{ steps.findPr.outputs.pr }}" + echo "steps.findPr.outputs.pr: ${{ steps.findPr.outputs.pr }}" + echo "Artifacts downloaded:" + ls -la ${{ runner.temp }}/amd64/ || echo "No amd64 artifacts" + ls -la ${{ runner.temp }}/arm64/ || echo "No arm64 artifacts" - - name: Determine tag, build and push Docker image + - name: Load, tag and push images shell: bash run: | # Determine BUILD_TAG based on git reference @@ -99,9 +112,57 @@ runs: fi echo "BUILD TAG: ${BUILD_TAG}" + echo "BUILD_TAG=${BUILD_TAG}" >> $GITHUB_ENV + + REGISTRY="${{ steps.login-ecr.outputs.registry }}" + IMAGE_NAME="${{inputs.image}}" + FULL_IMAGE="${REGISTRY}/${IMAGE_NAME}:${BUILD_TAG}" + MULTI_ARCH="${{ inputs.multi_arch }}" + + # Load and push amd64 image + echo "Loading amd64 image..." + docker load --input ${{ runner.temp }}/amd64/image${{inputs.tag-prefix}}-linux-amd64.tar + + # Get the loaded image name and retag for amd64 + LOADED_IMAGE=$(docker images --format "{{.Repository}}:{{.Tag}}" | head -1) + echo "Loaded image: ${LOADED_IMAGE}" + + AMD64_TAG="${FULL_IMAGE}-amd64" + docker tag "${LOADED_IMAGE}" "${AMD64_TAG}" + echo "Pushing ${AMD64_TAG}..." + docker push "${AMD64_TAG}" + + # Load and push arm64 image if multi_arch is enabled + if [[ "$MULTI_ARCH" == "true" ]]; then + echo "Loading arm64 image..." + docker load --input ${{ runner.temp }}/arm64/image${{inputs.tag-prefix}}-linux-arm64.tar + + # Get the loaded image name and retag for arm64 + LOADED_IMAGE=$(docker images --format "{{.Repository}}:{{.Tag}}" | grep -v "${AMD64_TAG}" | head -1) + echo "Loaded image: ${LOADED_IMAGE}" + + ARM64_TAG="${FULL_IMAGE}-arm64" + docker tag "${LOADED_IMAGE}" "${ARM64_TAG}" + echo "Pushing ${ARM64_TAG}..." + docker push "${ARM64_TAG}" + fi + + # Create and push manifest + echo "Creating manifest..." + if [[ "$MULTI_ARCH" == "true" ]]; then + docker manifest create "${FULL_IMAGE}" \ + "${AMD64_TAG}" \ + "${ARM64_TAG}" + docker manifest annotate "${FULL_IMAGE}" "${AMD64_TAG}" --os linux --arch amd64 + docker manifest annotate "${FULL_IMAGE}" "${ARM64_TAG}" --os linux --arch arm64 + else + docker manifest create "${FULL_IMAGE}" \ + "${AMD64_TAG}" + docker manifest annotate "${FULL_IMAGE}" "${AMD64_TAG}" --os linux --arch amd64 + fi - # Define the IMAGE variable explicitly - IMAGE="${{ steps.login-ecr.outputs.registry }}/${{inputs.image}}:$BUILD_TAG" + echo "Pushing manifest..." + docker manifest push "${FULL_IMAGE}" - # Push the Docker image - docker push "$IMAGE" \ No newline at end of file + echo "Successfully pushed image: ${FULL_IMAGE}" + docker manifest inspect "${FULL_IMAGE}" \ No newline at end of file diff --git a/.github/workflows/docker-api-service.yml b/.github/workflows/docker-api-service.yml index 304bc13..33be0ae 100644 --- a/.github/workflows/docker-api-service.yml +++ b/.github/workflows/docker-api-service.yml @@ -30,7 +30,12 @@ on: description: "dockerhub username" required: false type: string - default: "tazerr" + default: "tazerr" + multi_arch: + description: "Build for both amd64 and arm64 (default: false, amd64 only)" + required: false + type: boolean + default: false secrets: FT_SSH_KEY: required: true @@ -45,8 +50,16 @@ on: jobs: build-service: - runs-on: ubuntu-latest - steps: + strategy: + matrix: + include: + - platform: linux/amd64 + runner: ubuntu-latest + - platform: linux/arm64 + runner: ubuntu-arm64-latest + runs-on: ${{ matrix.runner }} + if: matrix.platform == 'linux/amd64' || inputs.multi_arch == true + steps: - name: Build & Publish uses: fasttrack-solutions/ci/.github/actions/build-publish-docker@main with: @@ -54,16 +67,26 @@ jobs: tag-prefix: ${{ inputs.tag-prefix-service }} dockerfile: ${{ inputs.dockerfile-service }} ssh_key: ${{ secrets.FT_SSH_KEY }} - ssh_known_hosts: ${{ secrets.FT_BITBUCKET_KNOWN_HOSTS }} + ssh_known_hosts: ${{ secrets.FT_BITBUCKET_KNOWN_HOSTS }} ecr_aws_access_key_id: ${{ secrets.FT_ECR_AWS_ACCESS_KEY_ID }} ecr_aws_secret_key: ${{ secrets.FT_ECR_AWS_SECRET_ACCESS_KEY }} start-build-from: ${{ inputs.start-build-from }} github_token: ${{ secrets.GITHUB_TOKEN }} dockerhub_username: ${{ inputs.dockerhub_username }} dockerhub_pull_token: ${{ secrets.DOCKERHUB_PULL_TOKEN }} + platform: ${{ matrix.platform }} + build-api: - runs-on: ubuntu-latest - steps: + strategy: + matrix: + include: + - platform: linux/amd64 + runner: ubuntu-latest + - platform: linux/arm64 + runner: ubuntu-arm64-latest + runs-on: ${{ matrix.runner }} + if: matrix.platform == 'linux/amd64' || inputs.multi_arch == true + steps: - name: Build & Publish uses: fasttrack-solutions/ci/.github/actions/build-publish-docker@main with: @@ -71,10 +94,41 @@ jobs: tag-prefix: ${{ inputs.tag-prefix-api }} dockerfile: ${{ inputs.dockerfile-api }} ssh_key: ${{ secrets.FT_SSH_KEY }} - ssh_known_hosts: ${{ secrets.FT_BITBUCKET_KNOWN_HOSTS }} + ssh_known_hosts: ${{ secrets.FT_BITBUCKET_KNOWN_HOSTS }} ecr_aws_access_key_id: ${{ secrets.FT_ECR_AWS_ACCESS_KEY_ID }} - ecr_aws_secret_key: ${{ secrets.FT_ECR_AWS_SECRET_ACCESS_KEY }} + ecr_aws_secret_key: ${{ secrets.FT_ECR_AWS_SECRET_ACCESS_KEY }} start-build-from: ${{ inputs.start-build-from }} github_token: ${{ secrets.GITHUB_TOKEN }} dockerhub_username: ${{ inputs.dockerhub_username }} - dockerhub_pull_token: ${{ secrets.DOCKERHUB_PULL_TOKEN }} \ No newline at end of file + dockerhub_pull_token: ${{ secrets.DOCKERHUB_PULL_TOKEN }} + platform: ${{ matrix.platform }} + + create-service-manifest: + needs: build-service + runs-on: ubuntu-latest + steps: + - name: Create multi-arch manifest for service + uses: fasttrack-solutions/ci/.github/actions/create-manifest@main + with: + image: ${{ inputs.image }} + start-build-from: ${{ inputs.start-build-from }} + ecr_aws_access_key_id: ${{ secrets.FT_ECR_AWS_ACCESS_KEY_ID }} + ecr_aws_secret_key: ${{ secrets.FT_ECR_AWS_SECRET_ACCESS_KEY }} + dockerhub_username: ${{ inputs.dockerhub_username }} + dockerhub_pull_token: ${{ secrets.DOCKERHUB_PULL_TOKEN }} + tag-prefix: ${{ inputs.tag-prefix-service }} + + create-api-manifest: + needs: build-api + runs-on: ubuntu-latest + steps: + - name: Create multi-arch manifest for API + uses: fasttrack-solutions/ci/.github/actions/create-manifest@main + with: + image: ${{ inputs.image }} + start-build-from: ${{ inputs.start-build-from }} + ecr_aws_access_key_id: ${{ secrets.FT_ECR_AWS_ACCESS_KEY_ID }} + ecr_aws_secret_key: ${{ secrets.FT_ECR_AWS_SECRET_ACCESS_KEY }} + dockerhub_username: ${{ inputs.dockerhub_username }} + dockerhub_pull_token: ${{ secrets.DOCKERHUB_PULL_TOKEN }} + tag-prefix: ${{ inputs.tag-prefix-api }} \ No newline at end of file diff --git a/.github/workflows/docker-service-build.yml b/.github/workflows/docker-service-build.yml index 3a9190a..1e5ab5b 100644 --- a/.github/workflows/docker-service-build.yml +++ b/.github/workflows/docker-service-build.yml @@ -30,7 +30,12 @@ on: description: "dockerhub username" required: false type: string - default: "tazerr" + default: "tazerr" + multi_arch: + description: "Build for both amd64 and arm64 (default: false, amd64 only)" + required: false + type: boolean + default: false secrets: FT_SSH_KEY: required: true @@ -45,7 +50,15 @@ on: jobs: build-service: - runs-on: ubuntu-latest + strategy: + matrix: + include: + - platform: linux/amd64 + runner: ubuntu-latest + - platform: linux/arm64 + runner: ubuntu-arm64-latest + runs-on: ${{ matrix.runner }} + if: matrix.platform == 'linux/amd64' || inputs.multi_arch == true steps: - name: Build & Publish uses: fasttrack-solutions/ci/.github/actions/build-image@main @@ -55,11 +68,12 @@ jobs: dockerfile: ${{ inputs.dockerfile }} build-args: ${{ inputs.build-args }} ssh_key: ${{ secrets.FT_SSH_KEY }} - ssh_known_hosts: ${{ secrets.FT_BITBUCKET_KNOWN_HOSTS }} + ssh_known_hosts: ${{ secrets.FT_BITBUCKET_KNOWN_HOSTS }} start-build-from: ${{ inputs.start-build-from }} git_fetch_submodules: ${{ inputs.git_fetch_submodules }} github_token: ${{ secrets.GITHUB_TOKEN }} ecr_aws_access_key_id: ${{ secrets.FT_ECR_AWS_ACCESS_KEY_ID }} ecr_aws_secret_key: ${{ secrets.FT_ECR_AWS_SECRET_ACCESS_KEY }} dockerhub_username: ${{ inputs.dockerhub_username }} - dockerhub_pull_token: ${{ secrets.DOCKERHUB_PULL_TOKEN }} + dockerhub_pull_token: ${{ secrets.DOCKERHUB_PULL_TOKEN }} + platform: ${{ matrix.platform }} diff --git a/.github/workflows/docker-service.yml b/.github/workflows/docker-service.yml index 87196a3..601cdef 100644 --- a/.github/workflows/docker-service.yml +++ b/.github/workflows/docker-service.yml @@ -34,7 +34,12 @@ on: description: "dockerhub username" required: false type: string - default: "tazerr" + default: "tazerr" + multi_arch: + description: "Build for both amd64 and arm64 (default: false, amd64 only)" + required: false + type: boolean + default: false secrets: FT_SSH_KEY: required: true @@ -50,9 +55,18 @@ on: jobs: build-service: - runs-on: ubuntu-latest + strategy: + matrix: + include: + - platform: linux/amd64 + runner: ubuntu-latest + - platform: linux/arm64 + runner: ubuntu-arm64-latest + runs-on: ${{ matrix.runner }} + if: matrix.platform == 'linux/amd64' || inputs.multi_arch == true steps: - name: Build & Publish + id: build uses: fasttrack-solutions/ci/.github/actions/build-publish-docker@main with: image: ${{ inputs.image }} @@ -68,4 +82,21 @@ jobs: github_token: ${{ secrets.GITHUB_TOKEN }} latest_tag: ${{ inputs.latest_tag }} dockerhub_username: ${{ inputs.dockerhub_username }} - dockerhub_pull_token: ${{ secrets.DOCKERHUB_PULL_TOKEN }} + dockerhub_pull_token: ${{ secrets.DOCKERHUB_PULL_TOKEN }} + platform: ${{ matrix.platform }} + + create-manifest: + needs: build-service + runs-on: ubuntu-latest + steps: + - name: Create multi-arch manifest + uses: fasttrack-solutions/ci/.github/actions/create-manifest@main + with: + image: ${{ inputs.image }} + start-build-from: ${{ inputs.start-build-from }} + ecr_aws_access_key_id: ${{ secrets.FT_ECR_AWS_ACCESS_KEY_ID }} + ecr_aws_secret_key: ${{ secrets.FT_ECR_AWS_SECRET_ACCESS_KEY }} + dockerhub_username: ${{ inputs.dockerhub_username }} + dockerhub_pull_token: ${{ secrets.DOCKERHUB_PULL_TOKEN }} + latest_tag: ${{ inputs.latest_tag }} + tag-prefix: ${{ inputs.tag-prefix }} From 5e6d17ed5e632efc6ba563cb59687e9650eebfdb Mon Sep 17 00:00:00 2001 From: Patrik Potocki Date: Fri, 16 Jan 2026 15:06:39 +0100 Subject: [PATCH 2/6] chore: use feat/multi-arch-docker-builds branch for action references Temporarily point all action references to the feature branch for testing before merging to main. Co-Authored-By: Claude Opus 4.5 --- .github/workflows/docker-api-service.yml | 8 ++++---- .github/workflows/docker-service-build.yml | 2 +- .github/workflows/docker-service-publish.yml | 2 +- .github/workflows/docker-service.yml | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/.github/workflows/docker-api-service.yml b/.github/workflows/docker-api-service.yml index 33be0ae..4b45178 100644 --- a/.github/workflows/docker-api-service.yml +++ b/.github/workflows/docker-api-service.yml @@ -61,7 +61,7 @@ jobs: if: matrix.platform == 'linux/amd64' || inputs.multi_arch == true steps: - name: Build & Publish - uses: fasttrack-solutions/ci/.github/actions/build-publish-docker@main + uses: fasttrack-solutions/ci/.github/actions/build-publish-docker@feat/multi-arch-docker-builds with: image: ${{ inputs.image }} tag-prefix: ${{ inputs.tag-prefix-service }} @@ -88,7 +88,7 @@ jobs: if: matrix.platform == 'linux/amd64' || inputs.multi_arch == true steps: - name: Build & Publish - uses: fasttrack-solutions/ci/.github/actions/build-publish-docker@main + uses: fasttrack-solutions/ci/.github/actions/build-publish-docker@feat/multi-arch-docker-builds with: image: ${{ inputs.image }} tag-prefix: ${{ inputs.tag-prefix-api }} @@ -108,7 +108,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Create multi-arch manifest for service - uses: fasttrack-solutions/ci/.github/actions/create-manifest@main + uses: fasttrack-solutions/ci/.github/actions/create-manifest@feat/multi-arch-docker-builds with: image: ${{ inputs.image }} start-build-from: ${{ inputs.start-build-from }} @@ -123,7 +123,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Create multi-arch manifest for API - uses: fasttrack-solutions/ci/.github/actions/create-manifest@main + uses: fasttrack-solutions/ci/.github/actions/create-manifest@feat/multi-arch-docker-builds with: image: ${{ inputs.image }} start-build-from: ${{ inputs.start-build-from }} diff --git a/.github/workflows/docker-service-build.yml b/.github/workflows/docker-service-build.yml index 1e5ab5b..bb28581 100644 --- a/.github/workflows/docker-service-build.yml +++ b/.github/workflows/docker-service-build.yml @@ -61,7 +61,7 @@ jobs: if: matrix.platform == 'linux/amd64' || inputs.multi_arch == true steps: - name: Build & Publish - uses: fasttrack-solutions/ci/.github/actions/build-image@main + uses: fasttrack-solutions/ci/.github/actions/build-image@feat/multi-arch-docker-builds with: image: ${{ inputs.image }} tag-prefix: ${{ inputs.tag-prefix }} diff --git a/.github/workflows/docker-service-publish.yml b/.github/workflows/docker-service-publish.yml index f0a10aa..1a95fd7 100644 --- a/.github/workflows/docker-service-publish.yml +++ b/.github/workflows/docker-service-publish.yml @@ -48,7 +48,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Build & Publish - uses: fasttrack-solutions/ci/.github/actions/load-image-publish@main + uses: fasttrack-solutions/ci/.github/actions/load-image-publish@feat/multi-arch-docker-builds with: image: ${{ inputs.image }} tag-prefix: ${{ inputs.tag-prefix }} diff --git a/.github/workflows/docker-service.yml b/.github/workflows/docker-service.yml index 601cdef..011af57 100644 --- a/.github/workflows/docker-service.yml +++ b/.github/workflows/docker-service.yml @@ -67,7 +67,7 @@ jobs: steps: - name: Build & Publish id: build - uses: fasttrack-solutions/ci/.github/actions/build-publish-docker@main + uses: fasttrack-solutions/ci/.github/actions/build-publish-docker@feat/multi-arch-docker-builds with: image: ${{ inputs.image }} tag-prefix: ${{ inputs.tag-prefix }} @@ -90,7 +90,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Create multi-arch manifest - uses: fasttrack-solutions/ci/.github/actions/create-manifest@main + uses: fasttrack-solutions/ci/.github/actions/create-manifest@feat/multi-arch-docker-builds with: image: ${{ inputs.image }} start-build-from: ${{ inputs.start-build-from }} From 86f7583329066b48533ea4bd7b6e4f7bbc57470c Mon Sep 17 00:00:00 2001 From: Patrik Potocki Date: Fri, 16 Jan 2026 15:22:56 +0100 Subject: [PATCH 3/6] fix: move matrix condition from job-level to step-level The matrix context is not available in job-level `if` conditions for reusable workflows. Moving the condition to step-level where matrix context is available. Co-Authored-By: Claude Opus 4.5 --- .github/workflows/docker-api-service.yml | 4 ++-- .github/workflows/docker-service-build.yml | 2 +- .github/workflows/docker-service.yml | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/docker-api-service.yml b/.github/workflows/docker-api-service.yml index 4b45178..9f9d12f 100644 --- a/.github/workflows/docker-api-service.yml +++ b/.github/workflows/docker-api-service.yml @@ -58,9 +58,9 @@ jobs: - platform: linux/arm64 runner: ubuntu-arm64-latest runs-on: ${{ matrix.runner }} - if: matrix.platform == 'linux/amd64' || inputs.multi_arch == true steps: - name: Build & Publish + if: matrix.platform == 'linux/amd64' || inputs.multi_arch == true uses: fasttrack-solutions/ci/.github/actions/build-publish-docker@feat/multi-arch-docker-builds with: image: ${{ inputs.image }} @@ -85,9 +85,9 @@ jobs: - platform: linux/arm64 runner: ubuntu-arm64-latest runs-on: ${{ matrix.runner }} - if: matrix.platform == 'linux/amd64' || inputs.multi_arch == true steps: - name: Build & Publish + if: matrix.platform == 'linux/amd64' || inputs.multi_arch == true uses: fasttrack-solutions/ci/.github/actions/build-publish-docker@feat/multi-arch-docker-builds with: image: ${{ inputs.image }} diff --git a/.github/workflows/docker-service-build.yml b/.github/workflows/docker-service-build.yml index bb28581..0481587 100644 --- a/.github/workflows/docker-service-build.yml +++ b/.github/workflows/docker-service-build.yml @@ -58,9 +58,9 @@ jobs: - platform: linux/arm64 runner: ubuntu-arm64-latest runs-on: ${{ matrix.runner }} - if: matrix.platform == 'linux/amd64' || inputs.multi_arch == true steps: - name: Build & Publish + if: matrix.platform == 'linux/amd64' || inputs.multi_arch == true uses: fasttrack-solutions/ci/.github/actions/build-image@feat/multi-arch-docker-builds with: image: ${{ inputs.image }} diff --git a/.github/workflows/docker-service.yml b/.github/workflows/docker-service.yml index 011af57..a03d126 100644 --- a/.github/workflows/docker-service.yml +++ b/.github/workflows/docker-service.yml @@ -63,9 +63,9 @@ jobs: - platform: linux/arm64 runner: ubuntu-arm64-latest runs-on: ${{ matrix.runner }} - if: matrix.platform == 'linux/amd64' || inputs.multi_arch == true steps: - name: Build & Publish + if: matrix.platform == 'linux/amd64' || inputs.multi_arch == true id: build uses: fasttrack-solutions/ci/.github/actions/build-publish-docker@feat/multi-arch-docker-builds with: From 4a441fe1f041453a71c62e2f2e03d3cae213e367 Mon Sep 17 00:00:00 2001 From: Patrik Potocki Date: Fri, 16 Jan 2026 16:44:53 +0100 Subject: [PATCH 4/6] fix: add multi_arch input to docker-service-publish workflow Pass through the multi_arch input to load-image-publish action so it can properly handle multi-arch artifact publishing. Co-Authored-By: Claude Opus 4.5 --- .github/workflows/docker-service-publish.yml | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/.github/workflows/docker-service-publish.yml b/.github/workflows/docker-service-publish.yml index 1a95fd7..cca96bf 100644 --- a/.github/workflows/docker-service-publish.yml +++ b/.github/workflows/docker-service-publish.yml @@ -30,7 +30,12 @@ on: description: "dockerhub username" required: false type: string - default: "tazerr" + default: "tazerr" + multi_arch: + description: "Build for both amd64 and arm64 (default: false, amd64 only)" + required: false + type: boolean + default: false secrets: FT_SSH_KEY: required: true @@ -51,9 +56,10 @@ jobs: uses: fasttrack-solutions/ci/.github/actions/load-image-publish@feat/multi-arch-docker-builds with: image: ${{ inputs.image }} - tag-prefix: ${{ inputs.tag-prefix }} + tag-prefix: ${{ inputs.tag-prefix }} ecr_aws_access_key_id: ${{ secrets.FT_ECR_AWS_ACCESS_KEY_ID }} ecr_aws_secret_key: ${{ secrets.FT_ECR_AWS_SECRET_ACCESS_KEY }} github_token: ${{ secrets.GITHUB_TOKEN }} dockerhub_username: ${{ inputs.dockerhub_username }} - dockerhub_pull_token: ${{ secrets.DOCKERHUB_PULL_TOKEN }} + dockerhub_pull_token: ${{ secrets.DOCKERHUB_PULL_TOKEN }} + multi_arch: ${{ inputs.multi_arch }} From 4d592115d28690e673711eb4a3b40ad4db973515 Mon Sep 17 00:00:00 2001 From: Patrik Potocki Date: Fri, 16 Jan 2026 16:54:12 +0100 Subject: [PATCH 5/6] fix: use dynamic matrix to avoid launching arm64 runner when multi_arch is disabled Use fromJSON to dynamically build the matrix based on multi_arch input. When multi_arch=false (default), only amd64 runner is launched. When multi_arch=true, both amd64 and arm64 runners are launched. Co-Authored-By: Claude Opus 4.5 --- .github/workflows/docker-api-service.yml | 14 ++------------ .github/workflows/docker-service-build.yml | 7 +------ .github/workflows/docker-service.yml | 7 +------ 3 files changed, 4 insertions(+), 24 deletions(-) diff --git a/.github/workflows/docker-api-service.yml b/.github/workflows/docker-api-service.yml index 9f9d12f..1d44dd9 100644 --- a/.github/workflows/docker-api-service.yml +++ b/.github/workflows/docker-api-service.yml @@ -52,15 +52,10 @@ jobs: build-service: strategy: matrix: - include: - - platform: linux/amd64 - runner: ubuntu-latest - - platform: linux/arm64 - runner: ubuntu-arm64-latest + include: ${{ fromJSON(inputs.multi_arch && '[{"platform":"linux/amd64","runner":"ubuntu-latest"},{"platform":"linux/arm64","runner":"ubuntu-arm64-latest"}]' || '[{"platform":"linux/amd64","runner":"ubuntu-latest"}]') }} runs-on: ${{ matrix.runner }} steps: - name: Build & Publish - if: matrix.platform == 'linux/amd64' || inputs.multi_arch == true uses: fasttrack-solutions/ci/.github/actions/build-publish-docker@feat/multi-arch-docker-builds with: image: ${{ inputs.image }} @@ -79,15 +74,10 @@ jobs: build-api: strategy: matrix: - include: - - platform: linux/amd64 - runner: ubuntu-latest - - platform: linux/arm64 - runner: ubuntu-arm64-latest + include: ${{ fromJSON(inputs.multi_arch && '[{"platform":"linux/amd64","runner":"ubuntu-latest"},{"platform":"linux/arm64","runner":"ubuntu-arm64-latest"}]' || '[{"platform":"linux/amd64","runner":"ubuntu-latest"}]') }} runs-on: ${{ matrix.runner }} steps: - name: Build & Publish - if: matrix.platform == 'linux/amd64' || inputs.multi_arch == true uses: fasttrack-solutions/ci/.github/actions/build-publish-docker@feat/multi-arch-docker-builds with: image: ${{ inputs.image }} diff --git a/.github/workflows/docker-service-build.yml b/.github/workflows/docker-service-build.yml index 0481587..fdea23d 100644 --- a/.github/workflows/docker-service-build.yml +++ b/.github/workflows/docker-service-build.yml @@ -52,15 +52,10 @@ jobs: build-service: strategy: matrix: - include: - - platform: linux/amd64 - runner: ubuntu-latest - - platform: linux/arm64 - runner: ubuntu-arm64-latest + include: ${{ fromJSON(inputs.multi_arch && '[{"platform":"linux/amd64","runner":"ubuntu-latest"},{"platform":"linux/arm64","runner":"ubuntu-arm64-latest"}]' || '[{"platform":"linux/amd64","runner":"ubuntu-latest"}]') }} runs-on: ${{ matrix.runner }} steps: - name: Build & Publish - if: matrix.platform == 'linux/amd64' || inputs.multi_arch == true uses: fasttrack-solutions/ci/.github/actions/build-image@feat/multi-arch-docker-builds with: image: ${{ inputs.image }} diff --git a/.github/workflows/docker-service.yml b/.github/workflows/docker-service.yml index a03d126..0edd513 100644 --- a/.github/workflows/docker-service.yml +++ b/.github/workflows/docker-service.yml @@ -57,15 +57,10 @@ jobs: build-service: strategy: matrix: - include: - - platform: linux/amd64 - runner: ubuntu-latest - - platform: linux/arm64 - runner: ubuntu-arm64-latest + include: ${{ fromJSON(inputs.multi_arch && '[{"platform":"linux/amd64","runner":"ubuntu-latest"},{"platform":"linux/arm64","runner":"ubuntu-arm64-latest"}]' || '[{"platform":"linux/amd64","runner":"ubuntu-latest"}]') }} runs-on: ${{ matrix.runner }} steps: - name: Build & Publish - if: matrix.platform == 'linux/amd64' || inputs.multi_arch == true id: build uses: fasttrack-solutions/ci/.github/actions/build-publish-docker@feat/multi-arch-docker-builds with: From 622ee50466f8da257566b8c669d556eb2c43773b Mon Sep 17 00:00:00 2001 From: Patrik Potocki Date: Fri, 16 Jan 2026 20:55:59 +0100 Subject: [PATCH 6/6] fix: preserve original job names for required checks compatibility Use custom job name to keep 'build-service' for amd64 builds and only add '-arm64' suffix for arm64 builds. This maintains backward compatibility with existing required checks configuration. Co-Authored-By: Claude Opus 4.5 --- .github/workflows/docker-api-service.yml | 2 ++ .github/workflows/docker-service-build.yml | 1 + .github/workflows/docker-service.yml | 1 + 3 files changed, 4 insertions(+) diff --git a/.github/workflows/docker-api-service.yml b/.github/workflows/docker-api-service.yml index 1d44dd9..c69532f 100644 --- a/.github/workflows/docker-api-service.yml +++ b/.github/workflows/docker-api-service.yml @@ -50,6 +50,7 @@ on: jobs: build-service: + name: ${{ matrix.platform == 'linux/arm64' && 'build-service-arm64' || 'build-service' }} strategy: matrix: include: ${{ fromJSON(inputs.multi_arch && '[{"platform":"linux/amd64","runner":"ubuntu-latest"},{"platform":"linux/arm64","runner":"ubuntu-arm64-latest"}]' || '[{"platform":"linux/amd64","runner":"ubuntu-latest"}]') }} @@ -72,6 +73,7 @@ jobs: platform: ${{ matrix.platform }} build-api: + name: ${{ matrix.platform == 'linux/arm64' && 'build-api-arm64' || 'build-api' }} strategy: matrix: include: ${{ fromJSON(inputs.multi_arch && '[{"platform":"linux/amd64","runner":"ubuntu-latest"},{"platform":"linux/arm64","runner":"ubuntu-arm64-latest"}]' || '[{"platform":"linux/amd64","runner":"ubuntu-latest"}]') }} diff --git a/.github/workflows/docker-service-build.yml b/.github/workflows/docker-service-build.yml index fdea23d..ba9bbfd 100644 --- a/.github/workflows/docker-service-build.yml +++ b/.github/workflows/docker-service-build.yml @@ -50,6 +50,7 @@ on: jobs: build-service: + name: ${{ matrix.platform == 'linux/arm64' && 'build-service-arm64' || 'build-service' }} strategy: matrix: include: ${{ fromJSON(inputs.multi_arch && '[{"platform":"linux/amd64","runner":"ubuntu-latest"},{"platform":"linux/arm64","runner":"ubuntu-arm64-latest"}]' || '[{"platform":"linux/amd64","runner":"ubuntu-latest"}]') }} diff --git a/.github/workflows/docker-service.yml b/.github/workflows/docker-service.yml index 0edd513..55d17b8 100644 --- a/.github/workflows/docker-service.yml +++ b/.github/workflows/docker-service.yml @@ -55,6 +55,7 @@ on: jobs: build-service: + name: ${{ matrix.platform == 'linux/arm64' && 'build-service-arm64' || 'build-service' }} strategy: matrix: include: ${{ fromJSON(inputs.multi_arch && '[{"platform":"linux/amd64","runner":"ubuntu-latest"},{"platform":"linux/arm64","runner":"ubuntu-arm64-latest"}]' || '[{"platform":"linux/amd64","runner":"ubuntu-latest"}]') }}