@catladder/pipeline 1.162.0 โ†’ 1.163.1

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 (80) hide show
  1. package/README.md +15 -1
  2. package/dist/build/types.d.ts +6 -0
  3. package/dist/bundles/catladder-gitlab/index.js +2 -2
  4. package/dist/constants.js +1 -1
  5. package/dist/pipeline/generatePipelineFiles.d.ts +38 -0
  6. package/dist/pipeline/generatePipelineFiles.js +44 -23
  7. package/dist/tsconfig.tsbuildinfo +1 -1
  8. package/examples/__snapshots__/cloud-run-memory-limit.test.ts.snap +1341 -0
  9. package/examples/__snapshots__/cloud-run-meteor-with-worker.test.ts.snap +1325 -0
  10. package/examples/__snapshots__/cloud-run-no-cpu-throttling.test.ts.snap +1341 -0
  11. package/examples/__snapshots__/cloud-run-no-service.test.ts.snap +1393 -0
  12. package/examples/__snapshots__/cloud-run-non-public.test.ts.snap +1341 -0
  13. package/examples/__snapshots__/cloud-run-post-stop-job.test.ts.snap +1352 -0
  14. package/examples/__snapshots__/cloud-run-service-gen2.test.ts.snap +1341 -0
  15. package/examples/__snapshots__/cloud-run-service-increase-timout.test.ts.snap +1341 -0
  16. package/examples/__snapshots__/cloud-run-service-with-volumes.test.ts.snap +1385 -0
  17. package/examples/__snapshots__/cloud-run-storybook.test.ts.snap +1233 -4
  18. package/examples/__snapshots__/cloud-run-with-ngnix.test.ts.snap +1349 -4
  19. package/examples/__snapshots__/cloud-run-with-sql-reuse-db.test.ts.snap +2825 -0
  20. package/examples/__snapshots__/cloud-run-with-sql.test.ts.snap +2572 -0
  21. package/examples/__snapshots__/cloud-run-with-worker.test.ts.snap +1349 -0
  22. package/examples/__snapshots__/custom-build-job-with-tests.test.ts.snap +1196 -0
  23. package/examples/__snapshots__/custom-build-job.test.ts.snap +1085 -0
  24. package/examples/__snapshots__/custom-deploy.test.ts.snap +1103 -0
  25. package/examples/__snapshots__/custom-envs.test.ts.snap +709 -0
  26. package/examples/__snapshots__/custom-sbom-java.test.ts.snap +1093 -0
  27. package/examples/__snapshots__/git-submodule.test.ts.snap +1342 -0
  28. package/examples/__snapshots__/kubernetes-application-customization.test.ts.snap +1778 -0
  29. package/examples/__snapshots__/kubernetes-with-cloud-sql-legacy.test.ts.snap +1790 -0
  30. package/examples/__snapshots__/kubernetes-with-cloud-sql.test.ts.snap +1798 -0
  31. package/examples/__snapshots__/kubernetes-with-jobs.test.ts.snap +3352 -0
  32. package/examples/__snapshots__/kubernetes-with-mongodb.test.ts.snap +1902 -0
  33. package/examples/__snapshots__/local-dot-env.test.ts.snap +1341 -0
  34. package/examples/__snapshots__/meteor-kubernetes.test.ts.snap +1839 -0
  35. package/examples/__snapshots__/multiline-var.test.ts.snap +3376 -0
  36. package/examples/__snapshots__/native-app.test.ts.snap +2149 -0
  37. package/examples/__snapshots__/node-build-with-custom-image.test.ts.snap +1341 -0
  38. package/examples/__snapshots__/node-build-with-docker-additions.test.ts.snap +1349 -0
  39. package/examples/__snapshots__/rails-k8s-with-worker.test.ts.snap +1470 -0
  40. package/examples/__snapshots__/wait-for-other-deploy.test.ts.snap +1275 -0
  41. package/examples/__utils__/helpers.ts +14 -1
  42. package/examples/cloud-run-memory-limit.test.ts +9 -1
  43. package/examples/cloud-run-meteor-with-worker.test.ts +9 -1
  44. package/examples/cloud-run-no-cpu-throttling.test.ts +9 -1
  45. package/examples/cloud-run-no-service.test.ts +9 -1
  46. package/examples/cloud-run-non-public.test.ts +9 -1
  47. package/examples/cloud-run-post-stop-job.test.ts +9 -1
  48. package/examples/cloud-run-service-gen2.test.ts +9 -1
  49. package/examples/cloud-run-service-increase-timout.test.ts +9 -1
  50. package/examples/cloud-run-service-with-volumes.test.ts +9 -1
  51. package/examples/cloud-run-storybook.test.ts +9 -1
  52. package/examples/cloud-run-storybook.ts +9 -1
  53. package/examples/cloud-run-with-ngnix.test.ts +9 -1
  54. package/examples/cloud-run-with-ngnix.ts +5 -1
  55. package/examples/cloud-run-with-sql-reuse-db.test.ts +9 -1
  56. package/examples/cloud-run-with-sql.test.ts +9 -1
  57. package/examples/cloud-run-with-worker.test.ts +9 -1
  58. package/examples/custom-build-job-with-tests.test.ts +9 -1
  59. package/examples/custom-build-job.test.ts +9 -1
  60. package/examples/custom-deploy.test.ts +9 -1
  61. package/examples/custom-envs.test.ts +9 -1
  62. package/examples/custom-sbom-java.test.ts +9 -1
  63. package/examples/git-submodule.test.ts +9 -1
  64. package/examples/kubernetes-application-customization.test.ts +9 -1
  65. package/examples/kubernetes-with-cloud-sql-legacy.test.ts +9 -1
  66. package/examples/kubernetes-with-cloud-sql.test.ts +9 -1
  67. package/examples/kubernetes-with-jobs.test.ts +9 -1
  68. package/examples/kubernetes-with-mongodb.test.ts +9 -1
  69. package/examples/local-dot-env.test.ts +9 -1
  70. package/examples/meteor-kubernetes.test.ts +9 -1
  71. package/examples/multiline-var.test.ts +9 -1
  72. package/examples/native-app.test.ts +9 -1
  73. package/examples/node-build-with-custom-image.test.ts +9 -1
  74. package/examples/node-build-with-docker-additions.test.ts +9 -1
  75. package/examples/rails-k8s-with-worker.test.ts +9 -1
  76. package/examples/wait-for-other-deploy.test.ts +9 -1
  77. package/package.json +4 -3
  78. package/scripts/generate-examples-test.ts +7 -5
  79. package/src/build/types.ts +6 -0
  80. package/src/pipeline/generatePipelineFiles.ts +61 -36
@@ -1,5 +1,1108 @@
1
1
  // Jest Snapshot v1, https://goo.gl/fbAQLP
2
2
 
3
+ exports[`matches snapshot for cloud-run-memory-limit 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: path/to/docker/jobs-default:the-version
51
+ variables:
52
+ KUBERNETES_CPU_REQUEST: '0.45'
53
+ KUBERNETES_MEMORY_REQUEST: 1Gi
54
+ KUBERNETES_MEMORY_LIMIT: 4Gi
55
+ script:
56
+ - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
57
+ - export APP_PATH="www"
58
+ - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
59
+ - cd www
60
+ - yarn npm audit --environment production
61
+ rules:
62
+ - when: never
63
+ if: $CI_COMMIT_MESSAGE =~ /^chore\\(release\\).*/
64
+ - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
65
+ - if: $CI_MERGE_REQUEST_ID
66
+ needs: []
67
+ retry: &a1
68
+ max: 2
69
+ when:
70
+ - runner_system_failure
71
+ - stuck_or_timeout_failure
72
+ interruptible: true
73
+ allow_failure: true
74
+ www ๐Ÿ‘ฎ lint:
75
+ stage: test
76
+ image: path/to/docker/jobs-default:the-version
77
+ variables:
78
+ KUBERNETES_CPU_REQUEST: '0.45'
79
+ KUBERNETES_MEMORY_REQUEST: 1Gi
80
+ KUBERNETES_MEMORY_LIMIT: 4Gi
81
+ script:
82
+ - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
83
+ - export APP_PATH="www"
84
+ - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
85
+ - echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"
86
+ - if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
87
+ - if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
88
+ - echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"
89
+ - cd www
90
+ - echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"
91
+ - if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
92
+ - if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
93
+ - echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"
94
+ - echo -e "\\e[0Ksection_start:$(date +%s):yarninstall[collapsed=true]\\r\\e[0KYarn install"
95
+ - yarn install --immutable
96
+ - echo -e "\\e[0Ksection_end:$(date +%s):yarninstall\\r\\e[0K"
97
+ - yarn lint
98
+ cache:
99
+ - key: www-yarn
100
+ policy: pull-push
101
+ paths:
102
+ - www/.yarn
103
+ - key: www-node-modules
104
+ policy: pull-push
105
+ paths:
106
+ - www/node_modules
107
+ rules:
108
+ - when: never
109
+ if: $CI_COMMIT_MESSAGE =~ /^chore\\(release\\).*/
110
+ - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
111
+ - if: $CI_MERGE_REQUEST_ID
112
+ needs: []
113
+ retry: *a1
114
+ interruptible: true
115
+ www ๐Ÿงช test:
116
+ stage: test
117
+ image: path/to/docker/jobs-testing-chrome:the-version
118
+ variables:
119
+ KUBERNETES_CPU_REQUEST: '0.45'
120
+ KUBERNETES_MEMORY_REQUEST: 1Gi
121
+ KUBERNETES_MEMORY_LIMIT: 4Gi
122
+ script:
123
+ - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
124
+ - export APP_PATH="www"
125
+ - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
126
+ - echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"
127
+ - if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
128
+ - if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
129
+ - echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"
130
+ - cd www
131
+ - echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"
132
+ - if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
133
+ - if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
134
+ - echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"
135
+ - echo -e "\\e[0Ksection_start:$(date +%s):yarninstall[collapsed=true]\\r\\e[0KYarn install"
136
+ - yarn install --immutable
137
+ - echo -e "\\e[0Ksection_end:$(date +%s):yarninstall\\r\\e[0K"
138
+ - yarn test
139
+ cache:
140
+ - key: www-yarn
141
+ policy: pull-push
142
+ paths:
143
+ - www/.yarn
144
+ - key: www-node-modules
145
+ policy: pull-push
146
+ paths:
147
+ - www/node_modules
148
+ rules:
149
+ - when: never
150
+ if: $CI_COMMIT_MESSAGE =~ /^chore\\(release\\).*/
151
+ - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
152
+ - if: $CI_MERGE_REQUEST_ID
153
+ needs: []
154
+ retry: *a1
155
+ interruptible: true
156
+ 'www ๐Ÿ”จ app | dev ':
157
+ stage: build
158
+ image: path/to/docker/jobs-default:the-version
159
+ variables:
160
+ KUBERNETES_CPU_REQUEST: '0.45'
161
+ KUBERNETES_MEMORY_REQUEST: 1Gi
162
+ KUBERNETES_MEMORY_LIMIT: 4Gi
163
+ script:
164
+ - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
165
+ - export ENV_SHORT="dev"
166
+ - export APP_DIR="www"
167
+ - export ENV_TYPE="dev"
168
+ - export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
169
+ - export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
170
+ - 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")"
171
+ - export HOST="unknown-host.example.com"
172
+ - export ROOT_URL="https://unknown-host.example.com"
173
+ - export HOST_INTERNAL="unknown-host.example.com"
174
+ - export HOST_CANONICAL="unknown-host.example.com"
175
+ - export ROOT_URL_INTERNAL="https://unknown-host.example.com"
176
+ - 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\\"]"
177
+ - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
178
+ - echo '{"id":"$(git describe --tags 2>/dev/null || git rev-parse HEAD)","time":"$CI_JOB_STARTED_AT"}' > www/__build_info.json
179
+ - echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"
180
+ - if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
181
+ - if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
182
+ - echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"
183
+ - cd www
184
+ - echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"
185
+ - if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
186
+ - if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
187
+ - echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"
188
+ - echo -e "\\e[0Ksection_start:$(date +%s):yarninstall[collapsed=true]\\r\\e[0KYarn install"
189
+ - yarn install --immutable
190
+ - echo -e "\\e[0Ksection_end:$(date +%s):yarninstall\\r\\e[0K"
191
+ - yarn build
192
+ cache:
193
+ - key: www-yarn
194
+ policy: pull-push
195
+ paths:
196
+ - www/.yarn
197
+ - key: www-node-modules
198
+ policy: pull-push
199
+ paths:
200
+ - www/node_modules
201
+ - key: www-next-cache
202
+ policy: pull-push
203
+ paths:
204
+ - www/.next/cache
205
+ artifacts:
206
+ paths:
207
+ - www/__build_info.json
208
+ - www/.next
209
+ - www/dist
210
+ expire_in: 1 day
211
+ when: always
212
+ reports: {}
213
+ rules:
214
+ - when: never
215
+ if: $CI_COMMIT_MESSAGE =~ /^chore\\(release\\).*/
216
+ - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
217
+ needs: []
218
+ retry: *a1
219
+ interruptible: true
220
+ 'www ๐Ÿ”จ docker | dev ':
221
+ stage: build
222
+ image: path/to/docker/docker-build:the-version
223
+ services:
224
+ - name: docker:24.0.6-dind
225
+ command:
226
+ - --tls=false
227
+ variables:
228
+ DOCKER_HOST: tcp://0.0.0.0:2375
229
+ DOCKER_TLS_CERTDIR: ''
230
+ DOCKER_DRIVER: overlay2
231
+ DOCKER_BUILDKIT: '1'
232
+ KUBERNETES_CPU_REQUEST: '0.45'
233
+ KUBERNETES_MEMORY_REQUEST: 1Gi
234
+ KUBERNETES_MEMORY_LIMIT: 2Gi
235
+ script:
236
+ - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
237
+ - export APP_DIR="www"
238
+ - export DOCKER_BUILD_CONTEXT="."
239
+ - export DOCKER_REGISTRY="$CI_REGISTRY"
240
+ - export DOCKER_CACHE_IMAGE="$CI_REGISTRY_IMAGE/caches/www"
241
+ - export DOCKER_IMAGE_NAME="dev/www"
242
+ - export DOCKER_IMAGE="$CI_REGISTRY_IMAGE/$DOCKER_IMAGE_NAME"
243
+ - export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"
244
+ - |-
245
+ export DOCKER_COPY_AND_INSTALL_APP="COPY --chown=node:node $APP_DIR .
246
+ RUN yarn plugin import workspace-tools
247
+ RUN yarn workspaces focus --production && yarn rebuild"
248
+ - |-
249
+ export DOCKER_COPY_WORKSPACE_FILES="COPY --chown=node:node www/package.json /app/www/package.json
250
+ COPY --chown=node:node www/yarn.lock /app/www/yarn.lock
251
+ COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
252
+ COPY --chown=node:node .yarn /app/.yarn"
253
+ - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
254
+ - ensureNodeDockerfile
255
+ - echo -e "\\e[0Ksection_start:$(date +%s):docker-login[collapsed=true]\\r\\e[0KDocker Login"
256
+ - docker login --username gitlab-ci-token --password $CI_JOB_TOKEN $CI_REGISTRY
257
+ - echo -e "\\e[0Ksection_end:$(date +%s):docker-login\\r\\e[0K"
258
+ - echo -e "\\e[0Ksection_start:$(date +%s):docker-build[collapsed=true]\\r\\e[0KDocker build"
259
+ - 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
260
+ - echo -e "\\e[0Ksection_end:$(date +%s):docker-build\\r\\e[0K"
261
+ - echo -e "\\e[0Ksection_start:$(date +%s):docker-push[collapsed=true]\\r\\e[0KDocker push and tag"
262
+ - docker push $DOCKER_IMAGE:$DOCKER_IMAGE_TAG
263
+ - docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG $DOCKER_CACHE_IMAGE
264
+ - docker push $DOCKER_CACHE_IMAGE
265
+ - echo -e "\\e[0Ksection_end:$(date +%s):docker-push\\r\\e[0K"
266
+ cache:
267
+ - key: www-yarn
268
+ policy: pull
269
+ paths:
270
+ - www/.yarn
271
+ rules:
272
+ - when: never
273
+ if: $CI_COMMIT_MESSAGE =~ /^chore\\(release\\).*/
274
+ - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
275
+ needs:
276
+ - 'www ๐Ÿ”จ app | dev '
277
+ retry: *a1
278
+ interruptible: true
279
+ 'www ๐Ÿงพ sbom | dev ':
280
+ stage: build
281
+ image: aquasec/trivy:0.38.3
282
+ variables: {}
283
+ script:
284
+ - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
285
+ - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
286
+ - trivy fs --quiet --format cyclonedx --output "__sbom.json" www
287
+ artifacts:
288
+ paths:
289
+ - __sbom.json
290
+ rules:
291
+ - when: never
292
+ if: $CI_COMMIT_MESSAGE =~ /^chore\\(release\\).*/
293
+ - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
294
+ needs: []
295
+ retry: *a1
296
+ interruptible: true
297
+ allow_failure: true
298
+ 'www ๐Ÿš€ Deploy | dev ':
299
+ stage: deploy dev
300
+ image: path/to/docker/jobs-default:the-version
301
+ variables:
302
+ KUBERNETES_CPU_REQUEST: '1'
303
+ KUBERNETES_MEMORY_REQUEST: 1024Mi
304
+ KUBERNETES_MEMORY_LIMIT: 2048Mi
305
+ script:
306
+ - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
307
+ - export ENV_SHORT="dev"
308
+ - export APP_DIR="www"
309
+ - export ENV_TYPE="dev"
310
+ - export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
311
+ - export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
312
+ - 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")"
313
+ - export HOST="unknown-host.example.com"
314
+ - export ROOT_URL="https://unknown-host.example.com"
315
+ - export HOST_INTERNAL="unknown-host.example.com"
316
+ - export HOST_CANONICAL="unknown-host.example.com"
317
+ - export ROOT_URL_INTERNAL="https://unknown-host.example.com"
318
+ - 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\\"]"
319
+ - export DOCKER_REGISTRY="$CI_REGISTRY"
320
+ - export DOCKER_CACHE_IMAGE="$CI_REGISTRY_IMAGE/caches/www"
321
+ - export DOCKER_IMAGE_NAME="dev/www"
322
+ - export DOCKER_IMAGE="$CI_REGISTRY_IMAGE/$DOCKER_IMAGE_NAME"
323
+ - export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"
324
+ - export DEPLOY_API_KEY="$CL_dev_www_DEPLOY_API_KEY"
325
+ - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
326
+ - cd www
327
+ - echo 'would deploy'
328
+ - echo 'Uploading SBOM to Dependency Track'
329
+ - /dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/www" "https://unknown-host.example.com" "__sbom.json" vex.json || true
330
+ - echo "CL_GITLAB_ENVIRONMENT_URL=https://unknown-host.example.com" >> gitlab_environment.env
331
+ cache: []
332
+ environment:
333
+ name: dev/www
334
+ url: $CL_GITLAB_ENVIRONMENT_URL
335
+ on_stop: 'www ๐Ÿ›‘ Stop โš ๏ธ | dev '
336
+ auto_stop_in: 4 weeks
337
+ artifacts:
338
+ reports:
339
+ dotenv: gitlab_environment.env
340
+ rules:
341
+ - when: never
342
+ if: $CI_COMMIT_MESSAGE =~ /^chore\\(release\\).*/
343
+ - when: on_success
344
+ if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
345
+ needs:
346
+ - job: www ๐Ÿ‘ฎ lint
347
+ artifacts: false
348
+ - job: 'www ๐Ÿ”จ app | dev '
349
+ artifacts: false
350
+ - job: 'www ๐Ÿ”จ docker | dev '
351
+ artifacts: false
352
+ - job: www ๐Ÿงช test
353
+ artifacts: false
354
+ - job: 'www ๐Ÿงพ sbom | dev '
355
+ artifacts: true
356
+ - job: www ๐Ÿ›ก audit
357
+ artifacts: false
358
+ retry: *a1
359
+ interruptible: true
360
+ allow_failure: false
361
+ 'www ๐Ÿ›‘ Stop โš ๏ธ | dev ':
362
+ stage: stop dev
363
+ image: path/to/docker/jobs-default:the-version
364
+ variables:
365
+ KUBERNETES_CPU_REQUEST: '0.22'
366
+ KUBERNETES_MEMORY_REQUEST: 200Mi
367
+ KUBERNETES_MEMORY_LIMIT: 400Mi
368
+ GIT_STRATEGY: none
369
+ script:
370
+ - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
371
+ - export DEPLOY_API_KEY="$CL_dev_www_DEPLOY_API_KEY"
372
+ - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
373
+ - echo 'would stop'
374
+ - echo 'Disabling component in Dependency Track'
375
+ - /dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" disable "pan-test-app/www" "https://unknown-host.example.com" || true
376
+ - echo "CL_GITLAB_ENVIRONMENT_URL=https://unknown-host.example.com" >> gitlab_environment.env
377
+ environment:
378
+ name: dev/www
379
+ url: $CL_GITLAB_ENVIRONMENT_URL
380
+ action: stop
381
+ artifacts:
382
+ reports:
383
+ dotenv: gitlab_environment.env
384
+ rules:
385
+ - if: $CI_COMMIT_BRANCH =~ /^[0-9]+\\.([0-9]+|x)\\.x$/
386
+ when: on_success
387
+ - when: never
388
+ if: $CI_COMMIT_MESSAGE =~ /^chore\\(release\\).*/
389
+ - when: manual
390
+ if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
391
+ needs: []
392
+ retry: *a1
393
+ interruptible: true
394
+ allow_failure: true
395
+ 'www ๐Ÿ”จ app | review ':
396
+ stage: build
397
+ image: path/to/docker/jobs-default:the-version
398
+ variables:
399
+ KUBERNETES_CPU_REQUEST: '0.45'
400
+ KUBERNETES_MEMORY_REQUEST: 1Gi
401
+ KUBERNETES_MEMORY_LIMIT: 4Gi
402
+ script:
403
+ - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
404
+ - export ENV_SHORT="review"
405
+ - export APP_DIR="www"
406
+ - export ENV_TYPE="review"
407
+ - export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
408
+ - export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
409
+ - 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")"
410
+ - export HOST="unknown-host.example.com"
411
+ - export ROOT_URL="https://unknown-host.example.com"
412
+ - export HOST_INTERNAL="unknown-host.example.com"
413
+ - export HOST_CANONICAL="unknown-host.example.com"
414
+ - export ROOT_URL_INTERNAL="https://unknown-host.example.com"
415
+ - 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\\"]"
416
+ - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
417
+ - echo '{"id":"$(git describe --tags 2>/dev/null || git rev-parse HEAD)","time":"$CI_JOB_STARTED_AT"}' > www/__build_info.json
418
+ - echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"
419
+ - if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
420
+ - if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
421
+ - echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"
422
+ - cd www
423
+ - echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"
424
+ - if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
425
+ - if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
426
+ - echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"
427
+ - echo -e "\\e[0Ksection_start:$(date +%s):yarninstall[collapsed=true]\\r\\e[0KYarn install"
428
+ - yarn install --immutable
429
+ - echo -e "\\e[0Ksection_end:$(date +%s):yarninstall\\r\\e[0K"
430
+ - yarn build
431
+ cache:
432
+ - key: www-yarn
433
+ policy: pull-push
434
+ paths:
435
+ - www/.yarn
436
+ - key: www-node-modules
437
+ policy: pull-push
438
+ paths:
439
+ - www/node_modules
440
+ - key: www-next-cache
441
+ policy: pull-push
442
+ paths:
443
+ - www/.next/cache
444
+ artifacts:
445
+ paths:
446
+ - www/__build_info.json
447
+ - www/.next
448
+ - www/dist
449
+ expire_in: 1 day
450
+ when: always
451
+ reports: {}
452
+ rules:
453
+ - if: $CI_MERGE_REQUEST_ID
454
+ needs: []
455
+ retry: *a1
456
+ interruptible: true
457
+ 'www ๐Ÿ”จ docker | review ':
458
+ stage: build
459
+ image: path/to/docker/docker-build:the-version
460
+ services:
461
+ - name: docker:24.0.6-dind
462
+ command:
463
+ - --tls=false
464
+ variables:
465
+ DOCKER_HOST: tcp://0.0.0.0:2375
466
+ DOCKER_TLS_CERTDIR: ''
467
+ DOCKER_DRIVER: overlay2
468
+ DOCKER_BUILDKIT: '1'
469
+ KUBERNETES_CPU_REQUEST: '0.45'
470
+ KUBERNETES_MEMORY_REQUEST: 1Gi
471
+ KUBERNETES_MEMORY_LIMIT: 2Gi
472
+ script:
473
+ - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
474
+ - export APP_DIR="www"
475
+ - export DOCKER_BUILD_CONTEXT="."
476
+ - export DOCKER_REGISTRY="$CI_REGISTRY"
477
+ - export DOCKER_CACHE_IMAGE="$CI_REGISTRY_IMAGE/caches/www"
478
+ - export DOCKER_IMAGE_NAME="review/www"
479
+ - export DOCKER_IMAGE="$CI_REGISTRY_IMAGE/$DOCKER_IMAGE_NAME"
480
+ - export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"
481
+ - |-
482
+ export DOCKER_COPY_AND_INSTALL_APP="COPY --chown=node:node $APP_DIR .
483
+ RUN yarn plugin import workspace-tools
484
+ RUN yarn workspaces focus --production && yarn rebuild"
485
+ - |-
486
+ export DOCKER_COPY_WORKSPACE_FILES="COPY --chown=node:node www/package.json /app/www/package.json
487
+ COPY --chown=node:node www/yarn.lock /app/www/yarn.lock
488
+ COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
489
+ COPY --chown=node:node .yarn /app/.yarn"
490
+ - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
491
+ - ensureNodeDockerfile
492
+ - echo -e "\\e[0Ksection_start:$(date +%s):docker-login[collapsed=true]\\r\\e[0KDocker Login"
493
+ - docker login --username gitlab-ci-token --password $CI_JOB_TOKEN $CI_REGISTRY
494
+ - echo -e "\\e[0Ksection_end:$(date +%s):docker-login\\r\\e[0K"
495
+ - echo -e "\\e[0Ksection_start:$(date +%s):docker-build[collapsed=true]\\r\\e[0KDocker build"
496
+ - 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
497
+ - echo -e "\\e[0Ksection_end:$(date +%s):docker-build\\r\\e[0K"
498
+ - echo -e "\\e[0Ksection_start:$(date +%s):docker-push[collapsed=true]\\r\\e[0KDocker push and tag"
499
+ - docker push $DOCKER_IMAGE:$DOCKER_IMAGE_TAG
500
+ - docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG $DOCKER_CACHE_IMAGE
501
+ - docker push $DOCKER_CACHE_IMAGE
502
+ - echo -e "\\e[0Ksection_end:$(date +%s):docker-push\\r\\e[0K"
503
+ cache:
504
+ - key: www-yarn
505
+ policy: pull
506
+ paths:
507
+ - www/.yarn
508
+ rules:
509
+ - if: $CI_MERGE_REQUEST_ID
510
+ needs:
511
+ - 'www ๐Ÿ”จ app | review '
512
+ retry: *a1
513
+ interruptible: true
514
+ 'www ๐Ÿงพ sbom | review ':
515
+ stage: build
516
+ image: aquasec/trivy:0.38.3
517
+ variables: {}
518
+ script:
519
+ - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
520
+ - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
521
+ - trivy fs --quiet --format cyclonedx --output "__sbom.json" www
522
+ artifacts:
523
+ paths:
524
+ - __sbom.json
525
+ rules:
526
+ - if: $CI_MERGE_REQUEST_ID
527
+ needs: []
528
+ retry: *a1
529
+ interruptible: true
530
+ allow_failure: true
531
+ 'www ๐Ÿš€ Deploy | review ':
532
+ stage: deploy review
533
+ image: path/to/docker/jobs-default:the-version
534
+ variables:
535
+ KUBERNETES_CPU_REQUEST: '1'
536
+ KUBERNETES_MEMORY_REQUEST: 1024Mi
537
+ KUBERNETES_MEMORY_LIMIT: 2048Mi
538
+ script:
539
+ - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
540
+ - export ENV_SHORT="review"
541
+ - export APP_DIR="www"
542
+ - export ENV_TYPE="review"
543
+ - export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
544
+ - export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
545
+ - 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")"
546
+ - export HOST="unknown-host.example.com"
547
+ - export ROOT_URL="https://unknown-host.example.com"
548
+ - export HOST_INTERNAL="unknown-host.example.com"
549
+ - export HOST_CANONICAL="unknown-host.example.com"
550
+ - export ROOT_URL_INTERNAL="https://unknown-host.example.com"
551
+ - 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\\"]"
552
+ - export DOCKER_REGISTRY="$CI_REGISTRY"
553
+ - export DOCKER_CACHE_IMAGE="$CI_REGISTRY_IMAGE/caches/www"
554
+ - export DOCKER_IMAGE_NAME="review/www"
555
+ - export DOCKER_IMAGE="$CI_REGISTRY_IMAGE/$DOCKER_IMAGE_NAME"
556
+ - export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"
557
+ - export DEPLOY_API_KEY="$CL_review_www_DEPLOY_API_KEY"
558
+ - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
559
+ - cd www
560
+ - echo 'would deploy'
561
+ - echo 'Uploading SBOM to Dependency Track'
562
+ - /dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/www" "https://unknown-host.example.com" "__sbom.json" vex.json || true
563
+ - echo "CL_GITLAB_ENVIRONMENT_URL=https://unknown-host.example.com" >> gitlab_environment.env
564
+ cache: []
565
+ environment:
566
+ name: review/$CI_COMMIT_REF_NAME/www
567
+ url: $CL_GITLAB_ENVIRONMENT_URL
568
+ on_stop: 'www ๐Ÿ›‘ Stop โš ๏ธ | review '
569
+ auto_stop_in: 1 week
570
+ artifacts:
571
+ reports:
572
+ dotenv: gitlab_environment.env
573
+ rules:
574
+ - when: on_success
575
+ if: $CI_MERGE_REQUEST_ID
576
+ needs:
577
+ - job: www ๐Ÿ‘ฎ lint
578
+ artifacts: false
579
+ - job: 'www ๐Ÿ”จ app | review '
580
+ artifacts: false
581
+ - job: 'www ๐Ÿ”จ docker | review '
582
+ artifacts: false
583
+ - job: www ๐Ÿงช test
584
+ artifacts: false
585
+ - job: 'www ๐Ÿงพ sbom | review '
586
+ artifacts: true
587
+ - job: www ๐Ÿ›ก audit
588
+ artifacts: false
589
+ retry: *a1
590
+ interruptible: true
591
+ allow_failure: false
592
+ 'www ๐Ÿ›‘ Stop โš ๏ธ | review ':
593
+ stage: stop review
594
+ image: path/to/docker/jobs-default:the-version
595
+ variables:
596
+ KUBERNETES_CPU_REQUEST: '0.22'
597
+ KUBERNETES_MEMORY_REQUEST: 200Mi
598
+ KUBERNETES_MEMORY_LIMIT: 400Mi
599
+ GIT_STRATEGY: none
600
+ script:
601
+ - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
602
+ - export DEPLOY_API_KEY="$CL_review_www_DEPLOY_API_KEY"
603
+ - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
604
+ - echo 'would stop'
605
+ - echo 'Disabling component in Dependency Track'
606
+ - /dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" disable "pan-test-app/www" "https://unknown-host.example.com" || true
607
+ - echo "CL_GITLAB_ENVIRONMENT_URL=https://unknown-host.example.com" >> gitlab_environment.env
608
+ environment:
609
+ name: review/$CI_COMMIT_REF_NAME/www
610
+ url: $CL_GITLAB_ENVIRONMENT_URL
611
+ action: stop
612
+ artifacts:
613
+ reports:
614
+ dotenv: gitlab_environment.env
615
+ rules:
616
+ - if: $CI_COMMIT_BRANCH =~ /^[0-9]+\\.([0-9]+|x)\\.x$/
617
+ when: on_success
618
+ - when: manual
619
+ if: $CI_MERGE_REQUEST_ID
620
+ needs: []
621
+ retry: *a1
622
+ interruptible: true
623
+ allow_failure: true
624
+ 'www ๐Ÿ”จ app | stage ':
625
+ stage: build
626
+ image: path/to/docker/jobs-default:the-version
627
+ variables:
628
+ KUBERNETES_CPU_REQUEST: '0.45'
629
+ KUBERNETES_MEMORY_REQUEST: 1Gi
630
+ KUBERNETES_MEMORY_LIMIT: 4Gi
631
+ script:
632
+ - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
633
+ - export ENV_SHORT="stage"
634
+ - export APP_DIR="www"
635
+ - export ENV_TYPE="stage"
636
+ - export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
637
+ - export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
638
+ - 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")"
639
+ - export HOST="unknown-host.example.com"
640
+ - export ROOT_URL="https://unknown-host.example.com"
641
+ - export HOST_INTERNAL="unknown-host.example.com"
642
+ - export HOST_CANONICAL="unknown-host.example.com"
643
+ - export ROOT_URL_INTERNAL="https://unknown-host.example.com"
644
+ - 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\\"]"
645
+ - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
646
+ - echo '{"id":"$(git describe --tags 2>/dev/null || git rev-parse HEAD)","time":"$CI_JOB_STARTED_AT"}' > www/__build_info.json
647
+ - echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"
648
+ - if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
649
+ - if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
650
+ - echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"
651
+ - cd www
652
+ - echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"
653
+ - if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
654
+ - if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
655
+ - echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"
656
+ - echo -e "\\e[0Ksection_start:$(date +%s):yarninstall[collapsed=true]\\r\\e[0KYarn install"
657
+ - yarn install --immutable
658
+ - echo -e "\\e[0Ksection_end:$(date +%s):yarninstall\\r\\e[0K"
659
+ - yarn build
660
+ cache:
661
+ - key: www-yarn
662
+ policy: pull-push
663
+ paths:
664
+ - www/.yarn
665
+ - key: www-node-modules
666
+ policy: pull-push
667
+ paths:
668
+ - www/node_modules
669
+ - key: www-next-cache
670
+ policy: pull-push
671
+ paths:
672
+ - www/.next/cache
673
+ artifacts:
674
+ paths:
675
+ - www/__build_info.json
676
+ - www/.next
677
+ - www/dist
678
+ expire_in: 1 day
679
+ when: always
680
+ reports: {}
681
+ rules:
682
+ - if: $CI_COMMIT_TAG
683
+ needs: []
684
+ retry: *a1
685
+ interruptible: true
686
+ 'www ๐Ÿ”จ docker | stage ':
687
+ stage: build
688
+ image: path/to/docker/docker-build:the-version
689
+ services:
690
+ - name: docker:24.0.6-dind
691
+ command:
692
+ - --tls=false
693
+ variables:
694
+ DOCKER_HOST: tcp://0.0.0.0:2375
695
+ DOCKER_TLS_CERTDIR: ''
696
+ DOCKER_DRIVER: overlay2
697
+ DOCKER_BUILDKIT: '1'
698
+ KUBERNETES_CPU_REQUEST: '0.45'
699
+ KUBERNETES_MEMORY_REQUEST: 1Gi
700
+ KUBERNETES_MEMORY_LIMIT: 2Gi
701
+ script:
702
+ - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
703
+ - export APP_DIR="www"
704
+ - export DOCKER_BUILD_CONTEXT="."
705
+ - export DOCKER_REGISTRY="$CI_REGISTRY"
706
+ - export DOCKER_CACHE_IMAGE="$CI_REGISTRY_IMAGE/caches/www"
707
+ - export DOCKER_IMAGE_NAME="stage/www"
708
+ - export DOCKER_IMAGE="$CI_REGISTRY_IMAGE/$DOCKER_IMAGE_NAME"
709
+ - export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"
710
+ - |-
711
+ export DOCKER_COPY_AND_INSTALL_APP="COPY --chown=node:node $APP_DIR .
712
+ RUN yarn plugin import workspace-tools
713
+ RUN yarn workspaces focus --production && yarn rebuild"
714
+ - |-
715
+ export DOCKER_COPY_WORKSPACE_FILES="COPY --chown=node:node www/package.json /app/www/package.json
716
+ COPY --chown=node:node www/yarn.lock /app/www/yarn.lock
717
+ COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
718
+ COPY --chown=node:node .yarn /app/.yarn"
719
+ - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
720
+ - ensureNodeDockerfile
721
+ - echo -e "\\e[0Ksection_start:$(date +%s):docker-login[collapsed=true]\\r\\e[0KDocker Login"
722
+ - docker login --username gitlab-ci-token --password $CI_JOB_TOKEN $CI_REGISTRY
723
+ - echo -e "\\e[0Ksection_end:$(date +%s):docker-login\\r\\e[0K"
724
+ - echo -e "\\e[0Ksection_start:$(date +%s):docker-build[collapsed=true]\\r\\e[0KDocker build"
725
+ - 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
726
+ - echo -e "\\e[0Ksection_end:$(date +%s):docker-build\\r\\e[0K"
727
+ - echo -e "\\e[0Ksection_start:$(date +%s):docker-push[collapsed=true]\\r\\e[0KDocker push and tag"
728
+ - docker push $DOCKER_IMAGE:$DOCKER_IMAGE_TAG
729
+ - docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG $DOCKER_CACHE_IMAGE
730
+ - docker push $DOCKER_CACHE_IMAGE
731
+ - echo -e "\\e[0Ksection_end:$(date +%s):docker-push\\r\\e[0K"
732
+ cache:
733
+ - key: www-yarn
734
+ policy: pull
735
+ paths:
736
+ - www/.yarn
737
+ rules:
738
+ - if: $CI_COMMIT_TAG
739
+ needs:
740
+ - 'www ๐Ÿ”จ app | stage '
741
+ retry: *a1
742
+ interruptible: true
743
+ 'www ๐Ÿงพ sbom | stage ':
744
+ stage: build
745
+ image: aquasec/trivy:0.38.3
746
+ variables: {}
747
+ script:
748
+ - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
749
+ - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
750
+ - trivy fs --quiet --format cyclonedx --output "__sbom.json" www
751
+ artifacts:
752
+ paths:
753
+ - __sbom.json
754
+ rules:
755
+ - if: $CI_COMMIT_TAG
756
+ needs: []
757
+ retry: *a1
758
+ interruptible: true
759
+ allow_failure: true
760
+ 'www ๐Ÿš€ Deploy | stage ':
761
+ stage: deploy stage
762
+ image: path/to/docker/jobs-default:the-version
763
+ variables:
764
+ KUBERNETES_CPU_REQUEST: '1'
765
+ KUBERNETES_MEMORY_REQUEST: 1024Mi
766
+ KUBERNETES_MEMORY_LIMIT: 2048Mi
767
+ script:
768
+ - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
769
+ - export ENV_SHORT="stage"
770
+ - export APP_DIR="www"
771
+ - export ENV_TYPE="stage"
772
+ - export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
773
+ - export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
774
+ - 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")"
775
+ - export HOST="unknown-host.example.com"
776
+ - export ROOT_URL="https://unknown-host.example.com"
777
+ - export HOST_INTERNAL="unknown-host.example.com"
778
+ - export HOST_CANONICAL="unknown-host.example.com"
779
+ - export ROOT_URL_INTERNAL="https://unknown-host.example.com"
780
+ - 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\\"]"
781
+ - export DOCKER_REGISTRY="$CI_REGISTRY"
782
+ - export DOCKER_CACHE_IMAGE="$CI_REGISTRY_IMAGE/caches/www"
783
+ - export DOCKER_IMAGE_NAME="stage/www"
784
+ - export DOCKER_IMAGE="$CI_REGISTRY_IMAGE/$DOCKER_IMAGE_NAME"
785
+ - export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"
786
+ - export DEPLOY_API_KEY="$CL_stage_www_DEPLOY_API_KEY"
787
+ - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
788
+ - cd www
789
+ - echo 'would deploy'
790
+ - echo 'Uploading SBOM to Dependency Track'
791
+ - /dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/www" "https://unknown-host.example.com" "__sbom.json" vex.json || true
792
+ - echo "CL_GITLAB_ENVIRONMENT_URL=https://unknown-host.example.com" >> gitlab_environment.env
793
+ cache: []
794
+ environment:
795
+ name: stage/www
796
+ url: $CL_GITLAB_ENVIRONMENT_URL
797
+ on_stop: 'www ๐Ÿ›‘ Stop โš ๏ธ | stage '
798
+ artifacts:
799
+ reports:
800
+ dotenv: gitlab_environment.env
801
+ rules:
802
+ - when: on_success
803
+ if: $CI_COMMIT_TAG
804
+ needs:
805
+ - job: 'www ๐Ÿ”จ app | stage '
806
+ artifacts: false
807
+ - job: 'www ๐Ÿ”จ docker | stage '
808
+ artifacts: false
809
+ - job: 'www ๐Ÿงพ sbom | stage '
810
+ artifacts: true
811
+ retry: *a1
812
+ interruptible: true
813
+ allow_failure: false
814
+ 'www ๐Ÿ›‘ Stop โš ๏ธ | stage ':
815
+ stage: stop stage
816
+ image: path/to/docker/jobs-default:the-version
817
+ variables:
818
+ KUBERNETES_CPU_REQUEST: '0.22'
819
+ KUBERNETES_MEMORY_REQUEST: 200Mi
820
+ KUBERNETES_MEMORY_LIMIT: 400Mi
821
+ GIT_STRATEGY: none
822
+ script:
823
+ - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
824
+ - export DEPLOY_API_KEY="$CL_stage_www_DEPLOY_API_KEY"
825
+ - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
826
+ - echo 'would stop'
827
+ - echo 'Disabling component in Dependency Track'
828
+ - /dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" disable "pan-test-app/www" "https://unknown-host.example.com" || true
829
+ - echo "CL_GITLAB_ENVIRONMENT_URL=https://unknown-host.example.com" >> gitlab_environment.env
830
+ environment:
831
+ name: stage/www
832
+ url: $CL_GITLAB_ENVIRONMENT_URL
833
+ action: stop
834
+ artifacts:
835
+ reports:
836
+ dotenv: gitlab_environment.env
837
+ rules:
838
+ - if: $CI_COMMIT_BRANCH =~ /^[0-9]+\\.([0-9]+|x)\\.x$/
839
+ when: on_success
840
+ - when: manual
841
+ if: $CI_COMMIT_TAG
842
+ needs: []
843
+ retry: *a1
844
+ interruptible: true
845
+ allow_failure: true
846
+ 'www ๐Ÿ”จ app | prod ':
847
+ stage: build
848
+ image: path/to/docker/jobs-default:the-version
849
+ variables:
850
+ KUBERNETES_CPU_REQUEST: '0.45'
851
+ KUBERNETES_MEMORY_REQUEST: 1Gi
852
+ KUBERNETES_MEMORY_LIMIT: 4Gi
853
+ script:
854
+ - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
855
+ - export ENV_SHORT="prod"
856
+ - export APP_DIR="www"
857
+ - export ENV_TYPE="prod"
858
+ - export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
859
+ - export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
860
+ - 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")"
861
+ - export HOST="unknown-host.example.com"
862
+ - export ROOT_URL="https://unknown-host.example.com"
863
+ - export HOST_INTERNAL="unknown-host.example.com"
864
+ - export HOST_CANONICAL="unknown-host.example.com"
865
+ - export ROOT_URL_INTERNAL="https://unknown-host.example.com"
866
+ - 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\\"]"
867
+ - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
868
+ - echo '{"id":"$(git describe --tags 2>/dev/null || git rev-parse HEAD)","time":"$CI_JOB_STARTED_AT"}' > www/__build_info.json
869
+ - echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"
870
+ - if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
871
+ - if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
872
+ - echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"
873
+ - cd www
874
+ - echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"
875
+ - if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
876
+ - if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
877
+ - echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"
878
+ - echo -e "\\e[0Ksection_start:$(date +%s):yarninstall[collapsed=true]\\r\\e[0KYarn install"
879
+ - yarn install --immutable
880
+ - echo -e "\\e[0Ksection_end:$(date +%s):yarninstall\\r\\e[0K"
881
+ - yarn build
882
+ cache:
883
+ - key: www-yarn
884
+ policy: pull-push
885
+ paths:
886
+ - www/.yarn
887
+ - key: www-node-modules
888
+ policy: pull-push
889
+ paths:
890
+ - www/node_modules
891
+ - key: www-next-cache
892
+ policy: pull-push
893
+ paths:
894
+ - www/.next/cache
895
+ artifacts:
896
+ paths:
897
+ - www/__build_info.json
898
+ - www/.next
899
+ - www/dist
900
+ expire_in: 1 day
901
+ when: always
902
+ reports: {}
903
+ rules:
904
+ - if: $CI_COMMIT_TAG
905
+ needs: []
906
+ retry: *a1
907
+ interruptible: true
908
+ 'www ๐Ÿ”จ docker | prod ':
909
+ stage: build
910
+ image: path/to/docker/docker-build:the-version
911
+ services:
912
+ - name: docker:24.0.6-dind
913
+ command:
914
+ - --tls=false
915
+ variables:
916
+ DOCKER_HOST: tcp://0.0.0.0:2375
917
+ DOCKER_TLS_CERTDIR: ''
918
+ DOCKER_DRIVER: overlay2
919
+ DOCKER_BUILDKIT: '1'
920
+ KUBERNETES_CPU_REQUEST: '0.45'
921
+ KUBERNETES_MEMORY_REQUEST: 1Gi
922
+ KUBERNETES_MEMORY_LIMIT: 2Gi
923
+ script:
924
+ - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
925
+ - export APP_DIR="www"
926
+ - export DOCKER_BUILD_CONTEXT="."
927
+ - export DOCKER_REGISTRY="$CI_REGISTRY"
928
+ - export DOCKER_CACHE_IMAGE="$CI_REGISTRY_IMAGE/caches/www"
929
+ - export DOCKER_IMAGE_NAME="prod/www"
930
+ - export DOCKER_IMAGE="$CI_REGISTRY_IMAGE/$DOCKER_IMAGE_NAME"
931
+ - export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"
932
+ - |-
933
+ export DOCKER_COPY_AND_INSTALL_APP="COPY --chown=node:node $APP_DIR .
934
+ RUN yarn plugin import workspace-tools
935
+ RUN yarn workspaces focus --production && yarn rebuild"
936
+ - |-
937
+ export DOCKER_COPY_WORKSPACE_FILES="COPY --chown=node:node www/package.json /app/www/package.json
938
+ COPY --chown=node:node www/yarn.lock /app/www/yarn.lock
939
+ COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
940
+ COPY --chown=node:node .yarn /app/.yarn"
941
+ - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
942
+ - ensureNodeDockerfile
943
+ - echo -e "\\e[0Ksection_start:$(date +%s):docker-login[collapsed=true]\\r\\e[0KDocker Login"
944
+ - docker login --username gitlab-ci-token --password $CI_JOB_TOKEN $CI_REGISTRY
945
+ - echo -e "\\e[0Ksection_end:$(date +%s):docker-login\\r\\e[0K"
946
+ - echo -e "\\e[0Ksection_start:$(date +%s):docker-build[collapsed=true]\\r\\e[0KDocker build"
947
+ - 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
948
+ - echo -e "\\e[0Ksection_end:$(date +%s):docker-build\\r\\e[0K"
949
+ - echo -e "\\e[0Ksection_start:$(date +%s):docker-push[collapsed=true]\\r\\e[0KDocker push and tag"
950
+ - docker push $DOCKER_IMAGE:$DOCKER_IMAGE_TAG
951
+ - docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG $DOCKER_CACHE_IMAGE
952
+ - docker push $DOCKER_CACHE_IMAGE
953
+ - echo -e "\\e[0Ksection_end:$(date +%s):docker-push\\r\\e[0K"
954
+ cache:
955
+ - key: www-yarn
956
+ policy: pull
957
+ paths:
958
+ - www/.yarn
959
+ rules:
960
+ - if: $CI_COMMIT_TAG
961
+ needs:
962
+ - 'www ๐Ÿ”จ app | prod '
963
+ retry: *a1
964
+ interruptible: true
965
+ 'www ๐Ÿงพ sbom | prod ':
966
+ stage: build
967
+ image: aquasec/trivy:0.38.3
968
+ variables: {}
969
+ script:
970
+ - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
971
+ - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
972
+ - trivy fs --quiet --format cyclonedx --output "__sbom.json" www
973
+ artifacts:
974
+ paths:
975
+ - __sbom.json
976
+ rules:
977
+ - if: $CI_COMMIT_TAG
978
+ needs: []
979
+ retry: *a1
980
+ interruptible: true
981
+ allow_failure: true
982
+ 'www ๐Ÿš€ Deploy | prod ':
983
+ stage: deploy prod
984
+ image: path/to/docker/jobs-default:the-version
985
+ variables:
986
+ KUBERNETES_CPU_REQUEST: '1'
987
+ KUBERNETES_MEMORY_REQUEST: 1024Mi
988
+ KUBERNETES_MEMORY_LIMIT: 2048Mi
989
+ script:
990
+ - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
991
+ - export ENV_SHORT="prod"
992
+ - export APP_DIR="www"
993
+ - export ENV_TYPE="prod"
994
+ - export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
995
+ - export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
996
+ - 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")"
997
+ - export HOST="unknown-host.example.com"
998
+ - export ROOT_URL="https://unknown-host.example.com"
999
+ - export HOST_INTERNAL="unknown-host.example.com"
1000
+ - export HOST_CANONICAL="unknown-host.example.com"
1001
+ - export ROOT_URL_INTERNAL="https://unknown-host.example.com"
1002
+ - 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\\"]"
1003
+ - export DOCKER_REGISTRY="$CI_REGISTRY"
1004
+ - export DOCKER_CACHE_IMAGE="$CI_REGISTRY_IMAGE/caches/www"
1005
+ - export DOCKER_IMAGE_NAME="prod/www"
1006
+ - export DOCKER_IMAGE="$CI_REGISTRY_IMAGE/$DOCKER_IMAGE_NAME"
1007
+ - export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"
1008
+ - export DEPLOY_API_KEY="$CL_prod_www_DEPLOY_API_KEY"
1009
+ - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
1010
+ - cd www
1011
+ - echo 'would deploy'
1012
+ - echo 'Uploading SBOM to Dependency Track'
1013
+ - /dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/www" "https://unknown-host.example.com" "__sbom.json" vex.json || true
1014
+ - echo "CL_GITLAB_ENVIRONMENT_URL=https://unknown-host.example.com" >> gitlab_environment.env
1015
+ cache: []
1016
+ environment:
1017
+ name: prod/www
1018
+ url: $CL_GITLAB_ENVIRONMENT_URL
1019
+ on_stop: 'www ๐Ÿ›‘ Stop โš ๏ธ | prod '
1020
+ artifacts:
1021
+ reports:
1022
+ dotenv: gitlab_environment.env
1023
+ rules:
1024
+ - when: manual
1025
+ if: $CI_COMMIT_TAG
1026
+ needs:
1027
+ - job: 'www ๐Ÿ”จ app | prod '
1028
+ artifacts: false
1029
+ - job: 'www ๐Ÿ”จ docker | prod '
1030
+ artifacts: false
1031
+ - job: 'www ๐Ÿงพ sbom | prod '
1032
+ artifacts: true
1033
+ retry: *a1
1034
+ interruptible: true
1035
+ allow_failure: true
1036
+ 'www ๐Ÿ›‘ Stop โš ๏ธ | prod ':
1037
+ stage: stop prod
1038
+ image: path/to/docker/jobs-default:the-version
1039
+ variables:
1040
+ KUBERNETES_CPU_REQUEST: '0.22'
1041
+ KUBERNETES_MEMORY_REQUEST: 200Mi
1042
+ KUBERNETES_MEMORY_LIMIT: 400Mi
1043
+ GIT_STRATEGY: none
1044
+ script:
1045
+ - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
1046
+ - export DEPLOY_API_KEY="$CL_prod_www_DEPLOY_API_KEY"
1047
+ - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
1048
+ - echo 'would stop'
1049
+ - echo 'Disabling component in Dependency Track'
1050
+ - /dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" disable "pan-test-app/www" "https://unknown-host.example.com" || true
1051
+ - echo "CL_GITLAB_ENVIRONMENT_URL=https://unknown-host.example.com" >> gitlab_environment.env
1052
+ environment:
1053
+ name: prod/www
1054
+ url: $CL_GITLAB_ENVIRONMENT_URL
1055
+ action: stop
1056
+ artifacts:
1057
+ reports:
1058
+ dotenv: gitlab_environment.env
1059
+ rules:
1060
+ - if: $CI_COMMIT_BRANCH =~ /^[0-9]+\\.([0-9]+|x)\\.x$/
1061
+ when: on_success
1062
+ - when: manual
1063
+ if: $CI_COMMIT_TAG
1064
+ needs: []
1065
+ retry: *a1
1066
+ interruptible: true
1067
+ allow_failure: true
1068
+ create release:
1069
+ stage: release
1070
+ image: path/to/docker/semantic-release:the-version
1071
+ script:
1072
+ - semanticRelease
1073
+ after_script:
1074
+ - echo '๐Ÿ‘‰ The project access token might be invald - run \`project-renew-token\` in catladder CLI to fix.'
1075
+ rules:
1076
+ - &a2
1077
+ if: $CI_COMMIT_MESSAGE =~ /^chore\\(release\\).*/
1078
+ when: never
1079
+ - &a3
1080
+ if: $CI_PIPELINE_SOURCE == "schedule"
1081
+ when: never
1082
+ - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH && $AUTO_RELEASE == "true"
1083
+ when: on_success
1084
+ - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
1085
+ when: manual
1086
+ - if: $CI_COMMIT_BRANCH =~ /^[0-9]+.([0-9]+|x).x$/
1087
+ when: manual
1088
+ โš ๏ธ force create release:
1089
+ stage: release
1090
+ image: path/to/docker/semantic-release:the-version
1091
+ script:
1092
+ - semanticRelease
1093
+ after_script:
1094
+ - echo '๐Ÿ‘‰ The project access token might be invald - run \`project-renew-token\` in catladder CLI to fix.'
1095
+ rules:
1096
+ - *a2
1097
+ - *a3
1098
+ - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
1099
+ when: manual
1100
+ - if: $CI_COMMIT_BRANCH =~ /^[0-9]+.([0-9]+|x).x$/
1101
+ when: manual
1102
+ needs: []
1103
+ "
1104
+ `;
1105
+
3
1106
  exports[`matches snapshot for custom-deploy 1`] = `
4
1107
  {
5
1108
  "mainBranch": {