@catladder/pipeline 1.83.0 → 1.83.2

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