This repository has been archived by the owner on Dec 27, 2023. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 60
/
.gitlab-ci.yml
324 lines (302 loc) · 8.72 KB
/
.gitlab-ci.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
# This is the main gitlab ci configuration. (https://docs.gitlab.com/ee/ci/yaml/)
include:
- local: '/ci/abstract_jobs.yml'
- local: '/ci/ci-config.yml'
stages:
- build1
- build2
- build3
- test
- deploy
- housekeeping
workflow:
rules:
- if: $RUN_CI_PIPELINE == "false"
when: never
- if: $CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_REF_NAME =~ /(^feat)|(^pu)|(change)/
when: never
- when: always
# ============ stage: build1-3 ===========================
# This stage builds all docker images
#
# The images are named according to $REGISTRY/$NAME-commit:$CI_PIPELINE_ID-$PHP_IMAGE_TAG.
#
# Gitlab currently dose not support needs in the same stage.
# Therefore we need multiple build stages.
.docker_build_source:
extends: .abstract_jobs.docker
stage: build1
script:
- cp $DOCKER_GIT_CONFIG ./ci/dockerimage/.gitconfig
- build_or_reuse_image base $REUSE_IMAGES
- use_cached_image_when_nothing_changed base
- push_image base
- build_or_reuse_image source $REUSE_IMAGES
- use_cached_image_when_nothing_changed source
- push_image source
- build_or_reuse_image test-source $REUSE_IMAGES
- push_image test-source
timeout: 60m
docker_build_source_reuse:
extends: .docker_build_source
variables:
REUSE_IMAGES: "true"
rules:
- if: &TESTS_NEEDING_BUILT_IMAGE $RUN_ALL_TESTS == "true" || $PHP_UNIT_ALL_TESTS_BUILT == "true" || $PHP_UNIT_NOGITLABCI_TESTS_BUILT == "true" || $PHP_UNIT_ALL_TESTS_BUILT_WITH_LDAP == "true"
when: never
- if: &DEPLOYS_NEEDING_BUILT_IMAGE $PUSH_BUILT_IMAGE_TO_GITLAB == "true"
when: never
- if: &DEPLOYS_NEEDING_DEV_IMAGE $PUSH_DEV_IMAGE_TO_GITLAB == "true" || $PUSH_TO_DOCKERHUB == "true"
when: never
- when: on_success
docker_build_source_build:
extends: .docker_build_source
variables:
REUSE_IMAGES: "false"
rules:
- if: *TESTS_NEEDING_BUILT_IMAGE
when: on_success
- if: *DEPLOYS_NEEDING_BUILT_IMAGE
when: on_success
- if: *DEPLOYS_NEEDING_DEV_IMAGE
when: on_success
- when: never
docker_build_built:
extends: .abstract_jobs.docker
stage: build2
script:
- build_image build
- use_cached_image_when_nothing_changed build
- build_image built
- use_cached_image_when_nothing_changed built
- push_image build
- push_image built
- build_image test-built
- push_image test-built
rules:
- if: *TESTS_NEEDING_BUILT_IMAGE
when: on_success
- if: *DEPLOYS_NEEDING_BUILT_IMAGE
when: on_success
- if: *DEPLOYS_NEEDING_DEV_IMAGE
when: on_success
- when: never
timeout: 60m # time run: 28m
docker_build_dev:
extends: .abstract_jobs.docker
stage: build3
script:
- build_image dev
- use_cached_image_when_nothing_changed dev
- push_image dev
rules:
- if: *DEPLOYS_NEEDING_DEV_IMAGE
when: on_success
- when: never
timeout: 60m # time run: 28m
# ============ stage: test ===========================
# This stage runs all tests.
"php unit: all tests source":
extends: .abstract_jobs.php_unit
variables:
ARG_IMAGE: test-source-commit
ARG_COPY_SOURCE: "true"
NODE_TOTAL: 1
NODE_INDEX: 1
stage: test
timeout: 45m
rules:
- if: $PHP_UNIT_ALL_TESTS_SOURCE == "never"
when: never
- if: $PHP_UNIT_ALL_TESTS_SOURCE_PARALLEL == "true"
when: never
- if: $RUN_ALL_TESTS == "true"
when: on_success
- if: $PHP_UNIT_ALL_TESTS_SOURCE == "true"
when: on_success
- when: never
"php unit: all tests source, parallel":
extends: .abstract_jobs.php_unit
variables:
ARG_IMAGE: test-source-commit
ARG_COPY_SOURCE: "true"
stage: test
timeout: 45m
parallel: 5
rules:
- if: $PHP_UNIT_ALL_TESTS_SOURCE == "never"
when: never
- if: $PHP_UNIT_ALL_TESTS_SOURCE_PARALLEL == "false"
when: never
- if: $RUN_ALL_TESTS == "true"
when: on_success
- if: $PHP_UNIT_ALL_TESTS_SOURCE == "true"
when: on_success
- when: never
"php unit: servertests source":
extends: .abstract_jobs.php_unit
variables:
ARG_IMAGE: test-source-commit
ARG_COPY_SOURCE: "true"
ARG_TEST: AllServerTests
stage: test
timeout: 30m
rules:
- if: $PHP_UNIT_SERVERTESTS == "never"
when: never
- if: $RUN_ALL_TESTS == "true"
when: on_success
- if: $PHP_UNIT_SERVERTESTS == "true"
when: on_success
- when: never
"php unit: setup tests source":
extends: .abstract_jobs.php_unit
variables:
ARG_IMAGE: test-source-commit
ARG_COPY_SOURCE: "true"
ARG_TEST_PATH_FROM_TINE20ROOT: tests/setup/
stage: test
timeout: 30m
rules:
- if: $PHP_UNIT_SETUP_TESTS == "never"
when: never
- if: $RUN_ALL_TESTS == "true"
when: on_success
- if: $PHP_UNIT_SETUP_TESTS == "true"
when: on_success
- changes:
- tine20/Setup/**/*
- when: never
"phpstan: code analyses":
extends: .abstract_jobs.copy_source
stage: test
image:
name: "$REGISTRY/test-source-commit:$CI_PIPELINE_ID-$PHP_IMAGE_TAG"
script:
- cd $TINE20ROOT
- composer require phpstan/phpstan
- php -d memory_limit=2G $TINE20ROOT/vendor/bin/phpstan analyse --autoload-file=$TINE20ROOT/tine20/vendor/autoload.php --error-format=prettyJson --no-progress -vvv | tee $CI_PROJECT_DIR/code-quality-report.json
artifacts:
reports:
codequality: code-quality-report.json
paths:
- code-quality-report.json
expire_in: 1 days
rules:
- if: $PHP_STAN_ANALYSES == "never"
when: never
- if: $RUN_ALL_TESTS == "true"
when: on_success
- if: $PHP_STAN_ANALYSES == "true"
when: on_success
- when: never
allow_failure: true
timeout: 20m # time run: 4m
"php unit: all tests built":
extends: .abstract_jobs.php_unit
variables:
ARG_IMAGE: test-built-commit
stage: test
parallel: 5
timeout: 45m
rules:
- if: $PHP_UNIT_ALL_TESTS_BUILT == "never"
when: never
- if: $RUN_ALL_TESTS == "true"
when: on_success
- if: $PHP_UNIT_ALL_TESTS_BUILT == "true"
when: on_success
- when: never
"php unit: nogitlabci tests built":
extends: .abstract_jobs.php_unit
variables:
ARG_IMAGE: test-built-commit
ARG_EXCLUDE_GROUP: ""
ARG_GROUP: "nogitlabci"
stage: test
parallel: 5
allow_failure: true
timeout: 30m
rules:
- if: $PHP_UNIT_NOGITLABCI_TESTS_BUILT == "never"
when: never
- if: $RUN_ALL_TESTS == "true"
when: on_success
- if: $PHP_UNIT_NOGITLABCI_TESTS_BUILT == "true"
when: on_success
- when: never
"php unit: all tests built with ldap":
extends: .abstract_jobs.php_unit_ldap
variables:
ARG_IMAGE: test-built-commit
stage: test
parallel: 5
timeout: 30m
rules:
- if: $PHP_UNIT_ALL_TESTS_BUILT_WITH_LDAP == "never"
when: never
- if: $RUN_ALL_TESTS == "true"
when: on_success
- if: $PHP_UNIT_ALL_TESTS_BUILT_WITH_LDAP == "true"
when: on_success
- when: never
# ============ stage: deploy ===========================
# pushes built-commit as built to our gitlab registry.
# They can be accessed essayer.
# They are pushed on every change of a major branch.
"docker push built image to gitlab":
extends: .abstract_jobs.docker
stage: deploy
script:
- tag_commit_as_gitlab_image built
rules:
- if: $PUSH_BUILT_IMAGE_TO_GITLAB == "true"
when: on_success
- when: never
timeout: 20m
# pushes dev-commit as dev to our gitlab registry.
# They can be accessed essayer.
# They are pushed on every change of a major branch.
"docker push dev image to gitlab":
extends: .abstract_jobs.docker
stage: deploy
script:
- tag_commit_as_gitlab_image dev
rules:
- if: $PUSH_DEV_IMAGE_TO_GITLAB == "true"
when: on_success
- when: never
timeout: 20m
# pushing built-commit as tine20/tine20 to dockerhub.
# The tag is also overwritten and set to $DOCKERHUB_TAG
# This job should only be triggered by a schedule or a manual pipeline trigger
"docker push built and dev image to dockerhub":
extends: .abstract_jobs.docker
stage: deploy
script:
- tag_commit_as_dockerhub_image built tine20
- tag_commit_as_dockerhub_image dev dev
rules:
- if: $NO_PUSH == "true"
when: never
- if: $CI_COMMIT_REF_NAME =~ /(^feat)|(^pu)|(change)/
when: never
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
when: never
- if: $PUSH_TO_DOCKERHUB == "true"
when: on_success
- when: never
timeout: 20m
# ============ stage: housekeeping ===========================
docker_populate_cache:
extends: .abstract_jobs.docker
stage: housekeeping
script:
- docker_populate_cache base
- docker_populate_cache source
- docker_populate_cache test-source
- docker_populate_cache build
- docker_populate_cache built
- docker_populate_cache test-built
- docker_populate_cache dev
allow_failure: true