1
+ # Runner tags:
2
+ # - podman: use 'podman' to build multiplatform images
3
+
1
4
stages :
2
5
- schedule
3
6
- labels
@@ -40,7 +43,7 @@ check_labels:
40
43
.env :
41
44
image : paritytech/ci-linux:1.68.2-buster
42
45
tags :
43
- - dind
46
+ - podman
44
47
45
48
fmt_and_clippy :
46
49
extends : .env
@@ -58,232 +61,155 @@ fmt_and_clippy:
58
61
- cargo clippy -- -V
59
62
- cargo clippy --all --tests -- -D warnings
60
63
61
- build_debug :
62
- extends : .env
63
- rules :
64
- - if : $CI_COMMIT_TAG
65
- when : never
66
- - if : ' $CI_PIPELINE_SOURCE == "merge_request_event" || $CI_COMMIT_BRANCH == "master"'
67
- changes :
68
- - Cargo.lock
69
- - when : never
64
+ .docker_build :
70
65
stage : build
71
66
script :
72
- - cargo clean -p duniter
73
- - cargo build --locked
74
- - mkdir build
75
- - mv target/debug/duniter build/duniter
76
- artifacts :
77
- paths :
78
- - build/
79
- expire_in : 3 day
80
- cache :
81
- - key :
82
- files :
83
- - Cargo.lock
84
- paths :
85
- - target/debug
86
- policy : push
67
+ - echo podman build --layers --tag "$IMAGE_NAME:$IMAGE_TAG" -f docker/Dockerfile $PODMAN_BUILD_OPTIONS .
68
+ - podman build --layers --tag "$IMAGE_NAME:$IMAGE_TAG" -f docker/Dockerfile $PODMAN_BUILD_OPTIONS .
69
+ tags :
70
+ - podman
87
71
88
- build_debug_with_cache :
89
- extends : .env
72
+ .docker_deploy :
73
+ stage : deploy
74
+ before_script :
75
+ - podman login -u "duniterteam" -p "$DUNITERTEAM_PASSWD" docker.io
76
+ tags :
77
+ - podman
78
+
79
+ .docker_deploy_native :
80
+ extends : .docker_deploy
81
+ script :
82
+ - podman push "localhost/$IMAGE_NAME:$IMAGE_TAG" "docker://docker.io/$IMAGE_NAME:$IMAGE_TAG"
83
+
84
+ .docker_deploy_multiplatform :
85
+ extends : .docker_deploy
86
+ script :
87
+ - podman manifest rm "$MANIFEST" 2>/dev/null || true
88
+ - podman build --layers --platform linux/amd64,linux/arm64 --manifest "$MANIFEST" -f docker/Dockerfile $PODMAN_BUILD_OPTIONS .
89
+ - podman manifest push --all "$MANIFEST" "docker://docker.io/$IMAGE_NAME:$IMAGE_TAG"
90
+ after_script :
91
+ - podman manifest rm "$MANIFEST"
92
+ variables :
93
+ MANIFEST : " localhost/manifest-$IMAGE_NAME:$IMAGE_TAG"
94
+
95
+ build_debug :
96
+ extends : .docker_build
90
97
rules :
91
- - changes :
92
- - Cargo.lock
93
- when : never
94
98
- if : $CI_COMMIT_TAG
95
99
when : never
96
100
- if : ' $CI_PIPELINE_SOURCE == "merge_request_event" || $CI_COMMIT_BRANCH == "master"'
97
101
- when : never
98
- stage : build
99
- script :
100
- - cargo clean -p duniter
101
- - cargo build --locked
102
- - mkdir build
103
- - mv target/debug/duniter build/duniter
104
- artifacts :
105
- paths :
106
- - build/
107
- expire_in : 3 day
108
- cache :
109
- - key :
110
- files :
111
- - Cargo.lock
112
- paths :
113
- - target/debug
114
- policy : pull
102
+ variables :
103
+ IMAGE_NAME : " duniter/duniter-v2s"
104
+ IMAGE_TAG : " debug-sha-$CI_COMMIT_SHORT_SHA"
105
+ PODMAN_BUILD_OPTIONS : " --build-arg debug=1"
115
106
116
107
build_release :
117
- extends : .env
108
+ extends : .docker_build
118
109
rules :
119
110
- if : " $CI_COMMIT_TAG && $CI_COMMIT_TAG =~ /^v*/"
120
- - when : never
121
- stage : build
122
- script :
123
- - cargo build --locked --release
124
- - mkdir build
125
- - mv target/release/duniter build/duniter
126
- artifacts :
127
- paths :
128
- - build/
129
- expire_in : 3 day
130
-
131
- build_release_manual :
132
- extends : .env
133
- rules :
134
- - if : $CI_COMMIT_TAG
135
- when : never
111
+ - if : ' $CI_PIPELINE_SOURCE == "merge_request_event" || $CI_COMMIT_BRANCH == "master"'
136
112
- when : manual
137
- stage : build
138
- allow_failure : true
139
- script :
140
- - cargo build --locked --release
141
- - mkdir build
142
- - mv target/release/duniter build/duniter
143
- artifacts :
144
- paths :
145
- - build/
146
- expire_in : 3 day
113
+ variables :
114
+ IMAGE_NAME : " duniter/duniter-v2s"
115
+ IMAGE_TAG : " sha-$CI_COMMIT_SHORT_SHA"
116
+ PODMAN_BUILD_OPTIONS : " --platform linux/amd64"
147
117
148
- tests_debug :
149
- extends : .env
118
+ test_debug :
119
+ stage : tests
120
+ extends : .docker_build
150
121
rules :
151
122
- if : $CI_COMMIT_REF_NAME =~ /^wip*$/
152
123
when : manual
153
124
- if : $CI_COMMIT_TAG
154
125
when : never
155
126
- if : ' $CI_MERGE_REQUEST_ID || $CI_COMMIT_BRANCH == "master"'
156
127
- when : manual
157
- stage : tests
158
128
variables :
159
- DUNITER_BINARY_PATH : " ../build/duniter"
160
- DUNITER_END2END_TESTS_SPAWN_NODE_TIMEOUT : " 20"
161
- script :
162
- - cargo test --workspace --exclude duniter-end2end-tests --exclude duniter-live-tests
163
- - cargo cucumber -i account_creation*
164
- - cargo cucumber -i certification*
165
- - cargo cucumber -i identity_creation*
166
- - cargo cucumber -i monetary_mass*
167
- - cargo cucumber -i oneshot_account*
168
- - cargo cucumber -i transfer_all*
169
- after_script :
170
- - cd target/debug/deps/
171
- - rm cucumber_tests-*.d
172
- - mv cucumber_tests* ../../../build/duniter-cucumber
173
- artifacts :
174
- paths :
175
- - build/
176
- expire_in : 3 day
129
+ IMAGE_NAME : " duniter/duniter-v2s-test"
130
+ IMAGE_TAG : " debug-sha-$CI_COMMIT_SHORT_SHA"
131
+ PODMAN_BUILD_OPTIONS : " --target build --build-arg debug=1 --build-arg cucumber=1"
177
132
178
- tests_release :
179
- extends : .env
133
+ test_release :
134
+ stage : tests
135
+ extends : .docker_build
180
136
rules :
181
137
- if : " $CI_COMMIT_TAG && $CI_COMMIT_TAG =~ /^v*/"
182
138
- when : never
183
- stage : tests
184
139
variables :
185
- DUNITER_BINARY_PATH : " ../build/duniter"
186
- DUNITER_END2END_TESTS_SPAWN_NODE_TIMEOUT : " 20"
187
- script :
188
- - cargo test --workspace --exclude duniter-end2end-tests --exclude duniter-live-tests
189
- - cargo cucumber -i account_creation*
190
- - cargo cucumber -i certification*
191
- - cargo cucumber -i identity_creation*
192
- - cargo cucumber -i monetary_mass*
193
- - cargo cucumber -i oneshot_account*
194
- - cargo cucumber -i transfer_all*
195
- after_script :
196
- - cd target/debug/deps/
197
- - rm cucumber_tests-*.d
198
- - mv cucumber_tests* ../../../build/duniter-cucumber
199
- artifacts :
200
- paths :
201
- - build/
202
- expire_in : 3 day
203
- dependencies :
204
- - build_release
140
+ IMAGE_NAME : " duniter/duniter-v2s-test"
141
+ IMAGE_TAG : " sha-$CI_COMMIT_SHORT_SHA"
142
+ PODMAN_BUILD_OPTIONS : " --target build --build-arg cucumber=1"
205
143
206
- .docker-build-app-image :
144
+ deploy_docker_debug_sha :
207
145
stage : deploy
208
- image : docker:18.06
209
- tags :
210
- - docker
211
- services :
212
- - docker:dind
213
- before_script :
214
- - docker info
215
- script :
216
- - docker pull $CI_REGISTRY_IMAGE:$IMAGE_TAG || true
217
- - docker build --cache-from $CI_REGISTRY_IMAGE:$IMAGE_TAG --pull -t "$CI_REGISTRY_IMAGE:$IMAGE_TAG" -f $DOCKERFILE_PATH .
218
- - docker login -u "duniterteam" -p "$DUNITERTEAM_PASSWD"
219
- - docker tag "$CI_REGISTRY_IMAGE:$IMAGE_TAG" "duniter/duniter-v2s:$IMAGE_TAG"
220
- - docker push "duniter/duniter-v2s:$IMAGE_TAG"
221
-
222
- deploy_docker_test_image :
223
- extends : .docker-build-app-image
146
+ extends : .docker_deploy_native
224
147
rules :
225
- - if : $CI_COMMIT_REF_NAME =~ /^wip*$/
226
- when : manual
227
- - if : ' $CI_COMMIT_TAG || $CI_COMMIT_BRANCH == "master"'
148
+ - if : $CI_COMMIT_TAG
228
149
when : never
229
- - when : manual
230
- allow_failure : true
150
+ - if : $CI_COMMIT_BRANCH == "master"
231
151
variables :
232
- DOCKERFILE_PATH : " docker/Dockerfile "
233
- IMAGE_TAG : " test-image -$CI_COMMIT_SHORT_SHA"
152
+ IMAGE_NAME : " duniter/duniter-v2s "
153
+ IMAGE_TAG : " debug-sha -$CI_COMMIT_SHORT_SHA"
234
154
235
- deploy_docker_debug_sha :
236
- extends : .docker-build-app-image
155
+ deploy_docker_release_sha :
156
+ stage : deploy
157
+ extends : .docker_deploy_native
237
158
rules :
238
159
- if : $CI_COMMIT_TAG
239
160
when : never
240
- - if : $CI_COMMIT_BRANCH == "master"
161
+ - when : manual
241
162
variables :
242
- DOCKERFILE_PATH : " docker/Dockerfile"
243
- IMAGE_TAG : " debug-sha-$CI_COMMIT_SHORT_SHA"
244
- after_script :
245
- - docker login -u "duniterteam" -p "$DUNITERTEAM_PASSWD"
246
- - docker tag "duniter/duniter-v2s:$IMAGE_TAG" "duniter/duniter-v2s:debug-latest"
247
- - docker push "duniter/duniter-v2s:debug-latest"
163
+ IMAGE_NAME : " duniter/duniter-v2s"
164
+ IMAGE_TAG : " sha-$CI_COMMIT_SHORT_SHA"
248
165
249
- deploy_docker_release_sha :
250
- extends : .docker-build-app-image
166
+ deploy_docker_release_sha_multiplatform :
167
+ stage : deploy
168
+ needs : ["deploy_docker_release_sha"]
169
+ extends : .docker_deploy_multiplatform
251
170
rules :
252
171
- if : $CI_COMMIT_TAG
253
172
when : never
254
173
- when : manual
255
- allow_failure : true
256
174
variables :
257
- DOCKERFILE_PATH : " docker/Dockerfile "
175
+ IMAGE_NAME : " duniter/duniter-v2s "
258
176
IMAGE_TAG : " sha-$CI_COMMIT_SHORT_SHA"
259
- dependencies :
260
- - build_release_manual
261
177
262
178
deploy_docker_release_tag :
263
- extends : .docker-build-app-image
179
+ stage : deploy
180
+ extends : .docker_deploy_native
264
181
rules :
265
182
- if : " $CI_COMMIT_TAG && $CI_COMMIT_TAG =~ /^v*/"
266
183
- when : never
267
184
variables :
268
- DOCKERFILE_PATH : " docker/Dockerfile"
185
+ IMAGE_NAME : " duniter/duniter-v2s"
186
+ IMAGE_TAG : " $CI_COMMIT_TAG"
187
+
188
+ deploy_docker_release_tag_multiplatform :
189
+ stage : deploy
190
+ needs : ["deploy_docker_release_tag"]
191
+ extends : .docker_deploy_multiplatform
192
+ rules :
193
+ - if : " $CI_COMMIT_TAG && $CI_COMMIT_TAG =~ /^v*/"
194
+ - when : never
195
+ script :
196
+ - !reference [.docker_deploy_multiplatform, script]
197
+ - podman manifest push --all "$MANIFEST" "docker://docker.io/$IMAGE_NAME:latest"
198
+ variables :
199
+ IMAGE_NAME : " duniter/duniter-v2s"
269
200
IMAGE_TAG : " $CI_COMMIT_TAG"
270
- after_script :
271
- - docker login -u "duniterteam" -p "$DUNITERTEAM_PASSWD"
272
- - docker tag "duniter/duniter-v2s:$IMAGE_TAG" "duniter/duniter-v2s:latest"
273
- - docker push "duniter/duniter-v2s:latest"
274
- dependencies :
275
- - build_release
276
201
277
202
readme_docker_release_tag :
278
203
stage : deploy_readme
204
+ needs : ["deploy_docker_release_tag"]
279
205
rules :
280
206
- if : " $CI_COMMIT_TAG && $CI_COMMIT_TAG =~ /^v*/"
281
207
- when : never
282
208
image :
283
209
name : chko/docker-pushrm
284
210
entrypoint : ["/bin/sh", "-c", "/docker-pushrm"]
285
211
variables :
286
- DOCKER_USER : " duniterteam"
212
+ DOCKER_USER : duniterteam
287
213
DOCKER_PASS : " $DUNITERTEAM_PASSWD"
288
214
PUSHRM_SHORT : " Duniter v2 based on Substrate framework"
289
215
PUSHRM_TARGET : " docker.io/duniter/duniter-v2s"
0 commit comments