Skip to content

Commit 4b0e2f1

Browse files
committed
Convert docker build to docker bake
1 parent a0c3977 commit 4b0e2f1

3 files changed

Lines changed: 110 additions & 12 deletions

File tree

Makefile

Lines changed: 37 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
1+
VERSION=$(shell cat shared/version.txt)
2+
LOCAL_OS=$(shell go env GOOS)-$(shell go env GOARCH)
3+
14
BUILD_DIR=build
2-
CLI_DIR=${BUILD_DIR}/cli
3-
DAEMON_DIR=${BUILD_DIR}/daemon
5+
CLI_DIR=${BUILD_DIR}/${VERSION}/cli
6+
DAEMON_DIR=${BUILD_DIR}/${VERSION}/daemon
47

58
CLI_TARGET_OOS:=linux darwin
69
ARCHS:=arm64 amd64
@@ -19,15 +22,29 @@ ${CLI_DIR}/rocketpool-cli-$1-$2: ${CLI_DIR}
1922
endef
2023

2124
.PHONY: all
22-
all: lint rocketpool-cli rocketpool-daemon
25+
all: ${BUILD_DIR}/rocketpool-cli ${BUILD_DIR}/rocketpool-daemon lint
26+
27+
.PHONY: release
28+
release: clean docker ${CLI_TARGET_STRINGS} ${DAEMON_TARGET_STRINGS}
29+
30+
# Target for build/rocketpool-cli which is a symlink to an os-specific build
31+
${BUILD_DIR}/rocketpool-cli: ${CLI_DIR}/rocketpool-cli-${LOCAL_OS}
32+
ln -sf $(shell pwd)/${CLI_DIR}/rocketpool-cli-${LOCAL_OS} ${BUILD_DIR}/rocketpool-cli
33+
2334

24-
.PHONY: rocketpool-cli
25-
rocketpool-cli: $(CLI_TARGET_STRINGS)
35+
# Target for build/rocketpool-daemon which is a symlink to an os-specific build
36+
${BUILD_DIR}/rocketpool-daemon: ${DAEMON_DIR}/rocketpool-daemon-${LOCAL_OS}
37+
ln -sf $(shell pwd)/${DAEMON_DIR}/rocketpool-daemon-${LOCAL_OS} ${BUILD_DIR}/rocketpool-daemon
2638

27-
.PHONY: rocketpool-daemon
28-
rocketpool-daemon: ${DAEMON_DIR}
29-
docker build -t rocketpool/smartnode-builder:latest -f docker/smartnode-builder .
30-
docker run --env OWNER=$(shell id -u):$(shell id -g) --rm -v $(PWD):/src -v $(PWD)/${DAEMON_DIR}:/out -v /tmp/docker-go-build:/root/.cache/go-build rocketpool/smartnode-builder:latest /src/rocketpool/build.sh
39+
# amd64 daemon build
40+
.PHONY: ${DAEMON_DIR}/rocketpool-daemon-linux-amd64
41+
${DAEMON_DIR}/rocketpool-daemon-linux-amd64: ${DAEMON_DIR}
42+
CGO_ENABLED=1 CGO_C_FLAGS="-O -D__BLST_PORTABLE__" GOARCH=amd64 GOOS=linux go build -o $@ rocketpool/rocketpool.go
43+
44+
# arm64 daemon build
45+
.PHONY: ${DAEMON_DIR}/rocketpool-daemon-linux-arm64
46+
${DAEMON_DIR}/rocketpool-daemon-linux-arm64: ${DAEMON_DIR}
47+
CGO_ENABLED=1 CC=aarch64-linux-gnu-gcc CXX=aarch64-linux-gnu-cpp CGO_C_FLAGS="-O -D__BLST_PORTABLE__" GOARCH=arm64 GOOS=linux go build -o $@ rocketpool/rocketpool.go
3148

3249
${CLI_DIR}:
3350
mkdir -p ${CLI_DIR}
@@ -36,14 +53,24 @@ ${DAEMON_DIR}:
3653

3754
$(foreach oos,$(CLI_TARGET_OOS),$(foreach arch,$(ARCHS),$(eval $(call rocketpool-cli-template,$(oos),$(arch)))))
3855

56+
57+
# Docker containers
58+
.PHONY: docker
59+
docker:
60+
rm -f ~/.docker/manifests/docker.io_rocketpool_smartnode-latest
61+
rm -f ~/.docker/manifests/docker.io_rocketpool_smartnode-${VERSION}
62+
VERSION=${VERSION} docker bake -f docker/daemon-bake.hcl daemon
63+
docker manifest create rocketpool/smartnode:${VERSION} --amend rocketpool/smartnode:${VERSION}-amd64 --amend rocketpool/smartnode:${VERSION}-arm64
64+
docker manifest create rocketpool/smartnode:latest --amend rocketpool/smartnode:${VERSION}-amd64 --amend rocketpool/smartnode:${VERSION}-arm64
65+
3966
.PHONY: clean
4067
clean:
4168
rm -rf ${BUILD_DIR}
4269

4370
.PHONY: lint
4471
lint:
4572
@echo $(MODULE_GLOBS)
46-
golangci-lint run --disable-all --enable goimports $(MODULE_GLOBS)
73+
docker run --rm -v .:/go/smartnode --workdir /go/smartnode golangci/golangci-lint:v2.1-alpine golangci-lint fmt --enable goimports $(MODULE_GLOBS)
4774

4875
.PHONY: test
4976
test:

docker/daemon-bake.hcl

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
variable "VERSION" {
2+
default = "$VERSION"
3+
}
4+
5+
group "default" {
6+
targets = ["builder", "daemon"]
7+
}
8+
9+
target "builder" {
10+
dockerfile = "docker/rocketpool-dockerfile"
11+
tags = [
12+
"rocketpool/smartnode-builder:${VERSION}",
13+
"rocketpool/smartnode-builder:local"
14+
]
15+
target = "smartnode_dependencies"
16+
platforms = [ "linux/amd64" ]
17+
}
18+
19+
target "daemon" {
20+
name = "daemon-${arch}"
21+
dockerfile = "docker/rocketpool-dockerfile"
22+
args = {
23+
VERSION = "${VERSION}"
24+
}
25+
tags = [
26+
"rocketpool/smartnode:${VERSION}-${arch}",
27+
"localhost/rocketpool/smartnode:${VERSION}-${arch}"
28+
]
29+
matrix = {
30+
arch = [ "amd64", "arm64" ]
31+
}
32+
target = "daemon"
33+
platform = "linux/${arch}"
34+
}

docker/rocketpool-dockerfile

Lines changed: 39 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,44 @@
1-
FROM debian:bookworm-slim
1+
FROM golang:1.21.8-bookworm AS smartnode_dependencies
22

3+
# Install build tools
4+
RUN dpkg --add-architecture arm64
5+
RUN apt update && apt install -y \
6+
build-essential \
7+
gcc-aarch64-linux-gnu \
8+
libc6-dev-arm64-cross\
9+
g++-aarch64-linux-gnu \
10+
wget
11+
12+
# Cache go dependencies
13+
COPY ./go.work /src/go.work
14+
COPY ./go.work.sum /src/go.work.sum
15+
COPY ./addons/go.mod /src/addons/go.mod
16+
COPY ./rocketpool/go.mod /src/rocketpool/go.mod
17+
COPY ./rocketpool-cli/go.mod /src/rocketpool-cli/go.mod
18+
COPY ./shared/go.mod /src/shared/go.mod
19+
WORKDIR /src
20+
RUN go mod download -x
21+
WORKDIR /
22+
RUN rm -rf /src
23+
24+
FROM smartnode_dependencies AS build
325
ARG TARGETARCH
4-
COPY ./build/daemon/rocketpool-daemon-linux-${TARGETARCH} /go/bin/rocketpool
26+
ARG VERSION
27+
COPY ./go.work /src/go.work
28+
COPY ./go.work.sum /src/go.work.sum
29+
COPY ./addons/ /src/addons/
30+
COPY ./rocketpool/ /src/rocketpool/
31+
COPY ./rocketpool-cli/ /src/rocketpool-cli/
32+
COPY ./shared/ /src/shared/
33+
COPY Makefile /src/Makefile
34+
WORKDIR /src
35+
RUN make build/${VERSION}/daemon/rocketpool-daemon-linux-${TARGETARCH}
36+
37+
FROM debian:bookworm-slim AS daemon
38+
ARG TARGETARCH
39+
ARG VERSION
40+
41+
COPY --from=build /src/build/${VERSION}/daemon/rocketpool-daemon-linux-${TARGETARCH} /go/bin/rocketpool
542

643
RUN apt update && apt install ca-certificates -y
744

0 commit comments

Comments
 (0)