Skip to content

Commit acbd90e

Browse files
committed
Build each architecture on native runner
1 parent 31d5a3c commit acbd90e

File tree

3 files changed

+142
-28
lines changed

3 files changed

+142
-28
lines changed

.gitlab/ci/container-boot.gitlab-ci.yml

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,15 @@
33
- .dind
44
- .default-retry
55
stage: container:boot
6-
image: ghcr.io/code0-tech/build-images/reticulum-builder:207.1-ruby-3.2.2
6+
image: ghcr.io/code0-tech/build-images/reticulum-builder:227.1-ruby-3.4.7-amd64
77
variables:
88
COMPOSE_FILE: support/docker-compose.yml
99

1010
.container:boot:sagittarius:
1111
extends:
1212
- .container:boot
1313
needs:
14-
- container:sagittarius
14+
- manifest:sagittarius
1515
parallel:
1616
matrix:
1717
- SAGITTARIUS_VARIANT:
@@ -47,8 +47,8 @@ container:boot:aquila:
4747
extends:
4848
- .container:boot
4949
needs:
50-
- container:aquila
51-
- container:sagittarius
50+
- manifest:aquila
51+
- manifest:sagittarius
5252
variables:
5353
SAGITTARIUS_VARIANT: ce
5454
script:
@@ -68,7 +68,7 @@ container:boot:taurus:
6868
extends:
6969
- .container:boot
7070
needs:
71-
- container:taurus
71+
- manifest:taurus
7272
script:
7373
- bundle install
7474
- docker compose up nats -d
@@ -81,7 +81,7 @@ container:boot:draco:
8181
extends:
8282
- .container:boot
8383
needs:
84-
- container:draco
84+
- manifest:draco
8585
parallel:
8686
matrix:
8787
- DRACO_VARIANT:

.gitlab/ci/container-build.gitlab-ci.yml

Lines changed: 121 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,14 @@
22
extends:
33
- .dind
44
- .default-retry
5-
image: ghcr.io/code0-tech/build-images/reticulum-builder:207.1-ruby-3.2.2
5+
tags:
6+
- c0-$PLATFORM
7+
image: ghcr.io/code0-tech/build-images/reticulum-builder:227.1-ruby-3.4.7-$PLATFORM
68
stage: container
7-
variables:
8-
PLATFORM_ARGS: "--platform linux/amd64,linux/arm64"
9-
script:
9+
before_script:
1010
- source support/helpers.sh
1111
- docker_login
12-
- docker_setup_multi_arch
12+
- docker_setup_builder
1313
- 'image=$(echo "$CI_JOB_NAME" | cut -d : -f 2)'
1414
- '[ -z "$NEED_PROJECT_DOWNLOAD" ] || download_project $image'
1515
retry:
@@ -19,77 +19,181 @@
1919
.single-image-build-base:
2020
extends:
2121
- .image-build-base
22+
parallel:
23+
matrix:
24+
- PLATFORM:
25+
- amd64
26+
- arm64
2227
script:
23-
- !reference [.image-build-base, script]
24-
- build_image $image $CI_PIPELINE_ID "--push"
28+
- >
29+
build_image
30+
$image
31+
$CI_PIPELINE_ID
32+
"--output type=registry,push-by-digest=true --metadata-file manifest-${CI_JOB_ID}.json"
33+
""
34+
artifacts:
35+
paths:
36+
- manifest-*.json
37+
expire_in: 1 day
2538

2639
.variant-image-build-base:
2740
extends:
2841
- .image-build-base
2942
script:
30-
- !reference [.image-build-base, script]
31-
- build_image $image $CI_PIPELINE_ID "--build-arg VARIANT=$VARIANT --push" $(get_image_tag $CI_PIPELINE_ID $VARIANT)
43+
- >
44+
build_image
45+
$image
46+
$CI_PIPELINE_ID
47+
"--build-arg VARIANT=$VARIANT -output type=registry,push-by-digest=true --metadata-file manifest-${CI_JOB_ID}.json"
48+
""
49+
artifacts:
50+
paths:
51+
- manifest-*.json
52+
expire_in: 1 day
53+
54+
.manifest-create-base:
55+
extends:
56+
- .image-build-base
57+
variables:
58+
PLATFORM: amd64
59+
script:
60+
- create_manifest $image $(get_image_tag $CI_PIPELINE_ID $VARIANT)
3261

3362
container:mise:
3463
extends:
3564
- .single-image-build-base
3665

66+
manifest:mise:
67+
extends:
68+
- .manifest-create-base
69+
needs:
70+
- container:mise
71+
3772
container:rust:
3873
extends:
3974
- .single-image-build-base
4075
needs:
41-
- container:mise
76+
- manifest:mise
77+
78+
manifest:rust:
79+
extends:
80+
- .manifest-create-base
81+
needs:
82+
- container:rust
4283

4384
container:aquila:
4485
extends:
4586
- .single-image-build-base
4687
needs:
47-
- container:rust
88+
- manifest:rust
4889
variables:
4990
NEED_PROJECT_DOWNLOAD: 'true'
5091

92+
manifest:aquila:
93+
extends:
94+
- .manifest-create-base
95+
needs:
96+
- container:aquila
97+
5198
container:draco:
5299
extends:
53100
- .variant-image-build-base
54101
needs:
55-
- container:rust
102+
- manifest:rust
56103
variables:
57104
NEED_PROJECT_DOWNLOAD: 'true'
58105
parallel:
59106
matrix:
60107
- VARIANT:
61108
- rest
109+
PLATFORM:
110+
- amd64
111+
- arm64
112+
113+
manifest:draco:
114+
extends:
115+
- .manifest-create-base
116+
parallel:
117+
matrix:
118+
- VARIANT:
119+
- rest
120+
needs:
121+
- job: container:draco
122+
parallel:
123+
matrix:
124+
- VARIANT: ['$[[ matrix.VARIANT ]]']
125+
PLATFORM:
126+
- amd64
127+
- arm64
62128

63129
container:taurus:
64130
extends:
65131
- .single-image-build-base
66132
needs:
67-
- container:rust
133+
- manifest:rust
68134
variables:
69135
NEED_PROJECT_DOWNLOAD: 'true'
70136

137+
manifest:taurus:
138+
extends:
139+
- .manifest-create-base
140+
needs:
141+
- container:taurus
142+
71143
container:ruby:
72144
extends:
73145
- .single-image-build-base
74146
needs:
75-
- container:mise
147+
- manifest:mise
148+
149+
manifest:ruby:
150+
extends:
151+
- .manifest-create-base
152+
needs:
153+
- container:ruby
76154

77155
container:postgresql:
78156
extends:
79157
- .single-image-build-base
80158
needs:
81-
- container:mise
159+
- manifest:mise
160+
161+
manifest:postgresql:
162+
extends:
163+
- .manifest-create-base
164+
needs:
165+
- container:postgresql
82166

83167
container:sagittarius:
84168
extends:
85169
- .variant-image-build-base
86170
needs:
87-
- container:ruby
88-
- container:postgresql
171+
- manifest:ruby
172+
- manifest:postgresql
89173
variables:
90174
NEED_PROJECT_DOWNLOAD: 'true'
91175
parallel:
92176
matrix:
93177
- VARIANT:
94178
- ce
95179
- ee
180+
PLATFORM:
181+
- amd64
182+
- arm64
183+
184+
manifest:sagittarius:
185+
extends:
186+
- .manifest-create-base
187+
parallel:
188+
matrix:
189+
- VARIANT:
190+
- ce
191+
- ee
192+
needs:
193+
- job: container:sagittarius
194+
parallel:
195+
matrix:
196+
- VARIANT: [ '$[[ matrix.VARIANT ]]' ]
197+
PLATFORM:
198+
- amd64
199+
- arm64

support/helpers.sh

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,22 +13,21 @@ function docker_login() {
1313
echo $C0_GH_TOKEN | docker login -u $ --password-stdin ghcr.io
1414
}
1515

16-
function docker_setup_multi_arch() {
16+
function docker_setup_builder() {
1717
docker context create build-context
1818
docker buildx create \
1919
--name container-builder \
2020
--driver docker-container \
2121
--bootstrap \
2222
--use \
2323
build-context
24-
docker run --privileged --rm tonistiigi/binfmt --install all
2524
}
2625

2726
function build_image() {
2827
image=$1
2928
reticulum_tag=$2
3029
build_args=$3
31-
reticulum_push_tag=${4:-$reticulum_tag}
30+
reticulum_push_tag=${4-":$reticulum_tag"}
3231

3332
echo "Building image for $image"
3433

@@ -38,14 +37,25 @@ function build_image() {
3837
fi
3938

4039
docker buildx build \
41-
-t "ghcr.io/code0-tech/reticulum/ci-builds/$image:$reticulum_push_tag" \
40+
-t "ghcr.io/code0-tech/reticulum/ci-builds/$image$reticulum_push_tag" \
4241
-f "container/$image/Dockerfile" \
4342
--build-arg RETICULUM_IMAGE_TAG=$reticulum_tag \
4443
$build_args \
45-
$PLATFORM_ARGS \
4644
.
4745
}
4846

47+
function create_manifest() {
48+
image=$1
49+
reticulum_tag=$2
50+
51+
args=(-t "ghcr.io/code0-tech/reticulum/ci-builds/$image:$reticulum_tag")
52+
for manifest in manifest-*.json; do
53+
args+=("$(jq -r '."image.name"' $manifest)@$(jq -r '."containerimage.digest"' $manifest)")
54+
done
55+
56+
docker buildx imagetools create "${args[@]}"
57+
}
58+
4959
function get_image_tag() {
5060
reticulum_tag=$1
5161
reticulum_variant=$2

0 commit comments

Comments
 (0)