@catladder/pipeline 1.97.2 โ†’ 1.98.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (27) hide show
  1. package/dist/build/types.d.ts +10 -0
  2. package/dist/bundles/catladder-gitlab/index.js +1 -1
  3. package/dist/constants.js +1 -1
  4. package/dist/pipeline/createJobsForComponent.js +3 -1
  5. package/dist/tsconfig.tsbuildinfo +1 -1
  6. package/dist/verify/reporting.d.ts +3 -0
  7. package/dist/verify/reporting.js +48 -0
  8. package/examples/__snapshots__/cloud-run-memory-limit.ts.snap +196 -0
  9. package/examples/__snapshots__/cloud-run-no-cpu-throttling.ts.snap +196 -0
  10. package/examples/__snapshots__/cloud-run-non-public.ts.snap +196 -0
  11. package/examples/__snapshots__/cloud-run-with-sql-reuse-db.ts.snap +392 -0
  12. package/examples/__snapshots__/cloud-run-with-sql.ts.snap +392 -0
  13. package/examples/__snapshots__/custom-build-job-with-tests.ts.snap +196 -0
  14. package/examples/__snapshots__/custom-build-job.ts.snap +196 -0
  15. package/examples/__snapshots__/custom-deploy.ts.snap +196 -0
  16. package/examples/__snapshots__/custom-sbom-java.ts.snap +1386 -0
  17. package/examples/__snapshots__/kubernetes-application-customization.ts.snap +196 -0
  18. package/examples/__snapshots__/kubernetes-with-cloud-sql-legacy.ts.snap +196 -0
  19. package/examples/__snapshots__/kubernetes-with-cloud-sql.ts.snap +196 -0
  20. package/examples/__snapshots__/kubernetes-with-jobs.ts.snap +392 -0
  21. package/examples/__snapshots__/rails-k8s-with-worker.ts.snap +196 -0
  22. package/examples/__snapshots__/wait-for-other-deploy.ts.snap +392 -0
  23. package/examples/custom-sbom-java.ts +34 -0
  24. package/package.json +1 -1
  25. package/src/build/types.ts +13 -0
  26. package/src/pipeline/createJobsForComponent.ts +3 -1
  27. package/src/verify/reporting.ts +69 -0
@@ -0,0 +1,1386 @@
1
+ // Jest Snapshot v1, https://goo.gl/fbAQLP
2
+
3
+ exports[`matches snapshot 1`] = `
4
+ {
5
+ "mainBranch": {
6
+ "image": "path/to/docker/jobs-default:the-version",
7
+ "jobs": {
8
+ "app ๐Ÿ”จ app | dev ": {
9
+ "artifacts": {
10
+ "paths": [
11
+ "__build_info.json",
12
+ "dist",
13
+ ],
14
+ "reports": {
15
+ "junit": undefined,
16
+ },
17
+ },
18
+ "cache": [],
19
+ "environment": undefined,
20
+ "image": "maven:3-eclipse-temurin-11",
21
+ "interruptible": true,
22
+ "needs": [],
23
+ "retry": {
24
+ "max": 2,
25
+ "when": [
26
+ "runner_system_failure",
27
+ "stuck_or_timeout_failure",
28
+ ],
29
+ },
30
+ "script": [
31
+ "echo '{"id":"some-id","time":"01-01-2023 12:13:14"}' > ./__build_info.json",
32
+ "if [ -f ./.nvmrc ]; then source /root/.nvm/nvm.sh && nvm install <<< .nvmrc; fi",
33
+ "cd .",
34
+ "mvn package",
35
+ "cp -r target dist",
36
+ ],
37
+ "services": undefined,
38
+ "stage": "build",
39
+ "variables": {
40
+ "APP_DIR": ".",
41
+ "ENV_SHORT": "dev",
42
+ "ENV_TYPE": "dev",
43
+ "GCLOUD_DEPLOY_credentialsKey": "$CL_dev_app_GCLOUD_DEPLOY_credentialsKey",
44
+ "GCLOUD_RUN_canonicalHostSuffix": "$CL_dev_app_GCLOUD_RUN_canonicalHostSuffix",
45
+ "HOST": "pan-test-app-dev-app-unknown-host.example.com",
46
+ "HOST_CANONICAL": "pan-test-app-dev-app-unknown-host.example.com",
47
+ "KUBERNETES_CPU_LIMIT": "2",
48
+ "KUBERNETES_CPU_REQUEST": "0.5",
49
+ "KUBERNETES_MEMORY_LIMIT": "4Gi",
50
+ "KUBERNETES_MEMORY_REQUEST": "2Gi",
51
+ "ROOT_URL": "https://pan-test-app-dev-app-unknown-host.example.com",
52
+ "_ALL_ENV_VAR_KEYS": "["ENV_SHORT","APP_DIR","ENV_TYPE","HOST","ROOT_URL","HOST_CANONICAL","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]",
53
+ },
54
+ },
55
+ "app ๐Ÿ”จ docker | dev ": {
56
+ "environment": undefined,
57
+ "image": "path/to/docker/docker-build:the-version",
58
+ "interruptible": true,
59
+ "needs": [
60
+ "app ๐Ÿ”จ app | dev ",
61
+ ],
62
+ "retry": {
63
+ "max": 2,
64
+ "when": [
65
+ "runner_system_failure",
66
+ "stuck_or_timeout_failure",
67
+ ],
68
+ },
69
+ "script": [
70
+ "docker login --username gitlab-ci-token --password $CI_JOB_TOKEN $CI_REGISTRY",
71
+ "docker version",
72
+ "docker build --network host --cache-from $DOCKER_CACHE_IMAGE --tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG -f $APP_DIR/Dockerfile . --build-arg BUILDKIT_INLINE_CACHE=1",
73
+ "docker push $DOCKER_IMAGE:$DOCKER_IMAGE_TAG",
74
+ "docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG $DOCKER_CACHE_IMAGE",
75
+ "docker push $DOCKER_CACHE_IMAGE",
76
+ ],
77
+ "services": [
78
+ {
79
+ "command": [
80
+ "--tls=false",
81
+ ],
82
+ "name": "docker:20-dind",
83
+ },
84
+ ],
85
+ "stage": "build",
86
+ "variables": {
87
+ "APP_DIR": ".",
88
+ "DOCKERFILE_ADDITIONS": undefined,
89
+ "DOCKERFILE_ADDITIONS_END": undefined,
90
+ "DOCKER_BUILDKIT": "1",
91
+ "DOCKER_CACHE_IMAGE": "$DOCKER_REGISTRY_IMAGE_PATH/caches/app",
92
+ "DOCKER_DIR": ".",
93
+ "DOCKER_DRIVER": "overlay2",
94
+ "DOCKER_HOST": "tcp://0.0.0.0:2375",
95
+ "DOCKER_IMAGE": "$DOCKER_REGISTRY_IMAGE_PATH/$DOCKER_IMAGE_NAME",
96
+ "DOCKER_IMAGE_NAME": "dev/app",
97
+ "DOCKER_IMAGE_TAG": "$CI_COMMIT_SHA",
98
+ "DOCKER_REGISTRY": "$CI_REGISTRY",
99
+ "DOCKER_REGISTRY_IMAGE_PATH": "$CI_REGISTRY_IMAGE",
100
+ "DOCKER_TLS_CERTDIR": "",
101
+ "KUBERNETES_CPU_LIMIT": "1",
102
+ "KUBERNETES_CPU_REQUEST": "0.5",
103
+ "KUBERNETES_MEMORY_LIMIT": "2Gi",
104
+ "KUBERNETES_MEMORY_REQUEST": "1Gi",
105
+ },
106
+ },
107
+ "app ๐Ÿš€ Deploy | dev ": {
108
+ "allow_failure": false,
109
+ "artifacts": {
110
+ "paths": [
111
+ "____envvars.yaml",
112
+ ],
113
+ },
114
+ "environment": {
115
+ "auto_stop_in": "4 weeks",
116
+ "name": "dev/app",
117
+ "on_stop": "app ๐Ÿ›‘ Stop โš ๏ธ | dev ",
118
+ "url": "https://pan-test-app-dev-app-unknown-host.example.com",
119
+ },
120
+ "image": "path/to/docker/gcloud:the-version",
121
+ "interruptible": true,
122
+ "needs": [
123
+ {
124
+ "artifacts": false,
125
+ "job": "app ๐Ÿ”จ app | dev ",
126
+ },
127
+ {
128
+ "artifacts": false,
129
+ "job": "app ๐Ÿ”จ docker | dev ",
130
+ },
131
+ ],
132
+ "retry": {
133
+ "max": 2,
134
+ "when": [
135
+ "runner_system_failure",
136
+ "stuck_or_timeout_failure",
137
+ ],
138
+ },
139
+ "rules": [
140
+ {
141
+ "when": "on_success",
142
+ },
143
+ ],
144
+ "script": [
145
+ "echo $CL_dev_app_GCLOUD_DEPLOY_credentialsKey > ./____keyfile.json
146
+ ",
147
+ "gcloud auth activate-service-account --key-file="./____keyfile.json"",
148
+ "export GCLOUD_PROJECT_NUMBER=$(gcloud projects describe asdf --format="value(projectNumber)")",
149
+ "echo "GCLOUD_PROJECT_NUMBER: $GCLOUD_PROJECT_NUMBER"",
150
+ "docker login --username gitlab-ci-token --password $CI_JOB_TOKEN $CI_REGISTRY",
151
+ "gcloud auth configure-docker asia-east1-docker.pkg.dev",
152
+ "docker pull $DOCKER_IMAGE:$DOCKER_IMAGE_TAG",
153
+ "docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG",
154
+ "docker push asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG",
155
+ "echo "$ENV_VARS" > ____envvars.yaml",
156
+ "gcloud run deploy pan-test-app-dev-app --command="" --image=asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG --project=asdf --region=asia-east1 --labels=customer-name=pan,app-name=test-app,env-type=dev,env-name=dev,build-type=custom --env-vars-file=____envvars.yaml --min-instances=0 --max-instances=100 --cpu-throttling --allow-unauthenticated",
157
+ "docker image rm asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG",
158
+ ],
159
+ "services": [
160
+ {
161
+ "command": [
162
+ "--tls=false",
163
+ ],
164
+ "name": "docker:20-dind",
165
+ },
166
+ ],
167
+ "stage": "deploy dev",
168
+ "variables": {
169
+ "APP_DIR": ".",
170
+ "CLOUDSDK_CORE_DISABLE_PROMPTS": "1",
171
+ "DOCKER_BUILDKIT": "1",
172
+ "DOCKER_CACHE_IMAGE": "$DOCKER_REGISTRY_IMAGE_PATH/caches/app",
173
+ "DOCKER_DRIVER": "overlay2",
174
+ "DOCKER_HOST": "tcp://0.0.0.0:2375",
175
+ "DOCKER_IMAGE": "$DOCKER_REGISTRY_IMAGE_PATH/$DOCKER_IMAGE_NAME",
176
+ "DOCKER_IMAGE_NAME": "dev/app",
177
+ "DOCKER_IMAGE_TAG": "$CI_COMMIT_SHA",
178
+ "DOCKER_REGISTRY": "$CI_REGISTRY",
179
+ "DOCKER_REGISTRY_IMAGE_PATH": "$CI_REGISTRY_IMAGE",
180
+ "DOCKER_TLS_CERTDIR": "",
181
+ "ENV_SHORT": "dev",
182
+ "ENV_TYPE": "dev",
183
+ "ENV_VARS": "ENV_SHORT: 'dev'
184
+ APP_DIR: '.'
185
+ ENV_TYPE: 'dev'
186
+ HOST: 'pan-test-app-dev-app-unknown-host.example.com'
187
+ ROOT_URL: 'https://pan-test-app-dev-app-unknown-host.example.com'
188
+ HOST_CANONICAL: 'pan-test-app-dev-app-unknown-host.example.com'
189
+ GCLOUD_RUN_canonicalHostSuffix: '$CL_dev_app_GCLOUD_RUN_canonicalHostSuffix'
190
+ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","HOST","ROOT_URL","HOST_CANONICAL","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]'
191
+ ",
192
+ "GCLOUD_DEPLOY_credentialsKey": "$CL_dev_app_GCLOUD_DEPLOY_credentialsKey",
193
+ "GCLOUD_RUN_canonicalHostSuffix": "$CL_dev_app_GCLOUD_RUN_canonicalHostSuffix",
194
+ "HOST": "pan-test-app-dev-app-unknown-host.example.com",
195
+ "HOST_CANONICAL": "pan-test-app-dev-app-unknown-host.example.com",
196
+ "KUBERNETES_CPU_LIMIT": "1",
197
+ "KUBERNETES_CPU_REQUEST": "0.5",
198
+ "KUBERNETES_MEMORY_LIMIT": "500Mi",
199
+ "KUBERNETES_MEMORY_REQUEST": "200Mi",
200
+ "ROOT_URL": "https://pan-test-app-dev-app-unknown-host.example.com",
201
+ "_ALL_ENV_VAR_KEYS": "["ENV_SHORT","APP_DIR","ENV_TYPE","HOST","ROOT_URL","HOST_CANONICAL","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]",
202
+ },
203
+ },
204
+ "app ๐Ÿ›‘ Stop โš ๏ธ | dev ": {
205
+ "environment": {
206
+ "action": "stop",
207
+ "name": "dev/app",
208
+ "url": "https://pan-test-app-dev-app-unknown-host.example.com",
209
+ },
210
+ "image": "path/to/docker/gcloud:the-version",
211
+ "interruptible": true,
212
+ "needs": [],
213
+ "retry": {
214
+ "max": 2,
215
+ "when": [
216
+ "runner_system_failure",
217
+ "stuck_or_timeout_failure",
218
+ ],
219
+ },
220
+ "rules": [
221
+ {
222
+ "allow_failure": true,
223
+ "if": "$CI_COMMIT_BRANCH =~ /^[0-9]+\\.([0-9]+|x)\\.x$/",
224
+ "when": "on_success",
225
+ },
226
+ {
227
+ "allow_failure": true,
228
+ "when": "manual",
229
+ },
230
+ ],
231
+ "script": [
232
+ "set +e",
233
+ "echo $CL_dev_app_GCLOUD_DEPLOY_credentialsKey > ./____keyfile.json
234
+ ",
235
+ "gcloud auth activate-service-account --key-file="./____keyfile.json"",
236
+ "gcloud run services delete pan-test-app-dev-app --project=asdf --region=asia-east1",
237
+ "set -e",
238
+ ],
239
+ "stage": "stop dev",
240
+ "variables": {
241
+ "CLOUDSDK_CORE_DISABLE_PROMPTS": "1",
242
+ "GIT_STRATEGY": "none",
243
+ "KUBERNETES_CPU_LIMIT": "1",
244
+ "KUBERNETES_CPU_REQUEST": "0.5",
245
+ "KUBERNETES_MEMORY_LIMIT": "500Mi",
246
+ "KUBERNETES_MEMORY_REQUEST": "200Mi",
247
+ },
248
+ },
249
+ "app ๐Ÿงพ sbom upload | dev ": {
250
+ "allow_failure": true,
251
+ "cache": undefined,
252
+ "environment": undefined,
253
+ "image": "git.panter.ch:5001/open-source/dependency-track-uploader:dtrackuploader-v0.2.1",
254
+ "interruptible": true,
255
+ "needs": [
256
+ "app ๐Ÿงพ sbom | dev ",
257
+ ],
258
+ "retry": {
259
+ "max": 2,
260
+ "when": [
261
+ "runner_system_failure",
262
+ "stuck_or_timeout_failure",
263
+ ],
264
+ },
265
+ "script": [
266
+ "/dtrackuploader https://dep.panter.dev/ "$DT_KEY" upload "pan-test-app/app" "dev" "__sbom.json" vex.json",
267
+ ],
268
+ "stage": "verify",
269
+ "variables": {},
270
+ },
271
+ "app ๐Ÿงพ sbom | dev ": {
272
+ "allow_failure": true,
273
+ "artifacts": {
274
+ "paths": [
275
+ "__sbom.json",
276
+ ],
277
+ },
278
+ "cache": undefined,
279
+ "environment": undefined,
280
+ "image": "maven:3-eclipse-temurin-11",
281
+ "interruptible": true,
282
+ "needs": [
283
+ "app ๐Ÿš€ Deploy | dev ",
284
+ ],
285
+ "retry": {
286
+ "max": 2,
287
+ "when": [
288
+ "runner_system_failure",
289
+ "stuck_or_timeout_failure",
290
+ ],
291
+ },
292
+ "script": [
293
+ "mvn org.cyclonedx:cyclonedx-maven-plugin:2.7.4:makeBom",
294
+ "mv target/bom.json __sbom.json",
295
+ ],
296
+ "stage": "verify",
297
+ "variables": {},
298
+ },
299
+ },
300
+ "stages": [
301
+ "setup",
302
+ "setup dev",
303
+ "setup review",
304
+ "setup stage",
305
+ "setup prod",
306
+ "setup local",
307
+ "test",
308
+ "test dev",
309
+ "test review",
310
+ "test stage",
311
+ "test prod",
312
+ "test local",
313
+ "build",
314
+ "build dev",
315
+ "build review",
316
+ "build stage",
317
+ "build prod",
318
+ "build local",
319
+ "deploy",
320
+ "deploy dev",
321
+ "deploy review",
322
+ "deploy stage",
323
+ "deploy prod",
324
+ "deploy local",
325
+ "verify",
326
+ "verify dev",
327
+ "verify review",
328
+ "verify stage",
329
+ "verify prod",
330
+ "verify local",
331
+ "rollback",
332
+ "rollback dev",
333
+ "rollback review",
334
+ "rollback stage",
335
+ "rollback prod",
336
+ "rollback local",
337
+ "stop",
338
+ "stop dev",
339
+ "stop review",
340
+ "stop stage",
341
+ "stop prod",
342
+ "stop local",
343
+ ],
344
+ "variables": {
345
+ "FF_USE_FASTZIP": "true",
346
+ },
347
+ "workflow": {
348
+ "rules": [
349
+ {
350
+ "if": "$CI_COMMIT_TAG",
351
+ },
352
+ {
353
+ "if": "$CI_COMMIT_MESSAGE =~ /^chore\\(release\\).*/",
354
+ "when": "never",
355
+ },
356
+ {
357
+ "if": "$CI_COMMIT_BRANCH =~ /^[0-9]+.([0-9]+|x).x$/",
358
+ },
359
+ {
360
+ "if": "$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH",
361
+ },
362
+ {
363
+ "if": "$CI_MERGE_REQUEST_ID",
364
+ },
365
+ ],
366
+ },
367
+ },
368
+ "mr": {
369
+ "image": "path/to/docker/jobs-default:the-version",
370
+ "jobs": {
371
+ "app ๐Ÿ”จ app | review ": {
372
+ "artifacts": {
373
+ "paths": [
374
+ "__build_info.json",
375
+ "dist",
376
+ ],
377
+ "reports": {
378
+ "junit": undefined,
379
+ },
380
+ },
381
+ "cache": [],
382
+ "environment": undefined,
383
+ "image": "maven:3-eclipse-temurin-11",
384
+ "interruptible": true,
385
+ "needs": [],
386
+ "retry": {
387
+ "max": 2,
388
+ "when": [
389
+ "runner_system_failure",
390
+ "stuck_or_timeout_failure",
391
+ ],
392
+ },
393
+ "script": [
394
+ "echo '{"id":"some-id","time":"01-01-2023 12:13:14"}' > ./__build_info.json",
395
+ "if [ -f ./.nvmrc ]; then source /root/.nvm/nvm.sh && nvm install <<< .nvmrc; fi",
396
+ "cd .",
397
+ "mvn package",
398
+ "cp -r target dist",
399
+ ],
400
+ "services": undefined,
401
+ "stage": "build",
402
+ "variables": {
403
+ "APP_DIR": ".",
404
+ "ENV_SHORT": "review",
405
+ "ENV_TYPE": "review",
406
+ "GCLOUD_DEPLOY_credentialsKey": "$CL_review_app_GCLOUD_DEPLOY_credentialsKey",
407
+ "GCLOUD_RUN_canonicalHostSuffix": "$CL_review_app_GCLOUD_RUN_canonicalHostSuffix",
408
+ "HOST": "pan-test-app-review-mr1234-app-unknown-host.example.com",
409
+ "HOST_CANONICAL": "pan-test-app-review-mr1234-app-unknown-host.example.com",
410
+ "KUBERNETES_CPU_LIMIT": "2",
411
+ "KUBERNETES_CPU_REQUEST": "0.5",
412
+ "KUBERNETES_MEMORY_LIMIT": "4Gi",
413
+ "KUBERNETES_MEMORY_REQUEST": "2Gi",
414
+ "ROOT_URL": "https://pan-test-app-review-mr1234-app-unknown-host.example.com",
415
+ "_ALL_ENV_VAR_KEYS": "["ENV_SHORT","APP_DIR","ENV_TYPE","HOST","ROOT_URL","HOST_CANONICAL","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]",
416
+ },
417
+ },
418
+ "app ๐Ÿ”จ docker | review ": {
419
+ "environment": undefined,
420
+ "image": "path/to/docker/docker-build:the-version",
421
+ "interruptible": true,
422
+ "needs": [
423
+ "app ๐Ÿ”จ app | review ",
424
+ ],
425
+ "retry": {
426
+ "max": 2,
427
+ "when": [
428
+ "runner_system_failure",
429
+ "stuck_or_timeout_failure",
430
+ ],
431
+ },
432
+ "script": [
433
+ "docker login --username gitlab-ci-token --password $CI_JOB_TOKEN $CI_REGISTRY",
434
+ "docker version",
435
+ "docker build --network host --cache-from $DOCKER_CACHE_IMAGE --tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG -f $APP_DIR/Dockerfile . --build-arg BUILDKIT_INLINE_CACHE=1",
436
+ "docker push $DOCKER_IMAGE:$DOCKER_IMAGE_TAG",
437
+ "docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG $DOCKER_CACHE_IMAGE",
438
+ "docker push $DOCKER_CACHE_IMAGE",
439
+ ],
440
+ "services": [
441
+ {
442
+ "command": [
443
+ "--tls=false",
444
+ ],
445
+ "name": "docker:20-dind",
446
+ },
447
+ ],
448
+ "stage": "build",
449
+ "variables": {
450
+ "APP_DIR": ".",
451
+ "DOCKERFILE_ADDITIONS": undefined,
452
+ "DOCKERFILE_ADDITIONS_END": undefined,
453
+ "DOCKER_BUILDKIT": "1",
454
+ "DOCKER_CACHE_IMAGE": "$DOCKER_REGISTRY_IMAGE_PATH/caches/app",
455
+ "DOCKER_DIR": ".",
456
+ "DOCKER_DRIVER": "overlay2",
457
+ "DOCKER_HOST": "tcp://0.0.0.0:2375",
458
+ "DOCKER_IMAGE": "$DOCKER_REGISTRY_IMAGE_PATH/$DOCKER_IMAGE_NAME",
459
+ "DOCKER_IMAGE_NAME": "review/app",
460
+ "DOCKER_IMAGE_TAG": "$CI_COMMIT_SHA",
461
+ "DOCKER_REGISTRY": "$CI_REGISTRY",
462
+ "DOCKER_REGISTRY_IMAGE_PATH": "$CI_REGISTRY_IMAGE",
463
+ "DOCKER_TLS_CERTDIR": "",
464
+ "KUBERNETES_CPU_LIMIT": "1",
465
+ "KUBERNETES_CPU_REQUEST": "0.5",
466
+ "KUBERNETES_MEMORY_LIMIT": "2Gi",
467
+ "KUBERNETES_MEMORY_REQUEST": "1Gi",
468
+ },
469
+ },
470
+ "app ๐Ÿš€ Deploy | review ": {
471
+ "allow_failure": false,
472
+ "artifacts": {
473
+ "paths": [
474
+ "____envvars.yaml",
475
+ ],
476
+ },
477
+ "environment": {
478
+ "auto_stop_in": "2 week",
479
+ "name": "review/some-commit/app",
480
+ "on_stop": "app ๐Ÿ›‘ Stop โš ๏ธ | review ",
481
+ "url": "https://pan-test-app-review-mr1234-app-unknown-host.example.com",
482
+ },
483
+ "image": "path/to/docker/gcloud:the-version",
484
+ "interruptible": true,
485
+ "needs": [
486
+ {
487
+ "artifacts": false,
488
+ "job": "app ๐Ÿ”จ app | review ",
489
+ },
490
+ {
491
+ "artifacts": false,
492
+ "job": "app ๐Ÿ”จ docker | review ",
493
+ },
494
+ ],
495
+ "retry": {
496
+ "max": 2,
497
+ "when": [
498
+ "runner_system_failure",
499
+ "stuck_or_timeout_failure",
500
+ ],
501
+ },
502
+ "rules": [
503
+ {
504
+ "when": "on_success",
505
+ },
506
+ ],
507
+ "script": [
508
+ "echo $CL_review_app_GCLOUD_DEPLOY_credentialsKey > ./____keyfile.json
509
+ ",
510
+ "gcloud auth activate-service-account --key-file="./____keyfile.json"",
511
+ "export GCLOUD_PROJECT_NUMBER=$(gcloud projects describe asdf --format="value(projectNumber)")",
512
+ "echo "GCLOUD_PROJECT_NUMBER: $GCLOUD_PROJECT_NUMBER"",
513
+ "docker login --username gitlab-ci-token --password $CI_JOB_TOKEN $CI_REGISTRY",
514
+ "gcloud auth configure-docker asia-east1-docker.pkg.dev",
515
+ "docker pull $DOCKER_IMAGE:$DOCKER_IMAGE_TAG",
516
+ "docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG",
517
+ "docker push asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG",
518
+ "echo "$ENV_VARS" > ____envvars.yaml",
519
+ "gcloud run deploy pan-test-app-review-mr1234-app --command="" --image=asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG --project=asdf --region=asia-east1 --labels=customer-name=pan,app-name=test-app,env-type=review,env-name=review,build-type=custom --env-vars-file=____envvars.yaml --min-instances=0 --max-instances=100 --cpu-throttling --allow-unauthenticated",
520
+ "docker image rm asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG",
521
+ ],
522
+ "services": [
523
+ {
524
+ "command": [
525
+ "--tls=false",
526
+ ],
527
+ "name": "docker:20-dind",
528
+ },
529
+ ],
530
+ "stage": "deploy review",
531
+ "variables": {
532
+ "APP_DIR": ".",
533
+ "CLOUDSDK_CORE_DISABLE_PROMPTS": "1",
534
+ "DOCKER_BUILDKIT": "1",
535
+ "DOCKER_CACHE_IMAGE": "$DOCKER_REGISTRY_IMAGE_PATH/caches/app",
536
+ "DOCKER_DRIVER": "overlay2",
537
+ "DOCKER_HOST": "tcp://0.0.0.0:2375",
538
+ "DOCKER_IMAGE": "$DOCKER_REGISTRY_IMAGE_PATH/$DOCKER_IMAGE_NAME",
539
+ "DOCKER_IMAGE_NAME": "review/app",
540
+ "DOCKER_IMAGE_TAG": "$CI_COMMIT_SHA",
541
+ "DOCKER_REGISTRY": "$CI_REGISTRY",
542
+ "DOCKER_REGISTRY_IMAGE_PATH": "$CI_REGISTRY_IMAGE",
543
+ "DOCKER_TLS_CERTDIR": "",
544
+ "ENV_SHORT": "review",
545
+ "ENV_TYPE": "review",
546
+ "ENV_VARS": "ENV_SHORT: 'review'
547
+ APP_DIR: '.'
548
+ ENV_TYPE: 'review'
549
+ HOST: 'pan-test-app-review-mr1234-app-unknown-host.example.com'
550
+ ROOT_URL: 'https://pan-test-app-review-mr1234-app-unknown-host.example.com'
551
+ HOST_CANONICAL: 'pan-test-app-review-mr1234-app-unknown-host.example.com'
552
+ GCLOUD_RUN_canonicalHostSuffix: '$CL_review_app_GCLOUD_RUN_canonicalHostSuffix'
553
+ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","HOST","ROOT_URL","HOST_CANONICAL","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]'
554
+ ",
555
+ "GCLOUD_DEPLOY_credentialsKey": "$CL_review_app_GCLOUD_DEPLOY_credentialsKey",
556
+ "GCLOUD_RUN_canonicalHostSuffix": "$CL_review_app_GCLOUD_RUN_canonicalHostSuffix",
557
+ "HOST": "pan-test-app-review-mr1234-app-unknown-host.example.com",
558
+ "HOST_CANONICAL": "pan-test-app-review-mr1234-app-unknown-host.example.com",
559
+ "KUBERNETES_CPU_LIMIT": "1",
560
+ "KUBERNETES_CPU_REQUEST": "0.5",
561
+ "KUBERNETES_MEMORY_LIMIT": "500Mi",
562
+ "KUBERNETES_MEMORY_REQUEST": "200Mi",
563
+ "ROOT_URL": "https://pan-test-app-review-mr1234-app-unknown-host.example.com",
564
+ "_ALL_ENV_VAR_KEYS": "["ENV_SHORT","APP_DIR","ENV_TYPE","HOST","ROOT_URL","HOST_CANONICAL","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]",
565
+ },
566
+ },
567
+ "app ๐Ÿ›‘ Stop โš ๏ธ | review ": {
568
+ "environment": {
569
+ "action": "stop",
570
+ "name": "review/some-commit/app",
571
+ "url": "https://pan-test-app-review-mr1234-app-unknown-host.example.com",
572
+ },
573
+ "image": "path/to/docker/gcloud:the-version",
574
+ "interruptible": true,
575
+ "needs": [],
576
+ "retry": {
577
+ "max": 2,
578
+ "when": [
579
+ "runner_system_failure",
580
+ "stuck_or_timeout_failure",
581
+ ],
582
+ },
583
+ "rules": [
584
+ {
585
+ "allow_failure": true,
586
+ "if": "$CI_COMMIT_BRANCH =~ /^[0-9]+\\.([0-9]+|x)\\.x$/",
587
+ "when": "on_success",
588
+ },
589
+ {
590
+ "allow_failure": true,
591
+ "when": "manual",
592
+ },
593
+ ],
594
+ "script": [
595
+ "set +e",
596
+ "echo $CL_review_app_GCLOUD_DEPLOY_credentialsKey > ./____keyfile.json
597
+ ",
598
+ "gcloud auth activate-service-account --key-file="./____keyfile.json"",
599
+ "gcloud run services delete pan-test-app-review-mr1234-app --project=asdf --region=asia-east1",
600
+ "set -e",
601
+ ],
602
+ "stage": "stop review",
603
+ "variables": {
604
+ "CLOUDSDK_CORE_DISABLE_PROMPTS": "1",
605
+ "GIT_STRATEGY": "none",
606
+ "KUBERNETES_CPU_LIMIT": "1",
607
+ "KUBERNETES_CPU_REQUEST": "0.5",
608
+ "KUBERNETES_MEMORY_LIMIT": "500Mi",
609
+ "KUBERNETES_MEMORY_REQUEST": "200Mi",
610
+ },
611
+ },
612
+ "app ๐Ÿงพ sbom upload | review ": {
613
+ "allow_failure": true,
614
+ "cache": undefined,
615
+ "environment": undefined,
616
+ "image": "git.panter.ch:5001/open-source/dependency-track-uploader:dtrackuploader-v0.2.1",
617
+ "interruptible": true,
618
+ "needs": [
619
+ "app ๐Ÿงพ sbom | review ",
620
+ ],
621
+ "retry": {
622
+ "max": 2,
623
+ "when": [
624
+ "runner_system_failure",
625
+ "stuck_or_timeout_failure",
626
+ ],
627
+ },
628
+ "script": [
629
+ "/dtrackuploader https://dep.panter.dev/ "$DT_KEY" upload "pan-test-app/app" "review" "__sbom.json" vex.json",
630
+ ],
631
+ "stage": "verify",
632
+ "variables": {},
633
+ },
634
+ "app ๐Ÿงพ sbom | review ": {
635
+ "allow_failure": true,
636
+ "artifacts": {
637
+ "paths": [
638
+ "__sbom.json",
639
+ ],
640
+ },
641
+ "cache": undefined,
642
+ "environment": undefined,
643
+ "image": "maven:3-eclipse-temurin-11",
644
+ "interruptible": true,
645
+ "needs": [
646
+ "app ๐Ÿš€ Deploy | review ",
647
+ ],
648
+ "retry": {
649
+ "max": 2,
650
+ "when": [
651
+ "runner_system_failure",
652
+ "stuck_or_timeout_failure",
653
+ ],
654
+ },
655
+ "script": [
656
+ "mvn org.cyclonedx:cyclonedx-maven-plugin:2.7.4:makeBom",
657
+ "mv target/bom.json __sbom.json",
658
+ ],
659
+ "stage": "verify",
660
+ "variables": {},
661
+ },
662
+ },
663
+ "stages": [
664
+ "setup",
665
+ "setup dev",
666
+ "setup review",
667
+ "setup stage",
668
+ "setup prod",
669
+ "setup local",
670
+ "test",
671
+ "test dev",
672
+ "test review",
673
+ "test stage",
674
+ "test prod",
675
+ "test local",
676
+ "build",
677
+ "build dev",
678
+ "build review",
679
+ "build stage",
680
+ "build prod",
681
+ "build local",
682
+ "deploy",
683
+ "deploy dev",
684
+ "deploy review",
685
+ "deploy stage",
686
+ "deploy prod",
687
+ "deploy local",
688
+ "verify",
689
+ "verify dev",
690
+ "verify review",
691
+ "verify stage",
692
+ "verify prod",
693
+ "verify local",
694
+ "rollback",
695
+ "rollback dev",
696
+ "rollback review",
697
+ "rollback stage",
698
+ "rollback prod",
699
+ "rollback local",
700
+ "stop",
701
+ "stop dev",
702
+ "stop review",
703
+ "stop stage",
704
+ "stop prod",
705
+ "stop local",
706
+ ],
707
+ "variables": {
708
+ "FF_USE_FASTZIP": "true",
709
+ },
710
+ "workflow": {
711
+ "rules": [
712
+ {
713
+ "if": "$CI_COMMIT_TAG",
714
+ },
715
+ {
716
+ "if": "$CI_COMMIT_MESSAGE =~ /^chore\\(release\\).*/",
717
+ "when": "never",
718
+ },
719
+ {
720
+ "if": "$CI_COMMIT_BRANCH =~ /^[0-9]+.([0-9]+|x).x$/",
721
+ },
722
+ {
723
+ "if": "$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH",
724
+ },
725
+ {
726
+ "if": "$CI_MERGE_REQUEST_ID",
727
+ },
728
+ ],
729
+ },
730
+ },
731
+ "taggedRelease": {
732
+ "image": "path/to/docker/jobs-default:the-version",
733
+ "jobs": {
734
+ "app ๐Ÿ”จ app | prod ": {
735
+ "artifacts": {
736
+ "paths": [
737
+ "__build_info.json",
738
+ "dist",
739
+ ],
740
+ "reports": {
741
+ "junit": undefined,
742
+ },
743
+ },
744
+ "cache": [],
745
+ "environment": undefined,
746
+ "image": "maven:3-eclipse-temurin-11",
747
+ "interruptible": true,
748
+ "needs": [],
749
+ "retry": {
750
+ "max": 2,
751
+ "when": [
752
+ "runner_system_failure",
753
+ "stuck_or_timeout_failure",
754
+ ],
755
+ },
756
+ "script": [
757
+ "echo '{"id":"some-id","time":"01-01-2023 12:13:14"}' > ./__build_info.json",
758
+ "if [ -f ./.nvmrc ]; then source /root/.nvm/nvm.sh && nvm install <<< .nvmrc; fi",
759
+ "cd .",
760
+ "mvn package",
761
+ "cp -r target dist",
762
+ ],
763
+ "services": undefined,
764
+ "stage": "build",
765
+ "variables": {
766
+ "APP_DIR": ".",
767
+ "ENV_SHORT": "prod",
768
+ "ENV_TYPE": "prod",
769
+ "GCLOUD_DEPLOY_credentialsKey": "$CL_prod_app_GCLOUD_DEPLOY_credentialsKey",
770
+ "GCLOUD_RUN_canonicalHostSuffix": "$CL_prod_app_GCLOUD_RUN_canonicalHostSuffix",
771
+ "HOST": "pan-test-app-prod-app-unknown-host.example.com",
772
+ "HOST_CANONICAL": "pan-test-app-prod-app-unknown-host.example.com",
773
+ "KUBERNETES_CPU_LIMIT": "2",
774
+ "KUBERNETES_CPU_REQUEST": "0.5",
775
+ "KUBERNETES_MEMORY_LIMIT": "4Gi",
776
+ "KUBERNETES_MEMORY_REQUEST": "2Gi",
777
+ "ROOT_URL": "https://pan-test-app-prod-app-unknown-host.example.com",
778
+ "_ALL_ENV_VAR_KEYS": "["ENV_SHORT","APP_DIR","ENV_TYPE","HOST","ROOT_URL","HOST_CANONICAL","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]",
779
+ },
780
+ },
781
+ "app ๐Ÿ”จ app | stage ": {
782
+ "artifacts": {
783
+ "paths": [
784
+ "__build_info.json",
785
+ "dist",
786
+ ],
787
+ "reports": {
788
+ "junit": undefined,
789
+ },
790
+ },
791
+ "cache": [],
792
+ "environment": undefined,
793
+ "image": "maven:3-eclipse-temurin-11",
794
+ "interruptible": true,
795
+ "needs": [],
796
+ "retry": {
797
+ "max": 2,
798
+ "when": [
799
+ "runner_system_failure",
800
+ "stuck_or_timeout_failure",
801
+ ],
802
+ },
803
+ "script": [
804
+ "echo '{"id":"some-id","time":"01-01-2023 12:13:14"}' > ./__build_info.json",
805
+ "if [ -f ./.nvmrc ]; then source /root/.nvm/nvm.sh && nvm install <<< .nvmrc; fi",
806
+ "cd .",
807
+ "mvn package",
808
+ "cp -r target dist",
809
+ ],
810
+ "services": undefined,
811
+ "stage": "build",
812
+ "variables": {
813
+ "APP_DIR": ".",
814
+ "ENV_SHORT": "stage",
815
+ "ENV_TYPE": "stage",
816
+ "GCLOUD_DEPLOY_credentialsKey": "$CL_stage_app_GCLOUD_DEPLOY_credentialsKey",
817
+ "GCLOUD_RUN_canonicalHostSuffix": "$CL_stage_app_GCLOUD_RUN_canonicalHostSuffix",
818
+ "HOST": "pan-test-app-stage-app-unknown-host.example.com",
819
+ "HOST_CANONICAL": "pan-test-app-stage-app-unknown-host.example.com",
820
+ "KUBERNETES_CPU_LIMIT": "2",
821
+ "KUBERNETES_CPU_REQUEST": "0.5",
822
+ "KUBERNETES_MEMORY_LIMIT": "4Gi",
823
+ "KUBERNETES_MEMORY_REQUEST": "2Gi",
824
+ "ROOT_URL": "https://pan-test-app-stage-app-unknown-host.example.com",
825
+ "_ALL_ENV_VAR_KEYS": "["ENV_SHORT","APP_DIR","ENV_TYPE","HOST","ROOT_URL","HOST_CANONICAL","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]",
826
+ },
827
+ },
828
+ "app ๐Ÿ”จ docker | prod ": {
829
+ "environment": undefined,
830
+ "image": "path/to/docker/docker-build:the-version",
831
+ "interruptible": true,
832
+ "needs": [
833
+ "app ๐Ÿ”จ app | prod ",
834
+ ],
835
+ "retry": {
836
+ "max": 2,
837
+ "when": [
838
+ "runner_system_failure",
839
+ "stuck_or_timeout_failure",
840
+ ],
841
+ },
842
+ "script": [
843
+ "docker login --username gitlab-ci-token --password $CI_JOB_TOKEN $CI_REGISTRY",
844
+ "docker version",
845
+ "docker build --network host --cache-from $DOCKER_CACHE_IMAGE --tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG -f $APP_DIR/Dockerfile . --build-arg BUILDKIT_INLINE_CACHE=1",
846
+ "docker push $DOCKER_IMAGE:$DOCKER_IMAGE_TAG",
847
+ "docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG $DOCKER_CACHE_IMAGE",
848
+ "docker push $DOCKER_CACHE_IMAGE",
849
+ ],
850
+ "services": [
851
+ {
852
+ "command": [
853
+ "--tls=false",
854
+ ],
855
+ "name": "docker:20-dind",
856
+ },
857
+ ],
858
+ "stage": "build",
859
+ "variables": {
860
+ "APP_DIR": ".",
861
+ "DOCKERFILE_ADDITIONS": undefined,
862
+ "DOCKERFILE_ADDITIONS_END": undefined,
863
+ "DOCKER_BUILDKIT": "1",
864
+ "DOCKER_CACHE_IMAGE": "$DOCKER_REGISTRY_IMAGE_PATH/caches/app",
865
+ "DOCKER_DIR": ".",
866
+ "DOCKER_DRIVER": "overlay2",
867
+ "DOCKER_HOST": "tcp://0.0.0.0:2375",
868
+ "DOCKER_IMAGE": "$DOCKER_REGISTRY_IMAGE_PATH/$DOCKER_IMAGE_NAME",
869
+ "DOCKER_IMAGE_NAME": "prod/app",
870
+ "DOCKER_IMAGE_TAG": "$CI_COMMIT_SHA",
871
+ "DOCKER_REGISTRY": "$CI_REGISTRY",
872
+ "DOCKER_REGISTRY_IMAGE_PATH": "$CI_REGISTRY_IMAGE",
873
+ "DOCKER_TLS_CERTDIR": "",
874
+ "KUBERNETES_CPU_LIMIT": "1",
875
+ "KUBERNETES_CPU_REQUEST": "0.5",
876
+ "KUBERNETES_MEMORY_LIMIT": "2Gi",
877
+ "KUBERNETES_MEMORY_REQUEST": "1Gi",
878
+ },
879
+ },
880
+ "app ๐Ÿ”จ docker | stage ": {
881
+ "environment": undefined,
882
+ "image": "path/to/docker/docker-build:the-version",
883
+ "interruptible": true,
884
+ "needs": [
885
+ "app ๐Ÿ”จ app | stage ",
886
+ ],
887
+ "retry": {
888
+ "max": 2,
889
+ "when": [
890
+ "runner_system_failure",
891
+ "stuck_or_timeout_failure",
892
+ ],
893
+ },
894
+ "script": [
895
+ "docker login --username gitlab-ci-token --password $CI_JOB_TOKEN $CI_REGISTRY",
896
+ "docker version",
897
+ "docker build --network host --cache-from $DOCKER_CACHE_IMAGE --tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG -f $APP_DIR/Dockerfile . --build-arg BUILDKIT_INLINE_CACHE=1",
898
+ "docker push $DOCKER_IMAGE:$DOCKER_IMAGE_TAG",
899
+ "docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG $DOCKER_CACHE_IMAGE",
900
+ "docker push $DOCKER_CACHE_IMAGE",
901
+ ],
902
+ "services": [
903
+ {
904
+ "command": [
905
+ "--tls=false",
906
+ ],
907
+ "name": "docker:20-dind",
908
+ },
909
+ ],
910
+ "stage": "build",
911
+ "variables": {
912
+ "APP_DIR": ".",
913
+ "DOCKERFILE_ADDITIONS": undefined,
914
+ "DOCKERFILE_ADDITIONS_END": undefined,
915
+ "DOCKER_BUILDKIT": "1",
916
+ "DOCKER_CACHE_IMAGE": "$DOCKER_REGISTRY_IMAGE_PATH/caches/app",
917
+ "DOCKER_DIR": ".",
918
+ "DOCKER_DRIVER": "overlay2",
919
+ "DOCKER_HOST": "tcp://0.0.0.0:2375",
920
+ "DOCKER_IMAGE": "$DOCKER_REGISTRY_IMAGE_PATH/$DOCKER_IMAGE_NAME",
921
+ "DOCKER_IMAGE_NAME": "stage/app",
922
+ "DOCKER_IMAGE_TAG": "$CI_COMMIT_SHA",
923
+ "DOCKER_REGISTRY": "$CI_REGISTRY",
924
+ "DOCKER_REGISTRY_IMAGE_PATH": "$CI_REGISTRY_IMAGE",
925
+ "DOCKER_TLS_CERTDIR": "",
926
+ "KUBERNETES_CPU_LIMIT": "1",
927
+ "KUBERNETES_CPU_REQUEST": "0.5",
928
+ "KUBERNETES_MEMORY_LIMIT": "2Gi",
929
+ "KUBERNETES_MEMORY_REQUEST": "1Gi",
930
+ },
931
+ },
932
+ "app ๐Ÿš€ Deploy | prod ": {
933
+ "allow_failure": true,
934
+ "artifacts": {
935
+ "paths": [
936
+ "____envvars.yaml",
937
+ ],
938
+ },
939
+ "environment": {
940
+ "auto_stop_in": undefined,
941
+ "name": "prod/app",
942
+ "on_stop": "app ๐Ÿ›‘ Stop โš ๏ธ | prod ",
943
+ "url": "https://pan-test-app-prod-app-unknown-host.example.com",
944
+ },
945
+ "image": "path/to/docker/gcloud:the-version",
946
+ "interruptible": true,
947
+ "needs": [
948
+ {
949
+ "artifacts": false,
950
+ "job": "app ๐Ÿ”จ app | prod ",
951
+ },
952
+ {
953
+ "artifacts": false,
954
+ "job": "app ๐Ÿ”จ docker | prod ",
955
+ },
956
+ ],
957
+ "retry": {
958
+ "max": 2,
959
+ "when": [
960
+ "runner_system_failure",
961
+ "stuck_or_timeout_failure",
962
+ ],
963
+ },
964
+ "rules": [
965
+ {
966
+ "when": "manual",
967
+ },
968
+ ],
969
+ "script": [
970
+ "echo $CL_prod_app_GCLOUD_DEPLOY_credentialsKey > ./____keyfile.json
971
+ ",
972
+ "gcloud auth activate-service-account --key-file="./____keyfile.json"",
973
+ "export GCLOUD_PROJECT_NUMBER=$(gcloud projects describe asdf --format="value(projectNumber)")",
974
+ "echo "GCLOUD_PROJECT_NUMBER: $GCLOUD_PROJECT_NUMBER"",
975
+ "docker login --username gitlab-ci-token --password $CI_JOB_TOKEN $CI_REGISTRY",
976
+ "gcloud auth configure-docker asia-east1-docker.pkg.dev",
977
+ "docker pull $DOCKER_IMAGE:$DOCKER_IMAGE_TAG",
978
+ "docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG",
979
+ "docker push asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG",
980
+ "echo "$ENV_VARS" > ____envvars.yaml",
981
+ "gcloud run deploy pan-test-app-prod-app --command="" --image=asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG --project=asdf --region=asia-east1 --labels=customer-name=pan,app-name=test-app,env-type=prod,env-name=prod,build-type=custom --env-vars-file=____envvars.yaml --min-instances=0 --max-instances=100 --cpu-throttling --allow-unauthenticated",
982
+ "docker image rm asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG",
983
+ ],
984
+ "services": [
985
+ {
986
+ "command": [
987
+ "--tls=false",
988
+ ],
989
+ "name": "docker:20-dind",
990
+ },
991
+ ],
992
+ "stage": "deploy prod",
993
+ "variables": {
994
+ "APP_DIR": ".",
995
+ "CLOUDSDK_CORE_DISABLE_PROMPTS": "1",
996
+ "DOCKER_BUILDKIT": "1",
997
+ "DOCKER_CACHE_IMAGE": "$DOCKER_REGISTRY_IMAGE_PATH/caches/app",
998
+ "DOCKER_DRIVER": "overlay2",
999
+ "DOCKER_HOST": "tcp://0.0.0.0:2375",
1000
+ "DOCKER_IMAGE": "$DOCKER_REGISTRY_IMAGE_PATH/$DOCKER_IMAGE_NAME",
1001
+ "DOCKER_IMAGE_NAME": "prod/app",
1002
+ "DOCKER_IMAGE_TAG": "$CI_COMMIT_SHA",
1003
+ "DOCKER_REGISTRY": "$CI_REGISTRY",
1004
+ "DOCKER_REGISTRY_IMAGE_PATH": "$CI_REGISTRY_IMAGE",
1005
+ "DOCKER_TLS_CERTDIR": "",
1006
+ "ENV_SHORT": "prod",
1007
+ "ENV_TYPE": "prod",
1008
+ "ENV_VARS": "ENV_SHORT: 'prod'
1009
+ APP_DIR: '.'
1010
+ ENV_TYPE: 'prod'
1011
+ HOST: 'pan-test-app-prod-app-unknown-host.example.com'
1012
+ ROOT_URL: 'https://pan-test-app-prod-app-unknown-host.example.com'
1013
+ HOST_CANONICAL: 'pan-test-app-prod-app-unknown-host.example.com'
1014
+ GCLOUD_RUN_canonicalHostSuffix: '$CL_prod_app_GCLOUD_RUN_canonicalHostSuffix'
1015
+ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","HOST","ROOT_URL","HOST_CANONICAL","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]'
1016
+ ",
1017
+ "GCLOUD_DEPLOY_credentialsKey": "$CL_prod_app_GCLOUD_DEPLOY_credentialsKey",
1018
+ "GCLOUD_RUN_canonicalHostSuffix": "$CL_prod_app_GCLOUD_RUN_canonicalHostSuffix",
1019
+ "HOST": "pan-test-app-prod-app-unknown-host.example.com",
1020
+ "HOST_CANONICAL": "pan-test-app-prod-app-unknown-host.example.com",
1021
+ "KUBERNETES_CPU_LIMIT": "1",
1022
+ "KUBERNETES_CPU_REQUEST": "0.5",
1023
+ "KUBERNETES_MEMORY_LIMIT": "500Mi",
1024
+ "KUBERNETES_MEMORY_REQUEST": "200Mi",
1025
+ "ROOT_URL": "https://pan-test-app-prod-app-unknown-host.example.com",
1026
+ "_ALL_ENV_VAR_KEYS": "["ENV_SHORT","APP_DIR","ENV_TYPE","HOST","ROOT_URL","HOST_CANONICAL","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]",
1027
+ },
1028
+ },
1029
+ "app ๐Ÿš€ Deploy | stage ": {
1030
+ "allow_failure": false,
1031
+ "artifacts": {
1032
+ "paths": [
1033
+ "____envvars.yaml",
1034
+ ],
1035
+ },
1036
+ "environment": {
1037
+ "auto_stop_in": undefined,
1038
+ "name": "stage/app",
1039
+ "on_stop": "app ๐Ÿ›‘ Stop โš ๏ธ | stage ",
1040
+ "url": "https://pan-test-app-stage-app-unknown-host.example.com",
1041
+ },
1042
+ "image": "path/to/docker/gcloud:the-version",
1043
+ "interruptible": true,
1044
+ "needs": [
1045
+ {
1046
+ "artifacts": false,
1047
+ "job": "app ๐Ÿ”จ app | stage ",
1048
+ },
1049
+ {
1050
+ "artifacts": false,
1051
+ "job": "app ๐Ÿ”จ docker | stage ",
1052
+ },
1053
+ ],
1054
+ "retry": {
1055
+ "max": 2,
1056
+ "when": [
1057
+ "runner_system_failure",
1058
+ "stuck_or_timeout_failure",
1059
+ ],
1060
+ },
1061
+ "rules": [
1062
+ {
1063
+ "when": "on_success",
1064
+ },
1065
+ ],
1066
+ "script": [
1067
+ "echo $CL_stage_app_GCLOUD_DEPLOY_credentialsKey > ./____keyfile.json
1068
+ ",
1069
+ "gcloud auth activate-service-account --key-file="./____keyfile.json"",
1070
+ "export GCLOUD_PROJECT_NUMBER=$(gcloud projects describe asdf --format="value(projectNumber)")",
1071
+ "echo "GCLOUD_PROJECT_NUMBER: $GCLOUD_PROJECT_NUMBER"",
1072
+ "docker login --username gitlab-ci-token --password $CI_JOB_TOKEN $CI_REGISTRY",
1073
+ "gcloud auth configure-docker asia-east1-docker.pkg.dev",
1074
+ "docker pull $DOCKER_IMAGE:$DOCKER_IMAGE_TAG",
1075
+ "docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG",
1076
+ "docker push asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG",
1077
+ "echo "$ENV_VARS" > ____envvars.yaml",
1078
+ "gcloud run deploy pan-test-app-stage-app --command="" --image=asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG --project=asdf --region=asia-east1 --labels=customer-name=pan,app-name=test-app,env-type=stage,env-name=stage,build-type=custom --env-vars-file=____envvars.yaml --min-instances=0 --max-instances=100 --cpu-throttling --allow-unauthenticated",
1079
+ "docker image rm asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG",
1080
+ ],
1081
+ "services": [
1082
+ {
1083
+ "command": [
1084
+ "--tls=false",
1085
+ ],
1086
+ "name": "docker:20-dind",
1087
+ },
1088
+ ],
1089
+ "stage": "deploy stage",
1090
+ "variables": {
1091
+ "APP_DIR": ".",
1092
+ "CLOUDSDK_CORE_DISABLE_PROMPTS": "1",
1093
+ "DOCKER_BUILDKIT": "1",
1094
+ "DOCKER_CACHE_IMAGE": "$DOCKER_REGISTRY_IMAGE_PATH/caches/app",
1095
+ "DOCKER_DRIVER": "overlay2",
1096
+ "DOCKER_HOST": "tcp://0.0.0.0:2375",
1097
+ "DOCKER_IMAGE": "$DOCKER_REGISTRY_IMAGE_PATH/$DOCKER_IMAGE_NAME",
1098
+ "DOCKER_IMAGE_NAME": "stage/app",
1099
+ "DOCKER_IMAGE_TAG": "$CI_COMMIT_SHA",
1100
+ "DOCKER_REGISTRY": "$CI_REGISTRY",
1101
+ "DOCKER_REGISTRY_IMAGE_PATH": "$CI_REGISTRY_IMAGE",
1102
+ "DOCKER_TLS_CERTDIR": "",
1103
+ "ENV_SHORT": "stage",
1104
+ "ENV_TYPE": "stage",
1105
+ "ENV_VARS": "ENV_SHORT: 'stage'
1106
+ APP_DIR: '.'
1107
+ ENV_TYPE: 'stage'
1108
+ HOST: 'pan-test-app-stage-app-unknown-host.example.com'
1109
+ ROOT_URL: 'https://pan-test-app-stage-app-unknown-host.example.com'
1110
+ HOST_CANONICAL: 'pan-test-app-stage-app-unknown-host.example.com'
1111
+ GCLOUD_RUN_canonicalHostSuffix: '$CL_stage_app_GCLOUD_RUN_canonicalHostSuffix'
1112
+ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","HOST","ROOT_URL","HOST_CANONICAL","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]'
1113
+ ",
1114
+ "GCLOUD_DEPLOY_credentialsKey": "$CL_stage_app_GCLOUD_DEPLOY_credentialsKey",
1115
+ "GCLOUD_RUN_canonicalHostSuffix": "$CL_stage_app_GCLOUD_RUN_canonicalHostSuffix",
1116
+ "HOST": "pan-test-app-stage-app-unknown-host.example.com",
1117
+ "HOST_CANONICAL": "pan-test-app-stage-app-unknown-host.example.com",
1118
+ "KUBERNETES_CPU_LIMIT": "1",
1119
+ "KUBERNETES_CPU_REQUEST": "0.5",
1120
+ "KUBERNETES_MEMORY_LIMIT": "500Mi",
1121
+ "KUBERNETES_MEMORY_REQUEST": "200Mi",
1122
+ "ROOT_URL": "https://pan-test-app-stage-app-unknown-host.example.com",
1123
+ "_ALL_ENV_VAR_KEYS": "["ENV_SHORT","APP_DIR","ENV_TYPE","HOST","ROOT_URL","HOST_CANONICAL","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]",
1124
+ },
1125
+ },
1126
+ "app ๐Ÿ›‘ Stop โš ๏ธ | prod ": {
1127
+ "environment": {
1128
+ "action": "stop",
1129
+ "name": "prod/app",
1130
+ "url": "https://pan-test-app-prod-app-unknown-host.example.com",
1131
+ },
1132
+ "image": "path/to/docker/gcloud:the-version",
1133
+ "interruptible": true,
1134
+ "needs": [],
1135
+ "retry": {
1136
+ "max": 2,
1137
+ "when": [
1138
+ "runner_system_failure",
1139
+ "stuck_or_timeout_failure",
1140
+ ],
1141
+ },
1142
+ "rules": [
1143
+ {
1144
+ "allow_failure": true,
1145
+ "if": "$CI_COMMIT_BRANCH =~ /^[0-9]+\\.([0-9]+|x)\\.x$/",
1146
+ "when": "on_success",
1147
+ },
1148
+ {
1149
+ "allow_failure": true,
1150
+ "when": "manual",
1151
+ },
1152
+ ],
1153
+ "script": [
1154
+ "set +e",
1155
+ "echo $CL_prod_app_GCLOUD_DEPLOY_credentialsKey > ./____keyfile.json
1156
+ ",
1157
+ "gcloud auth activate-service-account --key-file="./____keyfile.json"",
1158
+ "gcloud run services delete pan-test-app-prod-app --project=asdf --region=asia-east1",
1159
+ "set -e",
1160
+ ],
1161
+ "stage": "stop prod",
1162
+ "variables": {
1163
+ "CLOUDSDK_CORE_DISABLE_PROMPTS": "1",
1164
+ "GIT_STRATEGY": "none",
1165
+ "KUBERNETES_CPU_LIMIT": "1",
1166
+ "KUBERNETES_CPU_REQUEST": "0.5",
1167
+ "KUBERNETES_MEMORY_LIMIT": "500Mi",
1168
+ "KUBERNETES_MEMORY_REQUEST": "200Mi",
1169
+ },
1170
+ },
1171
+ "app ๐Ÿ›‘ Stop โš ๏ธ | stage ": {
1172
+ "environment": {
1173
+ "action": "stop",
1174
+ "name": "stage/app",
1175
+ "url": "https://pan-test-app-stage-app-unknown-host.example.com",
1176
+ },
1177
+ "image": "path/to/docker/gcloud:the-version",
1178
+ "interruptible": true,
1179
+ "needs": [],
1180
+ "retry": {
1181
+ "max": 2,
1182
+ "when": [
1183
+ "runner_system_failure",
1184
+ "stuck_or_timeout_failure",
1185
+ ],
1186
+ },
1187
+ "rules": [
1188
+ {
1189
+ "allow_failure": true,
1190
+ "if": "$CI_COMMIT_BRANCH =~ /^[0-9]+\\.([0-9]+|x)\\.x$/",
1191
+ "when": "on_success",
1192
+ },
1193
+ {
1194
+ "allow_failure": true,
1195
+ "when": "manual",
1196
+ },
1197
+ ],
1198
+ "script": [
1199
+ "set +e",
1200
+ "echo $CL_stage_app_GCLOUD_DEPLOY_credentialsKey > ./____keyfile.json
1201
+ ",
1202
+ "gcloud auth activate-service-account --key-file="./____keyfile.json"",
1203
+ "gcloud run services delete pan-test-app-stage-app --project=asdf --region=asia-east1",
1204
+ "set -e",
1205
+ ],
1206
+ "stage": "stop stage",
1207
+ "variables": {
1208
+ "CLOUDSDK_CORE_DISABLE_PROMPTS": "1",
1209
+ "GIT_STRATEGY": "none",
1210
+ "KUBERNETES_CPU_LIMIT": "1",
1211
+ "KUBERNETES_CPU_REQUEST": "0.5",
1212
+ "KUBERNETES_MEMORY_LIMIT": "500Mi",
1213
+ "KUBERNETES_MEMORY_REQUEST": "200Mi",
1214
+ },
1215
+ },
1216
+ "app ๐Ÿงพ sbom upload | prod ": {
1217
+ "allow_failure": true,
1218
+ "cache": undefined,
1219
+ "environment": undefined,
1220
+ "image": "git.panter.ch:5001/open-source/dependency-track-uploader:dtrackuploader-v0.2.1",
1221
+ "interruptible": true,
1222
+ "needs": [
1223
+ "app ๐Ÿงพ sbom | prod ",
1224
+ ],
1225
+ "retry": {
1226
+ "max": 2,
1227
+ "when": [
1228
+ "runner_system_failure",
1229
+ "stuck_or_timeout_failure",
1230
+ ],
1231
+ },
1232
+ "script": [
1233
+ "/dtrackuploader https://dep.panter.dev/ "$DT_KEY" upload "pan-test-app/app" "prod" "__sbom.json" vex.json",
1234
+ ],
1235
+ "stage": "verify",
1236
+ "variables": {},
1237
+ },
1238
+ "app ๐Ÿงพ sbom upload | stage ": {
1239
+ "allow_failure": true,
1240
+ "cache": undefined,
1241
+ "environment": undefined,
1242
+ "image": "git.panter.ch:5001/open-source/dependency-track-uploader:dtrackuploader-v0.2.1",
1243
+ "interruptible": true,
1244
+ "needs": [
1245
+ "app ๐Ÿงพ sbom | stage ",
1246
+ ],
1247
+ "retry": {
1248
+ "max": 2,
1249
+ "when": [
1250
+ "runner_system_failure",
1251
+ "stuck_or_timeout_failure",
1252
+ ],
1253
+ },
1254
+ "script": [
1255
+ "/dtrackuploader https://dep.panter.dev/ "$DT_KEY" upload "pan-test-app/app" "stage" "__sbom.json" vex.json",
1256
+ ],
1257
+ "stage": "verify",
1258
+ "variables": {},
1259
+ },
1260
+ "app ๐Ÿงพ sbom | prod ": {
1261
+ "allow_failure": true,
1262
+ "artifacts": {
1263
+ "paths": [
1264
+ "__sbom.json",
1265
+ ],
1266
+ },
1267
+ "cache": undefined,
1268
+ "environment": undefined,
1269
+ "image": "maven:3-eclipse-temurin-11",
1270
+ "interruptible": true,
1271
+ "needs": [
1272
+ "app ๐Ÿš€ Deploy | prod ",
1273
+ ],
1274
+ "retry": {
1275
+ "max": 2,
1276
+ "when": [
1277
+ "runner_system_failure",
1278
+ "stuck_or_timeout_failure",
1279
+ ],
1280
+ },
1281
+ "script": [
1282
+ "mvn org.cyclonedx:cyclonedx-maven-plugin:2.7.4:makeBom",
1283
+ "mv target/bom.json __sbom.json",
1284
+ ],
1285
+ "stage": "verify",
1286
+ "variables": {},
1287
+ },
1288
+ "app ๐Ÿงพ sbom | stage ": {
1289
+ "allow_failure": true,
1290
+ "artifacts": {
1291
+ "paths": [
1292
+ "__sbom.json",
1293
+ ],
1294
+ },
1295
+ "cache": undefined,
1296
+ "environment": undefined,
1297
+ "image": "maven:3-eclipse-temurin-11",
1298
+ "interruptible": true,
1299
+ "needs": [
1300
+ "app ๐Ÿš€ Deploy | stage ",
1301
+ ],
1302
+ "retry": {
1303
+ "max": 2,
1304
+ "when": [
1305
+ "runner_system_failure",
1306
+ "stuck_or_timeout_failure",
1307
+ ],
1308
+ },
1309
+ "script": [
1310
+ "mvn org.cyclonedx:cyclonedx-maven-plugin:2.7.4:makeBom",
1311
+ "mv target/bom.json __sbom.json",
1312
+ ],
1313
+ "stage": "verify",
1314
+ "variables": {},
1315
+ },
1316
+ },
1317
+ "stages": [
1318
+ "setup",
1319
+ "setup dev",
1320
+ "setup review",
1321
+ "setup stage",
1322
+ "setup prod",
1323
+ "setup local",
1324
+ "test",
1325
+ "test dev",
1326
+ "test review",
1327
+ "test stage",
1328
+ "test prod",
1329
+ "test local",
1330
+ "build",
1331
+ "build dev",
1332
+ "build review",
1333
+ "build stage",
1334
+ "build prod",
1335
+ "build local",
1336
+ "deploy",
1337
+ "deploy dev",
1338
+ "deploy review",
1339
+ "deploy stage",
1340
+ "deploy prod",
1341
+ "deploy local",
1342
+ "verify",
1343
+ "verify dev",
1344
+ "verify review",
1345
+ "verify stage",
1346
+ "verify prod",
1347
+ "verify local",
1348
+ "rollback",
1349
+ "rollback dev",
1350
+ "rollback review",
1351
+ "rollback stage",
1352
+ "rollback prod",
1353
+ "rollback local",
1354
+ "stop",
1355
+ "stop dev",
1356
+ "stop review",
1357
+ "stop stage",
1358
+ "stop prod",
1359
+ "stop local",
1360
+ ],
1361
+ "variables": {
1362
+ "FF_USE_FASTZIP": "true",
1363
+ },
1364
+ "workflow": {
1365
+ "rules": [
1366
+ {
1367
+ "if": "$CI_COMMIT_TAG",
1368
+ },
1369
+ {
1370
+ "if": "$CI_COMMIT_MESSAGE =~ /^chore\\(release\\).*/",
1371
+ "when": "never",
1372
+ },
1373
+ {
1374
+ "if": "$CI_COMMIT_BRANCH =~ /^[0-9]+.([0-9]+|x).x$/",
1375
+ },
1376
+ {
1377
+ "if": "$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH",
1378
+ },
1379
+ {
1380
+ "if": "$CI_MERGE_REQUEST_ID",
1381
+ },
1382
+ ],
1383
+ },
1384
+ },
1385
+ }
1386
+ `;