@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,1280 @@
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
+ api ๐Ÿ›ก 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="api"
58
+ - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
59
+ - cd api
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
+ api ๐Ÿ‘ฎ 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="api"
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 api
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: api-yarn
100
+ policy: pull-push
101
+ paths:
102
+ - api/.yarn
103
+ - key: api-node-modules
104
+ policy: pull-push
105
+ paths:
106
+ - api/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
+ api ๐Ÿงช 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="api"
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 api
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: api-yarn
141
+ policy: pull-push
142
+ paths:
143
+ - api/.yarn
144
+ - key: api-node-modules
145
+ policy: pull-push
146
+ paths:
147
+ - api/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
+ 'api ๐Ÿ”จ 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="api"
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"}' > api/__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 api
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: api-yarn
194
+ policy: pull-push
195
+ paths:
196
+ - api/.yarn
197
+ - key: api-node-modules
198
+ policy: pull-push
199
+ paths:
200
+ - api/node_modules
201
+ - key: api-next-cache
202
+ policy: pull-push
203
+ paths:
204
+ - api/.next/cache
205
+ artifacts:
206
+ paths:
207
+ - api/__build_info.json
208
+ - api/.next
209
+ - api/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
+ 'api ๐Ÿงพ sbom | dev ':
221
+ stage: build
222
+ image: aquasec/trivy:0.38.3
223
+ variables: {}
224
+ script:
225
+ - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
226
+ - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
227
+ - trivy fs --quiet --format cyclonedx --output "__sbom.json" api
228
+ artifacts:
229
+ paths:
230
+ - __sbom.json
231
+ rules:
232
+ - when: never
233
+ if: $CI_COMMIT_MESSAGE =~ /^chore\\(release\\).*/
234
+ - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
235
+ needs: []
236
+ retry: *a1
237
+ interruptible: true
238
+ allow_failure: true
239
+ 'api ๐Ÿš€ Deploy | dev ':
240
+ stage: deploy dev
241
+ image: path/to/docker/jobs-default:the-version
242
+ variables:
243
+ KUBERNETES_CPU_REQUEST: '0.22'
244
+ KUBERNETES_MEMORY_REQUEST: 200Mi
245
+ KUBERNETES_MEMORY_LIMIT: 400Mi
246
+ script:
247
+ - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
248
+ - export ENV_SHORT="dev"
249
+ - export APP_DIR="api"
250
+ - export ENV_TYPE="dev"
251
+ - export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
252
+ - export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
253
+ - 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")"
254
+ - export HOST="unknown-host.example.com"
255
+ - export ROOT_URL="https://unknown-host.example.com"
256
+ - export HOST_INTERNAL="unknown-host.example.com"
257
+ - export HOST_CANONICAL="unknown-host.example.com"
258
+ - export ROOT_URL_INTERNAL="https://unknown-host.example.com"
259
+ - 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\\"]"
260
+ - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
261
+ - cd api
262
+ - yarn deploy
263
+ - echo 'Uploading SBOM to Dependency Track'
264
+ - /dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/api" "https://unknown-host.example.com" "__sbom.json" vex.json || true
265
+ cache: []
266
+ rules:
267
+ - when: never
268
+ if: $CI_COMMIT_MESSAGE =~ /^chore\\(release\\).*/
269
+ - when: on_success
270
+ if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
271
+ needs:
272
+ - job: api ๐Ÿ‘ฎ lint
273
+ artifacts: false
274
+ - job: 'api ๐Ÿ”จ app | dev '
275
+ artifacts: true
276
+ - job: api ๐Ÿงช test
277
+ artifacts: false
278
+ - job: 'api ๐Ÿงพ sbom | dev '
279
+ artifacts: true
280
+ - job: api ๐Ÿ›ก audit
281
+ artifacts: false
282
+ retry: *a1
283
+ interruptible: true
284
+ allow_failure: false
285
+ 'api ๐Ÿ”จ app | review ':
286
+ stage: build
287
+ image: path/to/docker/jobs-default:the-version
288
+ variables:
289
+ KUBERNETES_CPU_REQUEST: '0.45'
290
+ KUBERNETES_MEMORY_REQUEST: 1Gi
291
+ KUBERNETES_MEMORY_LIMIT: 4Gi
292
+ script:
293
+ - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
294
+ - export ENV_SHORT="review"
295
+ - export APP_DIR="api"
296
+ - export ENV_TYPE="review"
297
+ - export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
298
+ - export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
299
+ - 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")"
300
+ - export HOST="unknown-host.example.com"
301
+ - export ROOT_URL="https://unknown-host.example.com"
302
+ - export HOST_INTERNAL="unknown-host.example.com"
303
+ - export HOST_CANONICAL="unknown-host.example.com"
304
+ - export ROOT_URL_INTERNAL="https://unknown-host.example.com"
305
+ - 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\\"]"
306
+ - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
307
+ - echo '{"id":"$(git describe --tags 2>/dev/null || git rev-parse HEAD)","time":"$CI_JOB_STARTED_AT"}' > api/__build_info.json
308
+ - echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"
309
+ - if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
310
+ - if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
311
+ - echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"
312
+ - cd api
313
+ - echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"
314
+ - if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
315
+ - if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
316
+ - echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"
317
+ - echo -e "\\e[0Ksection_start:$(date +%s):yarninstall[collapsed=true]\\r\\e[0KYarn install"
318
+ - yarn install --immutable
319
+ - echo -e "\\e[0Ksection_end:$(date +%s):yarninstall\\r\\e[0K"
320
+ - yarn build
321
+ cache:
322
+ - key: api-yarn
323
+ policy: pull-push
324
+ paths:
325
+ - api/.yarn
326
+ - key: api-node-modules
327
+ policy: pull-push
328
+ paths:
329
+ - api/node_modules
330
+ - key: api-next-cache
331
+ policy: pull-push
332
+ paths:
333
+ - api/.next/cache
334
+ artifacts:
335
+ paths:
336
+ - api/__build_info.json
337
+ - api/.next
338
+ - api/dist
339
+ expire_in: 1 day
340
+ when: always
341
+ reports: {}
342
+ rules:
343
+ - if: $CI_MERGE_REQUEST_ID
344
+ needs: []
345
+ retry: *a1
346
+ interruptible: true
347
+ 'api ๐Ÿงพ sbom | review ':
348
+ stage: build
349
+ image: aquasec/trivy:0.38.3
350
+ variables: {}
351
+ script:
352
+ - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
353
+ - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
354
+ - trivy fs --quiet --format cyclonedx --output "__sbom.json" api
355
+ artifacts:
356
+ paths:
357
+ - __sbom.json
358
+ rules:
359
+ - if: $CI_MERGE_REQUEST_ID
360
+ needs: []
361
+ retry: *a1
362
+ interruptible: true
363
+ allow_failure: true
364
+ 'api ๐Ÿš€ Deploy | review ':
365
+ stage: deploy review
366
+ image: path/to/docker/jobs-default:the-version
367
+ variables:
368
+ KUBERNETES_CPU_REQUEST: '0.22'
369
+ KUBERNETES_MEMORY_REQUEST: 200Mi
370
+ KUBERNETES_MEMORY_LIMIT: 400Mi
371
+ script:
372
+ - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
373
+ - export ENV_SHORT="review"
374
+ - export APP_DIR="api"
375
+ - export ENV_TYPE="review"
376
+ - export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
377
+ - export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
378
+ - 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")"
379
+ - export HOST="unknown-host.example.com"
380
+ - export ROOT_URL="https://unknown-host.example.com"
381
+ - export HOST_INTERNAL="unknown-host.example.com"
382
+ - export HOST_CANONICAL="unknown-host.example.com"
383
+ - export ROOT_URL_INTERNAL="https://unknown-host.example.com"
384
+ - 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\\"]"
385
+ - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
386
+ - cd api
387
+ - yarn deploy
388
+ - echo 'Uploading SBOM to Dependency Track'
389
+ - /dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/api" "https://unknown-host.example.com" "__sbom.json" vex.json || true
390
+ cache: []
391
+ rules:
392
+ - when: on_success
393
+ if: $CI_MERGE_REQUEST_ID
394
+ needs:
395
+ - job: api ๐Ÿ‘ฎ lint
396
+ artifacts: false
397
+ - job: 'api ๐Ÿ”จ app | review '
398
+ artifacts: true
399
+ - job: api ๐Ÿงช test
400
+ artifacts: false
401
+ - job: 'api ๐Ÿงพ sbom | review '
402
+ artifacts: true
403
+ - job: api ๐Ÿ›ก audit
404
+ artifacts: false
405
+ retry: *a1
406
+ interruptible: true
407
+ allow_failure: false
408
+ 'api ๐Ÿ”จ app | stage ':
409
+ stage: build
410
+ image: path/to/docker/jobs-default:the-version
411
+ variables:
412
+ KUBERNETES_CPU_REQUEST: '0.45'
413
+ KUBERNETES_MEMORY_REQUEST: 1Gi
414
+ KUBERNETES_MEMORY_LIMIT: 4Gi
415
+ script:
416
+ - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
417
+ - export ENV_SHORT="stage"
418
+ - export APP_DIR="api"
419
+ - export ENV_TYPE="stage"
420
+ - export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
421
+ - export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
422
+ - 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")"
423
+ - export HOST="unknown-host.example.com"
424
+ - export ROOT_URL="https://unknown-host.example.com"
425
+ - export HOST_INTERNAL="unknown-host.example.com"
426
+ - export HOST_CANONICAL="unknown-host.example.com"
427
+ - export ROOT_URL_INTERNAL="https://unknown-host.example.com"
428
+ - 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\\"]"
429
+ - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
430
+ - echo '{"id":"$(git describe --tags 2>/dev/null || git rev-parse HEAD)","time":"$CI_JOB_STARTED_AT"}' > api/__build_info.json
431
+ - echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"
432
+ - if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
433
+ - if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
434
+ - echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"
435
+ - cd api
436
+ - echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"
437
+ - if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
438
+ - if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
439
+ - echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"
440
+ - echo -e "\\e[0Ksection_start:$(date +%s):yarninstall[collapsed=true]\\r\\e[0KYarn install"
441
+ - yarn install --immutable
442
+ - echo -e "\\e[0Ksection_end:$(date +%s):yarninstall\\r\\e[0K"
443
+ - yarn build
444
+ cache:
445
+ - key: api-yarn
446
+ policy: pull-push
447
+ paths:
448
+ - api/.yarn
449
+ - key: api-node-modules
450
+ policy: pull-push
451
+ paths:
452
+ - api/node_modules
453
+ - key: api-next-cache
454
+ policy: pull-push
455
+ paths:
456
+ - api/.next/cache
457
+ artifacts:
458
+ paths:
459
+ - api/__build_info.json
460
+ - api/.next
461
+ - api/dist
462
+ expire_in: 1 day
463
+ when: always
464
+ reports: {}
465
+ rules:
466
+ - if: $CI_COMMIT_TAG
467
+ needs: []
468
+ retry: *a1
469
+ interruptible: true
470
+ 'api ๐Ÿงพ sbom | stage ':
471
+ stage: build
472
+ image: aquasec/trivy:0.38.3
473
+ variables: {}
474
+ script:
475
+ - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
476
+ - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
477
+ - trivy fs --quiet --format cyclonedx --output "__sbom.json" api
478
+ artifacts:
479
+ paths:
480
+ - __sbom.json
481
+ rules:
482
+ - if: $CI_COMMIT_TAG
483
+ needs: []
484
+ retry: *a1
485
+ interruptible: true
486
+ allow_failure: true
487
+ 'api ๐Ÿš€ Deploy | stage ':
488
+ stage: deploy stage
489
+ image: path/to/docker/jobs-default:the-version
490
+ variables:
491
+ KUBERNETES_CPU_REQUEST: '0.22'
492
+ KUBERNETES_MEMORY_REQUEST: 200Mi
493
+ KUBERNETES_MEMORY_LIMIT: 400Mi
494
+ script:
495
+ - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
496
+ - export ENV_SHORT="stage"
497
+ - export APP_DIR="api"
498
+ - export ENV_TYPE="stage"
499
+ - export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
500
+ - export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
501
+ - 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")"
502
+ - export HOST="unknown-host.example.com"
503
+ - export ROOT_URL="https://unknown-host.example.com"
504
+ - export HOST_INTERNAL="unknown-host.example.com"
505
+ - export HOST_CANONICAL="unknown-host.example.com"
506
+ - export ROOT_URL_INTERNAL="https://unknown-host.example.com"
507
+ - 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\\"]"
508
+ - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
509
+ - cd api
510
+ - yarn deploy
511
+ - echo 'Uploading SBOM to Dependency Track'
512
+ - /dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/api" "https://unknown-host.example.com" "__sbom.json" vex.json || true
513
+ cache: []
514
+ rules:
515
+ - when: on_success
516
+ if: $CI_COMMIT_TAG
517
+ needs:
518
+ - job: 'api ๐Ÿ”จ app | stage '
519
+ artifacts: true
520
+ - job: 'api ๐Ÿงพ sbom | stage '
521
+ artifacts: true
522
+ retry: *a1
523
+ interruptible: true
524
+ allow_failure: false
525
+ 'api ๐Ÿ”จ app | prod ':
526
+ stage: build
527
+ image: path/to/docker/jobs-default:the-version
528
+ variables:
529
+ KUBERNETES_CPU_REQUEST: '0.45'
530
+ KUBERNETES_MEMORY_REQUEST: 1Gi
531
+ KUBERNETES_MEMORY_LIMIT: 4Gi
532
+ script:
533
+ - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
534
+ - export ENV_SHORT="prod"
535
+ - export APP_DIR="api"
536
+ - export ENV_TYPE="prod"
537
+ - export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
538
+ - export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
539
+ - 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")"
540
+ - export HOST="unknown-host.example.com"
541
+ - export ROOT_URL="https://unknown-host.example.com"
542
+ - export HOST_INTERNAL="unknown-host.example.com"
543
+ - export HOST_CANONICAL="unknown-host.example.com"
544
+ - export ROOT_URL_INTERNAL="https://unknown-host.example.com"
545
+ - 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\\"]"
546
+ - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
547
+ - echo '{"id":"$(git describe --tags 2>/dev/null || git rev-parse HEAD)","time":"$CI_JOB_STARTED_AT"}' > api/__build_info.json
548
+ - echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"
549
+ - if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
550
+ - if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
551
+ - echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"
552
+ - cd api
553
+ - echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"
554
+ - if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
555
+ - if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
556
+ - echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"
557
+ - echo -e "\\e[0Ksection_start:$(date +%s):yarninstall[collapsed=true]\\r\\e[0KYarn install"
558
+ - yarn install --immutable
559
+ - echo -e "\\e[0Ksection_end:$(date +%s):yarninstall\\r\\e[0K"
560
+ - yarn build
561
+ cache:
562
+ - key: api-yarn
563
+ policy: pull-push
564
+ paths:
565
+ - api/.yarn
566
+ - key: api-node-modules
567
+ policy: pull-push
568
+ paths:
569
+ - api/node_modules
570
+ - key: api-next-cache
571
+ policy: pull-push
572
+ paths:
573
+ - api/.next/cache
574
+ artifacts:
575
+ paths:
576
+ - api/__build_info.json
577
+ - api/.next
578
+ - api/dist
579
+ expire_in: 1 day
580
+ when: always
581
+ reports: {}
582
+ rules:
583
+ - if: $CI_COMMIT_TAG
584
+ needs: []
585
+ retry: *a1
586
+ interruptible: true
587
+ 'api ๐Ÿงพ sbom | prod ':
588
+ stage: build
589
+ image: aquasec/trivy:0.38.3
590
+ variables: {}
591
+ script:
592
+ - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
593
+ - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
594
+ - trivy fs --quiet --format cyclonedx --output "__sbom.json" api
595
+ artifacts:
596
+ paths:
597
+ - __sbom.json
598
+ rules:
599
+ - if: $CI_COMMIT_TAG
600
+ needs: []
601
+ retry: *a1
602
+ interruptible: true
603
+ allow_failure: true
604
+ 'api ๐Ÿš€ Deploy | prod ':
605
+ stage: deploy prod
606
+ image: path/to/docker/jobs-default:the-version
607
+ variables:
608
+ KUBERNETES_CPU_REQUEST: '0.22'
609
+ KUBERNETES_MEMORY_REQUEST: 200Mi
610
+ KUBERNETES_MEMORY_LIMIT: 400Mi
611
+ script:
612
+ - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
613
+ - export ENV_SHORT="prod"
614
+ - export APP_DIR="api"
615
+ - export ENV_TYPE="prod"
616
+ - export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
617
+ - export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
618
+ - 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")"
619
+ - export HOST="unknown-host.example.com"
620
+ - export ROOT_URL="https://unknown-host.example.com"
621
+ - export HOST_INTERNAL="unknown-host.example.com"
622
+ - export HOST_CANONICAL="unknown-host.example.com"
623
+ - export ROOT_URL_INTERNAL="https://unknown-host.example.com"
624
+ - 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\\"]"
625
+ - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
626
+ - cd api
627
+ - yarn deploy
628
+ - echo 'Uploading SBOM to Dependency Track'
629
+ - /dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/api" "https://unknown-host.example.com" "__sbom.json" vex.json || true
630
+ cache: []
631
+ rules:
632
+ - when: manual
633
+ if: $CI_COMMIT_TAG
634
+ needs:
635
+ - job: 'api ๐Ÿ”จ app | prod '
636
+ artifacts: true
637
+ - job: 'api ๐Ÿงพ sbom | prod '
638
+ artifacts: true
639
+ retry: *a1
640
+ interruptible: true
641
+ allow_failure: true
642
+ www ๐Ÿ›ก audit:
643
+ stage: test
644
+ image: path/to/docker/jobs-default:the-version
645
+ variables:
646
+ KUBERNETES_CPU_REQUEST: '0.45'
647
+ KUBERNETES_MEMORY_REQUEST: 1Gi
648
+ KUBERNETES_MEMORY_LIMIT: 4Gi
649
+ script:
650
+ - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
651
+ - export APP_PATH="www"
652
+ - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
653
+ - cd www
654
+ - yarn npm audit --environment production
655
+ rules:
656
+ - when: never
657
+ if: $CI_COMMIT_MESSAGE =~ /^chore\\(release\\).*/
658
+ - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
659
+ - if: $CI_MERGE_REQUEST_ID
660
+ needs: []
661
+ retry: *a1
662
+ interruptible: true
663
+ allow_failure: true
664
+ www ๐Ÿ‘ฎ lint:
665
+ stage: test
666
+ image: path/to/docker/jobs-default:the-version
667
+ variables:
668
+ KUBERNETES_CPU_REQUEST: '0.45'
669
+ KUBERNETES_MEMORY_REQUEST: 1Gi
670
+ KUBERNETES_MEMORY_LIMIT: 4Gi
671
+ script:
672
+ - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
673
+ - export APP_PATH="www"
674
+ - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
675
+ - echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"
676
+ - if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
677
+ - if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
678
+ - echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"
679
+ - cd www
680
+ - echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"
681
+ - if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
682
+ - if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
683
+ - echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"
684
+ - echo -e "\\e[0Ksection_start:$(date +%s):yarninstall[collapsed=true]\\r\\e[0KYarn install"
685
+ - yarn install --immutable
686
+ - echo -e "\\e[0Ksection_end:$(date +%s):yarninstall\\r\\e[0K"
687
+ - yarn lint
688
+ cache:
689
+ - key: www-yarn
690
+ policy: pull-push
691
+ paths:
692
+ - www/.yarn
693
+ - key: www-node-modules
694
+ policy: pull-push
695
+ paths:
696
+ - www/node_modules
697
+ rules:
698
+ - when: never
699
+ if: $CI_COMMIT_MESSAGE =~ /^chore\\(release\\).*/
700
+ - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
701
+ - if: $CI_MERGE_REQUEST_ID
702
+ needs: []
703
+ retry: *a1
704
+ interruptible: true
705
+ www ๐Ÿงช test:
706
+ stage: test
707
+ image: path/to/docker/jobs-testing-chrome:the-version
708
+ variables:
709
+ KUBERNETES_CPU_REQUEST: '0.45'
710
+ KUBERNETES_MEMORY_REQUEST: 1Gi
711
+ KUBERNETES_MEMORY_LIMIT: 4Gi
712
+ script:
713
+ - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
714
+ - export APP_PATH="www"
715
+ - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
716
+ - echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"
717
+ - if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
718
+ - if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
719
+ - echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"
720
+ - cd www
721
+ - echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"
722
+ - if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
723
+ - if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
724
+ - echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"
725
+ - echo -e "\\e[0Ksection_start:$(date +%s):yarninstall[collapsed=true]\\r\\e[0KYarn install"
726
+ - yarn install --immutable
727
+ - echo -e "\\e[0Ksection_end:$(date +%s):yarninstall\\r\\e[0K"
728
+ - yarn test
729
+ cache:
730
+ - key: www-yarn
731
+ policy: pull-push
732
+ paths:
733
+ - www/.yarn
734
+ - key: www-node-modules
735
+ policy: pull-push
736
+ paths:
737
+ - www/node_modules
738
+ rules:
739
+ - when: never
740
+ if: $CI_COMMIT_MESSAGE =~ /^chore\\(release\\).*/
741
+ - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
742
+ - if: $CI_MERGE_REQUEST_ID
743
+ needs: []
744
+ retry: *a1
745
+ interruptible: true
746
+ 'www ๐Ÿ”จ app | dev ':
747
+ stage: build
748
+ image: path/to/docker/jobs-default:the-version
749
+ variables:
750
+ KUBERNETES_CPU_REQUEST: '0.45'
751
+ KUBERNETES_MEMORY_REQUEST: 1Gi
752
+ KUBERNETES_MEMORY_LIMIT: 4Gi
753
+ script:
754
+ - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
755
+ - export ENV_SHORT="dev"
756
+ - export APP_DIR="www"
757
+ - export ENV_TYPE="dev"
758
+ - export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
759
+ - export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
760
+ - 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")"
761
+ - export HOST="unknown-host.example.com"
762
+ - export ROOT_URL="https://unknown-host.example.com"
763
+ - export HOST_INTERNAL="unknown-host.example.com"
764
+ - export HOST_CANONICAL="unknown-host.example.com"
765
+ - export ROOT_URL_INTERNAL="https://unknown-host.example.com"
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\\"]"
767
+ - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
768
+ - echo '{"id":"$(git describe --tags 2>/dev/null || git rev-parse HEAD)","time":"$CI_JOB_STARTED_AT"}' > www/__build_info.json
769
+ - echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"
770
+ - if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
771
+ - if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
772
+ - echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"
773
+ - cd www
774
+ - echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"
775
+ - if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
776
+ - if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
777
+ - echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"
778
+ - echo -e "\\e[0Ksection_start:$(date +%s):yarninstall[collapsed=true]\\r\\e[0KYarn install"
779
+ - yarn install --immutable
780
+ - echo -e "\\e[0Ksection_end:$(date +%s):yarninstall\\r\\e[0K"
781
+ - yarn build
782
+ cache:
783
+ - key: www-yarn
784
+ policy: pull-push
785
+ paths:
786
+ - www/.yarn
787
+ - key: www-node-modules
788
+ policy: pull-push
789
+ paths:
790
+ - www/node_modules
791
+ - key: www-next-cache
792
+ policy: pull-push
793
+ paths:
794
+ - www/.next/cache
795
+ artifacts:
796
+ paths:
797
+ - www/__build_info.json
798
+ - www/.next
799
+ - www/dist
800
+ expire_in: 1 day
801
+ when: always
802
+ reports: {}
803
+ rules:
804
+ - when: never
805
+ if: $CI_COMMIT_MESSAGE =~ /^chore\\(release\\).*/
806
+ - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
807
+ needs: []
808
+ retry: *a1
809
+ interruptible: true
810
+ 'www ๐Ÿงพ sbom | dev ':
811
+ stage: build
812
+ image: aquasec/trivy:0.38.3
813
+ variables: {}
814
+ script:
815
+ - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
816
+ - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
817
+ - trivy fs --quiet --format cyclonedx --output "__sbom.json" www
818
+ artifacts:
819
+ paths:
820
+ - __sbom.json
821
+ rules:
822
+ - when: never
823
+ if: $CI_COMMIT_MESSAGE =~ /^chore\\(release\\).*/
824
+ - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
825
+ needs: []
826
+ retry: *a1
827
+ interruptible: true
828
+ allow_failure: true
829
+ 'www ๐Ÿš€ Deploy | dev ':
830
+ stage: deploy dev
831
+ image: path/to/docker/jobs-default:the-version
832
+ variables:
833
+ KUBERNETES_CPU_REQUEST: '0.22'
834
+ KUBERNETES_MEMORY_REQUEST: 200Mi
835
+ KUBERNETES_MEMORY_LIMIT: 400Mi
836
+ script:
837
+ - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
838
+ - export ENV_SHORT="dev"
839
+ - export APP_DIR="www"
840
+ - export ENV_TYPE="dev"
841
+ - export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
842
+ - export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
843
+ - 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")"
844
+ - export HOST="unknown-host.example.com"
845
+ - export ROOT_URL="https://unknown-host.example.com"
846
+ - export HOST_INTERNAL="unknown-host.example.com"
847
+ - export HOST_CANONICAL="unknown-host.example.com"
848
+ - export ROOT_URL_INTERNAL="https://unknown-host.example.com"
849
+ - 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\\"]"
850
+ - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
851
+ - cd www
852
+ - yarn deploy
853
+ - echo 'Uploading SBOM to Dependency Track'
854
+ - /dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/www" "https://unknown-host.example.com" "__sbom.json" vex.json || true
855
+ cache: []
856
+ rules:
857
+ - when: never
858
+ if: $CI_COMMIT_MESSAGE =~ /^chore\\(release\\).*/
859
+ - when: on_success
860
+ if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
861
+ needs:
862
+ - job: 'api ๐Ÿš€ Deploy | dev '
863
+ artifacts: false
864
+ - job: www ๐Ÿ‘ฎ lint
865
+ artifacts: false
866
+ - job: 'www ๐Ÿ”จ app | dev '
867
+ artifacts: true
868
+ - job: www ๐Ÿงช test
869
+ artifacts: false
870
+ - job: 'www ๐Ÿงพ sbom | dev '
871
+ artifacts: true
872
+ - job: www ๐Ÿ›ก audit
873
+ artifacts: false
874
+ retry: *a1
875
+ interruptible: true
876
+ allow_failure: false
877
+ 'www ๐Ÿ”จ app | review ':
878
+ stage: build
879
+ image: path/to/docker/jobs-default:the-version
880
+ variables:
881
+ KUBERNETES_CPU_REQUEST: '0.45'
882
+ KUBERNETES_MEMORY_REQUEST: 1Gi
883
+ KUBERNETES_MEMORY_LIMIT: 4Gi
884
+ script:
885
+ - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
886
+ - export ENV_SHORT="review"
887
+ - export APP_DIR="www"
888
+ - export ENV_TYPE="review"
889
+ - export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
890
+ - export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
891
+ - 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")"
892
+ - export HOST="unknown-host.example.com"
893
+ - export ROOT_URL="https://unknown-host.example.com"
894
+ - export HOST_INTERNAL="unknown-host.example.com"
895
+ - export HOST_CANONICAL="unknown-host.example.com"
896
+ - export ROOT_URL_INTERNAL="https://unknown-host.example.com"
897
+ - 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\\"]"
898
+ - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
899
+ - echo '{"id":"$(git describe --tags 2>/dev/null || git rev-parse HEAD)","time":"$CI_JOB_STARTED_AT"}' > www/__build_info.json
900
+ - echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"
901
+ - if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
902
+ - if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
903
+ - echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"
904
+ - cd www
905
+ - echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"
906
+ - if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
907
+ - if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
908
+ - echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"
909
+ - echo -e "\\e[0Ksection_start:$(date +%s):yarninstall[collapsed=true]\\r\\e[0KYarn install"
910
+ - yarn install --immutable
911
+ - echo -e "\\e[0Ksection_end:$(date +%s):yarninstall\\r\\e[0K"
912
+ - yarn build
913
+ cache:
914
+ - key: www-yarn
915
+ policy: pull-push
916
+ paths:
917
+ - www/.yarn
918
+ - key: www-node-modules
919
+ policy: pull-push
920
+ paths:
921
+ - www/node_modules
922
+ - key: www-next-cache
923
+ policy: pull-push
924
+ paths:
925
+ - www/.next/cache
926
+ artifacts:
927
+ paths:
928
+ - www/__build_info.json
929
+ - www/.next
930
+ - www/dist
931
+ expire_in: 1 day
932
+ when: always
933
+ reports: {}
934
+ rules:
935
+ - if: $CI_MERGE_REQUEST_ID
936
+ needs: []
937
+ retry: *a1
938
+ interruptible: true
939
+ 'www ๐Ÿงพ sbom | review ':
940
+ stage: build
941
+ image: aquasec/trivy:0.38.3
942
+ variables: {}
943
+ script:
944
+ - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
945
+ - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
946
+ - trivy fs --quiet --format cyclonedx --output "__sbom.json" www
947
+ artifacts:
948
+ paths:
949
+ - __sbom.json
950
+ rules:
951
+ - if: $CI_MERGE_REQUEST_ID
952
+ needs: []
953
+ retry: *a1
954
+ interruptible: true
955
+ allow_failure: true
956
+ 'www ๐Ÿš€ Deploy | review ':
957
+ stage: deploy review
958
+ image: path/to/docker/jobs-default:the-version
959
+ variables:
960
+ KUBERNETES_CPU_REQUEST: '0.22'
961
+ KUBERNETES_MEMORY_REQUEST: 200Mi
962
+ KUBERNETES_MEMORY_LIMIT: 400Mi
963
+ script:
964
+ - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
965
+ - export ENV_SHORT="review"
966
+ - export APP_DIR="www"
967
+ - export ENV_TYPE="review"
968
+ - export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
969
+ - export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
970
+ - 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")"
971
+ - export HOST="unknown-host.example.com"
972
+ - export ROOT_URL="https://unknown-host.example.com"
973
+ - export HOST_INTERNAL="unknown-host.example.com"
974
+ - export HOST_CANONICAL="unknown-host.example.com"
975
+ - export ROOT_URL_INTERNAL="https://unknown-host.example.com"
976
+ - 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\\"]"
977
+ - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
978
+ - cd www
979
+ - yarn deploy
980
+ - echo 'Uploading SBOM to Dependency Track'
981
+ - /dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/www" "https://unknown-host.example.com" "__sbom.json" vex.json || true
982
+ cache: []
983
+ rules:
984
+ - when: on_success
985
+ if: $CI_MERGE_REQUEST_ID
986
+ needs:
987
+ - job: 'api ๐Ÿš€ Deploy | review '
988
+ artifacts: false
989
+ - job: www ๐Ÿ‘ฎ lint
990
+ artifacts: false
991
+ - job: 'www ๐Ÿ”จ app | review '
992
+ artifacts: true
993
+ - job: www ๐Ÿงช test
994
+ artifacts: false
995
+ - job: 'www ๐Ÿงพ sbom | review '
996
+ artifacts: true
997
+ - job: www ๐Ÿ›ก audit
998
+ artifacts: false
999
+ retry: *a1
1000
+ interruptible: true
1001
+ allow_failure: false
1002
+ 'www ๐Ÿ”จ app | stage ':
1003
+ stage: build
1004
+ image: path/to/docker/jobs-default:the-version
1005
+ variables:
1006
+ KUBERNETES_CPU_REQUEST: '0.45'
1007
+ KUBERNETES_MEMORY_REQUEST: 1Gi
1008
+ KUBERNETES_MEMORY_LIMIT: 4Gi
1009
+ script:
1010
+ - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
1011
+ - export ENV_SHORT="stage"
1012
+ - export APP_DIR="www"
1013
+ - export ENV_TYPE="stage"
1014
+ - export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
1015
+ - export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
1016
+ - 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")"
1017
+ - export HOST="unknown-host.example.com"
1018
+ - export ROOT_URL="https://unknown-host.example.com"
1019
+ - export HOST_INTERNAL="unknown-host.example.com"
1020
+ - export HOST_CANONICAL="unknown-host.example.com"
1021
+ - export ROOT_URL_INTERNAL="https://unknown-host.example.com"
1022
+ - 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\\"]"
1023
+ - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
1024
+ - echo '{"id":"$(git describe --tags 2>/dev/null || git rev-parse HEAD)","time":"$CI_JOB_STARTED_AT"}' > www/__build_info.json
1025
+ - echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"
1026
+ - if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
1027
+ - if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
1028
+ - echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"
1029
+ - cd www
1030
+ - echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"
1031
+ - if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
1032
+ - if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
1033
+ - echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"
1034
+ - echo -e "\\e[0Ksection_start:$(date +%s):yarninstall[collapsed=true]\\r\\e[0KYarn install"
1035
+ - yarn install --immutable
1036
+ - echo -e "\\e[0Ksection_end:$(date +%s):yarninstall\\r\\e[0K"
1037
+ - yarn build
1038
+ cache:
1039
+ - key: www-yarn
1040
+ policy: pull-push
1041
+ paths:
1042
+ - www/.yarn
1043
+ - key: www-node-modules
1044
+ policy: pull-push
1045
+ paths:
1046
+ - www/node_modules
1047
+ - key: www-next-cache
1048
+ policy: pull-push
1049
+ paths:
1050
+ - www/.next/cache
1051
+ artifacts:
1052
+ paths:
1053
+ - www/__build_info.json
1054
+ - www/.next
1055
+ - www/dist
1056
+ expire_in: 1 day
1057
+ when: always
1058
+ reports: {}
1059
+ rules:
1060
+ - if: $CI_COMMIT_TAG
1061
+ needs: []
1062
+ retry: *a1
1063
+ interruptible: true
1064
+ 'www ๐Ÿงพ sbom | stage ':
1065
+ stage: build
1066
+ image: aquasec/trivy:0.38.3
1067
+ variables: {}
1068
+ script:
1069
+ - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
1070
+ - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
1071
+ - trivy fs --quiet --format cyclonedx --output "__sbom.json" www
1072
+ artifacts:
1073
+ paths:
1074
+ - __sbom.json
1075
+ rules:
1076
+ - if: $CI_COMMIT_TAG
1077
+ needs: []
1078
+ retry: *a1
1079
+ interruptible: true
1080
+ allow_failure: true
1081
+ 'www ๐Ÿš€ Deploy | stage ':
1082
+ stage: deploy stage
1083
+ image: path/to/docker/jobs-default:the-version
1084
+ variables:
1085
+ KUBERNETES_CPU_REQUEST: '0.22'
1086
+ KUBERNETES_MEMORY_REQUEST: 200Mi
1087
+ KUBERNETES_MEMORY_LIMIT: 400Mi
1088
+ script:
1089
+ - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
1090
+ - export ENV_SHORT="stage"
1091
+ - export APP_DIR="www"
1092
+ - export ENV_TYPE="stage"
1093
+ - export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
1094
+ - export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
1095
+ - 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")"
1096
+ - export HOST="unknown-host.example.com"
1097
+ - export ROOT_URL="https://unknown-host.example.com"
1098
+ - export HOST_INTERNAL="unknown-host.example.com"
1099
+ - export HOST_CANONICAL="unknown-host.example.com"
1100
+ - export ROOT_URL_INTERNAL="https://unknown-host.example.com"
1101
+ - 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\\"]"
1102
+ - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
1103
+ - cd www
1104
+ - yarn deploy
1105
+ - echo 'Uploading SBOM to Dependency Track'
1106
+ - /dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/www" "https://unknown-host.example.com" "__sbom.json" vex.json || true
1107
+ cache: []
1108
+ rules:
1109
+ - when: on_success
1110
+ if: $CI_COMMIT_TAG
1111
+ needs:
1112
+ - job: 'api ๐Ÿš€ Deploy | stage '
1113
+ artifacts: false
1114
+ - job: 'www ๐Ÿ”จ app | stage '
1115
+ artifacts: true
1116
+ - job: 'www ๐Ÿงพ sbom | stage '
1117
+ artifacts: true
1118
+ retry: *a1
1119
+ interruptible: true
1120
+ allow_failure: false
1121
+ 'www ๐Ÿ”จ app | prod ':
1122
+ stage: build
1123
+ image: path/to/docker/jobs-default:the-version
1124
+ variables:
1125
+ KUBERNETES_CPU_REQUEST: '0.45'
1126
+ KUBERNETES_MEMORY_REQUEST: 1Gi
1127
+ KUBERNETES_MEMORY_LIMIT: 4Gi
1128
+ script:
1129
+ - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
1130
+ - export ENV_SHORT="prod"
1131
+ - export APP_DIR="www"
1132
+ - export ENV_TYPE="prod"
1133
+ - export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
1134
+ - export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
1135
+ - 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")"
1136
+ - export HOST="unknown-host.example.com"
1137
+ - export ROOT_URL="https://unknown-host.example.com"
1138
+ - export HOST_INTERNAL="unknown-host.example.com"
1139
+ - export HOST_CANONICAL="unknown-host.example.com"
1140
+ - export ROOT_URL_INTERNAL="https://unknown-host.example.com"
1141
+ - 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\\"]"
1142
+ - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
1143
+ - echo '{"id":"$(git describe --tags 2>/dev/null || git rev-parse HEAD)","time":"$CI_JOB_STARTED_AT"}' > www/__build_info.json
1144
+ - echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"
1145
+ - if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
1146
+ - if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
1147
+ - echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"
1148
+ - cd www
1149
+ - echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"
1150
+ - if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
1151
+ - if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
1152
+ - echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"
1153
+ - echo -e "\\e[0Ksection_start:$(date +%s):yarninstall[collapsed=true]\\r\\e[0KYarn install"
1154
+ - yarn install --immutable
1155
+ - echo -e "\\e[0Ksection_end:$(date +%s):yarninstall\\r\\e[0K"
1156
+ - yarn build
1157
+ cache:
1158
+ - key: www-yarn
1159
+ policy: pull-push
1160
+ paths:
1161
+ - www/.yarn
1162
+ - key: www-node-modules
1163
+ policy: pull-push
1164
+ paths:
1165
+ - www/node_modules
1166
+ - key: www-next-cache
1167
+ policy: pull-push
1168
+ paths:
1169
+ - www/.next/cache
1170
+ artifacts:
1171
+ paths:
1172
+ - www/__build_info.json
1173
+ - www/.next
1174
+ - www/dist
1175
+ expire_in: 1 day
1176
+ when: always
1177
+ reports: {}
1178
+ rules:
1179
+ - if: $CI_COMMIT_TAG
1180
+ needs: []
1181
+ retry: *a1
1182
+ interruptible: true
1183
+ 'www ๐Ÿงพ sbom | prod ':
1184
+ stage: build
1185
+ image: aquasec/trivy:0.38.3
1186
+ variables: {}
1187
+ script:
1188
+ - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
1189
+ - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
1190
+ - trivy fs --quiet --format cyclonedx --output "__sbom.json" www
1191
+ artifacts:
1192
+ paths:
1193
+ - __sbom.json
1194
+ rules:
1195
+ - if: $CI_COMMIT_TAG
1196
+ needs: []
1197
+ retry: *a1
1198
+ interruptible: true
1199
+ allow_failure: true
1200
+ 'www ๐Ÿš€ Deploy | prod ':
1201
+ stage: deploy prod
1202
+ image: path/to/docker/jobs-default:the-version
1203
+ variables:
1204
+ KUBERNETES_CPU_REQUEST: '0.22'
1205
+ KUBERNETES_MEMORY_REQUEST: 200Mi
1206
+ KUBERNETES_MEMORY_LIMIT: 400Mi
1207
+ script:
1208
+ - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
1209
+ - export ENV_SHORT="prod"
1210
+ - export APP_DIR="www"
1211
+ - export ENV_TYPE="prod"
1212
+ - export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
1213
+ - export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
1214
+ - 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")"
1215
+ - export HOST="unknown-host.example.com"
1216
+ - export ROOT_URL="https://unknown-host.example.com"
1217
+ - export HOST_INTERNAL="unknown-host.example.com"
1218
+ - export HOST_CANONICAL="unknown-host.example.com"
1219
+ - export ROOT_URL_INTERNAL="https://unknown-host.example.com"
1220
+ - 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\\"]"
1221
+ - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
1222
+ - cd www
1223
+ - yarn deploy
1224
+ - echo 'Uploading SBOM to Dependency Track'
1225
+ - /dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/www" "https://unknown-host.example.com" "__sbom.json" vex.json || true
1226
+ cache: []
1227
+ rules:
1228
+ - when: manual
1229
+ if: $CI_COMMIT_TAG
1230
+ needs:
1231
+ - job: 'api ๐Ÿš€ Deploy | prod '
1232
+ artifacts: false
1233
+ - job: 'www ๐Ÿ”จ app | prod '
1234
+ artifacts: true
1235
+ - job: 'www ๐Ÿงพ sbom | prod '
1236
+ artifacts: true
1237
+ retry: *a1
1238
+ interruptible: true
1239
+ allow_failure: true
1240
+ create release:
1241
+ stage: release
1242
+ image: path/to/docker/semantic-release:the-version
1243
+ script:
1244
+ - semanticRelease
1245
+ after_script:
1246
+ - echo '๐Ÿ‘‰ The project access token might be invald - run \`project-renew-token\` in catladder CLI to fix.'
1247
+ rules:
1248
+ - &a2
1249
+ if: $CI_COMMIT_MESSAGE =~ /^chore\\(release\\).*/
1250
+ when: never
1251
+ - &a3
1252
+ if: $CI_PIPELINE_SOURCE == "schedule"
1253
+ when: never
1254
+ - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH && $AUTO_RELEASE == "true"
1255
+ when: on_success
1256
+ - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
1257
+ when: manual
1258
+ - if: $CI_COMMIT_BRANCH =~ /^[0-9]+.([0-9]+|x).x$/
1259
+ when: manual
1260
+ โš ๏ธ force create release:
1261
+ stage: release
1262
+ image: path/to/docker/semantic-release:the-version
1263
+ script:
1264
+ - semanticRelease
1265
+ after_script:
1266
+ - echo '๐Ÿ‘‰ The project access token might be invald - run \`project-renew-token\` in catladder CLI to fix.'
1267
+ rules:
1268
+ - *a2
1269
+ - *a3
1270
+ - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
1271
+ when: manual
1272
+ - if: $CI_COMMIT_BRANCH =~ /^[0-9]+.([0-9]+|x).x$/
1273
+ when: manual
1274
+ needs: []
1275
+ "
1276
+ `;
1277
+
3
1278
  exports[`matches snapshot for wait-for-other-deploy 1`] = `
4
1279
  {
5
1280
  "mainBranch": {