From c3f8ee5f65f7f782b37acdfbef488e32d2367744 Mon Sep 17 00:00:00 2001 From: Brian Kanya Date: Sat, 25 Nov 2023 03:46:43 -0500 Subject: [PATCH] feat: add ARM docker image build (#45) * style: as -> AS in Dockerfile * feat: add TARGETARCH for go build * feat: use Github action for docker image build * chore: add default TARGETARCH=amd64 for Makefile --- .../workflows/release-container-image.yaml | 57 ++++++++++++------- Makefile | 2 +- .../Dockerfile | 4 +- 3 files changed, 38 insertions(+), 25 deletions(-) diff --git a/.github/workflows/release-container-image.yaml b/.github/workflows/release-container-image.yaml index 84c99b0..b880a48 100644 --- a/.github/workflows/release-container-image.yaml +++ b/.github/workflows/release-container-image.yaml @@ -4,7 +4,7 @@ on: workflow_dispatch: {} push: tags: - - v* + - v* jobs: build: @@ -12,24 +12,37 @@ jobs: packages: write runs-on: ubuntu-latest steps: - - name: "Extract Version" - id: extract_version - run: | - GIT_TAG=${GITHUB_REF##*/} - VERSION=${GIT_TAG##v} - echo "::set-output name=version::$(echo $VERSION)" - - uses: actions/checkout@v2 - - name: Log in to GitHub Docker Registry - uses: docker/login-action@v1 - with: - registry: ghcr.io - username: ${{ github.actor }} - password: ${{ secrets.GITHUB_TOKEN }} - - name: Build the Docker image - run: make image - - name: Push docker image to ghcr.io - env: - VERSION: ${{ steps.extract_version.outputs.version }} - run: | - docker tag ghcr.io/strrl/cloudflare-tunnel-ingress-controller:latest ghcr.io/strrl/cloudflare-tunnel-ingress-controller:$VERSION - docker push ghcr.io/strrl/cloudflare-tunnel-ingress-controller:$VERSION + - uses: actions/checkout@v2 + - name: Docker meta + id: meta + uses: docker/metadata-action@v3 + with: + # list of Docker images to use as base name for tags + images: | + ghcr.io/${{ github.repository_owner }}/cloudflare-tunnel-ingress-controller + # generate Docker tags based on the following events/attributes + tags: | + type=ref,event=branch + type=ref,event=pr + type=semver,pattern={{version}} + type=semver,pattern={{major}}.{{minor}} + type=semver,pattern={{major}} + type=sha + - name: Set up QEMU + uses: docker/setup-qemu-action@v1 + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v1 + - name: Log in to GitHub Docker Registry + uses: docker/login-action@v1 + with: + registry: ghcr.io + username: ${{ github.repository_owner }} + password: ${{ secrets.GITHUB_TOKEN }} + - name: Build and push + uses: docker/build-push-action@v2 + with: + file: image/cloudflare-tunnel-ingress-controller/Dockerfile + platforms: linux/amd64,linux/arm,linux/arm64 + push: ${{ github.event_name != 'pull_request' }} + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} diff --git a/Makefile b/Makefile index cc3648b..3e962d0 100644 --- a/Makefile +++ b/Makefile @@ -4,7 +4,7 @@ dev: .PHONY: image image: - DOCKER_BUILDKIT=1 docker build -t ghcr.io/strrl/cloudflare-tunnel-ingress-controller -f ./image/cloudflare-tunnel-ingress-controller/Dockerfile . + DOCKER_BUILDKIT=1 TARGETARCH=amd64 docker build -t ghcr.io/strrl/cloudflare-tunnel-ingress-controller -f ./image/cloudflare-tunnel-ingress-controller/Dockerfile . .PHONY: unit-test unit-test: diff --git a/image/cloudflare-tunnel-ingress-controller/Dockerfile b/image/cloudflare-tunnel-ingress-controller/Dockerfile index bf17e47..857ef0d 100644 --- a/image/cloudflare-tunnel-ingress-controller/Dockerfile +++ b/image/cloudflare-tunnel-ingress-controller/Dockerfile @@ -1,5 +1,5 @@ # Build the manager binary -FROM golang:1.20 as builder +FROM golang:1.20 AS builder WORKDIR /workspace @@ -10,7 +10,7 @@ RUN go mod download && go mod verify # Build COPY . . RUN --mount=type=cache,target=/go \ - CGO_ENABLED=0 GOOS=linux GOARCH=amd64 GO111MODULE=on \ + CGO_ENABLED=0 GOOS=linux GOARCH=$TARGETARCH GO111MODULE=on \ go build -o cloudflare-tunnel-ingress-controller ./cmd/cloudflare-tunnel-ingress-controller # Use distroless as minimal base image to package the manager binary