Skip to content

Commit b01837a

Browse files
committed
[Test] Build different arch image parallelly
1 parent e4f9904 commit b01837a

File tree

2 files changed

+89
-15
lines changed

2 files changed

+89
-15
lines changed

.github/workflows/ci.yaml

Lines changed: 58 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -223,15 +223,15 @@ jobs:
223223
safe_image_name=$(echo -n "$image" | tr '/:' '_')
224224
docker save "$image" -o ~/.cache/images/"$safe_image_name".tar
225225
done
226-
authgear-image:
226+
authgear-image-amd64:
227227
if: ${{ github.repository != 'oursky/authgear-server' }}
228228
runs-on: ubuntu-24.04
229229
needs: ["authgear-test", "authui-test"]
230230
env:
231231
TARGET: authgear
232232
IMAGE_NAME: quay.io/theauthgear/authgear-server
233233
PUSH_IMAGE: "${{ (github.repository == 'authgear/authgear-server' && github.event_name == 'push') && 'true' || 'false' }}"
234-
BUILD_PLATFORMS: "${{ (github.repository == 'authgear/authgear-server' && github.event_name == 'push') && 'linux/amd64,linux/arm64' || 'linux/amd64' }}"
234+
BUILD_ARCH: amd64
235235
steps:
236236
- uses: actions/checkout@v4
237237
- name: Install qemu for multi arch build
@@ -249,7 +249,62 @@ jobs:
249249
DOCKER_PASSWORD: ${{ secrets.QUAY_ROBOT_TOKEN }}
250250
run: |
251251
printf "$DOCKER_PASSWORD" | docker login --password-stdin --username "$DOCKER_USERNAME" quay.io
252-
- run: make build-image BUILD_PLATFORMS=$BUILD_PLATFORMS PUSH_IMAGE=$PUSH_IMAGE TAG_IMAGE=true TARGET=$TARGET IMAGE_NAME=$IMAGE_NAME
252+
- run: make build-image BUILD_ARCH=$BUILD_ARCH PUSH_IMAGE=$PUSH_IMAGE TARGET=$TARGET IMAGE_NAME=$IMAGE_NAME
253+
- name: docker logout
254+
if: ${{ always() }}
255+
run: |
256+
docker logout quay.io
257+
authgear-image-arm64:
258+
if: ${{ github.repository != 'oursky/authgear-server' }}
259+
runs-on: ubuntu-24.04
260+
needs: ["authgear-test", "authui-test"]
261+
env:
262+
TARGET: authgear
263+
IMAGE_NAME: quay.io/theauthgear/authgear-server
264+
PUSH_IMAGE: "${{ (github.repository == 'authgear/authgear-server' && github.event_name == 'push') && 'true' || 'false' }}"
265+
BUILD_ARCH: arm64
266+
steps:
267+
- uses: actions/checkout@v4
268+
- name: Install qemu for multi arch build
269+
run: docker run --privileged --rm tonistiigi/binfmt --install all
270+
- name: Setup container builder
271+
run: |
272+
docker buildx create \
273+
--name container-builder \
274+
--driver docker-container \
275+
--bootstrap --use
276+
- name: docker login
277+
if: ${{ github.repository == 'authgear/authgear-server' && github.event_name == 'push' }}
278+
env:
279+
DOCKER_USERNAME: ${{ secrets.QUAY_USERNAME }}
280+
DOCKER_PASSWORD: ${{ secrets.QUAY_ROBOT_TOKEN }}
281+
run: |
282+
printf "$DOCKER_PASSWORD" | docker login --password-stdin --username "$DOCKER_USERNAME" quay.io
283+
- run: make build-image BUILD_ARCH=$BUILD_ARCH PUSH_IMAGE=$PUSH_IMAGE TARGET=$TARGET IMAGE_NAME=$IMAGE_NAME
284+
- name: docker logout
285+
if: ${{ always() }}
286+
run: |
287+
docker logout quay.io
288+
289+
authgear-image:
290+
if: ${{ github.repository != 'oursky/authgear-server' }}
291+
runs-on: ubuntu-24.04
292+
needs: ["authgear-image-amd64", "authgear-image-arm64"]
293+
env:
294+
TARGET: authgear
295+
IMAGE_NAME: quay.io/theauthgear/authgear-server
296+
PUSH_IMAGE: "${{ (github.repository == 'authgear/authgear-server' && github.event_name == 'push') && 'true' || 'false' }}"
297+
SOURCE_ARCHS: arm64,amd64
298+
steps:
299+
- uses: actions/checkout@v4
300+
- name: docker login
301+
if: ${{ github.repository == 'authgear/authgear-server' && github.event_name == 'push' }}
302+
env:
303+
DOCKER_USERNAME: ${{ secrets.QUAY_USERNAME }}
304+
DOCKER_PASSWORD: ${{ secrets.QUAY_ROBOT_TOKEN }}
305+
run: |
306+
printf "$DOCKER_PASSWORD" | docker login --password-stdin --username "$DOCKER_USERNAME" quay.io
307+
- run: make tag-image SOURCE_ARCHS=$SOURCE_ARCHS IMAGE_NAME=$IMAGE_NAME
253308
- name: docker logout
254309
if: ${{ always() }}
255310
run: |

common.mk

Lines changed: 31 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -47,27 +47,46 @@ start-portal:
4747
build:
4848
go build -o $(BIN_NAME) -tags "$(GO_BUILD_TAGS)" -ldflags ${LDFLAGS} ./cmd/$(TARGET)
4949

50+
51+
5052
.PHONY: build-image
5153
build-image:
52-
$(eval BUILD_OPTS ::= --tag $(IMAGE_NAME))
53-
ifeq (${TAG_IMAGE},true) # if TAG_IMAGE
54-
$(eval BUILD_OPTS += --tag $(IMAGE_NAME):latest)
55-
ifneq (${GIT_HASH},)
56-
$(eval BUILD_OPTS += --tag $(IMAGE_NAME):$(GIT_HASH))
54+
$(eval IMAGE_TAG ::= $(IMAGE_NAME):$(GIT_HASH))
55+
$(eval BUILD_OPTS ::= --tag $(IMAGE_TAG) )
56+
ifeq ($(BUILD_ARCH),amd64)
57+
$(eval BUILD_OPTS += --platform linux/$(BUILD_ARCH) )
58+
$(eval IMAGE_TAG += $(IMAGE_NAME):$(GIT_HASH)-$(BUILD_ARCH) )
59+
else ifeq ($(BUILD_ARCH),arm64)
60+
$(eval BUILD_OPTS += --platform linux/$(BUILD_ARCH) )
61+
$(eval IMAGE_TAG += $(IMAGE_NAME):$(GIT_HASH)-$(BUILD_ARCH) )
62+
else
5763
endif
58-
ifneq (${GIT_NAME},)
59-
$(eval BUILD_OPTS += --tag $(IMAGE_NAME):$(GIT_NAME))
60-
endif
61-
endif # endif TAG_IMAGE
6264
ifeq ($(PUSH_IMAGE),true)
6365
$(eval BUILD_OPTS += --push)
6466
endif
65-
ifneq ($(BUILD_PLATFORMS),)
66-
$(eval BUILD_OPTS += --platform $(BUILD_PLATFORMS))
67+
ifeq ($(EXTRA_BUILD_OPTS),true)
68+
$(eval BUILD_OPTS += $(EXTRA_BUILD_OPTS))
6769
endif
6870
@# Add --pull so that we are using the latest base image.
6971
@# The build context is the parent directory
70-
docker build --pull --ssh=default \
72+
docker build --pull \
7173
--file ./cmd/$(TARGET)/Dockerfile \
7274
$(BUILD_OPTS) \
7375
--build-arg GIT_HASH=$(GIT_HASH) ${BUILD_CTX}
76+
77+
.PHONY: tag-image
78+
tag-image:
79+
$(eval IMAGE_SOURCES ::= )
80+
$(eval TAGS ::= --tag $(IMAGE_NAME):$(GIT_HASH))
81+
ifneq (${GIT_NAME},)
82+
$(eval TAGS += --tag $(IMAGE_NAME):$(GIT_NAME))
83+
endif
84+
ifneq ($(findstring amd64,$(SOURCE_ARCHS)),)
85+
$(eval IMAGE_SOURCES += $(IMAGE_NAME):$(GIT_HASH)-amd64 )
86+
endif
87+
ifneq ($(findstring arm64,$(SOURCE_ARCHS)),)
88+
$(eval IMAGE_SOURCES += $(IMAGE_NAME):$(GIT_HASH)-arm64 )
89+
endif
90+
docker buildx imagetools create \
91+
--tag $(IMAGE_TAG) \
92+
$(IMAGE_SOURCES)

0 commit comments

Comments
 (0)