@catladder/pipeline 1.109.2 โ†’ 1.110.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.
@@ -0,0 +1,1808 @@
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
+ "www ๐Ÿ‘ฎ lint": {
9
+ "cache": [
10
+ {
11
+ "key": "www-yarn",
12
+ "paths": [
13
+ "www/.yarn",
14
+ ],
15
+ "policy": "pull-push",
16
+ },
17
+ {
18
+ "key": "www-node-modules",
19
+ "paths": [
20
+ "www/node_modules",
21
+ ],
22
+ "policy": "pull-push",
23
+ },
24
+ ],
25
+ "interruptible": true,
26
+ "needs": [],
27
+ "retry": {
28
+ "max": 2,
29
+ "when": [
30
+ "runner_system_failure",
31
+ "stuck_or_timeout_failure",
32
+ ],
33
+ },
34
+ "script": [
35
+ "cd www",
36
+ "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
37
+ "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
38
+ "yarn install --immutable",
39
+ "yarn lint",
40
+ ],
41
+ "stage": "test",
42
+ "variables": {
43
+ "APP_PATH": "www",
44
+ "KUBERNETES_CPU_LIMIT": "2",
45
+ "KUBERNETES_CPU_REQUEST": "0.5",
46
+ "KUBERNETES_MEMORY_LIMIT": "4Gi",
47
+ "KUBERNETES_MEMORY_REQUEST": "2Gi",
48
+ },
49
+ },
50
+ "www ๐Ÿ”จ app | dev ": {
51
+ "artifacts": {
52
+ "expire_in": "1 day",
53
+ "paths": [
54
+ "www/__build_info.json",
55
+ "www/dist",
56
+ "www/.next",
57
+ ],
58
+ "reports": {
59
+ "junit": undefined,
60
+ },
61
+ },
62
+ "cache": [
63
+ {
64
+ "key": "www-yarn",
65
+ "paths": [
66
+ "www/.yarn",
67
+ ],
68
+ "policy": "pull-push",
69
+ },
70
+ {
71
+ "key": "www-node-modules",
72
+ "paths": [
73
+ "www/node_modules",
74
+ ],
75
+ "policy": "pull-push",
76
+ },
77
+ {
78
+ "key": "www-next-cache",
79
+ "paths": [
80
+ "www/.next/cache/",
81
+ ],
82
+ "policy": "pull-push",
83
+ },
84
+ ],
85
+ "image": "my-custom-image",
86
+ "interruptible": true,
87
+ "needs": [],
88
+ "retry": {
89
+ "max": 2,
90
+ "when": [
91
+ "runner_system_failure",
92
+ "stuck_or_timeout_failure",
93
+ ],
94
+ },
95
+ "script": [
96
+ "echo '{"id":"some-id","time":"01-01-2023 12:13:14"}' > www/__build_info.json",
97
+ "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
98
+ "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
99
+ "cd www",
100
+ "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
101
+ "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
102
+ "yarn install --immutable",
103
+ "yarn build",
104
+ ],
105
+ "stage": "build",
106
+ "variables": {
107
+ "APP_DIR": "www",
108
+ "BUILD_INFO_BUILD_TIME": "01-01-2023 12:13:14",
109
+ "BUILD_INFO_CURRENT_VERSION": "3.2.1",
110
+ "BUILD_INFO_ID": "some-id",
111
+ "ENV_SHORT": "dev",
112
+ "ENV_TYPE": "dev",
113
+ "GCLOUD_DEPLOY_credentialsKey": "$CL_dev_www_GCLOUD_DEPLOY_credentialsKey",
114
+ "GCLOUD_RUN_canonicalHostSuffix": "$CL_dev_www_GCLOUD_RUN_canonicalHostSuffix",
115
+ "HOST": "pan-test-app-dev-www-unknown-host.example.com",
116
+ "HOST_CANONICAL": "pan-test-app-dev-www-unknown-host.example.com",
117
+ "KUBERNETES_CPU_LIMIT": "2",
118
+ "KUBERNETES_CPU_REQUEST": "0.5",
119
+ "KUBERNETES_MEMORY_LIMIT": "4Gi",
120
+ "KUBERNETES_MEMORY_REQUEST": "2Gi",
121
+ "ROOT_URL": "https://pan-test-app-dev-www-unknown-host.example.com",
122
+ "_ALL_ENV_VAR_KEYS": "["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","HOST_CANONICAL","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]",
123
+ },
124
+ },
125
+ "www ๐Ÿ”จ docker | dev ": {
126
+ "cache": [
127
+ {
128
+ "key": "www-yarn",
129
+ "paths": [
130
+ "www/.yarn",
131
+ ],
132
+ "policy": "pull",
133
+ },
134
+ ],
135
+ "image": "path/to/docker/docker-build:the-version",
136
+ "interruptible": true,
137
+ "needs": [
138
+ "www ๐Ÿ”จ app | dev ",
139
+ ],
140
+ "retry": {
141
+ "max": 2,
142
+ "when": [
143
+ "runner_system_failure",
144
+ "stuck_or_timeout_failure",
145
+ ],
146
+ },
147
+ "script": [
148
+ "ensureNodeDockerfile",
149
+ "docker login --username gitlab-ci-token --password $CI_JOB_TOKEN $CI_REGISTRY",
150
+ "docker version",
151
+ "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",
152
+ "docker push $DOCKER_IMAGE:$DOCKER_IMAGE_TAG",
153
+ "docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG $DOCKER_CACHE_IMAGE",
154
+ "docker push $DOCKER_CACHE_IMAGE",
155
+ ],
156
+ "services": [
157
+ {
158
+ "command": [
159
+ "--tls=false",
160
+ ],
161
+ "name": "docker:20-dind",
162
+ },
163
+ ],
164
+ "stage": "build",
165
+ "variables": {
166
+ "APP_DIR": "www",
167
+ "DOCKERFILE_ADDITIONS": undefined,
168
+ "DOCKERFILE_ADDITIONS_END": undefined,
169
+ "DOCKER_BUILDKIT": "1",
170
+ "DOCKER_CACHE_IMAGE": "$DOCKER_REGISTRY_IMAGE_PATH/caches/www",
171
+ "DOCKER_COPY_AND_INSTALL_APP": "COPY --chown=node:node $APP_DIR .
172
+ RUN yarn plugin import workspace-tools
173
+ RUN yarn workspaces focus --production && yarn rebuild",
174
+ "DOCKER_COPY_WORKSPACE_FILES": "COPY --chown=node:node www/package.json /app/www/package.json
175
+ COPY --chown=node:node www/yarn.lock /app/www/yarn.lock
176
+ COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
177
+ COPY --chown=node:node .yarn /app/.yarn",
178
+ "DOCKER_DIR": ".",
179
+ "DOCKER_DRIVER": "overlay2",
180
+ "DOCKER_HOST": "tcp://0.0.0.0:2375",
181
+ "DOCKER_IMAGE": "$DOCKER_REGISTRY_IMAGE_PATH/$DOCKER_IMAGE_NAME",
182
+ "DOCKER_IMAGE_NAME": "dev/www",
183
+ "DOCKER_IMAGE_TAG": "$CI_COMMIT_SHA",
184
+ "DOCKER_REGISTRY": "$CI_REGISTRY",
185
+ "DOCKER_REGISTRY_IMAGE_PATH": "$CI_REGISTRY_IMAGE",
186
+ "DOCKER_TLS_CERTDIR": "",
187
+ "KUBERNETES_CPU_LIMIT": "1",
188
+ "KUBERNETES_CPU_REQUEST": "0.5",
189
+ "KUBERNETES_MEMORY_LIMIT": "2Gi",
190
+ "KUBERNETES_MEMORY_REQUEST": "1Gi",
191
+ },
192
+ },
193
+ "www ๐Ÿš€ Deploy | dev ": {
194
+ "allow_failure": false,
195
+ "artifacts": {
196
+ "paths": [
197
+ "____envvars.yaml",
198
+ ],
199
+ },
200
+ "environment": {
201
+ "auto_stop_in": "4 weeks",
202
+ "name": "dev/www",
203
+ "on_stop": "www ๐Ÿ›‘ Stop โš ๏ธ | dev ",
204
+ "url": "https://pan-test-app-dev-www-unknown-host.example.com",
205
+ },
206
+ "image": "path/to/docker/gcloud:the-version",
207
+ "interruptible": true,
208
+ "needs": [
209
+ {
210
+ "artifacts": false,
211
+ "job": "www ๐Ÿ‘ฎ lint",
212
+ },
213
+ {
214
+ "artifacts": false,
215
+ "job": "www ๐Ÿ”จ app | dev ",
216
+ },
217
+ {
218
+ "artifacts": false,
219
+ "job": "www ๐Ÿ”จ docker | dev ",
220
+ },
221
+ {
222
+ "artifacts": false,
223
+ "job": "www ๐Ÿงช test",
224
+ },
225
+ {
226
+ "artifacts": false,
227
+ "job": "www ๐Ÿ›ก audit",
228
+ },
229
+ ],
230
+ "retry": {
231
+ "max": 2,
232
+ "when": [
233
+ "runner_system_failure",
234
+ "stuck_or_timeout_failure",
235
+ ],
236
+ },
237
+ "rules": [
238
+ {
239
+ "when": "on_success",
240
+ },
241
+ ],
242
+ "script": [
243
+ "echo $CL_dev_www_GCLOUD_DEPLOY_credentialsKey > ./____keyfile.json
244
+ ",
245
+ "gcloud auth activate-service-account --key-file="./____keyfile.json"",
246
+ "export GCLOUD_PROJECT_NUMBER=$(gcloud projects describe asdf --format="value(projectNumber)")",
247
+ "echo "GCLOUD_PROJECT_NUMBER: $GCLOUD_PROJECT_NUMBER"",
248
+ "docker login --username gitlab-ci-token --password $CI_JOB_TOKEN $CI_REGISTRY",
249
+ "gcloud auth configure-docker asia-east1-docker.pkg.dev",
250
+ "docker pull $DOCKER_IMAGE:$DOCKER_IMAGE_TAG",
251
+ "docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG",
252
+ "docker push asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG",
253
+ "echo "$ENV_VARS" > ____envvars.yaml",
254
+ "gcloud run deploy pan-test-app-dev-www --command="yarn,start" --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=node --env-vars-file=____envvars.yaml --min-instances=0 --max-instances=100 --cpu-throttling --allow-unauthenticated --cpu-boost",
255
+ "docker image rm asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG",
256
+ ],
257
+ "services": [
258
+ {
259
+ "command": [
260
+ "--tls=false",
261
+ ],
262
+ "name": "docker:20-dind",
263
+ },
264
+ ],
265
+ "stage": "deploy dev",
266
+ "variables": {
267
+ "APP_DIR": "www",
268
+ "BUILD_INFO_BUILD_TIME": "01-01-2023 12:13:14",
269
+ "BUILD_INFO_CURRENT_VERSION": "3.2.1",
270
+ "BUILD_INFO_ID": "some-id",
271
+ "CLOUDSDK_CORE_DISABLE_PROMPTS": "1",
272
+ "DOCKER_BUILDKIT": "1",
273
+ "DOCKER_CACHE_IMAGE": "$DOCKER_REGISTRY_IMAGE_PATH/caches/www",
274
+ "DOCKER_DRIVER": "overlay2",
275
+ "DOCKER_HOST": "tcp://0.0.0.0:2375",
276
+ "DOCKER_IMAGE": "$DOCKER_REGISTRY_IMAGE_PATH/$DOCKER_IMAGE_NAME",
277
+ "DOCKER_IMAGE_NAME": "dev/www",
278
+ "DOCKER_IMAGE_TAG": "$CI_COMMIT_SHA",
279
+ "DOCKER_REGISTRY": "$CI_REGISTRY",
280
+ "DOCKER_REGISTRY_IMAGE_PATH": "$CI_REGISTRY_IMAGE",
281
+ "DOCKER_TLS_CERTDIR": "",
282
+ "ENV_SHORT": "dev",
283
+ "ENV_TYPE": "dev",
284
+ "ENV_VARS": "ENV_SHORT: 'dev'
285
+ APP_DIR: 'www'
286
+ ENV_TYPE: 'dev'
287
+ BUILD_INFO_ID: 'some-id'
288
+ BUILD_INFO_BUILD_TIME: '01-01-2023 12:13:14'
289
+ BUILD_INFO_CURRENT_VERSION: '3.2.1'
290
+ HOST: 'pan-test-app-dev-www-unknown-host.example.com'
291
+ ROOT_URL: 'https://pan-test-app-dev-www-unknown-host.example.com'
292
+ HOST_CANONICAL: 'pan-test-app-dev-www-unknown-host.example.com'
293
+ GCLOUD_RUN_canonicalHostSuffix: '$CL_dev_www_GCLOUD_RUN_canonicalHostSuffix'
294
+ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","HOST_CANONICAL","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]'
295
+ ",
296
+ "GCLOUD_DEPLOY_credentialsKey": "$CL_dev_www_GCLOUD_DEPLOY_credentialsKey",
297
+ "GCLOUD_RUN_canonicalHostSuffix": "$CL_dev_www_GCLOUD_RUN_canonicalHostSuffix",
298
+ "HOST": "pan-test-app-dev-www-unknown-host.example.com",
299
+ "HOST_CANONICAL": "pan-test-app-dev-www-unknown-host.example.com",
300
+ "KUBERNETES_CPU_LIMIT": "1",
301
+ "KUBERNETES_CPU_REQUEST": "0.5",
302
+ "KUBERNETES_MEMORY_LIMIT": "400Mi",
303
+ "KUBERNETES_MEMORY_REQUEST": "200Mi",
304
+ "ROOT_URL": "https://pan-test-app-dev-www-unknown-host.example.com",
305
+ "_ALL_ENV_VAR_KEYS": "["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","HOST_CANONICAL","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]",
306
+ },
307
+ },
308
+ "www ๐Ÿ›‘ Stop โš ๏ธ | dev ": {
309
+ "environment": {
310
+ "action": "stop",
311
+ "name": "dev/www",
312
+ "url": "https://pan-test-app-dev-www-unknown-host.example.com",
313
+ },
314
+ "image": "path/to/docker/gcloud:the-version",
315
+ "interruptible": true,
316
+ "needs": [],
317
+ "retry": {
318
+ "max": 2,
319
+ "when": [
320
+ "runner_system_failure",
321
+ "stuck_or_timeout_failure",
322
+ ],
323
+ },
324
+ "rules": [
325
+ {
326
+ "allow_failure": true,
327
+ "if": "$CI_COMMIT_BRANCH =~ /^[0-9]+\\.([0-9]+|x)\\.x$/",
328
+ "when": "on_success",
329
+ },
330
+ {
331
+ "allow_failure": true,
332
+ "when": "manual",
333
+ },
334
+ ],
335
+ "script": [
336
+ "set +e",
337
+ "echo $CL_dev_www_GCLOUD_DEPLOY_credentialsKey > ./____keyfile.json
338
+ ",
339
+ "gcloud auth activate-service-account --key-file="./____keyfile.json"",
340
+ "gcloud run services delete pan-test-app-dev-www --project=asdf --region=asia-east1",
341
+ "set -e",
342
+ ],
343
+ "stage": "stop dev",
344
+ "variables": {
345
+ "CLOUDSDK_CORE_DISABLE_PROMPTS": "1",
346
+ "GIT_STRATEGY": "none",
347
+ "KUBERNETES_CPU_LIMIT": "1",
348
+ "KUBERNETES_CPU_REQUEST": "0.5",
349
+ "KUBERNETES_MEMORY_LIMIT": "400Mi",
350
+ "KUBERNETES_MEMORY_REQUEST": "200Mi",
351
+ },
352
+ },
353
+ "www ๐Ÿ›ก audit": {
354
+ "allow_failure": true,
355
+ "interruptible": true,
356
+ "needs": [],
357
+ "retry": {
358
+ "max": 2,
359
+ "when": [
360
+ "runner_system_failure",
361
+ "stuck_or_timeout_failure",
362
+ ],
363
+ },
364
+ "script": [
365
+ "cd www",
366
+ "yarn npm audit --environment production",
367
+ ],
368
+ "stage": "test",
369
+ "variables": {
370
+ "APP_PATH": "www",
371
+ "KUBERNETES_CPU_LIMIT": "2",
372
+ "KUBERNETES_CPU_REQUEST": "0.5",
373
+ "KUBERNETES_MEMORY_LIMIT": "4Gi",
374
+ "KUBERNETES_MEMORY_REQUEST": "2Gi",
375
+ },
376
+ },
377
+ "www ๐Ÿงช test": {
378
+ "cache": [
379
+ {
380
+ "key": "www-yarn",
381
+ "paths": [
382
+ "www/.yarn",
383
+ ],
384
+ "policy": "pull-push",
385
+ },
386
+ {
387
+ "key": "www-node-modules",
388
+ "paths": [
389
+ "www/node_modules",
390
+ ],
391
+ "policy": "pull-push",
392
+ },
393
+ ],
394
+ "image": "path/to/docker/jobs-testing-chrome:the-version",
395
+ "interruptible": true,
396
+ "needs": [],
397
+ "retry": {
398
+ "max": 2,
399
+ "when": [
400
+ "runner_system_failure",
401
+ "stuck_or_timeout_failure",
402
+ ],
403
+ },
404
+ "script": [
405
+ "cd www",
406
+ "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
407
+ "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
408
+ "yarn install --immutable",
409
+ "yarn test",
410
+ ],
411
+ "stage": "test",
412
+ "variables": {
413
+ "APP_PATH": "www",
414
+ "KUBERNETES_CPU_LIMIT": "2",
415
+ "KUBERNETES_CPU_REQUEST": "0.5",
416
+ "KUBERNETES_MEMORY_LIMIT": "4Gi",
417
+ "KUBERNETES_MEMORY_REQUEST": "2Gi",
418
+ },
419
+ },
420
+ "www ๐Ÿงพ sbom upload | dev ": {
421
+ "allow_failure": true,
422
+ "image": "git.panter.ch:5001/open-source/dependency-track-uploader:dtrackuploader-v0.2.1",
423
+ "interruptible": true,
424
+ "needs": [
425
+ "www ๐Ÿงพ sbom | dev ",
426
+ ],
427
+ "retry": {
428
+ "max": 2,
429
+ "when": [
430
+ "runner_system_failure",
431
+ "stuck_or_timeout_failure",
432
+ ],
433
+ },
434
+ "script": [
435
+ "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/www" "dev" "__sbom.json" vex.json",
436
+ ],
437
+ "stage": "verify",
438
+ "variables": {},
439
+ },
440
+ "www ๐Ÿงพ sbom | dev ": {
441
+ "allow_failure": true,
442
+ "artifacts": {
443
+ "paths": [
444
+ "__sbom.json",
445
+ ],
446
+ },
447
+ "image": "aquasec/trivy:0.38.3",
448
+ "interruptible": true,
449
+ "needs": [
450
+ "www ๐Ÿš€ Deploy | dev ",
451
+ ],
452
+ "retry": {
453
+ "max": 2,
454
+ "when": [
455
+ "runner_system_failure",
456
+ "stuck_or_timeout_failure",
457
+ ],
458
+ },
459
+ "script": [
460
+ "trivy fs --quiet --format cyclonedx --output "__sbom.json" www",
461
+ ],
462
+ "stage": "verify",
463
+ "variables": {},
464
+ },
465
+ },
466
+ "stages": [
467
+ "setup",
468
+ "setup dev",
469
+ "setup review",
470
+ "setup stage",
471
+ "setup prod",
472
+ "setup local",
473
+ "test",
474
+ "test dev",
475
+ "test review",
476
+ "test stage",
477
+ "test prod",
478
+ "test local",
479
+ "build",
480
+ "build dev",
481
+ "build review",
482
+ "build stage",
483
+ "build prod",
484
+ "build local",
485
+ "deploy",
486
+ "deploy dev",
487
+ "deploy review",
488
+ "deploy stage",
489
+ "deploy prod",
490
+ "deploy local",
491
+ "verify",
492
+ "verify dev",
493
+ "verify review",
494
+ "verify stage",
495
+ "verify prod",
496
+ "verify local",
497
+ "rollback",
498
+ "rollback dev",
499
+ "rollback review",
500
+ "rollback stage",
501
+ "rollback prod",
502
+ "rollback local",
503
+ "stop",
504
+ "stop dev",
505
+ "stop review",
506
+ "stop stage",
507
+ "stop prod",
508
+ "stop local",
509
+ ],
510
+ "variables": {
511
+ "FF_USE_FASTZIP": "true",
512
+ },
513
+ "workflow": {
514
+ "rules": [
515
+ {
516
+ "if": "$CI_COMMIT_TAG",
517
+ },
518
+ {
519
+ "if": "$CI_COMMIT_MESSAGE =~ /^chore\\(release\\).*/",
520
+ "when": "never",
521
+ },
522
+ {
523
+ "if": "$CI_COMMIT_BRANCH =~ /^[0-9]+.([0-9]+|x).x$/",
524
+ },
525
+ {
526
+ "if": "$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH",
527
+ },
528
+ {
529
+ "if": "$CI_MERGE_REQUEST_ID",
530
+ },
531
+ ],
532
+ },
533
+ },
534
+ "mr": {
535
+ "image": "path/to/docker/jobs-default:the-version",
536
+ "jobs": {
537
+ "www ๐Ÿ‘ฎ lint": {
538
+ "cache": [
539
+ {
540
+ "key": "www-yarn",
541
+ "paths": [
542
+ "www/.yarn",
543
+ ],
544
+ "policy": "pull-push",
545
+ },
546
+ {
547
+ "key": "www-node-modules",
548
+ "paths": [
549
+ "www/node_modules",
550
+ ],
551
+ "policy": "pull-push",
552
+ },
553
+ ],
554
+ "interruptible": true,
555
+ "needs": [],
556
+ "retry": {
557
+ "max": 2,
558
+ "when": [
559
+ "runner_system_failure",
560
+ "stuck_or_timeout_failure",
561
+ ],
562
+ },
563
+ "script": [
564
+ "cd www",
565
+ "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
566
+ "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
567
+ "yarn install --immutable",
568
+ "yarn lint",
569
+ ],
570
+ "stage": "test",
571
+ "variables": {
572
+ "APP_PATH": "www",
573
+ "KUBERNETES_CPU_LIMIT": "2",
574
+ "KUBERNETES_CPU_REQUEST": "0.5",
575
+ "KUBERNETES_MEMORY_LIMIT": "4Gi",
576
+ "KUBERNETES_MEMORY_REQUEST": "2Gi",
577
+ },
578
+ },
579
+ "www ๐Ÿ”จ app | review ": {
580
+ "artifacts": {
581
+ "expire_in": "1 day",
582
+ "paths": [
583
+ "www/__build_info.json",
584
+ "www/dist",
585
+ "www/.next",
586
+ ],
587
+ "reports": {
588
+ "junit": undefined,
589
+ },
590
+ },
591
+ "cache": [
592
+ {
593
+ "key": "www-yarn",
594
+ "paths": [
595
+ "www/.yarn",
596
+ ],
597
+ "policy": "pull-push",
598
+ },
599
+ {
600
+ "key": "www-node-modules",
601
+ "paths": [
602
+ "www/node_modules",
603
+ ],
604
+ "policy": "pull-push",
605
+ },
606
+ {
607
+ "key": "www-next-cache",
608
+ "paths": [
609
+ "www/.next/cache/",
610
+ ],
611
+ "policy": "pull-push",
612
+ },
613
+ ],
614
+ "image": "my-custom-image",
615
+ "interruptible": true,
616
+ "needs": [],
617
+ "retry": {
618
+ "max": 2,
619
+ "when": [
620
+ "runner_system_failure",
621
+ "stuck_or_timeout_failure",
622
+ ],
623
+ },
624
+ "script": [
625
+ "echo '{"id":"some-id","time":"01-01-2023 12:13:14"}' > www/__build_info.json",
626
+ "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
627
+ "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
628
+ "cd www",
629
+ "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
630
+ "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
631
+ "yarn install --immutable",
632
+ "yarn build",
633
+ ],
634
+ "stage": "build",
635
+ "variables": {
636
+ "APP_DIR": "www",
637
+ "BUILD_INFO_BUILD_TIME": "01-01-2023 12:13:14",
638
+ "BUILD_INFO_CURRENT_VERSION": "3.2.1",
639
+ "BUILD_INFO_ID": "some-id",
640
+ "ENV_SHORT": "review",
641
+ "ENV_TYPE": "review",
642
+ "GCLOUD_DEPLOY_credentialsKey": "$CL_review_www_GCLOUD_DEPLOY_credentialsKey",
643
+ "GCLOUD_RUN_canonicalHostSuffix": "$CL_review_www_GCLOUD_RUN_canonicalHostSuffix",
644
+ "HOST": "pan-test-app-review-mr1234-www-unknown-host.example.com",
645
+ "HOST_CANONICAL": "pan-test-app-review-mr1234-www-unknown-host.example.com",
646
+ "KUBERNETES_CPU_LIMIT": "2",
647
+ "KUBERNETES_CPU_REQUEST": "0.5",
648
+ "KUBERNETES_MEMORY_LIMIT": "4Gi",
649
+ "KUBERNETES_MEMORY_REQUEST": "2Gi",
650
+ "ROOT_URL": "https://pan-test-app-review-mr1234-www-unknown-host.example.com",
651
+ "_ALL_ENV_VAR_KEYS": "["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","HOST_CANONICAL","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]",
652
+ },
653
+ },
654
+ "www ๐Ÿ”จ docker | review ": {
655
+ "cache": [
656
+ {
657
+ "key": "www-yarn",
658
+ "paths": [
659
+ "www/.yarn",
660
+ ],
661
+ "policy": "pull",
662
+ },
663
+ ],
664
+ "image": "path/to/docker/docker-build:the-version",
665
+ "interruptible": true,
666
+ "needs": [
667
+ "www ๐Ÿ”จ app | review ",
668
+ ],
669
+ "retry": {
670
+ "max": 2,
671
+ "when": [
672
+ "runner_system_failure",
673
+ "stuck_or_timeout_failure",
674
+ ],
675
+ },
676
+ "script": [
677
+ "ensureNodeDockerfile",
678
+ "docker login --username gitlab-ci-token --password $CI_JOB_TOKEN $CI_REGISTRY",
679
+ "docker version",
680
+ "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",
681
+ "docker push $DOCKER_IMAGE:$DOCKER_IMAGE_TAG",
682
+ "docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG $DOCKER_CACHE_IMAGE",
683
+ "docker push $DOCKER_CACHE_IMAGE",
684
+ ],
685
+ "services": [
686
+ {
687
+ "command": [
688
+ "--tls=false",
689
+ ],
690
+ "name": "docker:20-dind",
691
+ },
692
+ ],
693
+ "stage": "build",
694
+ "variables": {
695
+ "APP_DIR": "www",
696
+ "DOCKERFILE_ADDITIONS": undefined,
697
+ "DOCKERFILE_ADDITIONS_END": undefined,
698
+ "DOCKER_BUILDKIT": "1",
699
+ "DOCKER_CACHE_IMAGE": "$DOCKER_REGISTRY_IMAGE_PATH/caches/www",
700
+ "DOCKER_COPY_AND_INSTALL_APP": "COPY --chown=node:node $APP_DIR .
701
+ RUN yarn plugin import workspace-tools
702
+ RUN yarn workspaces focus --production && yarn rebuild",
703
+ "DOCKER_COPY_WORKSPACE_FILES": "COPY --chown=node:node www/package.json /app/www/package.json
704
+ COPY --chown=node:node www/yarn.lock /app/www/yarn.lock
705
+ COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
706
+ COPY --chown=node:node .yarn /app/.yarn",
707
+ "DOCKER_DIR": ".",
708
+ "DOCKER_DRIVER": "overlay2",
709
+ "DOCKER_HOST": "tcp://0.0.0.0:2375",
710
+ "DOCKER_IMAGE": "$DOCKER_REGISTRY_IMAGE_PATH/$DOCKER_IMAGE_NAME",
711
+ "DOCKER_IMAGE_NAME": "review/www",
712
+ "DOCKER_IMAGE_TAG": "$CI_COMMIT_SHA",
713
+ "DOCKER_REGISTRY": "$CI_REGISTRY",
714
+ "DOCKER_REGISTRY_IMAGE_PATH": "$CI_REGISTRY_IMAGE",
715
+ "DOCKER_TLS_CERTDIR": "",
716
+ "KUBERNETES_CPU_LIMIT": "1",
717
+ "KUBERNETES_CPU_REQUEST": "0.5",
718
+ "KUBERNETES_MEMORY_LIMIT": "2Gi",
719
+ "KUBERNETES_MEMORY_REQUEST": "1Gi",
720
+ },
721
+ },
722
+ "www ๐Ÿš€ Deploy | review ": {
723
+ "allow_failure": false,
724
+ "artifacts": {
725
+ "paths": [
726
+ "____envvars.yaml",
727
+ ],
728
+ },
729
+ "environment": {
730
+ "auto_stop_in": "2 week",
731
+ "name": "review/some-commit/www",
732
+ "on_stop": "www ๐Ÿ›‘ Stop โš ๏ธ | review ",
733
+ "url": "https://pan-test-app-review-mr1234-www-unknown-host.example.com",
734
+ },
735
+ "image": "path/to/docker/gcloud:the-version",
736
+ "interruptible": true,
737
+ "needs": [
738
+ {
739
+ "artifacts": false,
740
+ "job": "www ๐Ÿ‘ฎ lint",
741
+ },
742
+ {
743
+ "artifacts": false,
744
+ "job": "www ๐Ÿ”จ app | review ",
745
+ },
746
+ {
747
+ "artifacts": false,
748
+ "job": "www ๐Ÿ”จ docker | review ",
749
+ },
750
+ {
751
+ "artifacts": false,
752
+ "job": "www ๐Ÿงช test",
753
+ },
754
+ {
755
+ "artifacts": false,
756
+ "job": "www ๐Ÿ›ก audit",
757
+ },
758
+ ],
759
+ "retry": {
760
+ "max": 2,
761
+ "when": [
762
+ "runner_system_failure",
763
+ "stuck_or_timeout_failure",
764
+ ],
765
+ },
766
+ "rules": [
767
+ {
768
+ "when": "on_success",
769
+ },
770
+ ],
771
+ "script": [
772
+ "echo $CL_review_www_GCLOUD_DEPLOY_credentialsKey > ./____keyfile.json
773
+ ",
774
+ "gcloud auth activate-service-account --key-file="./____keyfile.json"",
775
+ "export GCLOUD_PROJECT_NUMBER=$(gcloud projects describe asdf --format="value(projectNumber)")",
776
+ "echo "GCLOUD_PROJECT_NUMBER: $GCLOUD_PROJECT_NUMBER"",
777
+ "docker login --username gitlab-ci-token --password $CI_JOB_TOKEN $CI_REGISTRY",
778
+ "gcloud auth configure-docker asia-east1-docker.pkg.dev",
779
+ "docker pull $DOCKER_IMAGE:$DOCKER_IMAGE_TAG",
780
+ "docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG",
781
+ "docker push asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG",
782
+ "echo "$ENV_VARS" > ____envvars.yaml",
783
+ "gcloud run deploy pan-test-app-review-mr1234-www --command="yarn,start" --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=node --env-vars-file=____envvars.yaml --min-instances=0 --max-instances=100 --cpu-throttling --allow-unauthenticated --cpu-boost",
784
+ "docker image rm asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG",
785
+ ],
786
+ "services": [
787
+ {
788
+ "command": [
789
+ "--tls=false",
790
+ ],
791
+ "name": "docker:20-dind",
792
+ },
793
+ ],
794
+ "stage": "deploy review",
795
+ "variables": {
796
+ "APP_DIR": "www",
797
+ "BUILD_INFO_BUILD_TIME": "01-01-2023 12:13:14",
798
+ "BUILD_INFO_CURRENT_VERSION": "3.2.1",
799
+ "BUILD_INFO_ID": "some-id",
800
+ "CLOUDSDK_CORE_DISABLE_PROMPTS": "1",
801
+ "DOCKER_BUILDKIT": "1",
802
+ "DOCKER_CACHE_IMAGE": "$DOCKER_REGISTRY_IMAGE_PATH/caches/www",
803
+ "DOCKER_DRIVER": "overlay2",
804
+ "DOCKER_HOST": "tcp://0.0.0.0:2375",
805
+ "DOCKER_IMAGE": "$DOCKER_REGISTRY_IMAGE_PATH/$DOCKER_IMAGE_NAME",
806
+ "DOCKER_IMAGE_NAME": "review/www",
807
+ "DOCKER_IMAGE_TAG": "$CI_COMMIT_SHA",
808
+ "DOCKER_REGISTRY": "$CI_REGISTRY",
809
+ "DOCKER_REGISTRY_IMAGE_PATH": "$CI_REGISTRY_IMAGE",
810
+ "DOCKER_TLS_CERTDIR": "",
811
+ "ENV_SHORT": "review",
812
+ "ENV_TYPE": "review",
813
+ "ENV_VARS": "ENV_SHORT: 'review'
814
+ APP_DIR: 'www'
815
+ ENV_TYPE: 'review'
816
+ BUILD_INFO_ID: 'some-id'
817
+ BUILD_INFO_BUILD_TIME: '01-01-2023 12:13:14'
818
+ BUILD_INFO_CURRENT_VERSION: '3.2.1'
819
+ HOST: 'pan-test-app-review-mr1234-www-unknown-host.example.com'
820
+ ROOT_URL: 'https://pan-test-app-review-mr1234-www-unknown-host.example.com'
821
+ HOST_CANONICAL: 'pan-test-app-review-mr1234-www-unknown-host.example.com'
822
+ GCLOUD_RUN_canonicalHostSuffix: '$CL_review_www_GCLOUD_RUN_canonicalHostSuffix'
823
+ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","HOST_CANONICAL","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]'
824
+ ",
825
+ "GCLOUD_DEPLOY_credentialsKey": "$CL_review_www_GCLOUD_DEPLOY_credentialsKey",
826
+ "GCLOUD_RUN_canonicalHostSuffix": "$CL_review_www_GCLOUD_RUN_canonicalHostSuffix",
827
+ "HOST": "pan-test-app-review-mr1234-www-unknown-host.example.com",
828
+ "HOST_CANONICAL": "pan-test-app-review-mr1234-www-unknown-host.example.com",
829
+ "KUBERNETES_CPU_LIMIT": "1",
830
+ "KUBERNETES_CPU_REQUEST": "0.5",
831
+ "KUBERNETES_MEMORY_LIMIT": "400Mi",
832
+ "KUBERNETES_MEMORY_REQUEST": "200Mi",
833
+ "ROOT_URL": "https://pan-test-app-review-mr1234-www-unknown-host.example.com",
834
+ "_ALL_ENV_VAR_KEYS": "["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","HOST_CANONICAL","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]",
835
+ },
836
+ },
837
+ "www ๐Ÿ›‘ Stop โš ๏ธ | review ": {
838
+ "environment": {
839
+ "action": "stop",
840
+ "name": "review/some-commit/www",
841
+ "url": "https://pan-test-app-review-mr1234-www-unknown-host.example.com",
842
+ },
843
+ "image": "path/to/docker/gcloud:the-version",
844
+ "interruptible": true,
845
+ "needs": [],
846
+ "retry": {
847
+ "max": 2,
848
+ "when": [
849
+ "runner_system_failure",
850
+ "stuck_or_timeout_failure",
851
+ ],
852
+ },
853
+ "rules": [
854
+ {
855
+ "allow_failure": true,
856
+ "if": "$CI_COMMIT_BRANCH =~ /^[0-9]+\\.([0-9]+|x)\\.x$/",
857
+ "when": "on_success",
858
+ },
859
+ {
860
+ "allow_failure": true,
861
+ "when": "manual",
862
+ },
863
+ ],
864
+ "script": [
865
+ "set +e",
866
+ "echo $CL_review_www_GCLOUD_DEPLOY_credentialsKey > ./____keyfile.json
867
+ ",
868
+ "gcloud auth activate-service-account --key-file="./____keyfile.json"",
869
+ "gcloud run services delete pan-test-app-review-mr1234-www --project=asdf --region=asia-east1",
870
+ "set -e",
871
+ ],
872
+ "stage": "stop review",
873
+ "variables": {
874
+ "CLOUDSDK_CORE_DISABLE_PROMPTS": "1",
875
+ "GIT_STRATEGY": "none",
876
+ "KUBERNETES_CPU_LIMIT": "1",
877
+ "KUBERNETES_CPU_REQUEST": "0.5",
878
+ "KUBERNETES_MEMORY_LIMIT": "400Mi",
879
+ "KUBERNETES_MEMORY_REQUEST": "200Mi",
880
+ },
881
+ },
882
+ "www ๐Ÿ›ก audit": {
883
+ "allow_failure": true,
884
+ "interruptible": true,
885
+ "needs": [],
886
+ "retry": {
887
+ "max": 2,
888
+ "when": [
889
+ "runner_system_failure",
890
+ "stuck_or_timeout_failure",
891
+ ],
892
+ },
893
+ "script": [
894
+ "cd www",
895
+ "yarn npm audit --environment production",
896
+ ],
897
+ "stage": "test",
898
+ "variables": {
899
+ "APP_PATH": "www",
900
+ "KUBERNETES_CPU_LIMIT": "2",
901
+ "KUBERNETES_CPU_REQUEST": "0.5",
902
+ "KUBERNETES_MEMORY_LIMIT": "4Gi",
903
+ "KUBERNETES_MEMORY_REQUEST": "2Gi",
904
+ },
905
+ },
906
+ "www ๐Ÿงช test": {
907
+ "cache": [
908
+ {
909
+ "key": "www-yarn",
910
+ "paths": [
911
+ "www/.yarn",
912
+ ],
913
+ "policy": "pull-push",
914
+ },
915
+ {
916
+ "key": "www-node-modules",
917
+ "paths": [
918
+ "www/node_modules",
919
+ ],
920
+ "policy": "pull-push",
921
+ },
922
+ ],
923
+ "image": "path/to/docker/jobs-testing-chrome:the-version",
924
+ "interruptible": true,
925
+ "needs": [],
926
+ "retry": {
927
+ "max": 2,
928
+ "when": [
929
+ "runner_system_failure",
930
+ "stuck_or_timeout_failure",
931
+ ],
932
+ },
933
+ "script": [
934
+ "cd www",
935
+ "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
936
+ "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
937
+ "yarn install --immutable",
938
+ "yarn test",
939
+ ],
940
+ "stage": "test",
941
+ "variables": {
942
+ "APP_PATH": "www",
943
+ "KUBERNETES_CPU_LIMIT": "2",
944
+ "KUBERNETES_CPU_REQUEST": "0.5",
945
+ "KUBERNETES_MEMORY_LIMIT": "4Gi",
946
+ "KUBERNETES_MEMORY_REQUEST": "2Gi",
947
+ },
948
+ },
949
+ "www ๐Ÿงพ sbom upload | review ": {
950
+ "allow_failure": true,
951
+ "image": "git.panter.ch:5001/open-source/dependency-track-uploader:dtrackuploader-v0.2.1",
952
+ "interruptible": true,
953
+ "needs": [
954
+ "www ๐Ÿงพ sbom | review ",
955
+ ],
956
+ "retry": {
957
+ "max": 2,
958
+ "when": [
959
+ "runner_system_failure",
960
+ "stuck_or_timeout_failure",
961
+ ],
962
+ },
963
+ "script": [
964
+ "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/www" "review" "__sbom.json" vex.json",
965
+ ],
966
+ "stage": "verify",
967
+ "variables": {},
968
+ },
969
+ "www ๐Ÿงพ sbom | review ": {
970
+ "allow_failure": true,
971
+ "artifacts": {
972
+ "paths": [
973
+ "__sbom.json",
974
+ ],
975
+ },
976
+ "image": "aquasec/trivy:0.38.3",
977
+ "interruptible": true,
978
+ "needs": [
979
+ "www ๐Ÿš€ Deploy | review ",
980
+ ],
981
+ "retry": {
982
+ "max": 2,
983
+ "when": [
984
+ "runner_system_failure",
985
+ "stuck_or_timeout_failure",
986
+ ],
987
+ },
988
+ "script": [
989
+ "trivy fs --quiet --format cyclonedx --output "__sbom.json" www",
990
+ ],
991
+ "stage": "verify",
992
+ "variables": {},
993
+ },
994
+ },
995
+ "stages": [
996
+ "setup",
997
+ "setup dev",
998
+ "setup review",
999
+ "setup stage",
1000
+ "setup prod",
1001
+ "setup local",
1002
+ "test",
1003
+ "test dev",
1004
+ "test review",
1005
+ "test stage",
1006
+ "test prod",
1007
+ "test local",
1008
+ "build",
1009
+ "build dev",
1010
+ "build review",
1011
+ "build stage",
1012
+ "build prod",
1013
+ "build local",
1014
+ "deploy",
1015
+ "deploy dev",
1016
+ "deploy review",
1017
+ "deploy stage",
1018
+ "deploy prod",
1019
+ "deploy local",
1020
+ "verify",
1021
+ "verify dev",
1022
+ "verify review",
1023
+ "verify stage",
1024
+ "verify prod",
1025
+ "verify local",
1026
+ "rollback",
1027
+ "rollback dev",
1028
+ "rollback review",
1029
+ "rollback stage",
1030
+ "rollback prod",
1031
+ "rollback local",
1032
+ "stop",
1033
+ "stop dev",
1034
+ "stop review",
1035
+ "stop stage",
1036
+ "stop prod",
1037
+ "stop local",
1038
+ ],
1039
+ "variables": {
1040
+ "FF_USE_FASTZIP": "true",
1041
+ },
1042
+ "workflow": {
1043
+ "rules": [
1044
+ {
1045
+ "if": "$CI_COMMIT_TAG",
1046
+ },
1047
+ {
1048
+ "if": "$CI_COMMIT_MESSAGE =~ /^chore\\(release\\).*/",
1049
+ "when": "never",
1050
+ },
1051
+ {
1052
+ "if": "$CI_COMMIT_BRANCH =~ /^[0-9]+.([0-9]+|x).x$/",
1053
+ },
1054
+ {
1055
+ "if": "$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH",
1056
+ },
1057
+ {
1058
+ "if": "$CI_MERGE_REQUEST_ID",
1059
+ },
1060
+ ],
1061
+ },
1062
+ },
1063
+ "taggedRelease": {
1064
+ "image": "path/to/docker/jobs-default:the-version",
1065
+ "jobs": {
1066
+ "www ๐Ÿ”จ app | prod ": {
1067
+ "artifacts": {
1068
+ "expire_in": "1 day",
1069
+ "paths": [
1070
+ "www/__build_info.json",
1071
+ "www/dist",
1072
+ "www/.next",
1073
+ ],
1074
+ "reports": {
1075
+ "junit": undefined,
1076
+ },
1077
+ },
1078
+ "cache": [
1079
+ {
1080
+ "key": "www-yarn",
1081
+ "paths": [
1082
+ "www/.yarn",
1083
+ ],
1084
+ "policy": "pull-push",
1085
+ },
1086
+ {
1087
+ "key": "www-node-modules",
1088
+ "paths": [
1089
+ "www/node_modules",
1090
+ ],
1091
+ "policy": "pull-push",
1092
+ },
1093
+ {
1094
+ "key": "www-next-cache",
1095
+ "paths": [
1096
+ "www/.next/cache/",
1097
+ ],
1098
+ "policy": "pull-push",
1099
+ },
1100
+ ],
1101
+ "image": "my-custom-image",
1102
+ "interruptible": true,
1103
+ "needs": [],
1104
+ "retry": {
1105
+ "max": 2,
1106
+ "when": [
1107
+ "runner_system_failure",
1108
+ "stuck_or_timeout_failure",
1109
+ ],
1110
+ },
1111
+ "script": [
1112
+ "echo '{"id":"some-id","time":"01-01-2023 12:13:14"}' > www/__build_info.json",
1113
+ "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
1114
+ "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
1115
+ "cd www",
1116
+ "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
1117
+ "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
1118
+ "yarn install --immutable",
1119
+ "yarn build",
1120
+ ],
1121
+ "stage": "build",
1122
+ "variables": {
1123
+ "APP_DIR": "www",
1124
+ "BUILD_INFO_BUILD_TIME": "01-01-2023 12:13:14",
1125
+ "BUILD_INFO_CURRENT_VERSION": "3.2.1",
1126
+ "BUILD_INFO_ID": "some-id",
1127
+ "ENV_SHORT": "prod",
1128
+ "ENV_TYPE": "prod",
1129
+ "GCLOUD_DEPLOY_credentialsKey": "$CL_prod_www_GCLOUD_DEPLOY_credentialsKey",
1130
+ "GCLOUD_RUN_canonicalHostSuffix": "$CL_prod_www_GCLOUD_RUN_canonicalHostSuffix",
1131
+ "HOST": "pan-test-app-prod-www-unknown-host.example.com",
1132
+ "HOST_CANONICAL": "pan-test-app-prod-www-unknown-host.example.com",
1133
+ "KUBERNETES_CPU_LIMIT": "2",
1134
+ "KUBERNETES_CPU_REQUEST": "0.5",
1135
+ "KUBERNETES_MEMORY_LIMIT": "4Gi",
1136
+ "KUBERNETES_MEMORY_REQUEST": "2Gi",
1137
+ "ROOT_URL": "https://pan-test-app-prod-www-unknown-host.example.com",
1138
+ "_ALL_ENV_VAR_KEYS": "["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","HOST_CANONICAL","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]",
1139
+ },
1140
+ },
1141
+ "www ๐Ÿ”จ app | stage ": {
1142
+ "artifacts": {
1143
+ "expire_in": "1 day",
1144
+ "paths": [
1145
+ "www/__build_info.json",
1146
+ "www/dist",
1147
+ "www/.next",
1148
+ ],
1149
+ "reports": {
1150
+ "junit": undefined,
1151
+ },
1152
+ },
1153
+ "cache": [
1154
+ {
1155
+ "key": "www-yarn",
1156
+ "paths": [
1157
+ "www/.yarn",
1158
+ ],
1159
+ "policy": "pull-push",
1160
+ },
1161
+ {
1162
+ "key": "www-node-modules",
1163
+ "paths": [
1164
+ "www/node_modules",
1165
+ ],
1166
+ "policy": "pull-push",
1167
+ },
1168
+ {
1169
+ "key": "www-next-cache",
1170
+ "paths": [
1171
+ "www/.next/cache/",
1172
+ ],
1173
+ "policy": "pull-push",
1174
+ },
1175
+ ],
1176
+ "image": "my-custom-image",
1177
+ "interruptible": true,
1178
+ "needs": [],
1179
+ "retry": {
1180
+ "max": 2,
1181
+ "when": [
1182
+ "runner_system_failure",
1183
+ "stuck_or_timeout_failure",
1184
+ ],
1185
+ },
1186
+ "script": [
1187
+ "echo '{"id":"some-id","time":"01-01-2023 12:13:14"}' > www/__build_info.json",
1188
+ "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
1189
+ "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
1190
+ "cd www",
1191
+ "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
1192
+ "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
1193
+ "yarn install --immutable",
1194
+ "yarn build",
1195
+ ],
1196
+ "stage": "build",
1197
+ "variables": {
1198
+ "APP_DIR": "www",
1199
+ "BUILD_INFO_BUILD_TIME": "01-01-2023 12:13:14",
1200
+ "BUILD_INFO_CURRENT_VERSION": "3.2.1",
1201
+ "BUILD_INFO_ID": "some-id",
1202
+ "ENV_SHORT": "stage",
1203
+ "ENV_TYPE": "stage",
1204
+ "GCLOUD_DEPLOY_credentialsKey": "$CL_stage_www_GCLOUD_DEPLOY_credentialsKey",
1205
+ "GCLOUD_RUN_canonicalHostSuffix": "$CL_stage_www_GCLOUD_RUN_canonicalHostSuffix",
1206
+ "HOST": "pan-test-app-stage-www-unknown-host.example.com",
1207
+ "HOST_CANONICAL": "pan-test-app-stage-www-unknown-host.example.com",
1208
+ "KUBERNETES_CPU_LIMIT": "2",
1209
+ "KUBERNETES_CPU_REQUEST": "0.5",
1210
+ "KUBERNETES_MEMORY_LIMIT": "4Gi",
1211
+ "KUBERNETES_MEMORY_REQUEST": "2Gi",
1212
+ "ROOT_URL": "https://pan-test-app-stage-www-unknown-host.example.com",
1213
+ "_ALL_ENV_VAR_KEYS": "["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","HOST_CANONICAL","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]",
1214
+ },
1215
+ },
1216
+ "www ๐Ÿ”จ docker | prod ": {
1217
+ "cache": [
1218
+ {
1219
+ "key": "www-yarn",
1220
+ "paths": [
1221
+ "www/.yarn",
1222
+ ],
1223
+ "policy": "pull",
1224
+ },
1225
+ ],
1226
+ "image": "path/to/docker/docker-build:the-version",
1227
+ "interruptible": true,
1228
+ "needs": [
1229
+ "www ๐Ÿ”จ app | prod ",
1230
+ ],
1231
+ "retry": {
1232
+ "max": 2,
1233
+ "when": [
1234
+ "runner_system_failure",
1235
+ "stuck_or_timeout_failure",
1236
+ ],
1237
+ },
1238
+ "script": [
1239
+ "ensureNodeDockerfile",
1240
+ "docker login --username gitlab-ci-token --password $CI_JOB_TOKEN $CI_REGISTRY",
1241
+ "docker version",
1242
+ "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",
1243
+ "docker push $DOCKER_IMAGE:$DOCKER_IMAGE_TAG",
1244
+ "docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG $DOCKER_CACHE_IMAGE",
1245
+ "docker push $DOCKER_CACHE_IMAGE",
1246
+ ],
1247
+ "services": [
1248
+ {
1249
+ "command": [
1250
+ "--tls=false",
1251
+ ],
1252
+ "name": "docker:20-dind",
1253
+ },
1254
+ ],
1255
+ "stage": "build",
1256
+ "variables": {
1257
+ "APP_DIR": "www",
1258
+ "DOCKERFILE_ADDITIONS": undefined,
1259
+ "DOCKERFILE_ADDITIONS_END": undefined,
1260
+ "DOCKER_BUILDKIT": "1",
1261
+ "DOCKER_CACHE_IMAGE": "$DOCKER_REGISTRY_IMAGE_PATH/caches/www",
1262
+ "DOCKER_COPY_AND_INSTALL_APP": "COPY --chown=node:node $APP_DIR .
1263
+ RUN yarn plugin import workspace-tools
1264
+ RUN yarn workspaces focus --production && yarn rebuild",
1265
+ "DOCKER_COPY_WORKSPACE_FILES": "COPY --chown=node:node www/package.json /app/www/package.json
1266
+ COPY --chown=node:node www/yarn.lock /app/www/yarn.lock
1267
+ COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
1268
+ COPY --chown=node:node .yarn /app/.yarn",
1269
+ "DOCKER_DIR": ".",
1270
+ "DOCKER_DRIVER": "overlay2",
1271
+ "DOCKER_HOST": "tcp://0.0.0.0:2375",
1272
+ "DOCKER_IMAGE": "$DOCKER_REGISTRY_IMAGE_PATH/$DOCKER_IMAGE_NAME",
1273
+ "DOCKER_IMAGE_NAME": "prod/www",
1274
+ "DOCKER_IMAGE_TAG": "$CI_COMMIT_SHA",
1275
+ "DOCKER_REGISTRY": "$CI_REGISTRY",
1276
+ "DOCKER_REGISTRY_IMAGE_PATH": "$CI_REGISTRY_IMAGE",
1277
+ "DOCKER_TLS_CERTDIR": "",
1278
+ "KUBERNETES_CPU_LIMIT": "1",
1279
+ "KUBERNETES_CPU_REQUEST": "0.5",
1280
+ "KUBERNETES_MEMORY_LIMIT": "2Gi",
1281
+ "KUBERNETES_MEMORY_REQUEST": "1Gi",
1282
+ },
1283
+ },
1284
+ "www ๐Ÿ”จ docker | stage ": {
1285
+ "cache": [
1286
+ {
1287
+ "key": "www-yarn",
1288
+ "paths": [
1289
+ "www/.yarn",
1290
+ ],
1291
+ "policy": "pull",
1292
+ },
1293
+ ],
1294
+ "image": "path/to/docker/docker-build:the-version",
1295
+ "interruptible": true,
1296
+ "needs": [
1297
+ "www ๐Ÿ”จ app | stage ",
1298
+ ],
1299
+ "retry": {
1300
+ "max": 2,
1301
+ "when": [
1302
+ "runner_system_failure",
1303
+ "stuck_or_timeout_failure",
1304
+ ],
1305
+ },
1306
+ "script": [
1307
+ "ensureNodeDockerfile",
1308
+ "docker login --username gitlab-ci-token --password $CI_JOB_TOKEN $CI_REGISTRY",
1309
+ "docker version",
1310
+ "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",
1311
+ "docker push $DOCKER_IMAGE:$DOCKER_IMAGE_TAG",
1312
+ "docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG $DOCKER_CACHE_IMAGE",
1313
+ "docker push $DOCKER_CACHE_IMAGE",
1314
+ ],
1315
+ "services": [
1316
+ {
1317
+ "command": [
1318
+ "--tls=false",
1319
+ ],
1320
+ "name": "docker:20-dind",
1321
+ },
1322
+ ],
1323
+ "stage": "build",
1324
+ "variables": {
1325
+ "APP_DIR": "www",
1326
+ "DOCKERFILE_ADDITIONS": undefined,
1327
+ "DOCKERFILE_ADDITIONS_END": undefined,
1328
+ "DOCKER_BUILDKIT": "1",
1329
+ "DOCKER_CACHE_IMAGE": "$DOCKER_REGISTRY_IMAGE_PATH/caches/www",
1330
+ "DOCKER_COPY_AND_INSTALL_APP": "COPY --chown=node:node $APP_DIR .
1331
+ RUN yarn plugin import workspace-tools
1332
+ RUN yarn workspaces focus --production && yarn rebuild",
1333
+ "DOCKER_COPY_WORKSPACE_FILES": "COPY --chown=node:node www/package.json /app/www/package.json
1334
+ COPY --chown=node:node www/yarn.lock /app/www/yarn.lock
1335
+ COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
1336
+ COPY --chown=node:node .yarn /app/.yarn",
1337
+ "DOCKER_DIR": ".",
1338
+ "DOCKER_DRIVER": "overlay2",
1339
+ "DOCKER_HOST": "tcp://0.0.0.0:2375",
1340
+ "DOCKER_IMAGE": "$DOCKER_REGISTRY_IMAGE_PATH/$DOCKER_IMAGE_NAME",
1341
+ "DOCKER_IMAGE_NAME": "stage/www",
1342
+ "DOCKER_IMAGE_TAG": "$CI_COMMIT_SHA",
1343
+ "DOCKER_REGISTRY": "$CI_REGISTRY",
1344
+ "DOCKER_REGISTRY_IMAGE_PATH": "$CI_REGISTRY_IMAGE",
1345
+ "DOCKER_TLS_CERTDIR": "",
1346
+ "KUBERNETES_CPU_LIMIT": "1",
1347
+ "KUBERNETES_CPU_REQUEST": "0.5",
1348
+ "KUBERNETES_MEMORY_LIMIT": "2Gi",
1349
+ "KUBERNETES_MEMORY_REQUEST": "1Gi",
1350
+ },
1351
+ },
1352
+ "www ๐Ÿš€ Deploy | prod ": {
1353
+ "allow_failure": true,
1354
+ "artifacts": {
1355
+ "paths": [
1356
+ "____envvars.yaml",
1357
+ ],
1358
+ },
1359
+ "environment": {
1360
+ "auto_stop_in": undefined,
1361
+ "name": "prod/www",
1362
+ "on_stop": "www ๐Ÿ›‘ Stop โš ๏ธ | prod ",
1363
+ "url": "https://pan-test-app-prod-www-unknown-host.example.com",
1364
+ },
1365
+ "image": "path/to/docker/gcloud:the-version",
1366
+ "interruptible": true,
1367
+ "needs": [
1368
+ {
1369
+ "artifacts": false,
1370
+ "job": "www ๐Ÿ”จ app | prod ",
1371
+ },
1372
+ {
1373
+ "artifacts": false,
1374
+ "job": "www ๐Ÿ”จ docker | prod ",
1375
+ },
1376
+ ],
1377
+ "retry": {
1378
+ "max": 2,
1379
+ "when": [
1380
+ "runner_system_failure",
1381
+ "stuck_or_timeout_failure",
1382
+ ],
1383
+ },
1384
+ "rules": [
1385
+ {
1386
+ "when": "manual",
1387
+ },
1388
+ ],
1389
+ "script": [
1390
+ "echo $CL_prod_www_GCLOUD_DEPLOY_credentialsKey > ./____keyfile.json
1391
+ ",
1392
+ "gcloud auth activate-service-account --key-file="./____keyfile.json"",
1393
+ "export GCLOUD_PROJECT_NUMBER=$(gcloud projects describe asdf --format="value(projectNumber)")",
1394
+ "echo "GCLOUD_PROJECT_NUMBER: $GCLOUD_PROJECT_NUMBER"",
1395
+ "docker login --username gitlab-ci-token --password $CI_JOB_TOKEN $CI_REGISTRY",
1396
+ "gcloud auth configure-docker asia-east1-docker.pkg.dev",
1397
+ "docker pull $DOCKER_IMAGE:$DOCKER_IMAGE_TAG",
1398
+ "docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG",
1399
+ "docker push asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG",
1400
+ "echo "$ENV_VARS" > ____envvars.yaml",
1401
+ "gcloud run deploy pan-test-app-prod-www --command="yarn,start" --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=node --env-vars-file=____envvars.yaml --min-instances=0 --max-instances=100 --cpu-throttling --allow-unauthenticated --cpu-boost",
1402
+ "docker image rm asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG",
1403
+ ],
1404
+ "services": [
1405
+ {
1406
+ "command": [
1407
+ "--tls=false",
1408
+ ],
1409
+ "name": "docker:20-dind",
1410
+ },
1411
+ ],
1412
+ "stage": "deploy prod",
1413
+ "variables": {
1414
+ "APP_DIR": "www",
1415
+ "BUILD_INFO_BUILD_TIME": "01-01-2023 12:13:14",
1416
+ "BUILD_INFO_CURRENT_VERSION": "3.2.1",
1417
+ "BUILD_INFO_ID": "some-id",
1418
+ "CLOUDSDK_CORE_DISABLE_PROMPTS": "1",
1419
+ "DOCKER_BUILDKIT": "1",
1420
+ "DOCKER_CACHE_IMAGE": "$DOCKER_REGISTRY_IMAGE_PATH/caches/www",
1421
+ "DOCKER_DRIVER": "overlay2",
1422
+ "DOCKER_HOST": "tcp://0.0.0.0:2375",
1423
+ "DOCKER_IMAGE": "$DOCKER_REGISTRY_IMAGE_PATH/$DOCKER_IMAGE_NAME",
1424
+ "DOCKER_IMAGE_NAME": "prod/www",
1425
+ "DOCKER_IMAGE_TAG": "$CI_COMMIT_SHA",
1426
+ "DOCKER_REGISTRY": "$CI_REGISTRY",
1427
+ "DOCKER_REGISTRY_IMAGE_PATH": "$CI_REGISTRY_IMAGE",
1428
+ "DOCKER_TLS_CERTDIR": "",
1429
+ "ENV_SHORT": "prod",
1430
+ "ENV_TYPE": "prod",
1431
+ "ENV_VARS": "ENV_SHORT: 'prod'
1432
+ APP_DIR: 'www'
1433
+ ENV_TYPE: 'prod'
1434
+ BUILD_INFO_ID: 'some-id'
1435
+ BUILD_INFO_BUILD_TIME: '01-01-2023 12:13:14'
1436
+ BUILD_INFO_CURRENT_VERSION: '3.2.1'
1437
+ HOST: 'pan-test-app-prod-www-unknown-host.example.com'
1438
+ ROOT_URL: 'https://pan-test-app-prod-www-unknown-host.example.com'
1439
+ HOST_CANONICAL: 'pan-test-app-prod-www-unknown-host.example.com'
1440
+ GCLOUD_RUN_canonicalHostSuffix: '$CL_prod_www_GCLOUD_RUN_canonicalHostSuffix'
1441
+ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","HOST_CANONICAL","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]'
1442
+ ",
1443
+ "GCLOUD_DEPLOY_credentialsKey": "$CL_prod_www_GCLOUD_DEPLOY_credentialsKey",
1444
+ "GCLOUD_RUN_canonicalHostSuffix": "$CL_prod_www_GCLOUD_RUN_canonicalHostSuffix",
1445
+ "HOST": "pan-test-app-prod-www-unknown-host.example.com",
1446
+ "HOST_CANONICAL": "pan-test-app-prod-www-unknown-host.example.com",
1447
+ "KUBERNETES_CPU_LIMIT": "1",
1448
+ "KUBERNETES_CPU_REQUEST": "0.5",
1449
+ "KUBERNETES_MEMORY_LIMIT": "400Mi",
1450
+ "KUBERNETES_MEMORY_REQUEST": "200Mi",
1451
+ "ROOT_URL": "https://pan-test-app-prod-www-unknown-host.example.com",
1452
+ "_ALL_ENV_VAR_KEYS": "["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","HOST_CANONICAL","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]",
1453
+ },
1454
+ },
1455
+ "www ๐Ÿš€ Deploy | stage ": {
1456
+ "allow_failure": false,
1457
+ "artifacts": {
1458
+ "paths": [
1459
+ "____envvars.yaml",
1460
+ ],
1461
+ },
1462
+ "environment": {
1463
+ "auto_stop_in": undefined,
1464
+ "name": "stage/www",
1465
+ "on_stop": "www ๐Ÿ›‘ Stop โš ๏ธ | stage ",
1466
+ "url": "https://pan-test-app-stage-www-unknown-host.example.com",
1467
+ },
1468
+ "image": "path/to/docker/gcloud:the-version",
1469
+ "interruptible": true,
1470
+ "needs": [
1471
+ {
1472
+ "artifacts": false,
1473
+ "job": "www ๐Ÿ”จ app | stage ",
1474
+ },
1475
+ {
1476
+ "artifacts": false,
1477
+ "job": "www ๐Ÿ”จ docker | stage ",
1478
+ },
1479
+ ],
1480
+ "retry": {
1481
+ "max": 2,
1482
+ "when": [
1483
+ "runner_system_failure",
1484
+ "stuck_or_timeout_failure",
1485
+ ],
1486
+ },
1487
+ "rules": [
1488
+ {
1489
+ "when": "on_success",
1490
+ },
1491
+ ],
1492
+ "script": [
1493
+ "echo $CL_stage_www_GCLOUD_DEPLOY_credentialsKey > ./____keyfile.json
1494
+ ",
1495
+ "gcloud auth activate-service-account --key-file="./____keyfile.json"",
1496
+ "export GCLOUD_PROJECT_NUMBER=$(gcloud projects describe asdf --format="value(projectNumber)")",
1497
+ "echo "GCLOUD_PROJECT_NUMBER: $GCLOUD_PROJECT_NUMBER"",
1498
+ "docker login --username gitlab-ci-token --password $CI_JOB_TOKEN $CI_REGISTRY",
1499
+ "gcloud auth configure-docker asia-east1-docker.pkg.dev",
1500
+ "docker pull $DOCKER_IMAGE:$DOCKER_IMAGE_TAG",
1501
+ "docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG",
1502
+ "docker push asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG",
1503
+ "echo "$ENV_VARS" > ____envvars.yaml",
1504
+ "gcloud run deploy pan-test-app-stage-www --command="yarn,start" --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=node --env-vars-file=____envvars.yaml --min-instances=0 --max-instances=100 --cpu-throttling --allow-unauthenticated --cpu-boost",
1505
+ "docker image rm asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG",
1506
+ ],
1507
+ "services": [
1508
+ {
1509
+ "command": [
1510
+ "--tls=false",
1511
+ ],
1512
+ "name": "docker:20-dind",
1513
+ },
1514
+ ],
1515
+ "stage": "deploy stage",
1516
+ "variables": {
1517
+ "APP_DIR": "www",
1518
+ "BUILD_INFO_BUILD_TIME": "01-01-2023 12:13:14",
1519
+ "BUILD_INFO_CURRENT_VERSION": "3.2.1",
1520
+ "BUILD_INFO_ID": "some-id",
1521
+ "CLOUDSDK_CORE_DISABLE_PROMPTS": "1",
1522
+ "DOCKER_BUILDKIT": "1",
1523
+ "DOCKER_CACHE_IMAGE": "$DOCKER_REGISTRY_IMAGE_PATH/caches/www",
1524
+ "DOCKER_DRIVER": "overlay2",
1525
+ "DOCKER_HOST": "tcp://0.0.0.0:2375",
1526
+ "DOCKER_IMAGE": "$DOCKER_REGISTRY_IMAGE_PATH/$DOCKER_IMAGE_NAME",
1527
+ "DOCKER_IMAGE_NAME": "stage/www",
1528
+ "DOCKER_IMAGE_TAG": "$CI_COMMIT_SHA",
1529
+ "DOCKER_REGISTRY": "$CI_REGISTRY",
1530
+ "DOCKER_REGISTRY_IMAGE_PATH": "$CI_REGISTRY_IMAGE",
1531
+ "DOCKER_TLS_CERTDIR": "",
1532
+ "ENV_SHORT": "stage",
1533
+ "ENV_TYPE": "stage",
1534
+ "ENV_VARS": "ENV_SHORT: 'stage'
1535
+ APP_DIR: 'www'
1536
+ ENV_TYPE: 'stage'
1537
+ BUILD_INFO_ID: 'some-id'
1538
+ BUILD_INFO_BUILD_TIME: '01-01-2023 12:13:14'
1539
+ BUILD_INFO_CURRENT_VERSION: '3.2.1'
1540
+ HOST: 'pan-test-app-stage-www-unknown-host.example.com'
1541
+ ROOT_URL: 'https://pan-test-app-stage-www-unknown-host.example.com'
1542
+ HOST_CANONICAL: 'pan-test-app-stage-www-unknown-host.example.com'
1543
+ GCLOUD_RUN_canonicalHostSuffix: '$CL_stage_www_GCLOUD_RUN_canonicalHostSuffix'
1544
+ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","HOST_CANONICAL","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]'
1545
+ ",
1546
+ "GCLOUD_DEPLOY_credentialsKey": "$CL_stage_www_GCLOUD_DEPLOY_credentialsKey",
1547
+ "GCLOUD_RUN_canonicalHostSuffix": "$CL_stage_www_GCLOUD_RUN_canonicalHostSuffix",
1548
+ "HOST": "pan-test-app-stage-www-unknown-host.example.com",
1549
+ "HOST_CANONICAL": "pan-test-app-stage-www-unknown-host.example.com",
1550
+ "KUBERNETES_CPU_LIMIT": "1",
1551
+ "KUBERNETES_CPU_REQUEST": "0.5",
1552
+ "KUBERNETES_MEMORY_LIMIT": "400Mi",
1553
+ "KUBERNETES_MEMORY_REQUEST": "200Mi",
1554
+ "ROOT_URL": "https://pan-test-app-stage-www-unknown-host.example.com",
1555
+ "_ALL_ENV_VAR_KEYS": "["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","HOST_CANONICAL","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]",
1556
+ },
1557
+ },
1558
+ "www ๐Ÿ›‘ Stop โš ๏ธ | prod ": {
1559
+ "environment": {
1560
+ "action": "stop",
1561
+ "name": "prod/www",
1562
+ "url": "https://pan-test-app-prod-www-unknown-host.example.com",
1563
+ },
1564
+ "image": "path/to/docker/gcloud:the-version",
1565
+ "interruptible": true,
1566
+ "needs": [],
1567
+ "retry": {
1568
+ "max": 2,
1569
+ "when": [
1570
+ "runner_system_failure",
1571
+ "stuck_or_timeout_failure",
1572
+ ],
1573
+ },
1574
+ "rules": [
1575
+ {
1576
+ "allow_failure": true,
1577
+ "if": "$CI_COMMIT_BRANCH =~ /^[0-9]+\\.([0-9]+|x)\\.x$/",
1578
+ "when": "on_success",
1579
+ },
1580
+ {
1581
+ "allow_failure": true,
1582
+ "when": "manual",
1583
+ },
1584
+ ],
1585
+ "script": [
1586
+ "set +e",
1587
+ "echo $CL_prod_www_GCLOUD_DEPLOY_credentialsKey > ./____keyfile.json
1588
+ ",
1589
+ "gcloud auth activate-service-account --key-file="./____keyfile.json"",
1590
+ "gcloud run services delete pan-test-app-prod-www --project=asdf --region=asia-east1",
1591
+ "set -e",
1592
+ ],
1593
+ "stage": "stop prod",
1594
+ "variables": {
1595
+ "CLOUDSDK_CORE_DISABLE_PROMPTS": "1",
1596
+ "GIT_STRATEGY": "none",
1597
+ "KUBERNETES_CPU_LIMIT": "1",
1598
+ "KUBERNETES_CPU_REQUEST": "0.5",
1599
+ "KUBERNETES_MEMORY_LIMIT": "400Mi",
1600
+ "KUBERNETES_MEMORY_REQUEST": "200Mi",
1601
+ },
1602
+ },
1603
+ "www ๐Ÿ›‘ Stop โš ๏ธ | stage ": {
1604
+ "environment": {
1605
+ "action": "stop",
1606
+ "name": "stage/www",
1607
+ "url": "https://pan-test-app-stage-www-unknown-host.example.com",
1608
+ },
1609
+ "image": "path/to/docker/gcloud:the-version",
1610
+ "interruptible": true,
1611
+ "needs": [],
1612
+ "retry": {
1613
+ "max": 2,
1614
+ "when": [
1615
+ "runner_system_failure",
1616
+ "stuck_or_timeout_failure",
1617
+ ],
1618
+ },
1619
+ "rules": [
1620
+ {
1621
+ "allow_failure": true,
1622
+ "if": "$CI_COMMIT_BRANCH =~ /^[0-9]+\\.([0-9]+|x)\\.x$/",
1623
+ "when": "on_success",
1624
+ },
1625
+ {
1626
+ "allow_failure": true,
1627
+ "when": "manual",
1628
+ },
1629
+ ],
1630
+ "script": [
1631
+ "set +e",
1632
+ "echo $CL_stage_www_GCLOUD_DEPLOY_credentialsKey > ./____keyfile.json
1633
+ ",
1634
+ "gcloud auth activate-service-account --key-file="./____keyfile.json"",
1635
+ "gcloud run services delete pan-test-app-stage-www --project=asdf --region=asia-east1",
1636
+ "set -e",
1637
+ ],
1638
+ "stage": "stop stage",
1639
+ "variables": {
1640
+ "CLOUDSDK_CORE_DISABLE_PROMPTS": "1",
1641
+ "GIT_STRATEGY": "none",
1642
+ "KUBERNETES_CPU_LIMIT": "1",
1643
+ "KUBERNETES_CPU_REQUEST": "0.5",
1644
+ "KUBERNETES_MEMORY_LIMIT": "400Mi",
1645
+ "KUBERNETES_MEMORY_REQUEST": "200Mi",
1646
+ },
1647
+ },
1648
+ "www ๐Ÿงพ sbom upload | prod ": {
1649
+ "allow_failure": true,
1650
+ "image": "git.panter.ch:5001/open-source/dependency-track-uploader:dtrackuploader-v0.2.1",
1651
+ "interruptible": true,
1652
+ "needs": [
1653
+ "www ๐Ÿงพ sbom | prod ",
1654
+ ],
1655
+ "retry": {
1656
+ "max": 2,
1657
+ "when": [
1658
+ "runner_system_failure",
1659
+ "stuck_or_timeout_failure",
1660
+ ],
1661
+ },
1662
+ "script": [
1663
+ "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/www" "prod" "__sbom.json" vex.json",
1664
+ ],
1665
+ "stage": "verify",
1666
+ "variables": {},
1667
+ },
1668
+ "www ๐Ÿงพ sbom upload | stage ": {
1669
+ "allow_failure": true,
1670
+ "image": "git.panter.ch:5001/open-source/dependency-track-uploader:dtrackuploader-v0.2.1",
1671
+ "interruptible": true,
1672
+ "needs": [
1673
+ "www ๐Ÿงพ sbom | stage ",
1674
+ ],
1675
+ "retry": {
1676
+ "max": 2,
1677
+ "when": [
1678
+ "runner_system_failure",
1679
+ "stuck_or_timeout_failure",
1680
+ ],
1681
+ },
1682
+ "script": [
1683
+ "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/www" "stage" "__sbom.json" vex.json",
1684
+ ],
1685
+ "stage": "verify",
1686
+ "variables": {},
1687
+ },
1688
+ "www ๐Ÿงพ sbom | prod ": {
1689
+ "allow_failure": true,
1690
+ "artifacts": {
1691
+ "paths": [
1692
+ "__sbom.json",
1693
+ ],
1694
+ },
1695
+ "image": "aquasec/trivy:0.38.3",
1696
+ "interruptible": true,
1697
+ "needs": [
1698
+ "www ๐Ÿš€ Deploy | prod ",
1699
+ ],
1700
+ "retry": {
1701
+ "max": 2,
1702
+ "when": [
1703
+ "runner_system_failure",
1704
+ "stuck_or_timeout_failure",
1705
+ ],
1706
+ },
1707
+ "script": [
1708
+ "trivy fs --quiet --format cyclonedx --output "__sbom.json" www",
1709
+ ],
1710
+ "stage": "verify",
1711
+ "variables": {},
1712
+ },
1713
+ "www ๐Ÿงพ sbom | stage ": {
1714
+ "allow_failure": true,
1715
+ "artifacts": {
1716
+ "paths": [
1717
+ "__sbom.json",
1718
+ ],
1719
+ },
1720
+ "image": "aquasec/trivy:0.38.3",
1721
+ "interruptible": true,
1722
+ "needs": [
1723
+ "www ๐Ÿš€ Deploy | stage ",
1724
+ ],
1725
+ "retry": {
1726
+ "max": 2,
1727
+ "when": [
1728
+ "runner_system_failure",
1729
+ "stuck_or_timeout_failure",
1730
+ ],
1731
+ },
1732
+ "script": [
1733
+ "trivy fs --quiet --format cyclonedx --output "__sbom.json" www",
1734
+ ],
1735
+ "stage": "verify",
1736
+ "variables": {},
1737
+ },
1738
+ },
1739
+ "stages": [
1740
+ "setup",
1741
+ "setup dev",
1742
+ "setup review",
1743
+ "setup stage",
1744
+ "setup prod",
1745
+ "setup local",
1746
+ "test",
1747
+ "test dev",
1748
+ "test review",
1749
+ "test stage",
1750
+ "test prod",
1751
+ "test local",
1752
+ "build",
1753
+ "build dev",
1754
+ "build review",
1755
+ "build stage",
1756
+ "build prod",
1757
+ "build local",
1758
+ "deploy",
1759
+ "deploy dev",
1760
+ "deploy review",
1761
+ "deploy stage",
1762
+ "deploy prod",
1763
+ "deploy local",
1764
+ "verify",
1765
+ "verify dev",
1766
+ "verify review",
1767
+ "verify stage",
1768
+ "verify prod",
1769
+ "verify local",
1770
+ "rollback",
1771
+ "rollback dev",
1772
+ "rollback review",
1773
+ "rollback stage",
1774
+ "rollback prod",
1775
+ "rollback local",
1776
+ "stop",
1777
+ "stop dev",
1778
+ "stop review",
1779
+ "stop stage",
1780
+ "stop prod",
1781
+ "stop local",
1782
+ ],
1783
+ "variables": {
1784
+ "FF_USE_FASTZIP": "true",
1785
+ },
1786
+ "workflow": {
1787
+ "rules": [
1788
+ {
1789
+ "if": "$CI_COMMIT_TAG",
1790
+ },
1791
+ {
1792
+ "if": "$CI_COMMIT_MESSAGE =~ /^chore\\(release\\).*/",
1793
+ "when": "never",
1794
+ },
1795
+ {
1796
+ "if": "$CI_COMMIT_BRANCH =~ /^[0-9]+.([0-9]+|x).x$/",
1797
+ },
1798
+ {
1799
+ "if": "$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH",
1800
+ },
1801
+ {
1802
+ "if": "$CI_MERGE_REQUEST_ID",
1803
+ },
1804
+ ],
1805
+ },
1806
+ },
1807
+ }
1808
+ `;