From 7be398be55460352dcc40468ddae22715b5536a6 Mon Sep 17 00:00:00 2001 From: Robin Date: Sat, 28 Jun 2025 14:45:16 +0200 Subject: [PATCH] use native ARM64 runners for faster Docker builds - Split Docker builds to use ubuntu-24.04-arm runners - Separate jobs for AMD64 and ARM64 with manifest creation - Eliminates slow cross-compilation/emulation --- .github/workflows/CI.yml | 15 ++++++++--- .github/workflows/release.yaml | 49 ++++++++++++++++++++++++++++++---- 2 files changed, 55 insertions(+), 9 deletions(-) diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index 8f4c1d2..965aba7 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -30,16 +30,23 @@ jobs: - name: Run CLI run: cargo run - docker-build: + docker-build-amd64: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - - name: Build and push Docker image + - name: Build AMD64 Docker image uses: docker/build-push-action@v5 with: - platforms: linux/amd64,linux/arm64 + platforms: linux/amd64 push: false tags: | - cybuerg/cfspeedtest:${{ github.sha }} + cybuerg/cfspeedtest:${{ github.sha }}-amd64 + + docker-build-arm64: + runs-on: ubuntu-24.04-arm + steps: + - uses: actions/checkout@v4 + - name: Build ARM64 Docker image + run: docker build --platform linux/arm64 -t cybuerg/cfspeedtest:${{ github.sha }}-arm64 . diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index e286618..9e37645 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -45,7 +45,7 @@ jobs: zip: windows token: ${{ secrets.GITHUB_TOKEN }} - docker-build-and-push: + docker-build-amd64: needs: [create-release, upload-assets] runs-on: ubuntu-latest steps: @@ -57,11 +57,50 @@ jobs: with: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} - - name: Build and push Docker image + - name: Build and push AMD64 Docker image uses: docker/build-push-action@v5 with: - platforms: linux/amd64,linux/arm64 + platforms: linux/amd64 push: true tags: | - cybuerg/cfspeedtest:${{ github.ref_name }} - cybuerg/cfspeedtest:latest + cybuerg/cfspeedtest:${{ github.ref_name }}-amd64 + cybuerg/cfspeedtest:latest-amd64 + + docker-build-arm64: + needs: [create-release, upload-assets] + runs-on: ubuntu-24.04-arm + steps: + - uses: actions/checkout@v4 + - name: Log in to DockerHub + uses: docker/login-action@v3 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + - name: Build and push ARM64 Docker image + run: | + docker build --platform linux/arm64 -t cybuerg/cfspeedtest:${{ github.ref_name }}-arm64 -t cybuerg/cfspeedtest:latest-arm64 . + docker push cybuerg/cfspeedtest:${{ github.ref_name }}-arm64 + docker push cybuerg/cfspeedtest:latest-arm64 + + docker-create-manifest: + needs: [docker-build-amd64, docker-build-arm64] + runs-on: ubuntu-latest + steps: + - name: Log in to DockerHub + uses: docker/login-action@v3 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + - name: Create and push multi-arch manifest + run: | + # Create manifest for versioned tag + docker manifest create cybuerg/cfspeedtest:${{ github.ref_name }} \ + cybuerg/cfspeedtest:${{ github.ref_name }}-amd64 \ + cybuerg/cfspeedtest:${{ github.ref_name }}-arm64 + docker manifest push cybuerg/cfspeedtest:${{ github.ref_name }} + + # Create manifest for latest tag + docker manifest create cybuerg/cfspeedtest:latest \ + cybuerg/cfspeedtest:latest-amd64 \ + cybuerg/cfspeedtest:latest-arm64 + docker manifest push cybuerg/cfspeedtest:latest