Skip to content

Commit 1ce1b33

Browse files
committed
Tune docker build cache
Signed-off-by: Sylvain Rabot <[email protected]>
1 parent 4e7055e commit 1ce1b33

File tree

3 files changed

+53
-39
lines changed

3 files changed

+53
-39
lines changed

.github/workflows/docker.yaml

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,15 @@ jobs:
2222
fetch-depth: 0
2323
filter: tree:0
2424

25+
- uses: actions/cache@v4
26+
with:
27+
path: |
28+
/tmp/.buildx-cache
29+
key: ${{ runner.os }}-docker-${{ hashFiles('**/go.sum') }}
30+
restore-keys: |
31+
${{ runner.os }}-docker-${{ hashFiles('**/go.sum') }}
32+
${{ runner.os }}-docker-
33+
2534
- name: Setup docker QEMU
2635
uses: docker/setup-qemu-action@v3
2736

@@ -32,9 +41,6 @@ jobs:
3241
image=moby/buildkit:master
3342
network=host
3443
35-
- name: Expose GitHub Runtime
36-
uses: crazy-max/ghaction-github-runtime@v3
37-
3844
- name: Login to GitHub Container Registry
3945
uses: docker/login-action@v3
4046
with:

Dockerfile

Lines changed: 20 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -4,28 +4,35 @@ ARG GO_VERSION=1.22
44

55
FROM --platform=$BUILDPLATFORM golang:$GO_VERSION AS builder
66

7-
RUN apt-get update && apt-get dist-upgrade -y && apt-get install -y build-essential git
7+
RUN --mount=type=cache,target=/var/cache/apt \
8+
apt-get update && apt-get dist-upgrade -y && apt-get install -y build-essential git
89

910
WORKDIR $GOPATH/src/sylr.dev/yage
1011

11-
COPY go.mod go.sum ./
12-
13-
RUN go mod download
14-
15-
COPY . .
12+
RUN --mount=type=cache,target=/go/pkg/mod/ \
13+
--mount=type=bind,source=go.sum,target=go.sum \
14+
--mount=type=bind,source=go.mod,target=go.mod \
15+
go mod download
1616

1717
ARG TARGETPLATFORM
1818
ARG TARGETOS
1919
ARG TARGETARCH
2020
ARG TARGETVARIANT
2121

2222
# Switch shell to bash
23-
SHELL ["bash", "-c"]
24-
25-
# Run a git command otherwise git describe in the Makefile could report a dirty git dir
26-
RUN git diff --exit-code || true
27-
28-
RUN make build GOOS=${TARGETOS} GOARCH=${TARGETARCH} GOARM=${TARGETVARIANT/v/} GO_BUILD_TARGET=dist/${TARGETPLATFORM}/yage
23+
SHELL ["bash", "-c"]
24+
25+
RUN --mount=type=cache,target=/go/pkg/mod/ \
26+
--mount=type=cache,target=/root/.cache/go-build \
27+
--mount=type=bind,target=. \
28+
git diff --exit-code || true; \
29+
make build \
30+
GOOS=${TARGETOS} \
31+
GOARCH=${TARGETARCH} \
32+
GOARM=${TARGETVARIANT/v/} \
33+
GO_BUILD_TARGET=/tmp/dist/${TARGETPLATFORM}/yage \
34+
GO_BUILD_DIR=/tmp/dist/${TARGETPLATFORM} \
35+
GO_BUILD_FLAGS_TARGET=/tmp/.go-build-flags
2936

3037
# -----------------------------------------------------------------------------
3138

@@ -35,6 +42,6 @@ ARG TARGETPLATFORM
3542

3643
WORKDIR /usr/local/bin
3744

38-
COPY --from=builder "/go/src/sylr.dev/yage/dist/$TARGETPLATFORM/yage" .
45+
COPY --from=builder "/tmp/dist/$TARGETPLATFORM/yage" .
3946

4047
CMD ["/usr/local/bin/yage"]

Makefile

Lines changed: 24 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
GO ?= $(shell which go)
2-
GIT_UPDATE_INDEX := $(shell git update-index --refresh)
2+
GIT_UPDATE_INDEX ?= $(shell git update-index --refresh)
33
GIT_REVISION ?= $(shell git rev-parse HEAD)
44
GIT_VERSION ?= $(shell git describe --tags --always --dirty 2>/dev/null || echo dev)
55

@@ -15,17 +15,18 @@ GO_BUILD_TAGS := static
1515
GO_BUILD_TARGET_DEPS :=
1616
GO_BUILD_FLAGS := -trimpath
1717
GO_BUILD_LDFLAGS_OPTIMS :=
18+
GO_BUILD_DIR ?= dist
1819

1920
ifeq ($(GOOS)/$(GOARCH),$(GOENV_GOOS)/$(GOENV_GOARCH))
20-
GO_BUILD_TARGET ?= dist/yage
21-
GO_BUILD_VERSION_TARGET ?= dist/yage-$(GIT_VERSION)
21+
GO_BUILD_TARGET ?= $(GO_BUILD_DIR)/yage
22+
GO_BUILD_VERSION_TARGET ?= $(GO_BUILD_DIR)/yage-$(GIT_VERSION)
2223
else
2324
ifeq ($(GOARCH),arm)
24-
GO_BUILD_TARGET ?= dist/yage-$(GOOS)-$(GOARCH)v$(GOARM)
25-
GO_BUILD_VERSION_TARGET := dist/yage-$(GIT_VERSION)-$(GOOS)-$(GOARCH)v$(GOARM)
25+
GO_BUILD_TARGET ?= $(GO_BUILD_DIR)/yage-$(GOOS)-$(GOARCH)v$(GOARM)
26+
GO_BUILD_VERSION_TARGET := $(GO_BUILD_DIR)/yage-$(GIT_VERSION)-$(GOOS)-$(GOARCH)v$(GOARM)
2627
else
27-
GO_BUILD_TARGET ?= dist/yage-$(GOOS)-$(GOARCH)
28-
GO_BUILD_VERSION_TARGET := dist/yage-$(GIT_VERSION)-$(GOOS)-$(GOARCH)
28+
GO_BUILD_TARGET ?= $(GO_BUILD_DIR)/yage-$(GOOS)-$(GOARCH)
29+
GO_BUILD_VERSION_TARGET := $(GO_BUILD_DIR)/yage-$(GIT_VERSION)-$(GOOS)-$(GOARCH)
2930
endif # ($(GOARCH),arm)
3031
endif # ($(GOOS)/$(GOARCH),$(GOENV_GOOS)/$(GOENV_GOARCH))
3132

@@ -35,7 +36,7 @@ else
3536
GO_BUILD_LDFLAGS_OPTIMS += -s -w
3637
endif # $(DEBUG)
3738

38-
GO_BUILD_FLAGS_TARGET := .go-build-flags
39+
GO_BUILD_FLAGS_TARGET ?= .go-build-flags
3940
GO_CROSSBUILD_WINDOWS_PLATFORMS := windows/386 windows/amd64 windows/arm windows/arm64
4041
GO_CROSSBUILD_PLATFORMS ?= linux/386 linux/amd64 linux/arm linux/arm64 linux/arm/v7 linux/arm/v6 \
4142
linux/mips linux/mips/softfloat linux/mips64 linux/mips64le linux/mipsle \
@@ -62,19 +63,19 @@ GO_CROSSBUILD_RISCV64_PLATFORMS := $(filter %/riscv64,$(GO_CROSSBUILD_PLAT
6263
GO_CROSSBUILD_S390X_PLATFORMS := $(filter %/s390x,$(GO_CROSSBUILD_PLATFORMS))
6364
GO_CROSSBUILD_WINDOWS_PLATFORMS := $(filter windows/%,$(GO_CROSSBUILD_WINDOWS_PLATFORMS))
6465

65-
GO_CROSSBUILD_386_TARGET_PATTERN := dist/yage-$(GIT_VERSION)-%-386
66-
GO_CROSSBUILD_AMD64_TARGET_PATTERN := dist/yage-$(GIT_VERSION)-%-amd64
67-
GO_CROSSBUILD_ARM_TARGET_PATTERN := dist/yage-$(GIT_VERSION)-%-arm
68-
GO_CROSSBUILD_ARM64_TARGET_PATTERN := dist/yage-$(GIT_VERSION)-%-arm64
69-
GO_CROSSBUILD_ARMV6_TARGET_PATTERN := dist/yage-$(GIT_VERSION)-%-armv6
70-
GO_CROSSBUILD_ARMV7_TARGET_PATTERN := dist/yage-$(GIT_VERSION)-%-armv7
71-
GO_CROSSBUILD_MIPS_TARGET_PATTERN := dist/yage-$(GIT_VERSION)-%-mips
72-
GO_CROSSBUILD_MIPSLE_TARGET_PATTERN := dist/yage-$(GIT_VERSION)-%-mipsle
73-
GO_CROSSBUILD_MIPS64_TARGET_PATTERN := dist/yage-$(GIT_VERSION)-%-mips64
74-
GO_CROSSBUILD_MIPS64LE_TARGET_PATTERN := dist/yage-$(GIT_VERSION)-%-mips64le
75-
GO_CROSSBUILD_RISCV64_TARGET_PATTERN := dist/yage-$(GIT_VERSION)-%-riscv64
76-
GO_CROSSBUILD_S390X_TARGET_PATTERN := dist/yage-$(GIT_VERSION)-%-s390x
77-
GO_CROSSBUILD_WINDOWS_TARGET_PATTERN := dist/yage-$(GIT_VERSION)-windows-%.exe
66+
GO_CROSSBUILD_386_TARGET_PATTERN := $(GO_BUILD_DIR)/yage-$(GIT_VERSION)-%-386
67+
GO_CROSSBUILD_AMD64_TARGET_PATTERN := $(GO_BUILD_DIR)/yage-$(GIT_VERSION)-%-amd64
68+
GO_CROSSBUILD_ARM_TARGET_PATTERN := $(GO_BUILD_DIR)/yage-$(GIT_VERSION)-%-arm
69+
GO_CROSSBUILD_ARM64_TARGET_PATTERN := $(GO_BUILD_DIR)/yage-$(GIT_VERSION)-%-arm64
70+
GO_CROSSBUILD_ARMV6_TARGET_PATTERN := $(GO_BUILD_DIR)/yage-$(GIT_VERSION)-%-armv6
71+
GO_CROSSBUILD_ARMV7_TARGET_PATTERN := $(GO_BUILD_DIR)/yage-$(GIT_VERSION)-%-armv7
72+
GO_CROSSBUILD_MIPS_TARGET_PATTERN := $(GO_BUILD_DIR)/yage-$(GIT_VERSION)-%-mips
73+
GO_CROSSBUILD_MIPSLE_TARGET_PATTERN := $(GO_BUILD_DIR)/yage-$(GIT_VERSION)-%-mipsle
74+
GO_CROSSBUILD_MIPS64_TARGET_PATTERN := $(GO_BUILD_DIR)/yage-$(GIT_VERSION)-%-mips64
75+
GO_CROSSBUILD_MIPS64LE_TARGET_PATTERN := $(GO_BUILD_DIR)/yage-$(GIT_VERSION)-%-mips64le
76+
GO_CROSSBUILD_RISCV64_TARGET_PATTERN := $(GO_BUILD_DIR)/yage-$(GIT_VERSION)-%-riscv64
77+
GO_CROSSBUILD_S390X_TARGET_PATTERN := $(GO_BUILD_DIR)/yage-$(GIT_VERSION)-%-s390x
78+
GO_CROSSBUILD_WINDOWS_TARGET_PATTERN := $(GO_BUILD_DIR)/yage-$(GIT_VERSION)-windows-%.exe
7879

7980
GO_CROSSBUILD_TARGETS := $(patsubst %/386,$(GO_CROSSBUILD_386_TARGET_PATTERN),$(GO_CROSSBUILD_386_PLATFORMS))
8081
GO_CROSSBUILD_TARGETS += $(patsubst %/amd64,$(GO_CROSSBUILD_AMD64_TARGET_PATTERN),$(GO_CROSSBUILD_AMD64_PLATFORMS))
@@ -203,9 +204,9 @@ $(GO_CROSSBUILD_RISCV64_TARGET_PATTERN): $(GO_BUILD_SRC) $(GO_BUILD_FLAGS_TARGET
203204
$(GO_CROSSBUILD_S390X_TARGET_PATTERN): $(GO_BUILD_SRC) $(GO_BUILD_FLAGS_TARGET)
204205
CGO_ENABLED=0 GOOS=$* GOARCH=s390x $(GO) build -tags $(GO_BUILD_TAGS),crossbuild $(GO_BUILD_FLAGS) $(GO_BUILD_LDFLAGS) -o $@
205206

206-
crossbuild-checksums: dist/checksums
207+
crossbuild-checksums: $(GO_BUILD_DIR)/checksums
207208

208-
dist/checksums : $(GO_CROSSBUILD_TARGETS)
209+
$(GO_BUILD_DIR)/checksums : $(GO_CROSSBUILD_TARGETS)
209210
cd dist && shasum -a 256 yage-*-* > checksums
210211

211212
# -- go mod --------------------------------------------------------------------

0 commit comments

Comments
 (0)