@catladder/pipeline 1.163.1 → 1.164.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (80) hide show
  1. package/dist/bundles/catladder-gitlab/index.js +1 -1
  2. package/dist/constants.js +1 -1
  3. package/dist/deploy/cloudRun/createJobs/cloudRunServices.js +2 -0
  4. package/dist/deploy/types/googleCloudRun.d.ts +8 -0
  5. package/dist/tsconfig.tsbuildinfo +1 -1
  6. package/examples/__snapshots__/cloud-run-memory-limit.test.ts.snap +0 -1958
  7. package/examples/__snapshots__/cloud-run-meteor-with-worker.test.ts.snap +1 -1935
  8. package/examples/__snapshots__/cloud-run-no-cpu-throttling.test.ts.snap +1 -1959
  9. package/examples/__snapshots__/cloud-run-no-service.test.ts.snap +1 -2011
  10. package/examples/__snapshots__/cloud-run-non-public.test.ts.snap +1 -1959
  11. package/examples/__snapshots__/cloud-run-post-stop-job.test.ts.snap +1 -1970
  12. package/examples/__snapshots__/cloud-run-service-custom-vpc.test.ts.snap +1342 -0
  13. package/examples/__snapshots__/cloud-run-service-gen2.test.ts.snap +1 -1959
  14. package/examples/__snapshots__/cloud-run-service-increase-timout.test.ts.snap +1 -1959
  15. package/examples/__snapshots__/cloud-run-service-with-volumes.test.ts.snap +1 -2003
  16. package/examples/__snapshots__/cloud-run-storybook.test.ts.snap +1 -1675
  17. package/examples/__snapshots__/cloud-run-with-ngnix.test.ts.snap +1 -1959
  18. package/examples/__snapshots__/cloud-run-with-sql-reuse-db.test.ts.snap +1 -3935
  19. package/examples/__snapshots__/cloud-run-with-sql.test.ts.snap +1 -3458
  20. package/examples/__snapshots__/cloud-run-with-worker.test.ts.snap +1 -1967
  21. package/examples/__snapshots__/custom-build-job-with-tests.test.ts.snap +1 -1787
  22. package/examples/__snapshots__/custom-build-job.test.ts.snap +1 -1487
  23. package/examples/__snapshots__/custom-deploy.test.ts.snap +1 -1721
  24. package/examples/__snapshots__/custom-envs.test.ts.snap +1 -1175
  25. package/examples/__snapshots__/custom-sbom-java.test.ts.snap +1 -1495
  26. package/examples/__snapshots__/git-submodule.test.ts.snap +1 -1962
  27. package/examples/__snapshots__/kubernetes-application-customization.test.ts.snap +1 -2450
  28. package/examples/__snapshots__/kubernetes-with-cloud-sql-legacy.test.ts.snap +1 -2462
  29. package/examples/__snapshots__/kubernetes-with-cloud-sql.test.ts.snap +1 -2470
  30. package/examples/__snapshots__/kubernetes-with-jobs.test.ts.snap +1 -4558
  31. package/examples/__snapshots__/kubernetes-with-mongodb.test.ts.snap +1 -2574
  32. package/examples/__snapshots__/local-dot-env.test.ts.snap +1 -1959
  33. package/examples/__snapshots__/meteor-kubernetes.test.ts.snap +1 -2503
  34. package/examples/__snapshots__/multiline-var.test.ts.snap +1 -4488
  35. package/examples/__snapshots__/native-app.test.ts.snap +1 -3167
  36. package/examples/__snapshots__/node-build-with-custom-image.test.ts.snap +1 -1959
  37. package/examples/__snapshots__/node-build-with-docker-additions.test.ts.snap +1 -1967
  38. package/examples/__snapshots__/rails-k8s-with-worker-dockerfile.test.ts.snap +1479 -2003
  39. package/examples/__snapshots__/rails-k8s-with-worker.test.ts.snap +1 -1995
  40. package/examples/__snapshots__/wait-for-other-deploy.test.ts.snap +1 -2105
  41. package/examples/cloud-run-memory-limit.test.ts +1 -8
  42. package/examples/cloud-run-meteor-with-worker.test.ts +2 -9
  43. package/examples/cloud-run-no-cpu-throttling.test.ts +2 -9
  44. package/examples/cloud-run-no-service.test.ts +2 -9
  45. package/examples/cloud-run-non-public.test.ts +2 -9
  46. package/examples/cloud-run-post-stop-job.test.ts +2 -9
  47. package/examples/cloud-run-service-custom-vpc.test.ts +11 -0
  48. package/examples/cloud-run-service-custom-vpc.ts +30 -0
  49. package/examples/cloud-run-service-gen2.test.ts +2 -9
  50. package/examples/cloud-run-service-increase-timout.test.ts +2 -9
  51. package/examples/cloud-run-service-with-volumes.test.ts +2 -9
  52. package/examples/cloud-run-storybook.test.ts +2 -9
  53. package/examples/cloud-run-with-ngnix.test.ts +2 -9
  54. package/examples/cloud-run-with-sql-reuse-db.test.ts +2 -9
  55. package/examples/cloud-run-with-sql.test.ts +2 -9
  56. package/examples/cloud-run-with-worker.test.ts +2 -9
  57. package/examples/custom-build-job-with-tests.test.ts +2 -9
  58. package/examples/custom-build-job.test.ts +2 -9
  59. package/examples/custom-deploy.test.ts +2 -9
  60. package/examples/custom-envs.test.ts +2 -9
  61. package/examples/custom-sbom-java.test.ts +2 -9
  62. package/examples/git-submodule.test.ts +2 -9
  63. package/examples/kubernetes-application-customization.test.ts +2 -9
  64. package/examples/kubernetes-with-cloud-sql-legacy.test.ts +2 -9
  65. package/examples/kubernetes-with-cloud-sql.test.ts +2 -9
  66. package/examples/kubernetes-with-jobs.test.ts +2 -9
  67. package/examples/kubernetes-with-mongodb.test.ts +2 -9
  68. package/examples/local-dot-env.test.ts +2 -9
  69. package/examples/meteor-kubernetes.test.ts +2 -9
  70. package/examples/multiline-var.test.ts +2 -9
  71. package/examples/native-app.test.ts +2 -9
  72. package/examples/node-build-with-custom-image.test.ts +2 -9
  73. package/examples/node-build-with-docker-additions.test.ts +2 -9
  74. package/examples/rails-k8s-with-worker-dockerfile.test.ts +2 -2
  75. package/examples/rails-k8s-with-worker.test.ts +2 -9
  76. package/examples/wait-for-other-deploy.test.ts +2 -9
  77. package/package.json +1 -1
  78. package/scripts/generate-examples-test.ts +3 -5
  79. package/src/deploy/cloudRun/createJobs/cloudRunServices.ts +2 -0
  80. package/src/deploy/types/googleCloudRun.ts +9 -0
@@ -1,6 +1,6 @@
1
1
  // Jest Snapshot v1, https://goo.gl/fbAQLP
2
2
 
3
- exports[`matches snapshot for cloud-run-memory-limit local pipeline YAML 1`] = `
3
+ exports[`matches snapshot for custom-deploy local pipeline YAML 1`] = `
4
4
  "image: path/to/docker/jobs-default:the-version
5
5
  stages:
6
6
  - setup
@@ -1102,1723 +1102,3 @@ create release:
1102
1102
  needs: []
1103
1103
  "
1104
1104
  `;
1105
-
1106
- exports[`matches snapshot for custom-deploy 1`] = `
1107
- {
1108
- "mainBranch": {
1109
- "image": "path/to/docker/jobs-default:the-version",
1110
- "jobs": {
1111
- "www 👮 lint": {
1112
- "cache": [
1113
- {
1114
- "key": "www-yarn",
1115
- "paths": [
1116
- "www/.yarn",
1117
- ],
1118
- "policy": "pull-push",
1119
- },
1120
- {
1121
- "key": "www-node-modules",
1122
- "paths": [
1123
- "www/node_modules",
1124
- ],
1125
- "policy": "pull-push",
1126
- },
1127
- ],
1128
- "image": "path/to/docker/jobs-default:the-version",
1129
- "interruptible": true,
1130
- "needs": [],
1131
- "retry": {
1132
- "max": 2,
1133
- "when": [
1134
- "runner_system_failure",
1135
- "stuck_or_timeout_failure",
1136
- ],
1137
- },
1138
- "script": [
1139
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
1140
- "export APP_PATH="www"",
1141
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
1142
- "echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"",
1143
- "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
1144
- "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
1145
- "echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"",
1146
- "cd www",
1147
- "echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"",
1148
- "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
1149
- "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
1150
- "echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"",
1151
- "echo -e "\\e[0Ksection_start:$(date +%s):yarninstall[collapsed=true]\\r\\e[0KYarn install"",
1152
- "yarn install --immutable",
1153
- "echo -e "\\e[0Ksection_end:$(date +%s):yarninstall\\r\\e[0K"",
1154
- "yarn lint",
1155
- ],
1156
- "stage": "test",
1157
- "variables": {
1158
- "KUBERNETES_CPU_REQUEST": "0.45",
1159
- "KUBERNETES_MEMORY_LIMIT": "4Gi",
1160
- "KUBERNETES_MEMORY_REQUEST": "1Gi",
1161
- },
1162
- },
1163
- "www 🔨 app | dev ": {
1164
- "artifacts": {
1165
- "expire_in": "1 day",
1166
- "paths": [
1167
- "www/__build_info.json",
1168
- "www/.next",
1169
- "www/dist",
1170
- ],
1171
- "reports": {
1172
- "junit": undefined,
1173
- },
1174
- "when": "always",
1175
- },
1176
- "cache": [
1177
- {
1178
- "key": "www-yarn",
1179
- "paths": [
1180
- "www/.yarn",
1181
- ],
1182
- "policy": "pull-push",
1183
- },
1184
- {
1185
- "key": "www-node-modules",
1186
- "paths": [
1187
- "www/node_modules",
1188
- ],
1189
- "policy": "pull-push",
1190
- },
1191
- {
1192
- "key": "www-next-cache",
1193
- "paths": [
1194
- "www/.next/cache",
1195
- ],
1196
- "policy": "pull-push",
1197
- },
1198
- ],
1199
- "image": "path/to/docker/jobs-default:the-version",
1200
- "interruptible": true,
1201
- "needs": [],
1202
- "retry": {
1203
- "max": 2,
1204
- "when": [
1205
- "runner_system_failure",
1206
- "stuck_or_timeout_failure",
1207
- ],
1208
- },
1209
- "script": [
1210
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
1211
- "export ENV_SHORT="dev"",
1212
- "export APP_DIR="www"",
1213
- "export ENV_TYPE="dev"",
1214
- "export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
1215
- "export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
1216
- "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")"",
1217
- "export HOST="unknown-host.example.com"",
1218
- "export ROOT_URL="https://unknown-host.example.com"",
1219
- "export HOST_INTERNAL="unknown-host.example.com"",
1220
- "export HOST_CANONICAL="unknown-host.example.com"",
1221
- "export ROOT_URL_INTERNAL="https://unknown-host.example.com"",
1222
- "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\\"]"",
1223
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
1224
- "echo '{"id":"$(git describe --tags 2>/dev/null || git rev-parse HEAD)","time":"$CI_JOB_STARTED_AT"}' > www/__build_info.json",
1225
- "echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"",
1226
- "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
1227
- "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
1228
- "echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"",
1229
- "cd www",
1230
- "echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"",
1231
- "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
1232
- "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
1233
- "echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"",
1234
- "echo -e "\\e[0Ksection_start:$(date +%s):yarninstall[collapsed=true]\\r\\e[0KYarn install"",
1235
- "yarn install --immutable",
1236
- "echo -e "\\e[0Ksection_end:$(date +%s):yarninstall\\r\\e[0K"",
1237
- "yarn build",
1238
- ],
1239
- "stage": "build",
1240
- "variables": {
1241
- "KUBERNETES_CPU_REQUEST": "0.45",
1242
- "KUBERNETES_MEMORY_LIMIT": "4Gi",
1243
- "KUBERNETES_MEMORY_REQUEST": "1Gi",
1244
- },
1245
- },
1246
- "www 🔨 docker | dev ": {
1247
- "cache": [
1248
- {
1249
- "key": "www-yarn",
1250
- "paths": [
1251
- "www/.yarn",
1252
- ],
1253
- "policy": "pull",
1254
- },
1255
- ],
1256
- "image": "path/to/docker/docker-build:the-version",
1257
- "interruptible": true,
1258
- "needs": [
1259
- "www 🔨 app | dev ",
1260
- ],
1261
- "retry": {
1262
- "max": 2,
1263
- "when": [
1264
- "runner_system_failure",
1265
- "stuck_or_timeout_failure",
1266
- ],
1267
- },
1268
- "script": [
1269
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
1270
- "export APP_DIR="www"",
1271
- "export DOCKER_BUILD_CONTEXT="."",
1272
- "export DOCKER_REGISTRY="$CI_REGISTRY"",
1273
- "export DOCKER_CACHE_IMAGE="$CI_REGISTRY_IMAGE/caches/www"",
1274
- "export DOCKER_IMAGE_NAME="dev/www"",
1275
- "export DOCKER_IMAGE="$CI_REGISTRY_IMAGE/$DOCKER_IMAGE_NAME"",
1276
- "export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"",
1277
- "export DOCKER_COPY_AND_INSTALL_APP="COPY --chown=node:node $APP_DIR .
1278
- RUN yarn plugin import workspace-tools
1279
- RUN yarn workspaces focus --production && yarn rebuild"",
1280
- "export DOCKER_COPY_WORKSPACE_FILES="COPY --chown=node:node www/package.json /app/www/package.json
1281
- COPY --chown=node:node www/yarn.lock /app/www/yarn.lock
1282
- COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
1283
- COPY --chown=node:node .yarn /app/.yarn"",
1284
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
1285
- "ensureNodeDockerfile",
1286
- "echo -e "\\e[0Ksection_start:$(date +%s):docker-login[collapsed=true]\\r\\e[0KDocker Login"",
1287
- "docker login --username gitlab-ci-token --password $CI_JOB_TOKEN $CI_REGISTRY",
1288
- "echo -e "\\e[0Ksection_end:$(date +%s):docker-login\\r\\e[0K"",
1289
- "echo -e "\\e[0Ksection_start:$(date +%s):docker-build[collapsed=true]\\r\\e[0KDocker build"",
1290
- "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",
1291
- "echo -e "\\e[0Ksection_end:$(date +%s):docker-build\\r\\e[0K"",
1292
- "echo -e "\\e[0Ksection_start:$(date +%s):docker-push[collapsed=true]\\r\\e[0KDocker push and tag"",
1293
- "docker push $DOCKER_IMAGE:$DOCKER_IMAGE_TAG",
1294
- "docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG $DOCKER_CACHE_IMAGE",
1295
- "docker push $DOCKER_CACHE_IMAGE",
1296
- "echo -e "\\e[0Ksection_end:$(date +%s):docker-push\\r\\e[0K"",
1297
- ],
1298
- "services": [
1299
- {
1300
- "command": [
1301
- "--tls=false",
1302
- ],
1303
- "name": "docker:24.0.6-dind",
1304
- },
1305
- ],
1306
- "stage": "build",
1307
- "variables": {
1308
- "DOCKER_BUILDKIT": "1",
1309
- "DOCKER_DRIVER": "overlay2",
1310
- "DOCKER_HOST": "tcp://0.0.0.0:2375",
1311
- "DOCKER_TLS_CERTDIR": "",
1312
- "KUBERNETES_CPU_REQUEST": "0.45",
1313
- "KUBERNETES_MEMORY_LIMIT": "2Gi",
1314
- "KUBERNETES_MEMORY_REQUEST": "1Gi",
1315
- },
1316
- },
1317
- "www 🚀 Deploy | dev ": {
1318
- "allow_failure": false,
1319
- "artifacts": {
1320
- "reports": {
1321
- "dotenv": "gitlab_environment.env",
1322
- },
1323
- },
1324
- "cache": [],
1325
- "environment": {
1326
- "auto_stop_in": "4 weeks",
1327
- "name": "dev/www",
1328
- "on_stop": "www 🛑 Stop ⚠️ | dev ",
1329
- "url": "$CL_GITLAB_ENVIRONMENT_URL",
1330
- },
1331
- "image": "path/to/docker/jobs-default:the-version",
1332
- "interruptible": true,
1333
- "needs": [
1334
- {
1335
- "artifacts": false,
1336
- "job": "www 👮 lint",
1337
- },
1338
- {
1339
- "artifacts": false,
1340
- "job": "www 🔨 app | dev ",
1341
- },
1342
- {
1343
- "artifacts": false,
1344
- "job": "www 🔨 docker | dev ",
1345
- },
1346
- {
1347
- "artifacts": false,
1348
- "job": "www 🧪 test",
1349
- },
1350
- {
1351
- "artifacts": true,
1352
- "job": "www 🧾 sbom | dev ",
1353
- },
1354
- {
1355
- "artifacts": false,
1356
- "job": "www 🛡 audit",
1357
- },
1358
- ],
1359
- "retry": {
1360
- "max": 2,
1361
- "when": [
1362
- "runner_system_failure",
1363
- "stuck_or_timeout_failure",
1364
- ],
1365
- },
1366
- "rules": [
1367
- {
1368
- "when": "on_success",
1369
- },
1370
- ],
1371
- "script": [
1372
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
1373
- "export ENV_SHORT="dev"",
1374
- "export APP_DIR="www"",
1375
- "export ENV_TYPE="dev"",
1376
- "export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
1377
- "export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
1378
- "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")"",
1379
- "export HOST="unknown-host.example.com"",
1380
- "export ROOT_URL="https://unknown-host.example.com"",
1381
- "export HOST_INTERNAL="unknown-host.example.com"",
1382
- "export HOST_CANONICAL="unknown-host.example.com"",
1383
- "export ROOT_URL_INTERNAL="https://unknown-host.example.com"",
1384
- "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\\"]"",
1385
- "export DOCKER_REGISTRY="$CI_REGISTRY"",
1386
- "export DOCKER_CACHE_IMAGE="$CI_REGISTRY_IMAGE/caches/www"",
1387
- "export DOCKER_IMAGE_NAME="dev/www"",
1388
- "export DOCKER_IMAGE="$CI_REGISTRY_IMAGE/$DOCKER_IMAGE_NAME"",
1389
- "export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"",
1390
- "export DEPLOY_API_KEY="$CL_dev_www_DEPLOY_API_KEY"",
1391
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
1392
- "cd www",
1393
- "echo 'would deploy'",
1394
- "echo 'Uploading SBOM to Dependency Track'",
1395
- "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/www" "https://unknown-host.example.com" "__sbom.json" vex.json || true",
1396
- "echo "CL_GITLAB_ENVIRONMENT_URL=https://unknown-host.example.com" >> gitlab_environment.env",
1397
- ],
1398
- "stage": "deploy dev",
1399
- "variables": {
1400
- "KUBERNETES_CPU_REQUEST": "1",
1401
- "KUBERNETES_MEMORY_LIMIT": "2048Mi",
1402
- "KUBERNETES_MEMORY_REQUEST": "1024Mi",
1403
- },
1404
- },
1405
- "www 🛑 Stop ⚠️ | dev ": {
1406
- "allow_failure": true,
1407
- "artifacts": {
1408
- "reports": {
1409
- "dotenv": "gitlab_environment.env",
1410
- },
1411
- },
1412
- "environment": {
1413
- "action": "stop",
1414
- "name": "dev/www",
1415
- "url": "$CL_GITLAB_ENVIRONMENT_URL",
1416
- },
1417
- "image": "path/to/docker/jobs-default:the-version",
1418
- "interruptible": true,
1419
- "needs": [],
1420
- "retry": {
1421
- "max": 2,
1422
- "when": [
1423
- "runner_system_failure",
1424
- "stuck_or_timeout_failure",
1425
- ],
1426
- },
1427
- "rules": [
1428
- {
1429
- "if": "$CI_COMMIT_BRANCH =~ /^[0-9]+\\.([0-9]+|x)\\.x$/",
1430
- "when": "on_success",
1431
- },
1432
- {
1433
- "when": "manual",
1434
- },
1435
- ],
1436
- "script": [
1437
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
1438
- "export DEPLOY_API_KEY="$CL_dev_www_DEPLOY_API_KEY"",
1439
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
1440
- "echo 'would stop'",
1441
- "echo 'Disabling component in Dependency Track'",
1442
- "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" disable "pan-test-app/www" "https://unknown-host.example.com" || true",
1443
- "echo "CL_GITLAB_ENVIRONMENT_URL=https://unknown-host.example.com" >> gitlab_environment.env",
1444
- ],
1445
- "stage": "stop dev",
1446
- "variables": {
1447
- "GIT_STRATEGY": "none",
1448
- "KUBERNETES_CPU_REQUEST": "0.22",
1449
- "KUBERNETES_MEMORY_LIMIT": "400Mi",
1450
- "KUBERNETES_MEMORY_REQUEST": "200Mi",
1451
- },
1452
- },
1453
- "www 🛡 audit": {
1454
- "allow_failure": true,
1455
- "image": "path/to/docker/jobs-default:the-version",
1456
- "interruptible": true,
1457
- "needs": [],
1458
- "retry": {
1459
- "max": 2,
1460
- "when": [
1461
- "runner_system_failure",
1462
- "stuck_or_timeout_failure",
1463
- ],
1464
- },
1465
- "script": [
1466
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
1467
- "export APP_PATH="www"",
1468
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
1469
- "cd www",
1470
- "yarn npm audit --environment production",
1471
- ],
1472
- "stage": "test",
1473
- "variables": {
1474
- "KUBERNETES_CPU_REQUEST": "0.45",
1475
- "KUBERNETES_MEMORY_LIMIT": "4Gi",
1476
- "KUBERNETES_MEMORY_REQUEST": "1Gi",
1477
- },
1478
- },
1479
- "www 🧪 test": {
1480
- "cache": [
1481
- {
1482
- "key": "www-yarn",
1483
- "paths": [
1484
- "www/.yarn",
1485
- ],
1486
- "policy": "pull-push",
1487
- },
1488
- {
1489
- "key": "www-node-modules",
1490
- "paths": [
1491
- "www/node_modules",
1492
- ],
1493
- "policy": "pull-push",
1494
- },
1495
- ],
1496
- "image": "path/to/docker/jobs-testing-chrome:the-version",
1497
- "interruptible": true,
1498
- "needs": [],
1499
- "retry": {
1500
- "max": 2,
1501
- "when": [
1502
- "runner_system_failure",
1503
- "stuck_or_timeout_failure",
1504
- ],
1505
- },
1506
- "script": [
1507
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
1508
- "export APP_PATH="www"",
1509
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
1510
- "echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"",
1511
- "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
1512
- "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
1513
- "echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"",
1514
- "cd www",
1515
- "echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"",
1516
- "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
1517
- "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
1518
- "echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"",
1519
- "echo -e "\\e[0Ksection_start:$(date +%s):yarninstall[collapsed=true]\\r\\e[0KYarn install"",
1520
- "yarn install --immutable",
1521
- "echo -e "\\e[0Ksection_end:$(date +%s):yarninstall\\r\\e[0K"",
1522
- "yarn test",
1523
- ],
1524
- "stage": "test",
1525
- "variables": {
1526
- "KUBERNETES_CPU_REQUEST": "0.45",
1527
- "KUBERNETES_MEMORY_LIMIT": "4Gi",
1528
- "KUBERNETES_MEMORY_REQUEST": "1Gi",
1529
- },
1530
- },
1531
- "www 🧾 sbom | dev ": {
1532
- "allow_failure": true,
1533
- "artifacts": {
1534
- "paths": [
1535
- "__sbom.json",
1536
- ],
1537
- },
1538
- "image": "aquasec/trivy:0.38.3",
1539
- "interruptible": true,
1540
- "needs": [],
1541
- "retry": {
1542
- "max": 2,
1543
- "when": [
1544
- "runner_system_failure",
1545
- "stuck_or_timeout_failure",
1546
- ],
1547
- },
1548
- "script": [
1549
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
1550
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
1551
- "trivy fs --quiet --format cyclonedx --output "__sbom.json" www",
1552
- ],
1553
- "stage": "build",
1554
- "variables": {},
1555
- },
1556
- },
1557
- "stages": [
1558
- "setup",
1559
- "setup dev",
1560
- "setup review",
1561
- "setup stage",
1562
- "setup prod",
1563
- "test",
1564
- "test dev",
1565
- "test review",
1566
- "test stage",
1567
- "test prod",
1568
- "build",
1569
- "build dev",
1570
- "build review",
1571
- "build stage",
1572
- "build prod",
1573
- "deploy",
1574
- "deploy dev",
1575
- "deploy review",
1576
- "deploy stage",
1577
- "deploy prod",
1578
- "verify",
1579
- "verify dev",
1580
- "verify review",
1581
- "verify stage",
1582
- "verify prod",
1583
- "rollback",
1584
- "rollback dev",
1585
- "rollback review",
1586
- "rollback stage",
1587
- "rollback prod",
1588
- "stop",
1589
- "stop dev",
1590
- "stop review",
1591
- "stop stage",
1592
- "stop prod",
1593
- ],
1594
- "variables": {
1595
- "ARTIFACT_COMPRESSION_LEVEL": "fast",
1596
- "CACHE_COMPRESSION_LEVEL": "fast",
1597
- "FF_USE_FASTZIP": "true",
1598
- "GIT_DEPTH": "1",
1599
- "TRANSFER_METER_FREQUENCY": "5s",
1600
- },
1601
- "workflow": {
1602
- "rules": [
1603
- {
1604
- "if": "$CI_COMMIT_TAG",
1605
- },
1606
- {
1607
- "if": "$CI_COMMIT_MESSAGE =~ /^chore\\(release\\).*/",
1608
- "when": "never",
1609
- },
1610
- {
1611
- "if": "$CI_PIPELINE_SOURCE == "schedule"",
1612
- "when": "never",
1613
- },
1614
- {
1615
- "if": "$CI_COMMIT_BRANCH =~ /^[0-9]+.([0-9]+|x).x$/",
1616
- },
1617
- {
1618
- "if": "$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH",
1619
- },
1620
- {
1621
- "if": "$CI_MERGE_REQUEST_ID",
1622
- },
1623
- ],
1624
- },
1625
- },
1626
- "mr": {
1627
- "image": "path/to/docker/jobs-default:the-version",
1628
- "jobs": {
1629
- "www 👮 lint": {
1630
- "cache": [
1631
- {
1632
- "key": "www-yarn",
1633
- "paths": [
1634
- "www/.yarn",
1635
- ],
1636
- "policy": "pull-push",
1637
- },
1638
- {
1639
- "key": "www-node-modules",
1640
- "paths": [
1641
- "www/node_modules",
1642
- ],
1643
- "policy": "pull-push",
1644
- },
1645
- ],
1646
- "image": "path/to/docker/jobs-default:the-version",
1647
- "interruptible": true,
1648
- "needs": [],
1649
- "retry": {
1650
- "max": 2,
1651
- "when": [
1652
- "runner_system_failure",
1653
- "stuck_or_timeout_failure",
1654
- ],
1655
- },
1656
- "script": [
1657
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
1658
- "export APP_PATH="www"",
1659
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
1660
- "echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"",
1661
- "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
1662
- "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
1663
- "echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"",
1664
- "cd www",
1665
- "echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"",
1666
- "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
1667
- "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
1668
- "echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"",
1669
- "echo -e "\\e[0Ksection_start:$(date +%s):yarninstall[collapsed=true]\\r\\e[0KYarn install"",
1670
- "yarn install --immutable",
1671
- "echo -e "\\e[0Ksection_end:$(date +%s):yarninstall\\r\\e[0K"",
1672
- "yarn lint",
1673
- ],
1674
- "stage": "test",
1675
- "variables": {
1676
- "KUBERNETES_CPU_REQUEST": "0.45",
1677
- "KUBERNETES_MEMORY_LIMIT": "4Gi",
1678
- "KUBERNETES_MEMORY_REQUEST": "1Gi",
1679
- },
1680
- },
1681
- "www 🔨 app | review ": {
1682
- "artifacts": {
1683
- "expire_in": "1 day",
1684
- "paths": [
1685
- "www/__build_info.json",
1686
- "www/.next",
1687
- "www/dist",
1688
- ],
1689
- "reports": {
1690
- "junit": undefined,
1691
- },
1692
- "when": "always",
1693
- },
1694
- "cache": [
1695
- {
1696
- "key": "www-yarn",
1697
- "paths": [
1698
- "www/.yarn",
1699
- ],
1700
- "policy": "pull-push",
1701
- },
1702
- {
1703
- "key": "www-node-modules",
1704
- "paths": [
1705
- "www/node_modules",
1706
- ],
1707
- "policy": "pull-push",
1708
- },
1709
- {
1710
- "key": "www-next-cache",
1711
- "paths": [
1712
- "www/.next/cache",
1713
- ],
1714
- "policy": "pull-push",
1715
- },
1716
- ],
1717
- "image": "path/to/docker/jobs-default:the-version",
1718
- "interruptible": true,
1719
- "needs": [],
1720
- "retry": {
1721
- "max": 2,
1722
- "when": [
1723
- "runner_system_failure",
1724
- "stuck_or_timeout_failure",
1725
- ],
1726
- },
1727
- "script": [
1728
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
1729
- "export ENV_SHORT="review"",
1730
- "export APP_DIR="www"",
1731
- "export ENV_TYPE="review"",
1732
- "export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
1733
- "export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
1734
- "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")"",
1735
- "export HOST="unknown-host.example.com"",
1736
- "export ROOT_URL="https://unknown-host.example.com"",
1737
- "export HOST_INTERNAL="unknown-host.example.com"",
1738
- "export HOST_CANONICAL="unknown-host.example.com"",
1739
- "export ROOT_URL_INTERNAL="https://unknown-host.example.com"",
1740
- "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\\"]"",
1741
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
1742
- "echo '{"id":"$(git describe --tags 2>/dev/null || git rev-parse HEAD)","time":"$CI_JOB_STARTED_AT"}' > www/__build_info.json",
1743
- "echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"",
1744
- "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
1745
- "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
1746
- "echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"",
1747
- "cd www",
1748
- "echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"",
1749
- "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
1750
- "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
1751
- "echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"",
1752
- "echo -e "\\e[0Ksection_start:$(date +%s):yarninstall[collapsed=true]\\r\\e[0KYarn install"",
1753
- "yarn install --immutable",
1754
- "echo -e "\\e[0Ksection_end:$(date +%s):yarninstall\\r\\e[0K"",
1755
- "yarn build",
1756
- ],
1757
- "stage": "build",
1758
- "variables": {
1759
- "KUBERNETES_CPU_REQUEST": "0.45",
1760
- "KUBERNETES_MEMORY_LIMIT": "4Gi",
1761
- "KUBERNETES_MEMORY_REQUEST": "1Gi",
1762
- },
1763
- },
1764
- "www 🔨 docker | review ": {
1765
- "cache": [
1766
- {
1767
- "key": "www-yarn",
1768
- "paths": [
1769
- "www/.yarn",
1770
- ],
1771
- "policy": "pull",
1772
- },
1773
- ],
1774
- "image": "path/to/docker/docker-build:the-version",
1775
- "interruptible": true,
1776
- "needs": [
1777
- "www 🔨 app | review ",
1778
- ],
1779
- "retry": {
1780
- "max": 2,
1781
- "when": [
1782
- "runner_system_failure",
1783
- "stuck_or_timeout_failure",
1784
- ],
1785
- },
1786
- "script": [
1787
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
1788
- "export APP_DIR="www"",
1789
- "export DOCKER_BUILD_CONTEXT="."",
1790
- "export DOCKER_REGISTRY="$CI_REGISTRY"",
1791
- "export DOCKER_CACHE_IMAGE="$CI_REGISTRY_IMAGE/caches/www"",
1792
- "export DOCKER_IMAGE_NAME="review/www"",
1793
- "export DOCKER_IMAGE="$CI_REGISTRY_IMAGE/$DOCKER_IMAGE_NAME"",
1794
- "export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"",
1795
- "export DOCKER_COPY_AND_INSTALL_APP="COPY --chown=node:node $APP_DIR .
1796
- RUN yarn plugin import workspace-tools
1797
- RUN yarn workspaces focus --production && yarn rebuild"",
1798
- "export DOCKER_COPY_WORKSPACE_FILES="COPY --chown=node:node www/package.json /app/www/package.json
1799
- COPY --chown=node:node www/yarn.lock /app/www/yarn.lock
1800
- COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
1801
- COPY --chown=node:node .yarn /app/.yarn"",
1802
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
1803
- "ensureNodeDockerfile",
1804
- "echo -e "\\e[0Ksection_start:$(date +%s):docker-login[collapsed=true]\\r\\e[0KDocker Login"",
1805
- "docker login --username gitlab-ci-token --password $CI_JOB_TOKEN $CI_REGISTRY",
1806
- "echo -e "\\e[0Ksection_end:$(date +%s):docker-login\\r\\e[0K"",
1807
- "echo -e "\\e[0Ksection_start:$(date +%s):docker-build[collapsed=true]\\r\\e[0KDocker build"",
1808
- "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",
1809
- "echo -e "\\e[0Ksection_end:$(date +%s):docker-build\\r\\e[0K"",
1810
- "echo -e "\\e[0Ksection_start:$(date +%s):docker-push[collapsed=true]\\r\\e[0KDocker push and tag"",
1811
- "docker push $DOCKER_IMAGE:$DOCKER_IMAGE_TAG",
1812
- "docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG $DOCKER_CACHE_IMAGE",
1813
- "docker push $DOCKER_CACHE_IMAGE",
1814
- "echo -e "\\e[0Ksection_end:$(date +%s):docker-push\\r\\e[0K"",
1815
- ],
1816
- "services": [
1817
- {
1818
- "command": [
1819
- "--tls=false",
1820
- ],
1821
- "name": "docker:24.0.6-dind",
1822
- },
1823
- ],
1824
- "stage": "build",
1825
- "variables": {
1826
- "DOCKER_BUILDKIT": "1",
1827
- "DOCKER_DRIVER": "overlay2",
1828
- "DOCKER_HOST": "tcp://0.0.0.0:2375",
1829
- "DOCKER_TLS_CERTDIR": "",
1830
- "KUBERNETES_CPU_REQUEST": "0.45",
1831
- "KUBERNETES_MEMORY_LIMIT": "2Gi",
1832
- "KUBERNETES_MEMORY_REQUEST": "1Gi",
1833
- },
1834
- },
1835
- "www 🚀 Deploy | review ": {
1836
- "allow_failure": false,
1837
- "artifacts": {
1838
- "reports": {
1839
- "dotenv": "gitlab_environment.env",
1840
- },
1841
- },
1842
- "cache": [],
1843
- "environment": {
1844
- "auto_stop_in": "1 week",
1845
- "name": "review/$CI_COMMIT_REF_NAME/www",
1846
- "on_stop": "www 🛑 Stop ⚠️ | review ",
1847
- "url": "$CL_GITLAB_ENVIRONMENT_URL",
1848
- },
1849
- "image": "path/to/docker/jobs-default:the-version",
1850
- "interruptible": true,
1851
- "needs": [
1852
- {
1853
- "artifacts": false,
1854
- "job": "www 👮 lint",
1855
- },
1856
- {
1857
- "artifacts": false,
1858
- "job": "www 🔨 app | review ",
1859
- },
1860
- {
1861
- "artifacts": false,
1862
- "job": "www 🔨 docker | review ",
1863
- },
1864
- {
1865
- "artifacts": false,
1866
- "job": "www 🧪 test",
1867
- },
1868
- {
1869
- "artifacts": true,
1870
- "job": "www 🧾 sbom | review ",
1871
- },
1872
- {
1873
- "artifacts": false,
1874
- "job": "www 🛡 audit",
1875
- },
1876
- ],
1877
- "retry": {
1878
- "max": 2,
1879
- "when": [
1880
- "runner_system_failure",
1881
- "stuck_or_timeout_failure",
1882
- ],
1883
- },
1884
- "rules": [
1885
- {
1886
- "when": "on_success",
1887
- },
1888
- ],
1889
- "script": [
1890
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
1891
- "export ENV_SHORT="review"",
1892
- "export APP_DIR="www"",
1893
- "export ENV_TYPE="review"",
1894
- "export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
1895
- "export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
1896
- "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")"",
1897
- "export HOST="unknown-host.example.com"",
1898
- "export ROOT_URL="https://unknown-host.example.com"",
1899
- "export HOST_INTERNAL="unknown-host.example.com"",
1900
- "export HOST_CANONICAL="unknown-host.example.com"",
1901
- "export ROOT_URL_INTERNAL="https://unknown-host.example.com"",
1902
- "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\\"]"",
1903
- "export DOCKER_REGISTRY="$CI_REGISTRY"",
1904
- "export DOCKER_CACHE_IMAGE="$CI_REGISTRY_IMAGE/caches/www"",
1905
- "export DOCKER_IMAGE_NAME="review/www"",
1906
- "export DOCKER_IMAGE="$CI_REGISTRY_IMAGE/$DOCKER_IMAGE_NAME"",
1907
- "export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"",
1908
- "export DEPLOY_API_KEY="$CL_review_www_DEPLOY_API_KEY"",
1909
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
1910
- "cd www",
1911
- "echo 'would deploy'",
1912
- "echo 'Uploading SBOM to Dependency Track'",
1913
- "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/www" "https://unknown-host.example.com" "__sbom.json" vex.json || true",
1914
- "echo "CL_GITLAB_ENVIRONMENT_URL=https://unknown-host.example.com" >> gitlab_environment.env",
1915
- ],
1916
- "stage": "deploy review",
1917
- "variables": {
1918
- "KUBERNETES_CPU_REQUEST": "1",
1919
- "KUBERNETES_MEMORY_LIMIT": "2048Mi",
1920
- "KUBERNETES_MEMORY_REQUEST": "1024Mi",
1921
- },
1922
- },
1923
- "www 🛑 Stop ⚠️ | review ": {
1924
- "allow_failure": true,
1925
- "artifacts": {
1926
- "reports": {
1927
- "dotenv": "gitlab_environment.env",
1928
- },
1929
- },
1930
- "environment": {
1931
- "action": "stop",
1932
- "name": "review/$CI_COMMIT_REF_NAME/www",
1933
- "url": "$CL_GITLAB_ENVIRONMENT_URL",
1934
- },
1935
- "image": "path/to/docker/jobs-default:the-version",
1936
- "interruptible": true,
1937
- "needs": [],
1938
- "retry": {
1939
- "max": 2,
1940
- "when": [
1941
- "runner_system_failure",
1942
- "stuck_or_timeout_failure",
1943
- ],
1944
- },
1945
- "rules": [
1946
- {
1947
- "if": "$CI_COMMIT_BRANCH =~ /^[0-9]+\\.([0-9]+|x)\\.x$/",
1948
- "when": "on_success",
1949
- },
1950
- {
1951
- "when": "manual",
1952
- },
1953
- ],
1954
- "script": [
1955
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
1956
- "export DEPLOY_API_KEY="$CL_review_www_DEPLOY_API_KEY"",
1957
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
1958
- "echo 'would stop'",
1959
- "echo 'Disabling component in Dependency Track'",
1960
- "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" disable "pan-test-app/www" "https://unknown-host.example.com" || true",
1961
- "echo "CL_GITLAB_ENVIRONMENT_URL=https://unknown-host.example.com" >> gitlab_environment.env",
1962
- ],
1963
- "stage": "stop review",
1964
- "variables": {
1965
- "GIT_STRATEGY": "none",
1966
- "KUBERNETES_CPU_REQUEST": "0.22",
1967
- "KUBERNETES_MEMORY_LIMIT": "400Mi",
1968
- "KUBERNETES_MEMORY_REQUEST": "200Mi",
1969
- },
1970
- },
1971
- "www 🛡 audit": {
1972
- "allow_failure": true,
1973
- "image": "path/to/docker/jobs-default:the-version",
1974
- "interruptible": true,
1975
- "needs": [],
1976
- "retry": {
1977
- "max": 2,
1978
- "when": [
1979
- "runner_system_failure",
1980
- "stuck_or_timeout_failure",
1981
- ],
1982
- },
1983
- "script": [
1984
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
1985
- "export APP_PATH="www"",
1986
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
1987
- "cd www",
1988
- "yarn npm audit --environment production",
1989
- ],
1990
- "stage": "test",
1991
- "variables": {
1992
- "KUBERNETES_CPU_REQUEST": "0.45",
1993
- "KUBERNETES_MEMORY_LIMIT": "4Gi",
1994
- "KUBERNETES_MEMORY_REQUEST": "1Gi",
1995
- },
1996
- },
1997
- "www 🧪 test": {
1998
- "cache": [
1999
- {
2000
- "key": "www-yarn",
2001
- "paths": [
2002
- "www/.yarn",
2003
- ],
2004
- "policy": "pull-push",
2005
- },
2006
- {
2007
- "key": "www-node-modules",
2008
- "paths": [
2009
- "www/node_modules",
2010
- ],
2011
- "policy": "pull-push",
2012
- },
2013
- ],
2014
- "image": "path/to/docker/jobs-testing-chrome:the-version",
2015
- "interruptible": true,
2016
- "needs": [],
2017
- "retry": {
2018
- "max": 2,
2019
- "when": [
2020
- "runner_system_failure",
2021
- "stuck_or_timeout_failure",
2022
- ],
2023
- },
2024
- "script": [
2025
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
2026
- "export APP_PATH="www"",
2027
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
2028
- "echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"",
2029
- "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
2030
- "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
2031
- "echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"",
2032
- "cd www",
2033
- "echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"",
2034
- "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
2035
- "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
2036
- "echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"",
2037
- "echo -e "\\e[0Ksection_start:$(date +%s):yarninstall[collapsed=true]\\r\\e[0KYarn install"",
2038
- "yarn install --immutable",
2039
- "echo -e "\\e[0Ksection_end:$(date +%s):yarninstall\\r\\e[0K"",
2040
- "yarn test",
2041
- ],
2042
- "stage": "test",
2043
- "variables": {
2044
- "KUBERNETES_CPU_REQUEST": "0.45",
2045
- "KUBERNETES_MEMORY_LIMIT": "4Gi",
2046
- "KUBERNETES_MEMORY_REQUEST": "1Gi",
2047
- },
2048
- },
2049
- "www 🧾 sbom | review ": {
2050
- "allow_failure": true,
2051
- "artifacts": {
2052
- "paths": [
2053
- "__sbom.json",
2054
- ],
2055
- },
2056
- "image": "aquasec/trivy:0.38.3",
2057
- "interruptible": true,
2058
- "needs": [],
2059
- "retry": {
2060
- "max": 2,
2061
- "when": [
2062
- "runner_system_failure",
2063
- "stuck_or_timeout_failure",
2064
- ],
2065
- },
2066
- "script": [
2067
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
2068
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
2069
- "trivy fs --quiet --format cyclonedx --output "__sbom.json" www",
2070
- ],
2071
- "stage": "build",
2072
- "variables": {},
2073
- },
2074
- },
2075
- "stages": [
2076
- "setup",
2077
- "setup dev",
2078
- "setup review",
2079
- "setup stage",
2080
- "setup prod",
2081
- "test",
2082
- "test dev",
2083
- "test review",
2084
- "test stage",
2085
- "test prod",
2086
- "build",
2087
- "build dev",
2088
- "build review",
2089
- "build stage",
2090
- "build prod",
2091
- "deploy",
2092
- "deploy dev",
2093
- "deploy review",
2094
- "deploy stage",
2095
- "deploy prod",
2096
- "verify",
2097
- "verify dev",
2098
- "verify review",
2099
- "verify stage",
2100
- "verify prod",
2101
- "rollback",
2102
- "rollback dev",
2103
- "rollback review",
2104
- "rollback stage",
2105
- "rollback prod",
2106
- "stop",
2107
- "stop dev",
2108
- "stop review",
2109
- "stop stage",
2110
- "stop prod",
2111
- ],
2112
- "variables": {
2113
- "ARTIFACT_COMPRESSION_LEVEL": "fast",
2114
- "CACHE_COMPRESSION_LEVEL": "fast",
2115
- "FF_USE_FASTZIP": "true",
2116
- "GIT_DEPTH": "1",
2117
- "TRANSFER_METER_FREQUENCY": "5s",
2118
- },
2119
- "workflow": {
2120
- "rules": [
2121
- {
2122
- "if": "$CI_COMMIT_TAG",
2123
- },
2124
- {
2125
- "if": "$CI_COMMIT_MESSAGE =~ /^chore\\(release\\).*/",
2126
- "when": "never",
2127
- },
2128
- {
2129
- "if": "$CI_PIPELINE_SOURCE == "schedule"",
2130
- "when": "never",
2131
- },
2132
- {
2133
- "if": "$CI_COMMIT_BRANCH =~ /^[0-9]+.([0-9]+|x).x$/",
2134
- },
2135
- {
2136
- "if": "$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH",
2137
- },
2138
- {
2139
- "if": "$CI_MERGE_REQUEST_ID",
2140
- },
2141
- ],
2142
- },
2143
- },
2144
- "taggedRelease": {
2145
- "image": "path/to/docker/jobs-default:the-version",
2146
- "jobs": {
2147
- "www 🔨 app | prod ": {
2148
- "artifacts": {
2149
- "expire_in": "1 day",
2150
- "paths": [
2151
- "www/__build_info.json",
2152
- "www/.next",
2153
- "www/dist",
2154
- ],
2155
- "reports": {
2156
- "junit": undefined,
2157
- },
2158
- "when": "always",
2159
- },
2160
- "cache": [
2161
- {
2162
- "key": "www-yarn",
2163
- "paths": [
2164
- "www/.yarn",
2165
- ],
2166
- "policy": "pull-push",
2167
- },
2168
- {
2169
- "key": "www-node-modules",
2170
- "paths": [
2171
- "www/node_modules",
2172
- ],
2173
- "policy": "pull-push",
2174
- },
2175
- {
2176
- "key": "www-next-cache",
2177
- "paths": [
2178
- "www/.next/cache",
2179
- ],
2180
- "policy": "pull-push",
2181
- },
2182
- ],
2183
- "image": "path/to/docker/jobs-default:the-version",
2184
- "interruptible": true,
2185
- "needs": [],
2186
- "retry": {
2187
- "max": 2,
2188
- "when": [
2189
- "runner_system_failure",
2190
- "stuck_or_timeout_failure",
2191
- ],
2192
- },
2193
- "script": [
2194
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
2195
- "export ENV_SHORT="prod"",
2196
- "export APP_DIR="www"",
2197
- "export ENV_TYPE="prod"",
2198
- "export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
2199
- "export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
2200
- "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")"",
2201
- "export HOST="unknown-host.example.com"",
2202
- "export ROOT_URL="https://unknown-host.example.com"",
2203
- "export HOST_INTERNAL="unknown-host.example.com"",
2204
- "export HOST_CANONICAL="unknown-host.example.com"",
2205
- "export ROOT_URL_INTERNAL="https://unknown-host.example.com"",
2206
- "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\\"]"",
2207
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
2208
- "echo '{"id":"$(git describe --tags 2>/dev/null || git rev-parse HEAD)","time":"$CI_JOB_STARTED_AT"}' > www/__build_info.json",
2209
- "echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"",
2210
- "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
2211
- "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
2212
- "echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"",
2213
- "cd www",
2214
- "echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"",
2215
- "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
2216
- "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
2217
- "echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"",
2218
- "echo -e "\\e[0Ksection_start:$(date +%s):yarninstall[collapsed=true]\\r\\e[0KYarn install"",
2219
- "yarn install --immutable",
2220
- "echo -e "\\e[0Ksection_end:$(date +%s):yarninstall\\r\\e[0K"",
2221
- "yarn build",
2222
- ],
2223
- "stage": "build",
2224
- "variables": {
2225
- "KUBERNETES_CPU_REQUEST": "0.45",
2226
- "KUBERNETES_MEMORY_LIMIT": "4Gi",
2227
- "KUBERNETES_MEMORY_REQUEST": "1Gi",
2228
- },
2229
- },
2230
- "www 🔨 app | stage ": {
2231
- "artifacts": {
2232
- "expire_in": "1 day",
2233
- "paths": [
2234
- "www/__build_info.json",
2235
- "www/.next",
2236
- "www/dist",
2237
- ],
2238
- "reports": {
2239
- "junit": undefined,
2240
- },
2241
- "when": "always",
2242
- },
2243
- "cache": [
2244
- {
2245
- "key": "www-yarn",
2246
- "paths": [
2247
- "www/.yarn",
2248
- ],
2249
- "policy": "pull-push",
2250
- },
2251
- {
2252
- "key": "www-node-modules",
2253
- "paths": [
2254
- "www/node_modules",
2255
- ],
2256
- "policy": "pull-push",
2257
- },
2258
- {
2259
- "key": "www-next-cache",
2260
- "paths": [
2261
- "www/.next/cache",
2262
- ],
2263
- "policy": "pull-push",
2264
- },
2265
- ],
2266
- "image": "path/to/docker/jobs-default:the-version",
2267
- "interruptible": true,
2268
- "needs": [],
2269
- "retry": {
2270
- "max": 2,
2271
- "when": [
2272
- "runner_system_failure",
2273
- "stuck_or_timeout_failure",
2274
- ],
2275
- },
2276
- "script": [
2277
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
2278
- "export ENV_SHORT="stage"",
2279
- "export APP_DIR="www"",
2280
- "export ENV_TYPE="stage"",
2281
- "export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
2282
- "export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
2283
- "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")"",
2284
- "export HOST="unknown-host.example.com"",
2285
- "export ROOT_URL="https://unknown-host.example.com"",
2286
- "export HOST_INTERNAL="unknown-host.example.com"",
2287
- "export HOST_CANONICAL="unknown-host.example.com"",
2288
- "export ROOT_URL_INTERNAL="https://unknown-host.example.com"",
2289
- "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\\"]"",
2290
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
2291
- "echo '{"id":"$(git describe --tags 2>/dev/null || git rev-parse HEAD)","time":"$CI_JOB_STARTED_AT"}' > www/__build_info.json",
2292
- "echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"",
2293
- "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
2294
- "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
2295
- "echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"",
2296
- "cd www",
2297
- "echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"",
2298
- "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
2299
- "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
2300
- "echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"",
2301
- "echo -e "\\e[0Ksection_start:$(date +%s):yarninstall[collapsed=true]\\r\\e[0KYarn install"",
2302
- "yarn install --immutable",
2303
- "echo -e "\\e[0Ksection_end:$(date +%s):yarninstall\\r\\e[0K"",
2304
- "yarn build",
2305
- ],
2306
- "stage": "build",
2307
- "variables": {
2308
- "KUBERNETES_CPU_REQUEST": "0.45",
2309
- "KUBERNETES_MEMORY_LIMIT": "4Gi",
2310
- "KUBERNETES_MEMORY_REQUEST": "1Gi",
2311
- },
2312
- },
2313
- "www 🔨 docker | prod ": {
2314
- "cache": [
2315
- {
2316
- "key": "www-yarn",
2317
- "paths": [
2318
- "www/.yarn",
2319
- ],
2320
- "policy": "pull",
2321
- },
2322
- ],
2323
- "image": "path/to/docker/docker-build:the-version",
2324
- "interruptible": true,
2325
- "needs": [
2326
- "www 🔨 app | prod ",
2327
- ],
2328
- "retry": {
2329
- "max": 2,
2330
- "when": [
2331
- "runner_system_failure",
2332
- "stuck_or_timeout_failure",
2333
- ],
2334
- },
2335
- "script": [
2336
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
2337
- "export APP_DIR="www"",
2338
- "export DOCKER_BUILD_CONTEXT="."",
2339
- "export DOCKER_REGISTRY="$CI_REGISTRY"",
2340
- "export DOCKER_CACHE_IMAGE="$CI_REGISTRY_IMAGE/caches/www"",
2341
- "export DOCKER_IMAGE_NAME="prod/www"",
2342
- "export DOCKER_IMAGE="$CI_REGISTRY_IMAGE/$DOCKER_IMAGE_NAME"",
2343
- "export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"",
2344
- "export DOCKER_COPY_AND_INSTALL_APP="COPY --chown=node:node $APP_DIR .
2345
- RUN yarn plugin import workspace-tools
2346
- RUN yarn workspaces focus --production && yarn rebuild"",
2347
- "export DOCKER_COPY_WORKSPACE_FILES="COPY --chown=node:node www/package.json /app/www/package.json
2348
- COPY --chown=node:node www/yarn.lock /app/www/yarn.lock
2349
- COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
2350
- COPY --chown=node:node .yarn /app/.yarn"",
2351
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
2352
- "ensureNodeDockerfile",
2353
- "echo -e "\\e[0Ksection_start:$(date +%s):docker-login[collapsed=true]\\r\\e[0KDocker Login"",
2354
- "docker login --username gitlab-ci-token --password $CI_JOB_TOKEN $CI_REGISTRY",
2355
- "echo -e "\\e[0Ksection_end:$(date +%s):docker-login\\r\\e[0K"",
2356
- "echo -e "\\e[0Ksection_start:$(date +%s):docker-build[collapsed=true]\\r\\e[0KDocker build"",
2357
- "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",
2358
- "echo -e "\\e[0Ksection_end:$(date +%s):docker-build\\r\\e[0K"",
2359
- "echo -e "\\e[0Ksection_start:$(date +%s):docker-push[collapsed=true]\\r\\e[0KDocker push and tag"",
2360
- "docker push $DOCKER_IMAGE:$DOCKER_IMAGE_TAG",
2361
- "docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG $DOCKER_CACHE_IMAGE",
2362
- "docker push $DOCKER_CACHE_IMAGE",
2363
- "echo -e "\\e[0Ksection_end:$(date +%s):docker-push\\r\\e[0K"",
2364
- ],
2365
- "services": [
2366
- {
2367
- "command": [
2368
- "--tls=false",
2369
- ],
2370
- "name": "docker:24.0.6-dind",
2371
- },
2372
- ],
2373
- "stage": "build",
2374
- "variables": {
2375
- "DOCKER_BUILDKIT": "1",
2376
- "DOCKER_DRIVER": "overlay2",
2377
- "DOCKER_HOST": "tcp://0.0.0.0:2375",
2378
- "DOCKER_TLS_CERTDIR": "",
2379
- "KUBERNETES_CPU_REQUEST": "0.45",
2380
- "KUBERNETES_MEMORY_LIMIT": "2Gi",
2381
- "KUBERNETES_MEMORY_REQUEST": "1Gi",
2382
- },
2383
- },
2384
- "www 🔨 docker | stage ": {
2385
- "cache": [
2386
- {
2387
- "key": "www-yarn",
2388
- "paths": [
2389
- "www/.yarn",
2390
- ],
2391
- "policy": "pull",
2392
- },
2393
- ],
2394
- "image": "path/to/docker/docker-build:the-version",
2395
- "interruptible": true,
2396
- "needs": [
2397
- "www 🔨 app | stage ",
2398
- ],
2399
- "retry": {
2400
- "max": 2,
2401
- "when": [
2402
- "runner_system_failure",
2403
- "stuck_or_timeout_failure",
2404
- ],
2405
- },
2406
- "script": [
2407
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
2408
- "export APP_DIR="www"",
2409
- "export DOCKER_BUILD_CONTEXT="."",
2410
- "export DOCKER_REGISTRY="$CI_REGISTRY"",
2411
- "export DOCKER_CACHE_IMAGE="$CI_REGISTRY_IMAGE/caches/www"",
2412
- "export DOCKER_IMAGE_NAME="stage/www"",
2413
- "export DOCKER_IMAGE="$CI_REGISTRY_IMAGE/$DOCKER_IMAGE_NAME"",
2414
- "export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"",
2415
- "export DOCKER_COPY_AND_INSTALL_APP="COPY --chown=node:node $APP_DIR .
2416
- RUN yarn plugin import workspace-tools
2417
- RUN yarn workspaces focus --production && yarn rebuild"",
2418
- "export DOCKER_COPY_WORKSPACE_FILES="COPY --chown=node:node www/package.json /app/www/package.json
2419
- COPY --chown=node:node www/yarn.lock /app/www/yarn.lock
2420
- COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
2421
- COPY --chown=node:node .yarn /app/.yarn"",
2422
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
2423
- "ensureNodeDockerfile",
2424
- "echo -e "\\e[0Ksection_start:$(date +%s):docker-login[collapsed=true]\\r\\e[0KDocker Login"",
2425
- "docker login --username gitlab-ci-token --password $CI_JOB_TOKEN $CI_REGISTRY",
2426
- "echo -e "\\e[0Ksection_end:$(date +%s):docker-login\\r\\e[0K"",
2427
- "echo -e "\\e[0Ksection_start:$(date +%s):docker-build[collapsed=true]\\r\\e[0KDocker build"",
2428
- "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",
2429
- "echo -e "\\e[0Ksection_end:$(date +%s):docker-build\\r\\e[0K"",
2430
- "echo -e "\\e[0Ksection_start:$(date +%s):docker-push[collapsed=true]\\r\\e[0KDocker push and tag"",
2431
- "docker push $DOCKER_IMAGE:$DOCKER_IMAGE_TAG",
2432
- "docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG $DOCKER_CACHE_IMAGE",
2433
- "docker push $DOCKER_CACHE_IMAGE",
2434
- "echo -e "\\e[0Ksection_end:$(date +%s):docker-push\\r\\e[0K"",
2435
- ],
2436
- "services": [
2437
- {
2438
- "command": [
2439
- "--tls=false",
2440
- ],
2441
- "name": "docker:24.0.6-dind",
2442
- },
2443
- ],
2444
- "stage": "build",
2445
- "variables": {
2446
- "DOCKER_BUILDKIT": "1",
2447
- "DOCKER_DRIVER": "overlay2",
2448
- "DOCKER_HOST": "tcp://0.0.0.0:2375",
2449
- "DOCKER_TLS_CERTDIR": "",
2450
- "KUBERNETES_CPU_REQUEST": "0.45",
2451
- "KUBERNETES_MEMORY_LIMIT": "2Gi",
2452
- "KUBERNETES_MEMORY_REQUEST": "1Gi",
2453
- },
2454
- },
2455
- "www 🚀 Deploy | prod ": {
2456
- "allow_failure": true,
2457
- "artifacts": {
2458
- "reports": {
2459
- "dotenv": "gitlab_environment.env",
2460
- },
2461
- },
2462
- "cache": [],
2463
- "environment": {
2464
- "auto_stop_in": undefined,
2465
- "name": "prod/www",
2466
- "on_stop": "www 🛑 Stop ⚠️ | prod ",
2467
- "url": "$CL_GITLAB_ENVIRONMENT_URL",
2468
- },
2469
- "image": "path/to/docker/jobs-default:the-version",
2470
- "interruptible": true,
2471
- "needs": [
2472
- {
2473
- "artifacts": false,
2474
- "job": "www 🔨 app | prod ",
2475
- },
2476
- {
2477
- "artifacts": false,
2478
- "job": "www 🔨 docker | prod ",
2479
- },
2480
- {
2481
- "artifacts": true,
2482
- "job": "www 🧾 sbom | prod ",
2483
- },
2484
- ],
2485
- "retry": {
2486
- "max": 2,
2487
- "when": [
2488
- "runner_system_failure",
2489
- "stuck_or_timeout_failure",
2490
- ],
2491
- },
2492
- "rules": [
2493
- {
2494
- "when": "manual",
2495
- },
2496
- ],
2497
- "script": [
2498
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
2499
- "export ENV_SHORT="prod"",
2500
- "export APP_DIR="www"",
2501
- "export ENV_TYPE="prod"",
2502
- "export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
2503
- "export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
2504
- "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")"",
2505
- "export HOST="unknown-host.example.com"",
2506
- "export ROOT_URL="https://unknown-host.example.com"",
2507
- "export HOST_INTERNAL="unknown-host.example.com"",
2508
- "export HOST_CANONICAL="unknown-host.example.com"",
2509
- "export ROOT_URL_INTERNAL="https://unknown-host.example.com"",
2510
- "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\\"]"",
2511
- "export DOCKER_REGISTRY="$CI_REGISTRY"",
2512
- "export DOCKER_CACHE_IMAGE="$CI_REGISTRY_IMAGE/caches/www"",
2513
- "export DOCKER_IMAGE_NAME="prod/www"",
2514
- "export DOCKER_IMAGE="$CI_REGISTRY_IMAGE/$DOCKER_IMAGE_NAME"",
2515
- "export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"",
2516
- "export DEPLOY_API_KEY="$CL_prod_www_DEPLOY_API_KEY"",
2517
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
2518
- "cd www",
2519
- "echo 'would deploy'",
2520
- "echo 'Uploading SBOM to Dependency Track'",
2521
- "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/www" "https://unknown-host.example.com" "__sbom.json" vex.json || true",
2522
- "echo "CL_GITLAB_ENVIRONMENT_URL=https://unknown-host.example.com" >> gitlab_environment.env",
2523
- ],
2524
- "stage": "deploy prod",
2525
- "variables": {
2526
- "KUBERNETES_CPU_REQUEST": "1",
2527
- "KUBERNETES_MEMORY_LIMIT": "2048Mi",
2528
- "KUBERNETES_MEMORY_REQUEST": "1024Mi",
2529
- },
2530
- },
2531
- "www 🚀 Deploy | stage ": {
2532
- "allow_failure": false,
2533
- "artifacts": {
2534
- "reports": {
2535
- "dotenv": "gitlab_environment.env",
2536
- },
2537
- },
2538
- "cache": [],
2539
- "environment": {
2540
- "auto_stop_in": undefined,
2541
- "name": "stage/www",
2542
- "on_stop": "www 🛑 Stop ⚠️ | stage ",
2543
- "url": "$CL_GITLAB_ENVIRONMENT_URL",
2544
- },
2545
- "image": "path/to/docker/jobs-default:the-version",
2546
- "interruptible": true,
2547
- "needs": [
2548
- {
2549
- "artifacts": false,
2550
- "job": "www 🔨 app | stage ",
2551
- },
2552
- {
2553
- "artifacts": false,
2554
- "job": "www 🔨 docker | stage ",
2555
- },
2556
- {
2557
- "artifacts": true,
2558
- "job": "www 🧾 sbom | stage ",
2559
- },
2560
- ],
2561
- "retry": {
2562
- "max": 2,
2563
- "when": [
2564
- "runner_system_failure",
2565
- "stuck_or_timeout_failure",
2566
- ],
2567
- },
2568
- "rules": [
2569
- {
2570
- "when": "on_success",
2571
- },
2572
- ],
2573
- "script": [
2574
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
2575
- "export ENV_SHORT="stage"",
2576
- "export APP_DIR="www"",
2577
- "export ENV_TYPE="stage"",
2578
- "export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
2579
- "export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
2580
- "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")"",
2581
- "export HOST="unknown-host.example.com"",
2582
- "export ROOT_URL="https://unknown-host.example.com"",
2583
- "export HOST_INTERNAL="unknown-host.example.com"",
2584
- "export HOST_CANONICAL="unknown-host.example.com"",
2585
- "export ROOT_URL_INTERNAL="https://unknown-host.example.com"",
2586
- "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\\"]"",
2587
- "export DOCKER_REGISTRY="$CI_REGISTRY"",
2588
- "export DOCKER_CACHE_IMAGE="$CI_REGISTRY_IMAGE/caches/www"",
2589
- "export DOCKER_IMAGE_NAME="stage/www"",
2590
- "export DOCKER_IMAGE="$CI_REGISTRY_IMAGE/$DOCKER_IMAGE_NAME"",
2591
- "export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"",
2592
- "export DEPLOY_API_KEY="$CL_stage_www_DEPLOY_API_KEY"",
2593
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
2594
- "cd www",
2595
- "echo 'would deploy'",
2596
- "echo 'Uploading SBOM to Dependency Track'",
2597
- "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/www" "https://unknown-host.example.com" "__sbom.json" vex.json || true",
2598
- "echo "CL_GITLAB_ENVIRONMENT_URL=https://unknown-host.example.com" >> gitlab_environment.env",
2599
- ],
2600
- "stage": "deploy stage",
2601
- "variables": {
2602
- "KUBERNETES_CPU_REQUEST": "1",
2603
- "KUBERNETES_MEMORY_LIMIT": "2048Mi",
2604
- "KUBERNETES_MEMORY_REQUEST": "1024Mi",
2605
- },
2606
- },
2607
- "www 🛑 Stop ⚠️ | prod ": {
2608
- "allow_failure": true,
2609
- "artifacts": {
2610
- "reports": {
2611
- "dotenv": "gitlab_environment.env",
2612
- },
2613
- },
2614
- "environment": {
2615
- "action": "stop",
2616
- "name": "prod/www",
2617
- "url": "$CL_GITLAB_ENVIRONMENT_URL",
2618
- },
2619
- "image": "path/to/docker/jobs-default:the-version",
2620
- "interruptible": true,
2621
- "needs": [],
2622
- "retry": {
2623
- "max": 2,
2624
- "when": [
2625
- "runner_system_failure",
2626
- "stuck_or_timeout_failure",
2627
- ],
2628
- },
2629
- "rules": [
2630
- {
2631
- "if": "$CI_COMMIT_BRANCH =~ /^[0-9]+\\.([0-9]+|x)\\.x$/",
2632
- "when": "on_success",
2633
- },
2634
- {
2635
- "when": "manual",
2636
- },
2637
- ],
2638
- "script": [
2639
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
2640
- "export DEPLOY_API_KEY="$CL_prod_www_DEPLOY_API_KEY"",
2641
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
2642
- "echo 'would stop'",
2643
- "echo 'Disabling component in Dependency Track'",
2644
- "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" disable "pan-test-app/www" "https://unknown-host.example.com" || true",
2645
- "echo "CL_GITLAB_ENVIRONMENT_URL=https://unknown-host.example.com" >> gitlab_environment.env",
2646
- ],
2647
- "stage": "stop prod",
2648
- "variables": {
2649
- "GIT_STRATEGY": "none",
2650
- "KUBERNETES_CPU_REQUEST": "0.22",
2651
- "KUBERNETES_MEMORY_LIMIT": "400Mi",
2652
- "KUBERNETES_MEMORY_REQUEST": "200Mi",
2653
- },
2654
- },
2655
- "www 🛑 Stop ⚠️ | stage ": {
2656
- "allow_failure": true,
2657
- "artifacts": {
2658
- "reports": {
2659
- "dotenv": "gitlab_environment.env",
2660
- },
2661
- },
2662
- "environment": {
2663
- "action": "stop",
2664
- "name": "stage/www",
2665
- "url": "$CL_GITLAB_ENVIRONMENT_URL",
2666
- },
2667
- "image": "path/to/docker/jobs-default:the-version",
2668
- "interruptible": true,
2669
- "needs": [],
2670
- "retry": {
2671
- "max": 2,
2672
- "when": [
2673
- "runner_system_failure",
2674
- "stuck_or_timeout_failure",
2675
- ],
2676
- },
2677
- "rules": [
2678
- {
2679
- "if": "$CI_COMMIT_BRANCH =~ /^[0-9]+\\.([0-9]+|x)\\.x$/",
2680
- "when": "on_success",
2681
- },
2682
- {
2683
- "when": "manual",
2684
- },
2685
- ],
2686
- "script": [
2687
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
2688
- "export DEPLOY_API_KEY="$CL_stage_www_DEPLOY_API_KEY"",
2689
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
2690
- "echo 'would stop'",
2691
- "echo 'Disabling component in Dependency Track'",
2692
- "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" disable "pan-test-app/www" "https://unknown-host.example.com" || true",
2693
- "echo "CL_GITLAB_ENVIRONMENT_URL=https://unknown-host.example.com" >> gitlab_environment.env",
2694
- ],
2695
- "stage": "stop stage",
2696
- "variables": {
2697
- "GIT_STRATEGY": "none",
2698
- "KUBERNETES_CPU_REQUEST": "0.22",
2699
- "KUBERNETES_MEMORY_LIMIT": "400Mi",
2700
- "KUBERNETES_MEMORY_REQUEST": "200Mi",
2701
- },
2702
- },
2703
- "www 🧾 sbom | prod ": {
2704
- "allow_failure": true,
2705
- "artifacts": {
2706
- "paths": [
2707
- "__sbom.json",
2708
- ],
2709
- },
2710
- "image": "aquasec/trivy:0.38.3",
2711
- "interruptible": true,
2712
- "needs": [],
2713
- "retry": {
2714
- "max": 2,
2715
- "when": [
2716
- "runner_system_failure",
2717
- "stuck_or_timeout_failure",
2718
- ],
2719
- },
2720
- "script": [
2721
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
2722
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
2723
- "trivy fs --quiet --format cyclonedx --output "__sbom.json" www",
2724
- ],
2725
- "stage": "build",
2726
- "variables": {},
2727
- },
2728
- "www 🧾 sbom | stage ": {
2729
- "allow_failure": true,
2730
- "artifacts": {
2731
- "paths": [
2732
- "__sbom.json",
2733
- ],
2734
- },
2735
- "image": "aquasec/trivy:0.38.3",
2736
- "interruptible": true,
2737
- "needs": [],
2738
- "retry": {
2739
- "max": 2,
2740
- "when": [
2741
- "runner_system_failure",
2742
- "stuck_or_timeout_failure",
2743
- ],
2744
- },
2745
- "script": [
2746
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
2747
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
2748
- "trivy fs --quiet --format cyclonedx --output "__sbom.json" www",
2749
- ],
2750
- "stage": "build",
2751
- "variables": {},
2752
- },
2753
- },
2754
- "stages": [
2755
- "setup",
2756
- "setup dev",
2757
- "setup review",
2758
- "setup stage",
2759
- "setup prod",
2760
- "test",
2761
- "test dev",
2762
- "test review",
2763
- "test stage",
2764
- "test prod",
2765
- "build",
2766
- "build dev",
2767
- "build review",
2768
- "build stage",
2769
- "build prod",
2770
- "deploy",
2771
- "deploy dev",
2772
- "deploy review",
2773
- "deploy stage",
2774
- "deploy prod",
2775
- "verify",
2776
- "verify dev",
2777
- "verify review",
2778
- "verify stage",
2779
- "verify prod",
2780
- "rollback",
2781
- "rollback dev",
2782
- "rollback review",
2783
- "rollback stage",
2784
- "rollback prod",
2785
- "stop",
2786
- "stop dev",
2787
- "stop review",
2788
- "stop stage",
2789
- "stop prod",
2790
- ],
2791
- "variables": {
2792
- "ARTIFACT_COMPRESSION_LEVEL": "fast",
2793
- "CACHE_COMPRESSION_LEVEL": "fast",
2794
- "FF_USE_FASTZIP": "true",
2795
- "GIT_DEPTH": "1",
2796
- "TRANSFER_METER_FREQUENCY": "5s",
2797
- },
2798
- "workflow": {
2799
- "rules": [
2800
- {
2801
- "if": "$CI_COMMIT_TAG",
2802
- },
2803
- {
2804
- "if": "$CI_COMMIT_MESSAGE =~ /^chore\\(release\\).*/",
2805
- "when": "never",
2806
- },
2807
- {
2808
- "if": "$CI_PIPELINE_SOURCE == "schedule"",
2809
- "when": "never",
2810
- },
2811
- {
2812
- "if": "$CI_COMMIT_BRANCH =~ /^[0-9]+.([0-9]+|x).x$/",
2813
- },
2814
- {
2815
- "if": "$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH",
2816
- },
2817
- {
2818
- "if": "$CI_MERGE_REQUEST_ID",
2819
- },
2820
- ],
2821
- },
2822
- },
2823
- }
2824
- `;