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