Skip to content

Commit d6c852f

Browse files
authored
Merge pull request #225 from liangyuanpeng/fix_image
chore: update Makefile for build multi architecture container image
2 parents a0c92d5 + e3c2fe2 commit d6c852f

File tree

4 files changed

+82
-7
lines changed

4 files changed

+82
-7
lines changed

.github/workflows/ci.yaml

+20
Original file line numberDiff line numberDiff line change
@@ -40,3 +40,23 @@ jobs:
4040
uses: shogo82148/actions-goveralls@v1
4141
with:
4242
path-to-profile: coverage.out
43+
44+
build_image:
45+
name: build image
46+
runs-on: ubuntu-latest
47+
steps:
48+
- name: Checkout
49+
uses: actions/checkout@v4
50+
with:
51+
fetch-depth: 0
52+
- name: Set up Go
53+
uses: actions/setup-go@v5
54+
with:
55+
go-version-file: go.mod
56+
- name: Setup QEMU
57+
uses: docker/setup-qemu-action@v3
58+
- name: Setup Docker Buildx
59+
id: buildx
60+
uses: docker/setup-buildx-action@v3
61+
- run: |
62+
make image-local-build

.github/workflows/example-e2e-tests.yaml

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ jobs:
1010
ubuntu:
1111
strategy:
1212
matrix:
13-
os: [ ubuntu-20.04, ubuntu-22.04, ubuntu-latest ]
13+
os: [ ubuntu-22.04, ubuntu-latest ]
1414
runs-on: ${{ matrix.os }}
1515
steps:
1616
- uses: actions/checkout@v4

Dockerfile

+10-5
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,9 @@
1-
FROM --platform=${BUILDPLATFORM} golang:1.23 AS build
1+
ARG BUILDER_IMAGE=golang:1.23
2+
ARG BASE_IMAGE=debian:11-slim
3+
4+
# Build the manager binary
5+
FROM --platform=${BUILDPLATFORM} ${BUILDER_IMAGE} AS builder
6+
27
COPY / /src
38
WORKDIR /src
49

@@ -9,13 +14,12 @@ WORKDIR /src
914
ARG TARGETOS
1015
ARG TARGETARCH
1116

12-
ENV CGO_ENABLED=0
17+
RUN --mount=type=cache,target=/go/pkg --mount=type=cache,target=/root/.cache/go-build GOARCH=${TARGETARCH} GOOS=linux CGO_ENABLED=0 make build
1318

14-
RUN --mount=type=cache,target=/go/pkg --mount=type=cache,target=/root/.cache/go-build GOOS=${TARGETOS} GOARCH=${TARGETARCH} make build
19+
FROM ${BASE_IMAGE}
1520

16-
FROM debian:11-slim AS image
21+
COPY --from=builder /src/bin/kcl /usr/local/bin/kcl
1722

18-
COPY --from=build /src/bin/kcl /usr/local/bin/kcl
1923
# Verify KCL installation and basic functionality
2024
RUN kcl version && \
2125
echo 'a=1' | kcl run -
@@ -25,6 +29,7 @@ RUN kcl version && \
2529
RUN apt-get update && \
2630
apt-get install -y --no-install-recommends git ca-certificates && \
2731
rm -rf /var/lib/apt/lists/*
32+
2833
# Create the temporary directory
2934
RUN mkdir -p /tmp
3035

makefile

+51-1
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ lint:
2727
.PHONY: build
2828
build: lint
2929
mkdir -p bin/
30-
go build -o bin/kcl -ldflags="$(LDFLAGS)" $(MAIN_FILE)
30+
$(GO_BUILD_ENV) go build -o bin/kcl -ldflags="$(LDFLAGS)" $(MAIN_FILE)
3131

3232
.PHONY: test
3333
test:
@@ -92,3 +92,53 @@ e2e: ## Run e2e test
9292
.PHONY: e2e-init
9393
e2e-init:
9494
scripts/e2e/e2e-init.sh $(TS)
95+
96+
GO_VERSION := $(shell awk '/^go /{print $$2}' go.mod|head -n1)
97+
98+
GIT_TAG ?= $(shell git describe --tags --dirty --always)
99+
# Image URL to use all building/pushing image targets
100+
PLATFORMS ?= linux/amd64,linux/arm64
101+
DOCKER_BUILDX_CMD ?= docker buildx
102+
IMAGE_BUILD_CMD ?= $(DOCKER_BUILDX_CMD) build
103+
BASE_IMAGE ?= debian:11-slim
104+
BUILDER_IMAGE ?= golang:$(GO_VERSION)
105+
CGO_ENABLED ?= 0
106+
107+
IMAGE_BUILD_EXTRA_OPTS ?=
108+
109+
IMAGE_REGISTRY ?= ghcr.io/kcl-lang
110+
IMAGE_NAME := kcl
111+
IMAGE_REPO ?= $(IMAGE_REGISTRY)/$(IMAGE_NAME)
112+
IMAGE_TAG ?= $(IMAGE_REPO):$(GIT_TAG)
113+
114+
ifdef EXTRA_TAG
115+
IMAGE_EXTRA_TAG ?= $(IMAGE_REPO):$(EXTRA_TAG)
116+
endif
117+
ifdef IMAGE_EXTRA_TAG
118+
IMAGE_BUILD_EXTRA_OPTS += -t $(IMAGE_EXTRA_TAG)
119+
endif
120+
121+
# Build the multiplatform container image locally and push to repo.
122+
.PHONY: image-local-push
123+
image-local-push: PUSH=--push
124+
image-local-push: image-local-build
125+
126+
# Build the multiplatform container image locally.
127+
.PHONY: image-local-build
128+
image-local-build:
129+
BUILDER=$(shell $(DOCKER_BUILDX_CMD) create --use)
130+
$(MAKE) image-build PUSH=$(PUSH)
131+
$(DOCKER_BUILDX_CMD) rm $$BUILDER
132+
133+
.PHONY: image-push
134+
image-push: PUSH=--push
135+
image-push: image-build
136+
137+
image-build:
138+
$(IMAGE_BUILD_CMD) -t $(IMAGE_TAG) \
139+
--platform=$(PLATFORMS) \
140+
--build-arg BASE_IMAGE=$(BASE_IMAGE) \
141+
--build-arg BUILDER_IMAGE=$(BUILDER_IMAGE) \
142+
--build-arg CGO_ENABLED=$(CGO_ENABLED) \
143+
$(PUSH) \
144+
$(IMAGE_BUILD_EXTRA_OPTS) ./

0 commit comments

Comments
 (0)