From 0e5ef2b25371bdeed688b6cc23d432be86ab534c Mon Sep 17 00:00:00 2001 From: DylanXander Date: Mon, 19 May 2025 11:26:38 +0000 Subject: [PATCH 1/3] add support for ARM64 architecture --- .github/workflows/publish.yml | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 36680c1..e8f6cba 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -19,6 +19,8 @@ jobs: - name: Set up Docker Buildx uses: docker/setup-buildx-action@v2 + with: + platforms: linux/amd64,linux/arm64 - name: Integration tests run: "docker compose \ @@ -41,6 +43,7 @@ jobs: build-args: | KOMPANION_VERSION=${{ steps.get_tag.outputs.TAG }} push: true + platforms: linux/amd64,linux/arm64 tags: | - vanadium23/kompanion:latest - vanadium23/kompanion:${{ steps.get_tag.outputs.TAG }} + submartingaie/kompanion:latest + submartingaie/kompanion:${{ steps.get_tag.outputs.TAG }} From 4da9790492a407feddd942556ee41a5a8d86ef7c Mon Sep 17 00:00:00 2001 From: DylanXander Date: Mon, 19 May 2025 12:19:37 +0000 Subject: [PATCH 2/3] add support for ARM64 architecture --- Dockerfile | 41 ++++++++++++++++++++++++++++++++++++----- 1 file changed, 36 insertions(+), 5 deletions(-) diff --git a/Dockerfile b/Dockerfile index 94813f7..09d2119 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,29 +1,60 @@ +# Dockerfile (Minimal Changes) + +# Define target architecture as a build argument. +# BuildKit automatically sets this when using --platform. +ARG TARGETARCH + # Step 1: Modules caching +# Use a multi-arch Go base image. BuildKit will select the correct one based on TARGETARCH. FROM golang:1.22.5-alpine as modules + +# Set GOOS and GOARCH based on the build argument for this stage. +# This ensures go mod download caches for the correct target architecture. +ENV GOOS=linux GOARCH=${TARGETARCH} + COPY go.mod go.sum /modules/ WORKDIR /modules RUN go mod download # Step 2: Builder +# Use a multi-arch Go base image for the builder stage. FROM golang:1.22.5-alpine as builder -RUN apk add --update gcc musl-dev +RUN apk add --update gcc musl-dev # Keep update for minimal change + +# Set GOOS and GOARCH for the builder environment. +# This will be used by the go build command. +ENV GOOS=linux GOARCH=${TARGETARCH} + +# Copy modules cache built for the *same* target architecture COPY --from=modules /go/pkg /go/pkg + COPY . /app WORKDIR /app +# Define KOMPANION_VERSION as a build argument ARG KOMPANION_VERSION=local ENV KOMPANION_VERSION=$KOMPANION_VERSION -RUN GOOS=linux GOARCH=amd64 \ - go build -ldflags "-X main.Version=$KOMPANION_VERSION" -tags migrate -o /bin/app ./cmd/app +# Build the application. Use the GOOS/GOARCH from the environment. +# REMOVE the hardcoded GOOS=linux GOARCH=amd64. +RUN go build -ldflags "-X main.Version=$KOMPANION_VERSION" -tags migrate -o /bin/app ./cmd/app # Step 3: Final +# Keep the same base image as the original for minimal change. +# This image is multi-arch, and BuildKit will select the correct variant. FROM golang:1.22.5-alpine -ENV GIN_MODE=release +ENV GIN_MODE=release WORKDIR / + +# Copy web assets from the builder stage COPY --from=builder /app/web /web + +# Copy the architecture-specific binary from the builder stage COPY --from=builder /bin/app /app + +# Copy CA certs as in the original COPY --from=builder /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/ -CMD ["/app"] +# Set the command to run the application +CMD ["/app"] \ No newline at end of file From e3ac78e125ecc3361ec3b9df8ac467b652c79e26 Mon Sep 17 00:00:00 2001 From: DylanXander Date: Mon, 19 May 2025 21:14:23 +0800 Subject: [PATCH 3/3] Update publish.yml --- .github/workflows/publish.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index e8f6cba..ea2cb7a 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -45,5 +45,5 @@ jobs: push: true platforms: linux/amd64,linux/arm64 tags: | - submartingaie/kompanion:latest - submartingaie/kompanion:${{ steps.get_tag.outputs.TAG }} + vanadium23/kompanion:latest + vanadium23/kompanion:${{ steps.get_tag.outputs.TAG }}