From 4500d43f27aae362891e0a0ab4258c7eb2974b4b Mon Sep 17 00:00:00 2001 From: valkyrie_pilot Date: Sat, 22 Jun 2024 01:38:35 -0600 Subject: [PATCH] Use new multiarch builds --- .github/workflows/build.yml | 79 ++++++++++++++++++++++++++++++------- Dockerfile | 9 +++-- 2 files changed, 70 insertions(+), 18 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 65d8c8a..d88837b 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1,10 +1,12 @@ -name: Build Service +name: Build container + on: push: - branches: - - main workflow_dispatch: +env: + REGISTRY_IMAGE: ghcr.io/randomairborne/giveip + permissions: packages: write contents: read @@ -12,37 +14,84 @@ permissions: jobs: check: uses: ./.github/workflows/check.yml + build: needs: [check] runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + platform: + - docker: linux/amd64 + llvm: x86_64 + - docker: linux/arm64 + llvm: aarch64 steps: - - name: Correct env - run: echo "REPO=${GITHUB_REPOSITORY,,}" >>${GITHUB_ENV} - - - name: Check out code into the proper directory + - name: Check out code uses: actions/checkout@v4 - name: Set up Docker Buildx - id: buildx uses: docker/setup-buildx-action@v3 - - name: Login to GitHub Container Registry + - name: Log in to GitHub Container Registry uses: docker/login-action@v3 with: registry: ghcr.io username: ${{ github.repository_owner }} password: ${{ secrets.GITHUB_TOKEN }} - - name: Build container - uses: docker/build-push-action@v5 + - name: Build and push by digest + id: build + uses: docker/build-push-action@v6 with: context: . - push: true - tags: ghcr.io/${{ env.REPO }}:latest - platforms: linux/amd64 + platforms: ${{ matrix.platform.docker }} + build-args: | + LLVMTARGETARCH=${{ matrix.platform.llvm }} + outputs: type=image,name=${{ env.REGISTRY_IMAGE }},push-by-digest=true,name-canonical=true,push=true - deploy: + - 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-${{ matrix.platform.llvm }} + path: /tmp/digests/* + if-no-files-found: error + retention-days: 1 + + merge: + runs-on: ubuntu-latest needs: [build] + steps: + - 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: Log in to GitHub Container Registry + uses: docker/login-action@v3 + with: + registry: ghcr.io + username: ${{ github.repository_owner }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Create manifest list and push + working-directory: /tmp/digests + run: | + docker buildx imagetools create --tag ${{ env.REGISTRY_IMAGE }}:latest $(printf '${{ env.REGISTRY_IMAGE }}@sha256:%s ' *) + + deploy: + needs: [merge] runs-on: ubuntu-latest steps: - name: Check out code into the proper directory diff --git a/Dockerfile b/Dockerfile index 78812bf..aa04ff6 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,10 +1,13 @@ -FROM rust:alpine AS builder +ARG LLVMTARGETARCH +FROM --platform=${BUILDPLATFORM} ghcr.io/randomairborne/cross-cargo-${LLVMTARGETARCH}:latest AS builder + +ARG LLVMTARGETARCH WORKDIR /build + COPY . . -RUN apk add musl-dev -RUN cargo build --release +RUN cargo build --release --target ${LLVMTARGETARCH}-unknown-linux-musl FROM scratch