Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .github/workflows/publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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 \
Expand All @@ -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
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

latest will be overwritten by linux/arm64.
I prefer to set it as linux/amd64.

vanadium23/kompanion:${{ steps.get_tag.outputs.TAG }}
41 changes: 36 additions & 5 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -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"]
Loading