Skip to content

Commit 54dfc3c

Browse files
committed
Support multi-arch builds
1 parent bdbe093 commit 54dfc3c

File tree

3 files changed

+85
-9
lines changed

3 files changed

+85
-9
lines changed

.github/workflows/release.yaml

Lines changed: 45 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,12 @@ jobs:
2020
- name: Check out code
2121
uses: actions/checkout@v4
2222

23+
- name: Set up QEMU
24+
uses: docker/setup-qemu-action@v3
25+
26+
- name: Set up Docker Buildx
27+
uses: docker/setup-buildx-action@v3
28+
2329
- name: Cache
2430
uses: actions/cache@v4
2531
with:
@@ -28,9 +34,6 @@ jobs:
2834
restore-keys: |
2935
${{ runner.os }}-go-
3036
31-
- name: Build container images
32-
run: make container
33-
3437
- name: Log into registry
3538
uses: docker/login-action@v3
3639
with:
@@ -41,22 +44,57 @@ jobs:
4144
- name: Push main
4245
if: github.ref == 'refs/heads/main'
4346
run: |
47+
REV=$(git describe --long --tags --match='v*' --dirty 2>/dev/null || git rev-list -n1 HEAD)
48+
GIT_COMMIT=$(git rev-parse HEAD)
49+
BUILD_DATE=$(date -u -Iseconds)
50+
PKG=github.com/cloudstack/cloudstack-csi-driver
51+
LDFLAGS="-s -w -X ${PKG}/pkg/driver.driverVersion=${REV} -X ${PKG}/pkg/driver.gitCommit=${GIT_COMMIT} -X ${PKG}/pkg/driver.buildDate=${BUILD_DATE}"
52+
4453
for img in $IMAGES; do
45-
docker tag ${img} ${REGISTRY_NAME}/${img}:main
46-
docker push ${REGISTRY_NAME}/${img}:main
54+
docker buildx build \
55+
--platform linux/amd64,linux/arm64 \
56+
--file ./cmd/${img}/Dockerfile \
57+
--build-arg LDFLAGS="${LDFLAGS}" \
58+
--tag ${REGISTRY_NAME}/${img}:main \
59+
--label org.opencontainers.image.revision=${GIT_COMMIT} \
60+
--push \
61+
.
4762
done
4863
4964
- name: Push tagged release
5065
if: startsWith(github.ref, 'refs/tags/v')
5166
run: |
5267
# Strip prefix from version
5368
VERSION=$(echo "${{ github.ref }}" | sed -e 's,.*/\(.*\),\1,' | sed -e 's/^v//')
69+
REV=$(git describe --long --tags --match='v*' --dirty 2>/dev/null || git rev-list -n1 HEAD)
70+
GIT_COMMIT=$(git rev-parse HEAD)
71+
BUILD_DATE=$(date -u -Iseconds)
72+
PKG=github.com/cloudstack/cloudstack-csi-driver
73+
LDFLAGS="-s -w -X ${PKG}/pkg/driver.driverVersion=${REV} -X ${PKG}/pkg/driver.gitCommit=${GIT_COMMIT} -X ${PKG}/pkg/driver.buildDate=${BUILD_DATE}"
5474
5575
for img in $IMAGES; do
56-
docker tag ${img} ${REGISTRY_NAME}/${img}:${VERSION}
57-
docker push ${REGISTRY_NAME}/${img}:${VERSION}
76+
docker buildx build \
77+
--platform linux/amd64,linux/arm64 \
78+
--file ./cmd/${img}/Dockerfile \
79+
--build-arg LDFLAGS="${LDFLAGS}" \
80+
--tag ${REGISTRY_NAME}/${img}:${VERSION} \
81+
--label org.opencontainers.image.revision=${GIT_COMMIT} \
82+
--push \
83+
.
5884
done
5985
86+
- name: Build syncer binary for upload
87+
if: startsWith(github.ref, 'refs/tags/v')
88+
run: |
89+
REV=$(git describe --long --tags --match='v*' --dirty 2>/dev/null || git rev-list -n1 HEAD)
90+
GIT_COMMIT=$(git rev-parse HEAD)
91+
BUILD_DATE=$(date -u -Iseconds)
92+
PKG=github.com/cloudstack/cloudstack-csi-driver
93+
LDFLAGS="-s -w -X ${PKG}/pkg/driver.driverVersion=${REV} -X ${PKG}/pkg/driver.gitCommit=${GIT_COMMIT} -X ${PKG}/pkg/driver.buildDate=${BUILD_DATE}"
94+
95+
mkdir -p bin
96+
CGO_ENABLED=0 go build -ldflags "${LDFLAGS}" -o ./bin/cloudstack-csi-sc-syncer ./cmd/cloudstack-csi-sc-syncer
97+
6098
- name: Upload cloudstack-csi-sc-syncer artifact
6199
if: startsWith(github.ref, 'refs/tags/v')
62100
uses: actions/upload-artifact@v4

cmd/cloudstack-csi-driver/Dockerfile

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,22 @@
1+
FROM --platform=$BUILDPLATFORM golang:1.23-alpine AS builder
2+
3+
ARG TARGETOS
4+
ARG TARGETARCH
5+
ARG LDFLAGS
6+
7+
WORKDIR /workspace
8+
9+
# Copy go mod files
10+
COPY go.mod go.sum ./
11+
RUN go mod download
12+
13+
# Copy source code
14+
COPY . .
15+
16+
# Build
17+
RUN CGO_ENABLED=0 GOOS=${TARGETOS} GOARCH=${TARGETARCH} \
18+
go build -ldflags "${LDFLAGS}" -o cloudstack-csi-driver ./cmd/cloudstack-csi-driver
19+
120
FROM alpine:3.18
221

322
LABEL \
@@ -18,5 +37,5 @@ RUN apk add --no-cache \
1837
# Provides udevadm for device path detection \
1938
udev
2039

21-
COPY ./bin/cloudstack-csi-driver /cloudstack-csi-driver
40+
COPY --from=builder /workspace/cloudstack-csi-driver /cloudstack-csi-driver
2241
ENTRYPOINT ["/cloudstack-csi-driver"]
Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,22 @@
1+
FROM --platform=$BUILDPLATFORM golang:1.23-alpine AS builder
2+
3+
ARG TARGETOS
4+
ARG TARGETARCH
5+
ARG LDFLAGS
6+
7+
WORKDIR /workspace
8+
9+
# Copy go mod files
10+
COPY go.mod go.sum ./
11+
RUN go mod download
12+
13+
# Copy source code
14+
COPY . .
15+
16+
# Build
17+
RUN CGO_ENABLED=0 GOOS=${TARGETOS} GOARCH=${TARGETARCH} \
18+
go build -ldflags "${LDFLAGS}" -o cloudstack-csi-sc-syncer ./cmd/cloudstack-csi-sc-syncer
19+
120
FROM alpine:3.18
221

322
LABEL \
@@ -6,5 +25,5 @@ LABEL \
625

726
RUN apk add --no-cache ca-certificates
827

9-
COPY ./bin/cloudstack-csi-sc-syncer /cloudstack-csi-sc-syncer
28+
COPY --from=builder /workspace/cloudstack-csi-sc-syncer /cloudstack-csi-sc-syncer
1029
ENTRYPOINT ["/cloudstack-csi-sc-syncer"]

0 commit comments

Comments
 (0)