Skip to content

Commit e5221c1

Browse files
committed
Enable multi-arch Docker build
Signed-off-by: Marco Franssen <[email protected]>
1 parent 5293e9d commit e5221c1

File tree

2 files changed

+35
-17
lines changed

2 files changed

+35
-17
lines changed

.github/workflows/images.yaml

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,9 @@ jobs:
2525
strategy:
2626
matrix:
2727
include:
28+
- name: cilium-cli
29+
dockerfile: ./Dockerfile
30+
platforms: linux/amd64,linux/arm64
2831
- name: cilium-cli-ci
2932
dockerfile: ./Dockerfile
3033
platforms: linux/amd64
@@ -57,10 +60,10 @@ jobs:
5760
ref: ${{ steps.tag.outputs.tag }}
5861

5962
# main branch or tag pushes
60-
- name: CI Build ${{ matrix.name }}
63+
- name: Build ${{ matrix.name }}
6164
if: ${{ github.event_name != 'pull_request_target' }}
6265
uses: docker/build-push-action@48aba3b46d1b1fec4febb7c5d0c644b249a11355 # v6.10.0
63-
id: docker_build_ci_main
66+
id: docker_build_main
6467
with:
6568
context: .
6669
file: ${{ matrix.dockerfile }}
@@ -71,19 +74,19 @@ jobs:
7174
quay.io/${{ github.repository_owner }}/${{ matrix.name }}:latest
7275
quay.io/${{ github.repository_owner }}/${{ matrix.name }}:${{ steps.tag.outputs.tag }}
7376
74-
- name: CI Image Releases digests
77+
- name: Image Releases digests
7578
if: ${{ github.event_name != 'pull_request_target' }}
7679
shell: bash
7780
run: |
7881
mkdir -p image-digest/
79-
echo "quay.io/${{ github.repository_owner }}/${{ matrix.name }}:latest@${{ steps.docker_build_ci_main.outputs.digest }}" > image-digest/${{ matrix.name }}.txt
80-
echo "quay.io/${{ github.repository_owner }}/${{ matrix.name }}:${{ steps.tag.outputs.tag }}@${{ steps.docker_build_ci_main.outputs.digest }}" >> image-digest/${{ matrix.name }}.txt
82+
echo "quay.io/${{ github.repository_owner }}/${{ matrix.name }}:latest@${{ steps.docker_build_main.outputs.digest }}" > image-digest/${{ matrix.name }}.txt
83+
echo "quay.io/${{ github.repository_owner }}/${{ matrix.name }}:${{ steps.tag.outputs.tag }}@${{ steps.docker_build_main.outputs.digest }}" >> image-digest/${{ matrix.name }}.txt
8184
8285
# PR updates
83-
- name: CI Build ${{ matrix.name }}
86+
- name: Build ${{ matrix.name }}
8487
if: ${{ github.event_name == 'pull_request_target' }}
8588
uses: docker/build-push-action@48aba3b46d1b1fec4febb7c5d0c644b249a11355 # v6.10.0
86-
id: docker_build_ci_pr
89+
id: docker_build_pr
8790
with:
8891
context: .
8992
file: ${{ matrix.dockerfile }}
@@ -93,12 +96,12 @@ jobs:
9396
tags: |
9497
quay.io/${{ github.repository_owner }}/${{ matrix.name }}:${{ steps.tag.outputs.tag }}
9598
96-
- name: CI Image Releases digests
99+
- name: Image Releases digests
97100
if: ${{ github.event_name == 'pull_request_target' }}
98101
shell: bash
99102
run: |
100103
mkdir -p image-digest/
101-
echo "quay.io/${{ github.repository_owner }}/${{ matrix.name }}:${{ steps.tag.outputs.tag }}@${{ steps.docker_build_ci_pr.outputs.digest }}" > image-digest/${{ matrix.name }}.txt
104+
echo "quay.io/${{ github.repository_owner }}/${{ matrix.name }}:${{ steps.tag.outputs.tag }}@${{ steps.docker_build_pr.outputs.digest }}" > image-digest/${{ matrix.name }}.txt
102105
103106
# Upload artifact digests
104107
- name: Upload artifact digests

Dockerfile

Lines changed: 23 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,26 +3,41 @@
33
# Copyright Authors of Cilium
44
# SPDX-License-Identifier: Apache-2.0
55

6-
FROM docker.io/library/golang:1.23.3-alpine3.19@sha256:f72297ec1cf35152ecfe7a4d692825fc608fea8f3d3fa8f986fda70184082823 AS builder
6+
FROM --platform=${BUILDPLATFORM} docker.io/library/golang:1.23.3-alpine3.19@sha256:f72297ec1cf35152ecfe7a4d692825fc608fea8f3d3fa8f986fda70184082823 AS base
7+
RUN apk add --no-cache --update ca-certificates git make
78
WORKDIR /go/src/github.com/cilium/cilium-cli
8-
RUN apk add --no-cache curl git make ca-certificates
9+
COPY go.* .
10+
RUN --mount=type=cache,target=/go/pkg/mod go mod download
911
COPY . .
10-
RUN make
12+
13+
# xx is a helper for cross-compilation
14+
FROM --platform=$BUILDPLATFORM tonistiigi/xx:1.5.0@sha256:0c6a569797744e45955f39d4f7538ac344bfb7ebf0a54006a0a4297b153ccf0f AS xx
15+
16+
FROM --platform=${BUILDPLATFORM} base AS builder
17+
ARG TARGETPLATFORM
18+
ARG TARGETARCH
19+
COPY --link --from=xx / /
20+
RUN --mount=type=cache,target=/root/.cache/go-build \
21+
--mount=type=cache,target=/go/pkg/mod \
22+
xx-go --wrap && \
23+
make && \
24+
xx-verify --static /go/src/github.com/cilium/cilium-cli/cilium
1125

1226
# cilium-cli is from scratch only including cilium binaries
13-
FROM scratch AS cilium-cli
14-
ENTRYPOINT ["cilium"]
27+
FROM --platform=${BUILDPLATFORM} scratch AS cilium-cli
28+
ENTRYPOINT [""]
29+
USER 1000:1000
1530
LABEL maintainer="[email protected]"
1631
WORKDIR /root/app
17-
COPY --from=builder --chown=root:root --chmod=755 /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/
18-
COPY --from=builder /go/src/github.com/cilium/cilium-cli/cilium /usr/local/bin/cilium
32+
COPY --link --from=builder --chown=root:root --chmod=755 /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/
33+
COPY --link --from=builder --chown=1000:1000 --chmod=755 /go/src/github.com/cilium/cilium-cli/cilium /usr/local/bin/cilium
1934

2035
# cilium-cli-ci is based on ubuntu with cloud CLIs
2136
FROM ubuntu:24.04@sha256:278628f08d4979fb9af9ead44277dbc9c92c2465922310916ad0c46ec9999295 AS cilium-cli-ci
2237
ENTRYPOINT []
2338
LABEL maintainer="[email protected]"
2439
WORKDIR /root/app
25-
COPY --from=builder /go/src/github.com/cilium/cilium-cli/cilium /usr/local/bin/cilium
40+
COPY --link --from=builder /go/src/github.com/cilium/cilium-cli/cilium /usr/local/bin/cilium
2641

2742
# Install cloud CLIs. Based on these instructions:
2843
# - https://cloud.google.com/sdk/docs/install#deb

0 commit comments

Comments
 (0)