@catladder/pipeline 1.163.1 → 1.163.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (72) hide show
  1. package/dist/bundles/catladder-gitlab/index.js +1 -1
  2. package/dist/constants.js +1 -1
  3. package/examples/__snapshots__/cloud-run-memory-limit.test.ts.snap +0 -1958
  4. package/examples/__snapshots__/cloud-run-meteor-with-worker.test.ts.snap +1 -1935
  5. package/examples/__snapshots__/cloud-run-no-cpu-throttling.test.ts.snap +1 -1959
  6. package/examples/__snapshots__/cloud-run-no-service.test.ts.snap +1 -2011
  7. package/examples/__snapshots__/cloud-run-non-public.test.ts.snap +1 -1959
  8. package/examples/__snapshots__/cloud-run-post-stop-job.test.ts.snap +1 -1970
  9. package/examples/__snapshots__/cloud-run-service-gen2.test.ts.snap +1 -1959
  10. package/examples/__snapshots__/cloud-run-service-increase-timout.test.ts.snap +1 -1959
  11. package/examples/__snapshots__/cloud-run-service-with-volumes.test.ts.snap +1 -2003
  12. package/examples/__snapshots__/cloud-run-storybook.test.ts.snap +1 -1675
  13. package/examples/__snapshots__/cloud-run-with-ngnix.test.ts.snap +1 -1959
  14. package/examples/__snapshots__/cloud-run-with-sql-reuse-db.test.ts.snap +1 -3935
  15. package/examples/__snapshots__/cloud-run-with-sql.test.ts.snap +1 -3458
  16. package/examples/__snapshots__/cloud-run-with-worker.test.ts.snap +1 -1967
  17. package/examples/__snapshots__/custom-build-job-with-tests.test.ts.snap +1 -1787
  18. package/examples/__snapshots__/custom-build-job.test.ts.snap +1 -1487
  19. package/examples/__snapshots__/custom-deploy.test.ts.snap +1 -1721
  20. package/examples/__snapshots__/custom-envs.test.ts.snap +1 -1175
  21. package/examples/__snapshots__/custom-sbom-java.test.ts.snap +1 -1495
  22. package/examples/__snapshots__/git-submodule.test.ts.snap +1 -1962
  23. package/examples/__snapshots__/kubernetes-application-customization.test.ts.snap +1 -2450
  24. package/examples/__snapshots__/kubernetes-with-cloud-sql-legacy.test.ts.snap +1 -2462
  25. package/examples/__snapshots__/kubernetes-with-cloud-sql.test.ts.snap +1 -2470
  26. package/examples/__snapshots__/kubernetes-with-jobs.test.ts.snap +1 -4558
  27. package/examples/__snapshots__/kubernetes-with-mongodb.test.ts.snap +1 -2574
  28. package/examples/__snapshots__/local-dot-env.test.ts.snap +1 -1959
  29. package/examples/__snapshots__/meteor-kubernetes.test.ts.snap +1 -2503
  30. package/examples/__snapshots__/multiline-var.test.ts.snap +1 -4488
  31. package/examples/__snapshots__/native-app.test.ts.snap +1 -3167
  32. package/examples/__snapshots__/node-build-with-custom-image.test.ts.snap +1 -1959
  33. package/examples/__snapshots__/node-build-with-docker-additions.test.ts.snap +1 -1967
  34. package/examples/__snapshots__/rails-k8s-with-worker-dockerfile.test.ts.snap +1479 -2003
  35. package/examples/__snapshots__/rails-k8s-with-worker.test.ts.snap +1 -1995
  36. package/examples/__snapshots__/wait-for-other-deploy.test.ts.snap +1 -2105
  37. package/examples/cloud-run-memory-limit.test.ts +1 -8
  38. package/examples/cloud-run-meteor-with-worker.test.ts +2 -9
  39. package/examples/cloud-run-no-cpu-throttling.test.ts +2 -9
  40. package/examples/cloud-run-no-service.test.ts +2 -9
  41. package/examples/cloud-run-non-public.test.ts +2 -9
  42. package/examples/cloud-run-post-stop-job.test.ts +2 -9
  43. package/examples/cloud-run-service-gen2.test.ts +2 -9
  44. package/examples/cloud-run-service-increase-timout.test.ts +2 -9
  45. package/examples/cloud-run-service-with-volumes.test.ts +2 -9
  46. package/examples/cloud-run-storybook.test.ts +2 -9
  47. package/examples/cloud-run-with-ngnix.test.ts +2 -9
  48. package/examples/cloud-run-with-sql-reuse-db.test.ts +2 -9
  49. package/examples/cloud-run-with-sql.test.ts +2 -9
  50. package/examples/cloud-run-with-worker.test.ts +2 -9
  51. package/examples/custom-build-job-with-tests.test.ts +2 -9
  52. package/examples/custom-build-job.test.ts +2 -9
  53. package/examples/custom-deploy.test.ts +2 -9
  54. package/examples/custom-envs.test.ts +2 -9
  55. package/examples/custom-sbom-java.test.ts +2 -9
  56. package/examples/git-submodule.test.ts +2 -9
  57. package/examples/kubernetes-application-customization.test.ts +2 -9
  58. package/examples/kubernetes-with-cloud-sql-legacy.test.ts +2 -9
  59. package/examples/kubernetes-with-cloud-sql.test.ts +2 -9
  60. package/examples/kubernetes-with-jobs.test.ts +2 -9
  61. package/examples/kubernetes-with-mongodb.test.ts +2 -9
  62. package/examples/local-dot-env.test.ts +2 -9
  63. package/examples/meteor-kubernetes.test.ts +2 -9
  64. package/examples/multiline-var.test.ts +2 -9
  65. package/examples/native-app.test.ts +2 -9
  66. package/examples/node-build-with-custom-image.test.ts +2 -9
  67. package/examples/node-build-with-docker-additions.test.ts +2 -9
  68. package/examples/rails-k8s-with-worker-dockerfile.test.ts +2 -2
  69. package/examples/rails-k8s-with-worker.test.ts +2 -9
  70. package/examples/wait-for-other-deploy.test.ts +2 -9
  71. package/package.json +1 -1
  72. package/scripts/generate-examples-test.ts +3 -5
@@ -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 multiline-var local pipeline YAML 1`] = `
4
4
  "image: path/to/docker/jobs-default:the-version
5
5
  stages:
6
6
  - setup
@@ -3375,4490 +3375,3 @@ create release:
3375
3375
  needs: []
3376
3376
  "
3377
3377
  `;
3378
-
3379
- exports[`matches snapshot for multiline-var 1`] = `
3380
- {
3381
- "mainBranch": {
3382
- "image": "path/to/docker/jobs-default:the-version",
3383
- "jobs": {
3384
- "api 👮 lint": {
3385
- "cache": [
3386
- {
3387
- "key": "api-yarn",
3388
- "paths": [
3389
- "api/.yarn",
3390
- ],
3391
- "policy": "pull-push",
3392
- },
3393
- {
3394
- "key": "api-node-modules",
3395
- "paths": [
3396
- "api/node_modules",
3397
- ],
3398
- "policy": "pull-push",
3399
- },
3400
- ],
3401
- "image": "path/to/docker/jobs-default:the-version",
3402
- "interruptible": true,
3403
- "needs": [],
3404
- "retry": {
3405
- "max": 2,
3406
- "when": [
3407
- "runner_system_failure",
3408
- "stuck_or_timeout_failure",
3409
- ],
3410
- },
3411
- "script": [
3412
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
3413
- "export APP_PATH="api"",
3414
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
3415
- "echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"",
3416
- "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
3417
- "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
3418
- "echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"",
3419
- "cd api",
3420
- "echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"",
3421
- "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
3422
- "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
3423
- "echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"",
3424
- "echo -e "\\e[0Ksection_start:$(date +%s):yarninstall[collapsed=true]\\r\\e[0KYarn install"",
3425
- "yarn install --immutable",
3426
- "echo -e "\\e[0Ksection_end:$(date +%s):yarninstall\\r\\e[0K"",
3427
- "yarn lint",
3428
- ],
3429
- "stage": "test",
3430
- "variables": {
3431
- "KUBERNETES_CPU_REQUEST": "0.45",
3432
- "KUBERNETES_MEMORY_LIMIT": "4Gi",
3433
- "KUBERNETES_MEMORY_REQUEST": "1Gi",
3434
- },
3435
- },
3436
- "api 🔨 app | dev ": {
3437
- "artifacts": {
3438
- "expire_in": "1 day",
3439
- "paths": [
3440
- "api/__build_info.json",
3441
- "api/.next",
3442
- "api/dist",
3443
- ],
3444
- "reports": {
3445
- "junit": undefined,
3446
- },
3447
- "when": "always",
3448
- },
3449
- "cache": [
3450
- {
3451
- "key": "api-yarn",
3452
- "paths": [
3453
- "api/.yarn",
3454
- ],
3455
- "policy": "pull-push",
3456
- },
3457
- {
3458
- "key": "api-node-modules",
3459
- "paths": [
3460
- "api/node_modules",
3461
- ],
3462
- "policy": "pull-push",
3463
- },
3464
- {
3465
- "key": "api-next-cache",
3466
- "paths": [
3467
- "api/.next/cache",
3468
- ],
3469
- "policy": "pull-push",
3470
- },
3471
- ],
3472
- "image": "path/to/docker/jobs-default:the-version",
3473
- "interruptible": true,
3474
- "needs": [],
3475
- "retry": {
3476
- "max": 2,
3477
- "when": [
3478
- "runner_system_failure",
3479
- "stuck_or_timeout_failure",
3480
- ],
3481
- },
3482
- "script": [
3483
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
3484
- "export ENV_SHORT="dev"",
3485
- "export APP_DIR="api"",
3486
- "export ENV_TYPE="dev"",
3487
- "export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
3488
- "export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
3489
- "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")"",
3490
- "export HOST="$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
3491
- "export ROOT_URL="https://$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
3492
- "export HOST_INTERNAL="$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
3493
- "export HOST_CANONICAL="$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
3494
- "export ROOT_URL_INTERNAL="https://$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
3495
- "export DEPLOY_CLOUD_RUN_PROJECT_ID="asdf"",
3496
- "export DEPLOY_CLOUD_RUN_REGION="asia-east1"",
3497
- "export GCLOUD_DEPLOY_credentialsKey="$CL_dev_api_GCLOUD_DEPLOY_credentialsKey"",
3498
- "export GCLOUD_RUN_canonicalHostSuffix="$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix"",
3499
- "export foo="foo-value"",
3500
- "export multiline="line1
3501
- line2
3502
- line3
3503
-
3504
- single quote: '
3505
- doouble quote: \\"
3506
- "",
3507
- "export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOST\\",\\"ROOT_URL\\",\\"HOST_INTERNAL\\",\\"HOST_CANONICAL\\",\\"ROOT_URL_INTERNAL\\",\\"DEPLOY_CLOUD_RUN_PROJECT_ID\\",\\"DEPLOY_CLOUD_RUN_REGION\\",\\"GCLOUD_DEPLOY_credentialsKey\\",\\"GCLOUD_RUN_canonicalHostSuffix\\",\\"foo\\",\\"multiline\\"]"",
3508
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
3509
- "echo '{"id":"$(git describe --tags 2>/dev/null || git rev-parse HEAD)","time":"$CI_JOB_STARTED_AT"}' > api/__build_info.json",
3510
- "echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"",
3511
- "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
3512
- "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
3513
- "echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"",
3514
- "cd api",
3515
- "echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"",
3516
- "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
3517
- "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
3518
- "echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"",
3519
- "echo -e "\\e[0Ksection_start:$(date +%s):yarninstall[collapsed=true]\\r\\e[0KYarn install"",
3520
- "yarn install --immutable",
3521
- "echo -e "\\e[0Ksection_end:$(date +%s):yarninstall\\r\\e[0K"",
3522
- "yarn build",
3523
- ],
3524
- "stage": "build",
3525
- "variables": {
3526
- "KUBERNETES_CPU_REQUEST": "0.45",
3527
- "KUBERNETES_MEMORY_LIMIT": "4Gi",
3528
- "KUBERNETES_MEMORY_REQUEST": "1Gi",
3529
- },
3530
- },
3531
- "api 🔨 docker | dev ": {
3532
- "cache": [
3533
- {
3534
- "key": "api-yarn",
3535
- "paths": [
3536
- "api/.yarn",
3537
- ],
3538
- "policy": "pull",
3539
- },
3540
- ],
3541
- "image": "path/to/docker/docker-build:the-version",
3542
- "interruptible": true,
3543
- "needs": [
3544
- "api 🔨 app | dev ",
3545
- ],
3546
- "retry": {
3547
- "max": 2,
3548
- "when": [
3549
- "runner_system_failure",
3550
- "stuck_or_timeout_failure",
3551
- ],
3552
- },
3553
- "script": [
3554
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
3555
- "export APP_DIR="api"",
3556
- "export DOCKER_BUILD_CONTEXT="."",
3557
- "export DOCKER_REGISTRY="asia-east1-docker.pkg.dev"",
3558
- "export DOCKER_IMAGE="asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/dev/api"",
3559
- "export DOCKER_CACHE_IMAGE="asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/caches/api"",
3560
- "export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"",
3561
- "export DOCKER_COPY_AND_INSTALL_APP="COPY --chown=node:node $APP_DIR .
3562
- RUN yarn plugin import workspace-tools
3563
- RUN yarn workspaces focus --production && yarn rebuild"",
3564
- "export DOCKER_COPY_WORKSPACE_FILES="COPY --chown=node:node api/package.json /app/api/package.json
3565
- COPY --chown=node:node api/yarn.lock /app/api/yarn.lock
3566
- COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
3567
- COPY --chown=node:node .yarn /app/.yarn"",
3568
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
3569
- "ensureNodeDockerfile",
3570
- "echo -e "\\e[0Ksection_start:$(date +%s):docker-login[collapsed=true]\\r\\e[0KDocker Login"",
3571
- "gcloud auth activate-service-account --key-file=<(echo "$CL_dev_api_GCLOUD_DEPLOY_credentialsKey")",
3572
- "gcloud auth configure-docker asia-east1-docker.pkg.dev",
3573
- "echo -e "\\e[0Ksection_end:$(date +%s):docker-login\\r\\e[0K"",
3574
- "echo -e "\\e[0Ksection_start:$(date +%s):docker-build[collapsed=true]\\r\\e[0KDocker build"",
3575
- "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",
3576
- "echo -e "\\e[0Ksection_end:$(date +%s):docker-build\\r\\e[0K"",
3577
- "echo -e "\\e[0Ksection_start:$(date +%s):docker-push[collapsed=true]\\r\\e[0KDocker push and tag"",
3578
- "docker push $DOCKER_IMAGE:$DOCKER_IMAGE_TAG",
3579
- "docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG $DOCKER_CACHE_IMAGE",
3580
- "docker push $DOCKER_CACHE_IMAGE",
3581
- "echo -e "\\e[0Ksection_end:$(date +%s):docker-push\\r\\e[0K"",
3582
- ],
3583
- "services": [
3584
- {
3585
- "command": [
3586
- "--tls=false",
3587
- ],
3588
- "name": "docker:24.0.6-dind",
3589
- },
3590
- ],
3591
- "stage": "build",
3592
- "variables": {
3593
- "DOCKER_BUILDKIT": "1",
3594
- "DOCKER_DRIVER": "overlay2",
3595
- "DOCKER_HOST": "tcp://0.0.0.0:2375",
3596
- "DOCKER_TLS_CERTDIR": "",
3597
- "KUBERNETES_CPU_REQUEST": "0.45",
3598
- "KUBERNETES_MEMORY_LIMIT": "2Gi",
3599
- "KUBERNETES_MEMORY_REQUEST": "1Gi",
3600
- },
3601
- },
3602
- "api 🚀 Deploy | dev ": {
3603
- "allow_failure": false,
3604
- "artifacts": {
3605
- "reports": {
3606
- "dotenv": "gitlab_environment.env",
3607
- },
3608
- },
3609
- "environment": {
3610
- "auto_stop_in": "4 weeks",
3611
- "name": "dev/api",
3612
- "on_stop": "api 🛑 Stop ⚠️ | dev ",
3613
- "url": "$CL_GITLAB_ENVIRONMENT_URL",
3614
- },
3615
- "image": "path/to/docker/gcloud:the-version",
3616
- "interruptible": true,
3617
- "needs": [
3618
- {
3619
- "artifacts": false,
3620
- "job": "api 👮 lint",
3621
- },
3622
- {
3623
- "artifacts": false,
3624
- "job": "api 🔨 app | dev ",
3625
- },
3626
- {
3627
- "artifacts": false,
3628
- "job": "api 🔨 docker | dev ",
3629
- },
3630
- {
3631
- "artifacts": false,
3632
- "job": "api 🧪 test",
3633
- },
3634
- {
3635
- "artifacts": true,
3636
- "job": "api 🧾 sbom | dev ",
3637
- },
3638
- {
3639
- "artifacts": false,
3640
- "job": "api 🛡 audit",
3641
- },
3642
- ],
3643
- "retry": {
3644
- "max": 2,
3645
- "when": [
3646
- "runner_system_failure",
3647
- "stuck_or_timeout_failure",
3648
- ],
3649
- },
3650
- "rules": [
3651
- {
3652
- "when": "on_success",
3653
- },
3654
- ],
3655
- "script": [
3656
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
3657
- "export ENV_SHORT="dev"",
3658
- "export APP_DIR="api"",
3659
- "export ENV_TYPE="dev"",
3660
- "export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
3661
- "export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
3662
- "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")"",
3663
- "export HOST="$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
3664
- "export ROOT_URL="https://$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
3665
- "export HOST_INTERNAL="$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
3666
- "export HOST_CANONICAL="$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
3667
- "export ROOT_URL_INTERNAL="https://$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
3668
- "export DEPLOY_CLOUD_RUN_PROJECT_ID="asdf"",
3669
- "export DEPLOY_CLOUD_RUN_REGION="asia-east1"",
3670
- "export GCLOUD_DEPLOY_credentialsKey="$CL_dev_api_GCLOUD_DEPLOY_credentialsKey"",
3671
- "export GCLOUD_RUN_canonicalHostSuffix="$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix"",
3672
- "export foo="foo-value"",
3673
- "export multiline="line1
3674
- line2
3675
- line3
3676
-
3677
- single quote: '
3678
- doouble quote: \\"
3679
- "",
3680
- "export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOST\\",\\"ROOT_URL\\",\\"HOST_INTERNAL\\",\\"HOST_CANONICAL\\",\\"ROOT_URL_INTERNAL\\",\\"DEPLOY_CLOUD_RUN_PROJECT_ID\\",\\"DEPLOY_CLOUD_RUN_REGION\\",\\"GCLOUD_DEPLOY_credentialsKey\\",\\"GCLOUD_RUN_canonicalHostSuffix\\",\\"foo\\",\\"multiline\\"]"",
3681
- "export DOCKER_REGISTRY="asia-east1-docker.pkg.dev"",
3682
- "export DOCKER_IMAGE="asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/dev/api"",
3683
- "export DOCKER_CACHE_IMAGE="asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/caches/api"",
3684
- "export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"",
3685
- "export CLOUDSDK_CORE_DISABLE_PROMPTS="1"",
3686
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
3687
- "echo -e "\\e[0Ksection_start:$(date +%s):prepare[collapsed=true]\\r\\e[0KPrepare..."",
3688
- "gcloud auth activate-service-account --key-file=<(echo "$CL_dev_api_GCLOUD_DEPLOY_credentialsKey")",
3689
- "export GCLOUD_PROJECT_NUMBER=$(gcloud projects describe asdf --format="value(projectNumber)")",
3690
- "echo "GCLOUD_PROJECT_NUMBER: $GCLOUD_PROJECT_NUMBER"",
3691
- "echo -e "\\e[0Ksection_end:$(date +%s):prepare\\r\\e[0K"",
3692
- "echo -e "\\e[0Ksection_start:$(date +%s):writeenvvars[collapsed=true]\\r\\e[0KWrite env vars to file"",
3693
- "cat > ____envvars.yaml <<EOF
3694
- ENV_SHORT: |-
3695
- dev
3696
- APP_DIR: |-
3697
- api
3698
- ENV_TYPE: |-
3699
- dev
3700
- BUILD_INFO_BUILD_ID: |-
3701
- $(printf %s "$(git describe --tags 2>/dev/null || git rev-parse HEAD)" | sed 's/^/ /')
3702
- BUILD_INFO_BUILD_TIME: |-
3703
- $(printf %s "$CI_JOB_STARTED_AT" | sed 's/^/ /')
3704
- BUILD_INFO_CURRENT_VERSION: |-
3705
- $(printf %s "$(tag=$(git ls-remote origin "refs/tags/v*[0-9]" 2>/dev/null | cut -f 2- | sort -V | tail -1 | sed 's/refs\\/tags\\/v//'); [ -z "$tag" ] && echo "0.0.0" || echo "$tag")" | sed 's/^/ /')
3706
- HOST: |-
3707
- $(printf %s "$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
3708
- ROOT_URL: |-
3709
- $(printf %s "https://$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
3710
- HOST_INTERNAL: |-
3711
- $(printf %s "$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
3712
- HOST_CANONICAL: |-
3713
- $(printf %s "$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
3714
- ROOT_URL_INTERNAL: |-
3715
- $(printf %s "https://$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
3716
- DEPLOY_CLOUD_RUN_PROJECT_ID: |-
3717
- asdf
3718
- DEPLOY_CLOUD_RUN_REGION: |-
3719
- asia-east1
3720
- GCLOUD_RUN_canonicalHostSuffix: |-
3721
- $(printf %s "$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | sed 's/^/ /')
3722
- foo: |-
3723
- foo-value
3724
- multiline: |
3725
- line1
3726
- line2
3727
- line3
3728
-
3729
- single quote: '
3730
- doouble quote: "
3731
- _ALL_ENV_VAR_KEYS: |-
3732
- ["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","HOST_INTERNAL","HOST_CANONICAL","ROOT_URL_INTERNAL","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix","foo","multiline"]
3733
-
3734
- EOF
3735
- ",
3736
- "echo -e "\\e[0Ksection_end:$(date +%s):writeenvvars\\r\\e[0K"",
3737
- "echo -e "\\e[0Ksection_start:$(date +%s):deploy[collapsed=true]\\r\\e[0KDeploy to cloud run"",
3738
- "gcloud run deploy pan-test-app-dev-api --command="yarn,start" --image=asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/dev/api:$DOCKER_IMAGE_TAG --project=asdf --region=asia-east1 --labels=customer-name=pan,component-name=api,app-name=test-app,env-type=dev,env-name=dev,build-type=node,cloud-run-service-name=pan-test-app-dev-api --env-vars-file=____envvars.yaml --min-instances=0 --max-instances=100 --cpu-throttling --allow-unauthenticated --ingress=all --cpu-boost",
3739
- "echo -e "\\e[0Ksection_end:$(date +%s):deploy\\r\\e[0K"",
3740
- "echo -e "\\e[0Ksection_start:$(date +%s):cleanup[collapsed=true]\\r\\e[0KCleanup"",
3741
- "gcloud run revisions list --project=asdf --region=asia-east1 --service=pan-test-app-dev-api --limit=unlimited --sort-by=metadata.creationTimestamp --format="value(name)" --filter='(status.conditions.status=False OR status.conditions.status=Unknown)' | while read -r revisionname; do gcloud run revisions delete --project=asdf --region=asia-east1 --quiet $revisionname ; done",
3742
- "gcloud artifacts docker images list asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/dev/api --sort-by=~CREATE_TIME --format="value(version)" | tail -n +2 | while read -r version; do gcloud artifacts docker images delete asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/dev/api@$version --quiet --delete-tags; done",
3743
- "gcloud artifacts docker images list asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/caches/api --sort-by=~CREATE_TIME --format="value(version)" | tail -n +2 | while read -r version; do gcloud artifacts docker images delete asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/caches/api@$version --quiet --delete-tags; done",
3744
- "echo -e "\\e[0Ksection_end:$(date +%s):cleanup\\r\\e[0K"",
3745
- "echo 'Uploading SBOM to Dependency Track'",
3746
- "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/api" "https://$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" "__sbom.json" vex.json || true",
3747
- "echo "CL_GITLAB_ENVIRONMENT_URL=https://$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" >> gitlab_environment.env",
3748
- ],
3749
- "stage": "deploy dev",
3750
- "variables": {
3751
- "KUBERNETES_CPU_REQUEST": "0.22",
3752
- "KUBERNETES_MEMORY_LIMIT": "400Mi",
3753
- "KUBERNETES_MEMORY_REQUEST": "200Mi",
3754
- },
3755
- },
3756
- "api 🛑 Stop ⚠️ | dev ": {
3757
- "allow_failure": true,
3758
- "artifacts": {
3759
- "reports": {
3760
- "dotenv": "gitlab_environment.env",
3761
- },
3762
- },
3763
- "environment": {
3764
- "action": "stop",
3765
- "name": "dev/api",
3766
- "url": "$CL_GITLAB_ENVIRONMENT_URL",
3767
- },
3768
- "image": "path/to/docker/gcloud:the-version",
3769
- "interruptible": true,
3770
- "needs": [],
3771
- "retry": {
3772
- "max": 2,
3773
- "when": [
3774
- "runner_system_failure",
3775
- "stuck_or_timeout_failure",
3776
- ],
3777
- },
3778
- "rules": [
3779
- {
3780
- "if": "$CI_COMMIT_BRANCH =~ /^[0-9]+\\.([0-9]+|x)\\.x$/",
3781
- "when": "on_success",
3782
- },
3783
- {
3784
- "when": "manual",
3785
- },
3786
- ],
3787
- "script": [
3788
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
3789
- "export CLOUDSDK_CORE_DISABLE_PROMPTS="1"",
3790
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
3791
- "set +e",
3792
- "gcloud auth activate-service-account --key-file=<(echo "$CL_dev_api_GCLOUD_DEPLOY_credentialsKey")",
3793
- "gcloud run services delete pan-test-app-dev-api --project=asdf --region=asia-east1",
3794
- "gcloud artifacts docker images delete asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/dev/api --quiet --delete-tags",
3795
- "gcloud artifacts docker images list asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/caches/api --sort-by=~CREATE_TIME --format="value(version)" | tail -n +2 | while read -r version; do gcloud artifacts docker images delete asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/caches/api@$version --quiet --delete-tags; done",
3796
- "echo 'Disabling component in Dependency Track'",
3797
- "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" disable "pan-test-app/api" "https://$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" || true",
3798
- "set -e",
3799
- "echo "CL_GITLAB_ENVIRONMENT_URL=https://$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" >> gitlab_environment.env",
3800
- ],
3801
- "stage": "stop dev",
3802
- "variables": {
3803
- "GIT_STRATEGY": "none",
3804
- "KUBERNETES_CPU_REQUEST": "0.22",
3805
- "KUBERNETES_MEMORY_LIMIT": "400Mi",
3806
- "KUBERNETES_MEMORY_REQUEST": "200Mi",
3807
- },
3808
- },
3809
- "api 🛡 audit": {
3810
- "allow_failure": true,
3811
- "image": "path/to/docker/jobs-default:the-version",
3812
- "interruptible": true,
3813
- "needs": [],
3814
- "retry": {
3815
- "max": 2,
3816
- "when": [
3817
- "runner_system_failure",
3818
- "stuck_or_timeout_failure",
3819
- ],
3820
- },
3821
- "script": [
3822
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
3823
- "export APP_PATH="api"",
3824
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
3825
- "cd api",
3826
- "yarn npm audit --environment production",
3827
- ],
3828
- "stage": "test",
3829
- "variables": {
3830
- "KUBERNETES_CPU_REQUEST": "0.45",
3831
- "KUBERNETES_MEMORY_LIMIT": "4Gi",
3832
- "KUBERNETES_MEMORY_REQUEST": "1Gi",
3833
- },
3834
- },
3835
- "api 🧪 test": {
3836
- "cache": [
3837
- {
3838
- "key": "api-yarn",
3839
- "paths": [
3840
- "api/.yarn",
3841
- ],
3842
- "policy": "pull-push",
3843
- },
3844
- {
3845
- "key": "api-node-modules",
3846
- "paths": [
3847
- "api/node_modules",
3848
- ],
3849
- "policy": "pull-push",
3850
- },
3851
- ],
3852
- "image": "path/to/docker/jobs-testing-chrome:the-version",
3853
- "interruptible": true,
3854
- "needs": [],
3855
- "retry": {
3856
- "max": 2,
3857
- "when": [
3858
- "runner_system_failure",
3859
- "stuck_or_timeout_failure",
3860
- ],
3861
- },
3862
- "script": [
3863
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
3864
- "export APP_PATH="api"",
3865
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
3866
- "echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"",
3867
- "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
3868
- "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
3869
- "echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"",
3870
- "cd api",
3871
- "echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"",
3872
- "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
3873
- "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
3874
- "echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"",
3875
- "echo -e "\\e[0Ksection_start:$(date +%s):yarninstall[collapsed=true]\\r\\e[0KYarn install"",
3876
- "yarn install --immutable",
3877
- "echo -e "\\e[0Ksection_end:$(date +%s):yarninstall\\r\\e[0K"",
3878
- "yarn test",
3879
- ],
3880
- "stage": "test",
3881
- "variables": {
3882
- "KUBERNETES_CPU_REQUEST": "0.45",
3883
- "KUBERNETES_MEMORY_LIMIT": "4Gi",
3884
- "KUBERNETES_MEMORY_REQUEST": "1Gi",
3885
- },
3886
- },
3887
- "api 🧾 sbom | dev ": {
3888
- "allow_failure": true,
3889
- "artifacts": {
3890
- "paths": [
3891
- "__sbom.json",
3892
- ],
3893
- },
3894
- "image": "aquasec/trivy:0.38.3",
3895
- "interruptible": true,
3896
- "needs": [],
3897
- "retry": {
3898
- "max": 2,
3899
- "when": [
3900
- "runner_system_failure",
3901
- "stuck_or_timeout_failure",
3902
- ],
3903
- },
3904
- "script": [
3905
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
3906
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
3907
- "trivy fs --quiet --format cyclonedx --output "__sbom.json" api",
3908
- ],
3909
- "stage": "build",
3910
- "variables": {},
3911
- },
3912
- "api2 ↩️ Rollback ⚠️ | dev ": {
3913
- "allow_failure": true,
3914
- "artifacts": {
3915
- "reports": {
3916
- "dotenv": "gitlab_environment.env",
3917
- },
3918
- },
3919
- "environment": {
3920
- "action": "access",
3921
- "name": "dev/api2",
3922
- "url": "$CL_GITLAB_ENVIRONMENT_URL",
3923
- },
3924
- "image": "path/to/docker/kubernetes:the-version",
3925
- "interruptible": true,
3926
- "needs": [],
3927
- "retry": {
3928
- "max": 2,
3929
- "when": [
3930
- "runner_system_failure",
3931
- "stuck_or_timeout_failure",
3932
- ],
3933
- },
3934
- "rules": [
3935
- {
3936
- "when": "manual",
3937
- },
3938
- ],
3939
- "script": [
3940
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
3941
- "export ENV_SHORT="dev"",
3942
- "export APP_DIR="api"",
3943
- "export ENV_TYPE="dev"",
3944
- "export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
3945
- "export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
3946
- "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")"",
3947
- "export HOST="api2.dev.test-app.pan.panter.cloud"",
3948
- "export ROOT_URL="https://api2.dev.test-app.pan.panter.cloud"",
3949
- "export HOST_INTERNAL="api2.dev.test-app.pan.panter.cloud"",
3950
- "export HOST_CANONICAL="api2.dev.test-app.pan.panter.cloud"",
3951
- "export ROOT_URL_INTERNAL="https://api2.dev.test-app.pan.panter.cloud"",
3952
- "export KUBE_NAMESPACE="pan-test-app-dev"",
3953
- "export KUBE_APP_NAME="api2"",
3954
- "export KUBE_APP_NAME_PREFIX=""",
3955
- "export multiline_from_api="line1
3956
- line2
3957
- line3
3958
-
3959
- single quote: '
3960
- doouble quote: \\"
3961
- "",
3962
- "export multiline2="yeah
3963
- yeah2
3964
- yeah3
3965
-
3966
- single quote: '
3967
- doouble quote: \\"
3968
- "",
3969
- "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\\",\\"KUBE_NAMESPACE\\",\\"KUBE_APP_NAME\\",\\"KUBE_APP_NAME_PREFIX\\",\\"multiline_from_api\\",\\"multiline2\\"]"",
3970
- "export RELEASE_NAME="pan-test-app-dev-api2"",
3971
- "export HELM_EXPERIMENTAL_OCI="1"",
3972
- "export KUBE_DOCKER_IMAGE_PULL_SECRET="gitlab-registry-api2"",
3973
- "export HELM_GITLAB_CHART_NAME="/helm-charts/the-panter-chart"",
3974
- "export HELM_ARGS=""",
3975
- "export COMPONENT_NAME="api2"",
3976
- "export BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
3977
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
3978
- "kubectl config set-cluster "kube-pan-test-app-dev-api2" --server="$CL_dev_api2_KUBE_URL" --certificate-authority <(echo $CL_dev_api2_KUBE_CA_PEM | base64 -d) --embed-certs=true",
3979
- "kubectl config set-credentials "kube-pan-test-app-dev-api2" --token="$CL_dev_api2_KUBE_TOKEN"",
3980
- "kubectl config set-context "kube-pan-test-app-dev-api2" --cluster="kube-pan-test-app-dev-api2" --user="kube-pan-test-app-dev-api2" --namespace="pan-test-app-dev"",
3981
- "kubectl config use-context "kube-pan-test-app-dev-api2"",
3982
- "kubernetesRollback",
3983
- "echo "CL_GITLAB_ENVIRONMENT_URL=https://api2.dev.test-app.pan.panter.cloud" >> gitlab_environment.env",
3984
- ],
3985
- "stage": "rollback dev",
3986
- "variables": {
3987
- "GIT_STRATEGY": "none",
3988
- "KUBERNETES_CPU_REQUEST": "0.22",
3989
- "KUBERNETES_MEMORY_LIMIT": "400Mi",
3990
- "KUBERNETES_MEMORY_REQUEST": "200Mi",
3991
- },
3992
- },
3993
- "api2 👮 lint": {
3994
- "cache": [
3995
- {
3996
- "key": "api-yarn",
3997
- "paths": [
3998
- "api/.yarn",
3999
- ],
4000
- "policy": "pull-push",
4001
- },
4002
- {
4003
- "key": "api-node-modules",
4004
- "paths": [
4005
- "api/node_modules",
4006
- ],
4007
- "policy": "pull-push",
4008
- },
4009
- ],
4010
- "image": "path/to/docker/jobs-default:the-version",
4011
- "interruptible": true,
4012
- "needs": [],
4013
- "retry": {
4014
- "max": 2,
4015
- "when": [
4016
- "runner_system_failure",
4017
- "stuck_or_timeout_failure",
4018
- ],
4019
- },
4020
- "script": [
4021
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
4022
- "export APP_PATH="api"",
4023
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
4024
- "echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"",
4025
- "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
4026
- "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
4027
- "echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"",
4028
- "cd api",
4029
- "echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"",
4030
- "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
4031
- "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
4032
- "echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"",
4033
- "echo -e "\\e[0Ksection_start:$(date +%s):yarninstall[collapsed=true]\\r\\e[0KYarn install"",
4034
- "yarn install --immutable",
4035
- "echo -e "\\e[0Ksection_end:$(date +%s):yarninstall\\r\\e[0K"",
4036
- "yarn lint",
4037
- ],
4038
- "stage": "test",
4039
- "variables": {
4040
- "KUBERNETES_CPU_REQUEST": "0.45",
4041
- "KUBERNETES_MEMORY_LIMIT": "4Gi",
4042
- "KUBERNETES_MEMORY_REQUEST": "1Gi",
4043
- },
4044
- },
4045
- "api2 🔨 app | dev ": {
4046
- "artifacts": {
4047
- "expire_in": "1 day",
4048
- "paths": [
4049
- "api/__build_info.json",
4050
- "api/.next",
4051
- "api/dist",
4052
- ],
4053
- "reports": {
4054
- "junit": undefined,
4055
- },
4056
- "when": "always",
4057
- },
4058
- "cache": [
4059
- {
4060
- "key": "api-yarn",
4061
- "paths": [
4062
- "api/.yarn",
4063
- ],
4064
- "policy": "pull-push",
4065
- },
4066
- {
4067
- "key": "api-node-modules",
4068
- "paths": [
4069
- "api/node_modules",
4070
- ],
4071
- "policy": "pull-push",
4072
- },
4073
- {
4074
- "key": "api2-next-cache",
4075
- "paths": [
4076
- "api/.next/cache",
4077
- ],
4078
- "policy": "pull-push",
4079
- },
4080
- ],
4081
- "image": "path/to/docker/jobs-default:the-version",
4082
- "interruptible": true,
4083
- "needs": [],
4084
- "retry": {
4085
- "max": 2,
4086
- "when": [
4087
- "runner_system_failure",
4088
- "stuck_or_timeout_failure",
4089
- ],
4090
- },
4091
- "script": [
4092
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
4093
- "export ENV_SHORT="dev"",
4094
- "export APP_DIR="api"",
4095
- "export ENV_TYPE="dev"",
4096
- "export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
4097
- "export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
4098
- "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")"",
4099
- "export HOST="api2.dev.test-app.pan.panter.cloud"",
4100
- "export ROOT_URL="https://api2.dev.test-app.pan.panter.cloud"",
4101
- "export HOST_INTERNAL="api2.dev.test-app.pan.panter.cloud"",
4102
- "export HOST_CANONICAL="api2.dev.test-app.pan.panter.cloud"",
4103
- "export ROOT_URL_INTERNAL="https://api2.dev.test-app.pan.panter.cloud"",
4104
- "export KUBE_NAMESPACE="pan-test-app-dev"",
4105
- "export KUBE_APP_NAME="api2"",
4106
- "export KUBE_APP_NAME_PREFIX=""",
4107
- "export multiline_from_api="line1
4108
- line2
4109
- line3
4110
-
4111
- single quote: '
4112
- doouble quote: \\"
4113
- "",
4114
- "export multiline2="yeah
4115
- yeah2
4116
- yeah3
4117
-
4118
- single quote: '
4119
- doouble quote: \\"
4120
- "",
4121
- "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\\",\\"KUBE_NAMESPACE\\",\\"KUBE_APP_NAME\\",\\"KUBE_APP_NAME_PREFIX\\",\\"multiline_from_api\\",\\"multiline2\\"]"",
4122
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
4123
- "echo '{"id":"$(git describe --tags 2>/dev/null || git rev-parse HEAD)","time":"$CI_JOB_STARTED_AT"}' > api/__build_info.json",
4124
- "echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"",
4125
- "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
4126
- "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
4127
- "echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"",
4128
- "cd api",
4129
- "echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"",
4130
- "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
4131
- "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
4132
- "echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"",
4133
- "echo -e "\\e[0Ksection_start:$(date +%s):yarninstall[collapsed=true]\\r\\e[0KYarn install"",
4134
- "yarn install --immutable",
4135
- "echo -e "\\e[0Ksection_end:$(date +%s):yarninstall\\r\\e[0K"",
4136
- "yarn build",
4137
- ],
4138
- "stage": "build",
4139
- "variables": {
4140
- "KUBERNETES_CPU_REQUEST": "0.45",
4141
- "KUBERNETES_MEMORY_LIMIT": "4Gi",
4142
- "KUBERNETES_MEMORY_REQUEST": "1Gi",
4143
- },
4144
- },
4145
- "api2 🔨 docker | dev ": {
4146
- "cache": [
4147
- {
4148
- "key": "api-yarn",
4149
- "paths": [
4150
- "api/.yarn",
4151
- ],
4152
- "policy": "pull",
4153
- },
4154
- ],
4155
- "image": "path/to/docker/docker-build:the-version",
4156
- "interruptible": true,
4157
- "needs": [
4158
- "api2 🔨 app | dev ",
4159
- ],
4160
- "retry": {
4161
- "max": 2,
4162
- "when": [
4163
- "runner_system_failure",
4164
- "stuck_or_timeout_failure",
4165
- ],
4166
- },
4167
- "script": [
4168
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
4169
- "export APP_DIR="api"",
4170
- "export DOCKER_BUILD_CONTEXT="."",
4171
- "export DOCKER_REGISTRY="$CI_REGISTRY"",
4172
- "export DOCKER_CACHE_IMAGE="$CI_REGISTRY_IMAGE/caches/api2"",
4173
- "export DOCKER_IMAGE_NAME="dev/api2"",
4174
- "export DOCKER_IMAGE="$CI_REGISTRY_IMAGE/$DOCKER_IMAGE_NAME"",
4175
- "export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"",
4176
- "export DOCKER_COPY_AND_INSTALL_APP="COPY --chown=node:node $APP_DIR .
4177
- RUN yarn plugin import workspace-tools
4178
- RUN yarn workspaces focus --production && yarn rebuild"",
4179
- "export DOCKER_COPY_WORKSPACE_FILES="COPY --chown=node:node api/package.json /app/api/package.json
4180
- COPY --chown=node:node api/yarn.lock /app/api/yarn.lock
4181
- COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
4182
- COPY --chown=node:node .yarn /app/.yarn"",
4183
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
4184
- "ensureNodeDockerfile",
4185
- "echo -e "\\e[0Ksection_start:$(date +%s):docker-login[collapsed=true]\\r\\e[0KDocker Login"",
4186
- "docker login --username gitlab-ci-token --password $CI_JOB_TOKEN $CI_REGISTRY",
4187
- "echo -e "\\e[0Ksection_end:$(date +%s):docker-login\\r\\e[0K"",
4188
- "echo -e "\\e[0Ksection_start:$(date +%s):docker-build[collapsed=true]\\r\\e[0KDocker build"",
4189
- "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",
4190
- "echo -e "\\e[0Ksection_end:$(date +%s):docker-build\\r\\e[0K"",
4191
- "echo -e "\\e[0Ksection_start:$(date +%s):docker-push[collapsed=true]\\r\\e[0KDocker push and tag"",
4192
- "docker push $DOCKER_IMAGE:$DOCKER_IMAGE_TAG",
4193
- "docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG $DOCKER_CACHE_IMAGE",
4194
- "docker push $DOCKER_CACHE_IMAGE",
4195
- "echo -e "\\e[0Ksection_end:$(date +%s):docker-push\\r\\e[0K"",
4196
- ],
4197
- "services": [
4198
- {
4199
- "command": [
4200
- "--tls=false",
4201
- ],
4202
- "name": "docker:24.0.6-dind",
4203
- },
4204
- ],
4205
- "stage": "build",
4206
- "variables": {
4207
- "DOCKER_BUILDKIT": "1",
4208
- "DOCKER_DRIVER": "overlay2",
4209
- "DOCKER_HOST": "tcp://0.0.0.0:2375",
4210
- "DOCKER_TLS_CERTDIR": "",
4211
- "KUBERNETES_CPU_REQUEST": "0.45",
4212
- "KUBERNETES_MEMORY_LIMIT": "2Gi",
4213
- "KUBERNETES_MEMORY_REQUEST": "1Gi",
4214
- },
4215
- },
4216
- "api2 🚀 Deploy | dev ": {
4217
- "allow_failure": false,
4218
- "artifacts": {
4219
- "reports": {
4220
- "dotenv": "gitlab_environment.env",
4221
- },
4222
- },
4223
- "environment": {
4224
- "auto_stop_in": "4 weeks",
4225
- "name": "dev/api2",
4226
- "on_stop": "api2 🛑 Stop ⚠️ | dev ",
4227
- "url": "$CL_GITLAB_ENVIRONMENT_URL",
4228
- },
4229
- "image": "path/to/docker/kubernetes:the-version",
4230
- "interruptible": true,
4231
- "needs": [
4232
- {
4233
- "artifacts": false,
4234
- "job": "api2 👮 lint",
4235
- },
4236
- {
4237
- "artifacts": false,
4238
- "job": "api2 🔨 app | dev ",
4239
- },
4240
- {
4241
- "artifacts": false,
4242
- "job": "api2 🔨 docker | dev ",
4243
- },
4244
- {
4245
- "artifacts": false,
4246
- "job": "api2 🧪 test",
4247
- },
4248
- {
4249
- "artifacts": true,
4250
- "job": "api2 🧾 sbom | dev ",
4251
- },
4252
- {
4253
- "artifacts": false,
4254
- "job": "api2 🛡 audit",
4255
- },
4256
- ],
4257
- "retry": {
4258
- "max": 2,
4259
- "when": [
4260
- "runner_system_failure",
4261
- "stuck_or_timeout_failure",
4262
- ],
4263
- },
4264
- "rules": [
4265
- {
4266
- "when": "on_success",
4267
- },
4268
- ],
4269
- "script": [
4270
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
4271
- "export ENV_SHORT="dev"",
4272
- "export APP_DIR="api"",
4273
- "export ENV_TYPE="dev"",
4274
- "export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
4275
- "export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
4276
- "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")"",
4277
- "export HOST="api2.dev.test-app.pan.panter.cloud"",
4278
- "export ROOT_URL="https://api2.dev.test-app.pan.panter.cloud"",
4279
- "export HOST_INTERNAL="api2.dev.test-app.pan.panter.cloud"",
4280
- "export HOST_CANONICAL="api2.dev.test-app.pan.panter.cloud"",
4281
- "export ROOT_URL_INTERNAL="https://api2.dev.test-app.pan.panter.cloud"",
4282
- "export KUBE_NAMESPACE="pan-test-app-dev"",
4283
- "export KUBE_APP_NAME="api2"",
4284
- "export KUBE_APP_NAME_PREFIX=""",
4285
- "export multiline_from_api="line1
4286
- line2
4287
- line3
4288
-
4289
- single quote: '
4290
- doouble quote: \\"
4291
- "",
4292
- "export multiline2="yeah
4293
- yeah2
4294
- yeah3
4295
-
4296
- single quote: '
4297
- doouble quote: \\"
4298
- "",
4299
- "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\\",\\"KUBE_NAMESPACE\\",\\"KUBE_APP_NAME\\",\\"KUBE_APP_NAME_PREFIX\\",\\"multiline_from_api\\",\\"multiline2\\"]"",
4300
- "export DOCKER_REGISTRY="$CI_REGISTRY"",
4301
- "export DOCKER_CACHE_IMAGE="$CI_REGISTRY_IMAGE/caches/api2"",
4302
- "export DOCKER_IMAGE_NAME="dev/api2"",
4303
- "export DOCKER_IMAGE="$CI_REGISTRY_IMAGE/$DOCKER_IMAGE_NAME"",
4304
- "export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"",
4305
- "export RELEASE_NAME="pan-test-app-dev-api2"",
4306
- "export HELM_EXPERIMENTAL_OCI="1"",
4307
- "export KUBE_DOCKER_IMAGE_PULL_SECRET="gitlab-registry-api2"",
4308
- "export HELM_GITLAB_CHART_NAME="/helm-charts/the-panter-chart"",
4309
- "export HELM_ARGS=""",
4310
- "export COMPONENT_NAME="api2"",
4311
- "export BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
4312
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
4313
- "kubectl config set-cluster "kube-pan-test-app-dev-api2" --server="$CL_dev_api2_KUBE_URL" --certificate-authority <(echo $CL_dev_api2_KUBE_CA_PEM | base64 -d) --embed-certs=true",
4314
- "kubectl config set-credentials "kube-pan-test-app-dev-api2" --token="$CL_dev_api2_KUBE_TOKEN"",
4315
- "kubectl config set-context "kube-pan-test-app-dev-api2" --cluster="kube-pan-test-app-dev-api2" --user="kube-pan-test-app-dev-api2" --namespace="pan-test-app-dev"",
4316
- "kubectl config use-context "kube-pan-test-app-dev-api2"",
4317
- "echo -e "\\e[0Ksection_start:$(date +%s):writeallvalues[collapsed=true]\\r\\e[0KWrite __all_values.yml for helm deployment"",
4318
- "cat > __all_values.yml <<EOF
4319
- env:
4320
- secret: {}
4321
- public:
4322
- ENV_SHORT: |-
4323
- dev
4324
- APP_DIR: |-
4325
- api
4326
- ENV_TYPE: |-
4327
- dev
4328
- BUILD_INFO_BUILD_ID: |-
4329
- $(printf %s "$(git describe --tags 2>/dev/null || git rev-parse HEAD)" | sed 's/^/ /')
4330
- BUILD_INFO_BUILD_TIME: |-
4331
- $(printf %s "$CI_JOB_STARTED_AT" | sed 's/^/ /')
4332
- BUILD_INFO_CURRENT_VERSION: |-
4333
- $(printf %s "$(tag=$(git ls-remote origin "refs/tags/v*[0-9]" 2>/dev/null | cut -f 2- | sort -V | tail -1 | sed 's/refs\\/tags\\/v//'); [ -z "$tag" ] && echo "0.0.0" || echo "$tag")" | sed 's/^/ /')
4334
- HOST: |-
4335
- api2.dev.test-app.pan.panter.cloud
4336
- ROOT_URL: |-
4337
- https://api2.dev.test-app.pan.panter.cloud
4338
- HOST_INTERNAL: |-
4339
- api2.dev.test-app.pan.panter.cloud
4340
- HOST_CANONICAL: |-
4341
- api2.dev.test-app.pan.panter.cloud
4342
- ROOT_URL_INTERNAL: |-
4343
- https://api2.dev.test-app.pan.panter.cloud
4344
- KUBE_NAMESPACE: |-
4345
- pan-test-app-dev
4346
- KUBE_APP_NAME: |-
4347
- api2
4348
- KUBE_APP_NAME_PREFIX: ""
4349
- multiline_from_api: |
4350
- line1
4351
- line2
4352
- line3
4353
-
4354
- single quote: '
4355
- doouble quote: "
4356
- multiline2: |
4357
- yeah
4358
- yeah2
4359
- yeah3
4360
-
4361
- single quote: '
4362
- doouble quote: "
4363
- _ALL_ENV_VAR_KEYS: |-
4364
- ["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","KUBE_NAMESPACE","KUBE_APP_NAME","KUBE_APP_NAME_PREFIX","multiline_from_api","multiline2"]
4365
- application:
4366
- host: |-
4367
- api2.dev.test-app.pan.panter.cloud
4368
- command: |-
4369
- yarn start
4370
- livenessProbe:
4371
- httpGet:
4372
- path: |-
4373
- __health
4374
- readinessProbe:
4375
- httpGet:
4376
- path: |-
4377
- __health
4378
- startupProbe:
4379
- httpGet:
4380
- path: |-
4381
- __health
4382
-
4383
- EOF
4384
- ",
4385
- "echo -e "\\e[0Ksection_end:$(date +%s):writeallvalues\\r\\e[0K"",
4386
- "kubernetesCreateSecret",
4387
- "kubernetesDeploy",
4388
- "echo 'Uploading SBOM to Dependency Track'",
4389
- "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/api2" "https://api2.dev.test-app.pan.panter.cloud" "__sbom.json" vex.json || true",
4390
- "echo deployment successful 😻",
4391
- "echo "CL_GITLAB_ENVIRONMENT_URL=https://api2.dev.test-app.pan.panter.cloud" >> gitlab_environment.env",
4392
- ],
4393
- "stage": "deploy dev",
4394
- "variables": {
4395
- "KUBERNETES_CPU_REQUEST": "0.22",
4396
- "KUBERNETES_MEMORY_LIMIT": "400Mi",
4397
- "KUBERNETES_MEMORY_REQUEST": "200Mi",
4398
- },
4399
- },
4400
- "api2 🛑 Stop ⚠️ | dev ": {
4401
- "allow_failure": true,
4402
- "artifacts": {
4403
- "reports": {
4404
- "dotenv": "gitlab_environment.env",
4405
- },
4406
- },
4407
- "environment": {
4408
- "action": "stop",
4409
- "name": "dev/api2",
4410
- "url": "$CL_GITLAB_ENVIRONMENT_URL",
4411
- },
4412
- "image": "path/to/docker/kubernetes:the-version",
4413
- "interruptible": true,
4414
- "needs": [],
4415
- "retry": {
4416
- "max": 2,
4417
- "when": [
4418
- "runner_system_failure",
4419
- "stuck_or_timeout_failure",
4420
- ],
4421
- },
4422
- "rules": [
4423
- {
4424
- "if": "$CI_COMMIT_BRANCH =~ /^[0-9]+\\.([0-9]+|x)\\.x$/",
4425
- "when": "on_success",
4426
- },
4427
- {
4428
- "when": "manual",
4429
- },
4430
- ],
4431
- "script": [
4432
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
4433
- "export ENV_SHORT="dev"",
4434
- "export APP_DIR="api"",
4435
- "export ENV_TYPE="dev"",
4436
- "export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
4437
- "export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
4438
- "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")"",
4439
- "export HOST="api2.dev.test-app.pan.panter.cloud"",
4440
- "export ROOT_URL="https://api2.dev.test-app.pan.panter.cloud"",
4441
- "export HOST_INTERNAL="api2.dev.test-app.pan.panter.cloud"",
4442
- "export HOST_CANONICAL="api2.dev.test-app.pan.panter.cloud"",
4443
- "export ROOT_URL_INTERNAL="https://api2.dev.test-app.pan.panter.cloud"",
4444
- "export KUBE_NAMESPACE="pan-test-app-dev"",
4445
- "export KUBE_APP_NAME="api2"",
4446
- "export KUBE_APP_NAME_PREFIX=""",
4447
- "export multiline_from_api="line1
4448
- line2
4449
- line3
4450
-
4451
- single quote: '
4452
- doouble quote: \\"
4453
- "",
4454
- "export multiline2="yeah
4455
- yeah2
4456
- yeah3
4457
-
4458
- single quote: '
4459
- doouble quote: \\"
4460
- "",
4461
- "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\\",\\"KUBE_NAMESPACE\\",\\"KUBE_APP_NAME\\",\\"KUBE_APP_NAME_PREFIX\\",\\"multiline_from_api\\",\\"multiline2\\"]"",
4462
- "export RELEASE_NAME="pan-test-app-dev-api2"",
4463
- "export HELM_EXPERIMENTAL_OCI="1"",
4464
- "export KUBE_DOCKER_IMAGE_PULL_SECRET="gitlab-registry-api2"",
4465
- "export HELM_GITLAB_CHART_NAME="/helm-charts/the-panter-chart"",
4466
- "export HELM_ARGS=""",
4467
- "export COMPONENT_NAME="api2"",
4468
- "export BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
4469
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
4470
- "kubectl config set-cluster "kube-pan-test-app-dev-api2" --server="$CL_dev_api2_KUBE_URL" --certificate-authority <(echo $CL_dev_api2_KUBE_CA_PEM | base64 -d) --embed-certs=true",
4471
- "kubectl config set-credentials "kube-pan-test-app-dev-api2" --token="$CL_dev_api2_KUBE_TOKEN"",
4472
- "kubectl config set-context "kube-pan-test-app-dev-api2" --cluster="kube-pan-test-app-dev-api2" --user="kube-pan-test-app-dev-api2" --namespace="pan-test-app-dev"",
4473
- "kubectl config use-context "kube-pan-test-app-dev-api2"",
4474
- "kubernetesDelete",
4475
- "echo 'Disabling component in Dependency Track'",
4476
- "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" disable "pan-test-app/api2" "https://api2.dev.test-app.pan.panter.cloud" || true",
4477
- "echo "CL_GITLAB_ENVIRONMENT_URL=https://api2.dev.test-app.pan.panter.cloud" >> gitlab_environment.env",
4478
- ],
4479
- "stage": "stop dev",
4480
- "variables": {
4481
- "GIT_STRATEGY": "none",
4482
- "KUBERNETES_CPU_REQUEST": "0.22",
4483
- "KUBERNETES_MEMORY_LIMIT": "400Mi",
4484
- "KUBERNETES_MEMORY_REQUEST": "200Mi",
4485
- },
4486
- },
4487
- "api2 🛡 audit": {
4488
- "allow_failure": true,
4489
- "image": "path/to/docker/jobs-default:the-version",
4490
- "interruptible": true,
4491
- "needs": [],
4492
- "retry": {
4493
- "max": 2,
4494
- "when": [
4495
- "runner_system_failure",
4496
- "stuck_or_timeout_failure",
4497
- ],
4498
- },
4499
- "script": [
4500
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
4501
- "export APP_PATH="api"",
4502
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
4503
- "cd api",
4504
- "yarn npm audit --environment production",
4505
- ],
4506
- "stage": "test",
4507
- "variables": {
4508
- "KUBERNETES_CPU_REQUEST": "0.45",
4509
- "KUBERNETES_MEMORY_LIMIT": "4Gi",
4510
- "KUBERNETES_MEMORY_REQUEST": "1Gi",
4511
- },
4512
- },
4513
- "api2 🧪 test": {
4514
- "cache": [
4515
- {
4516
- "key": "api-yarn",
4517
- "paths": [
4518
- "api/.yarn",
4519
- ],
4520
- "policy": "pull-push",
4521
- },
4522
- {
4523
- "key": "api-node-modules",
4524
- "paths": [
4525
- "api/node_modules",
4526
- ],
4527
- "policy": "pull-push",
4528
- },
4529
- ],
4530
- "image": "path/to/docker/jobs-testing-chrome:the-version",
4531
- "interruptible": true,
4532
- "needs": [],
4533
- "retry": {
4534
- "max": 2,
4535
- "when": [
4536
- "runner_system_failure",
4537
- "stuck_or_timeout_failure",
4538
- ],
4539
- },
4540
- "script": [
4541
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
4542
- "export APP_PATH="api"",
4543
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
4544
- "echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"",
4545
- "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
4546
- "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
4547
- "echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"",
4548
- "cd api",
4549
- "echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"",
4550
- "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
4551
- "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
4552
- "echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"",
4553
- "echo -e "\\e[0Ksection_start:$(date +%s):yarninstall[collapsed=true]\\r\\e[0KYarn install"",
4554
- "yarn install --immutable",
4555
- "echo -e "\\e[0Ksection_end:$(date +%s):yarninstall\\r\\e[0K"",
4556
- "yarn test",
4557
- ],
4558
- "stage": "test",
4559
- "variables": {
4560
- "KUBERNETES_CPU_REQUEST": "0.45",
4561
- "KUBERNETES_MEMORY_LIMIT": "4Gi",
4562
- "KUBERNETES_MEMORY_REQUEST": "1Gi",
4563
- },
4564
- },
4565
- "api2 🧾 sbom | dev ": {
4566
- "allow_failure": true,
4567
- "artifacts": {
4568
- "paths": [
4569
- "__sbom.json",
4570
- ],
4571
- },
4572
- "image": "aquasec/trivy:0.38.3",
4573
- "interruptible": true,
4574
- "needs": [],
4575
- "retry": {
4576
- "max": 2,
4577
- "when": [
4578
- "runner_system_failure",
4579
- "stuck_or_timeout_failure",
4580
- ],
4581
- },
4582
- "script": [
4583
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
4584
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
4585
- "trivy fs --quiet --format cyclonedx --output "__sbom.json" api",
4586
- ],
4587
- "stage": "build",
4588
- "variables": {},
4589
- },
4590
- },
4591
- "stages": [
4592
- "setup",
4593
- "setup dev",
4594
- "setup review",
4595
- "setup stage",
4596
- "setup prod",
4597
- "test",
4598
- "test dev",
4599
- "test review",
4600
- "test stage",
4601
- "test prod",
4602
- "build",
4603
- "build dev",
4604
- "build review",
4605
- "build stage",
4606
- "build prod",
4607
- "deploy",
4608
- "deploy dev",
4609
- "deploy review",
4610
- "deploy stage",
4611
- "deploy prod",
4612
- "verify",
4613
- "verify dev",
4614
- "verify review",
4615
- "verify stage",
4616
- "verify prod",
4617
- "rollback",
4618
- "rollback dev",
4619
- "rollback review",
4620
- "rollback stage",
4621
- "rollback prod",
4622
- "stop",
4623
- "stop dev",
4624
- "stop review",
4625
- "stop stage",
4626
- "stop prod",
4627
- ],
4628
- "variables": {
4629
- "ARTIFACT_COMPRESSION_LEVEL": "fast",
4630
- "CACHE_COMPRESSION_LEVEL": "fast",
4631
- "FF_USE_FASTZIP": "true",
4632
- "GIT_DEPTH": "1",
4633
- "TRANSFER_METER_FREQUENCY": "5s",
4634
- },
4635
- "workflow": {
4636
- "rules": [
4637
- {
4638
- "if": "$CI_COMMIT_TAG",
4639
- },
4640
- {
4641
- "if": "$CI_COMMIT_MESSAGE =~ /^chore\\(release\\).*/",
4642
- "when": "never",
4643
- },
4644
- {
4645
- "if": "$CI_PIPELINE_SOURCE == "schedule"",
4646
- "when": "never",
4647
- },
4648
- {
4649
- "if": "$CI_COMMIT_BRANCH =~ /^[0-9]+.([0-9]+|x).x$/",
4650
- },
4651
- {
4652
- "if": "$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH",
4653
- },
4654
- {
4655
- "if": "$CI_MERGE_REQUEST_ID",
4656
- },
4657
- ],
4658
- },
4659
- },
4660
- "mr": {
4661
- "image": "path/to/docker/jobs-default:the-version",
4662
- "jobs": {
4663
- "api 👮 lint": {
4664
- "cache": [
4665
- {
4666
- "key": "api-yarn",
4667
- "paths": [
4668
- "api/.yarn",
4669
- ],
4670
- "policy": "pull-push",
4671
- },
4672
- {
4673
- "key": "api-node-modules",
4674
- "paths": [
4675
- "api/node_modules",
4676
- ],
4677
- "policy": "pull-push",
4678
- },
4679
- ],
4680
- "image": "path/to/docker/jobs-default:the-version",
4681
- "interruptible": true,
4682
- "needs": [],
4683
- "retry": {
4684
- "max": 2,
4685
- "when": [
4686
- "runner_system_failure",
4687
- "stuck_or_timeout_failure",
4688
- ],
4689
- },
4690
- "script": [
4691
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
4692
- "export APP_PATH="api"",
4693
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
4694
- "echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"",
4695
- "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
4696
- "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
4697
- "echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"",
4698
- "cd api",
4699
- "echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"",
4700
- "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
4701
- "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
4702
- "echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"",
4703
- "echo -e "\\e[0Ksection_start:$(date +%s):yarninstall[collapsed=true]\\r\\e[0KYarn install"",
4704
- "yarn install --immutable",
4705
- "echo -e "\\e[0Ksection_end:$(date +%s):yarninstall\\r\\e[0K"",
4706
- "yarn lint",
4707
- ],
4708
- "stage": "test",
4709
- "variables": {
4710
- "KUBERNETES_CPU_REQUEST": "0.45",
4711
- "KUBERNETES_MEMORY_LIMIT": "4Gi",
4712
- "KUBERNETES_MEMORY_REQUEST": "1Gi",
4713
- },
4714
- },
4715
- "api 🔨 app | review ": {
4716
- "artifacts": {
4717
- "expire_in": "1 day",
4718
- "paths": [
4719
- "api/__build_info.json",
4720
- "api/.next",
4721
- "api/dist",
4722
- ],
4723
- "reports": {
4724
- "junit": undefined,
4725
- },
4726
- "when": "always",
4727
- },
4728
- "cache": [
4729
- {
4730
- "key": "api-yarn",
4731
- "paths": [
4732
- "api/.yarn",
4733
- ],
4734
- "policy": "pull-push",
4735
- },
4736
- {
4737
- "key": "api-node-modules",
4738
- "paths": [
4739
- "api/node_modules",
4740
- ],
4741
- "policy": "pull-push",
4742
- },
4743
- {
4744
- "key": "api-next-cache",
4745
- "paths": [
4746
- "api/.next/cache",
4747
- ],
4748
- "policy": "pull-push",
4749
- },
4750
- ],
4751
- "image": "path/to/docker/jobs-default:the-version",
4752
- "interruptible": true,
4753
- "needs": [],
4754
- "retry": {
4755
- "max": 2,
4756
- "when": [
4757
- "runner_system_failure",
4758
- "stuck_or_timeout_failure",
4759
- ],
4760
- },
4761
- "script": [
4762
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
4763
- "export ENV_SHORT="review"",
4764
- "export APP_DIR="api"",
4765
- "export ENV_TYPE="review"",
4766
- "export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
4767
- "export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
4768
- "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")"",
4769
- "export HOST="$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api-$CL_review_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
4770
- "export ROOT_URL="https://$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api-$CL_review_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
4771
- "export HOST_INTERNAL="$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api-$CL_review_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
4772
- "export HOST_CANONICAL="$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api-$CL_review_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
4773
- "export ROOT_URL_INTERNAL="https://$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api-$CL_review_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
4774
- "export DEPLOY_CLOUD_RUN_PROJECT_ID="asdf"",
4775
- "export DEPLOY_CLOUD_RUN_REGION="asia-east1"",
4776
- "export GCLOUD_DEPLOY_credentialsKey="$CL_review_api_GCLOUD_DEPLOY_credentialsKey"",
4777
- "export GCLOUD_RUN_canonicalHostSuffix="$CL_review_api_GCLOUD_RUN_canonicalHostSuffix"",
4778
- "export foo="foo-value"",
4779
- "export multiline="line1
4780
- line2
4781
- line3
4782
-
4783
- single quote: '
4784
- doouble quote: \\"
4785
- "",
4786
- "export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOST\\",\\"ROOT_URL\\",\\"HOST_INTERNAL\\",\\"HOST_CANONICAL\\",\\"ROOT_URL_INTERNAL\\",\\"DEPLOY_CLOUD_RUN_PROJECT_ID\\",\\"DEPLOY_CLOUD_RUN_REGION\\",\\"GCLOUD_DEPLOY_credentialsKey\\",\\"GCLOUD_RUN_canonicalHostSuffix\\",\\"foo\\",\\"multiline\\"]"",
4787
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
4788
- "echo '{"id":"$(git describe --tags 2>/dev/null || git rev-parse HEAD)","time":"$CI_JOB_STARTED_AT"}' > api/__build_info.json",
4789
- "echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"",
4790
- "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
4791
- "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
4792
- "echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"",
4793
- "cd api",
4794
- "echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"",
4795
- "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
4796
- "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
4797
- "echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"",
4798
- "echo -e "\\e[0Ksection_start:$(date +%s):yarninstall[collapsed=true]\\r\\e[0KYarn install"",
4799
- "yarn install --immutable",
4800
- "echo -e "\\e[0Ksection_end:$(date +%s):yarninstall\\r\\e[0K"",
4801
- "yarn build",
4802
- ],
4803
- "stage": "build",
4804
- "variables": {
4805
- "KUBERNETES_CPU_REQUEST": "0.45",
4806
- "KUBERNETES_MEMORY_LIMIT": "4Gi",
4807
- "KUBERNETES_MEMORY_REQUEST": "1Gi",
4808
- },
4809
- },
4810
- "api 🔨 docker | review ": {
4811
- "cache": [
4812
- {
4813
- "key": "api-yarn",
4814
- "paths": [
4815
- "api/.yarn",
4816
- ],
4817
- "policy": "pull",
4818
- },
4819
- ],
4820
- "image": "path/to/docker/docker-build:the-version",
4821
- "interruptible": true,
4822
- "needs": [
4823
- "api 🔨 app | review ",
4824
- ],
4825
- "retry": {
4826
- "max": 2,
4827
- "when": [
4828
- "runner_system_failure",
4829
- "stuck_or_timeout_failure",
4830
- ],
4831
- },
4832
- "script": [
4833
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
4834
- "export APP_DIR="api"",
4835
- "export DOCKER_BUILD_CONTEXT="."",
4836
- "export DOCKER_REGISTRY="asia-east1-docker.pkg.dev"",
4837
- "export DOCKER_IMAGE="asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/review/api/$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })"",
4838
- "export DOCKER_CACHE_IMAGE="asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/caches/api"",
4839
- "export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"",
4840
- "export DOCKER_COPY_AND_INSTALL_APP="COPY --chown=node:node $APP_DIR .
4841
- RUN yarn plugin import workspace-tools
4842
- RUN yarn workspaces focus --production && yarn rebuild"",
4843
- "export DOCKER_COPY_WORKSPACE_FILES="COPY --chown=node:node api/package.json /app/api/package.json
4844
- COPY --chown=node:node api/yarn.lock /app/api/yarn.lock
4845
- COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
4846
- COPY --chown=node:node .yarn /app/.yarn"",
4847
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
4848
- "ensureNodeDockerfile",
4849
- "echo -e "\\e[0Ksection_start:$(date +%s):docker-login[collapsed=true]\\r\\e[0KDocker Login"",
4850
- "gcloud auth activate-service-account --key-file=<(echo "$CL_review_api_GCLOUD_DEPLOY_credentialsKey")",
4851
- "gcloud auth configure-docker asia-east1-docker.pkg.dev",
4852
- "echo -e "\\e[0Ksection_end:$(date +%s):docker-login\\r\\e[0K"",
4853
- "echo -e "\\e[0Ksection_start:$(date +%s):docker-build[collapsed=true]\\r\\e[0KDocker build"",
4854
- "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",
4855
- "echo -e "\\e[0Ksection_end:$(date +%s):docker-build\\r\\e[0K"",
4856
- "echo -e "\\e[0Ksection_start:$(date +%s):docker-push[collapsed=true]\\r\\e[0KDocker push and tag"",
4857
- "docker push $DOCKER_IMAGE:$DOCKER_IMAGE_TAG",
4858
- "docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG $DOCKER_CACHE_IMAGE",
4859
- "docker push $DOCKER_CACHE_IMAGE",
4860
- "echo -e "\\e[0Ksection_end:$(date +%s):docker-push\\r\\e[0K"",
4861
- ],
4862
- "services": [
4863
- {
4864
- "command": [
4865
- "--tls=false",
4866
- ],
4867
- "name": "docker:24.0.6-dind",
4868
- },
4869
- ],
4870
- "stage": "build",
4871
- "variables": {
4872
- "DOCKER_BUILDKIT": "1",
4873
- "DOCKER_DRIVER": "overlay2",
4874
- "DOCKER_HOST": "tcp://0.0.0.0:2375",
4875
- "DOCKER_TLS_CERTDIR": "",
4876
- "KUBERNETES_CPU_REQUEST": "0.45",
4877
- "KUBERNETES_MEMORY_LIMIT": "2Gi",
4878
- "KUBERNETES_MEMORY_REQUEST": "1Gi",
4879
- },
4880
- },
4881
- "api 🚀 Deploy | review ": {
4882
- "allow_failure": false,
4883
- "artifacts": {
4884
- "reports": {
4885
- "dotenv": "gitlab_environment.env",
4886
- },
4887
- },
4888
- "environment": {
4889
- "auto_stop_in": "1 week",
4890
- "name": "review/$CI_COMMIT_REF_NAME/api",
4891
- "on_stop": "api 🛑 Stop ⚠️ | review ",
4892
- "url": "$CL_GITLAB_ENVIRONMENT_URL",
4893
- },
4894
- "image": "path/to/docker/gcloud:the-version",
4895
- "interruptible": true,
4896
- "needs": [
4897
- {
4898
- "artifacts": false,
4899
- "job": "api 👮 lint",
4900
- },
4901
- {
4902
- "artifacts": false,
4903
- "job": "api 🔨 app | review ",
4904
- },
4905
- {
4906
- "artifacts": false,
4907
- "job": "api 🔨 docker | review ",
4908
- },
4909
- {
4910
- "artifacts": false,
4911
- "job": "api 🧪 test",
4912
- },
4913
- {
4914
- "artifacts": true,
4915
- "job": "api 🧾 sbom | review ",
4916
- },
4917
- {
4918
- "artifacts": false,
4919
- "job": "api 🛡 audit",
4920
- },
4921
- ],
4922
- "retry": {
4923
- "max": 2,
4924
- "when": [
4925
- "runner_system_failure",
4926
- "stuck_or_timeout_failure",
4927
- ],
4928
- },
4929
- "rules": [
4930
- {
4931
- "when": "on_success",
4932
- },
4933
- ],
4934
- "script": [
4935
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
4936
- "export ENV_SHORT="review"",
4937
- "export APP_DIR="api"",
4938
- "export ENV_TYPE="review"",
4939
- "export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
4940
- "export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
4941
- "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")"",
4942
- "export HOST="$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api-$CL_review_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
4943
- "export ROOT_URL="https://$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api-$CL_review_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
4944
- "export HOST_INTERNAL="$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api-$CL_review_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
4945
- "export HOST_CANONICAL="$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api-$CL_review_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
4946
- "export ROOT_URL_INTERNAL="https://$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api-$CL_review_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
4947
- "export DEPLOY_CLOUD_RUN_PROJECT_ID="asdf"",
4948
- "export DEPLOY_CLOUD_RUN_REGION="asia-east1"",
4949
- "export GCLOUD_DEPLOY_credentialsKey="$CL_review_api_GCLOUD_DEPLOY_credentialsKey"",
4950
- "export GCLOUD_RUN_canonicalHostSuffix="$CL_review_api_GCLOUD_RUN_canonicalHostSuffix"",
4951
- "export foo="foo-value"",
4952
- "export multiline="line1
4953
- line2
4954
- line3
4955
-
4956
- single quote: '
4957
- doouble quote: \\"
4958
- "",
4959
- "export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOST\\",\\"ROOT_URL\\",\\"HOST_INTERNAL\\",\\"HOST_CANONICAL\\",\\"ROOT_URL_INTERNAL\\",\\"DEPLOY_CLOUD_RUN_PROJECT_ID\\",\\"DEPLOY_CLOUD_RUN_REGION\\",\\"GCLOUD_DEPLOY_credentialsKey\\",\\"GCLOUD_RUN_canonicalHostSuffix\\",\\"foo\\",\\"multiline\\"]"",
4960
- "export DOCKER_REGISTRY="asia-east1-docker.pkg.dev"",
4961
- "export DOCKER_IMAGE="asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/review/api/$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })"",
4962
- "export DOCKER_CACHE_IMAGE="asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/caches/api"",
4963
- "export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"",
4964
- "export CLOUDSDK_CORE_DISABLE_PROMPTS="1"",
4965
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
4966
- "echo -e "\\e[0Ksection_start:$(date +%s):prepare[collapsed=true]\\r\\e[0KPrepare..."",
4967
- "gcloud auth activate-service-account --key-file=<(echo "$CL_review_api_GCLOUD_DEPLOY_credentialsKey")",
4968
- "export GCLOUD_PROJECT_NUMBER=$(gcloud projects describe asdf --format="value(projectNumber)")",
4969
- "echo "GCLOUD_PROJECT_NUMBER: $GCLOUD_PROJECT_NUMBER"",
4970
- "echo -e "\\e[0Ksection_end:$(date +%s):prepare\\r\\e[0K"",
4971
- "echo -e "\\e[0Ksection_start:$(date +%s):writeenvvars[collapsed=true]\\r\\e[0KWrite env vars to file"",
4972
- "cat > ____envvars.yaml <<EOF
4973
- ENV_SHORT: |-
4974
- review
4975
- APP_DIR: |-
4976
- api
4977
- ENV_TYPE: |-
4978
- review
4979
- BUILD_INFO_BUILD_ID: |-
4980
- $(printf %s "$(git describe --tags 2>/dev/null || git rev-parse HEAD)" | sed 's/^/ /')
4981
- BUILD_INFO_BUILD_TIME: |-
4982
- $(printf %s "$CI_JOB_STARTED_AT" | sed 's/^/ /')
4983
- BUILD_INFO_CURRENT_VERSION: |-
4984
- $(printf %s "$(tag=$(git ls-remote origin "refs/tags/v*[0-9]" 2>/dev/null | cut -f 2- | sort -V | tail -1 | sed 's/refs\\/tags\\/v//'); [ -z "$tag" ] && echo "0.0.0" || echo "$tag")" | sed 's/^/ /')
4985
- HOST: |-
4986
- $(printf %s "$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api-$CL_review_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
4987
- ROOT_URL: |-
4988
- $(printf %s "https://$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api-$CL_review_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
4989
- HOST_INTERNAL: |-
4990
- $(printf %s "$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api-$CL_review_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
4991
- HOST_CANONICAL: |-
4992
- $(printf %s "$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api-$CL_review_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
4993
- ROOT_URL_INTERNAL: |-
4994
- $(printf %s "https://$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api-$CL_review_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
4995
- DEPLOY_CLOUD_RUN_PROJECT_ID: |-
4996
- asdf
4997
- DEPLOY_CLOUD_RUN_REGION: |-
4998
- asia-east1
4999
- GCLOUD_RUN_canonicalHostSuffix: |-
5000
- $(printf %s "$CL_review_api_GCLOUD_RUN_canonicalHostSuffix" | sed 's/^/ /')
5001
- foo: |-
5002
- foo-value
5003
- multiline: |
5004
- line1
5005
- line2
5006
- line3
5007
-
5008
- single quote: '
5009
- doouble quote: "
5010
- _ALL_ENV_VAR_KEYS: |-
5011
- ["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","HOST_INTERNAL","HOST_CANONICAL","ROOT_URL_INTERNAL","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix","foo","multiline"]
5012
-
5013
- EOF
5014
- ",
5015
- "echo -e "\\e[0Ksection_end:$(date +%s):writeenvvars\\r\\e[0K"",
5016
- "echo -e "\\e[0Ksection_start:$(date +%s):deploy[collapsed=true]\\r\\e[0KDeploy to cloud run"",
5017
- "gcloud run deploy $(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api" | awk '{print tolower($0)}') --command="yarn,start" --image=asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/review/api/$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }):$DOCKER_IMAGE_TAG --project=asdf --region=asia-east1 --labels=customer-name=pan,component-name=api,app-name=test-app,env-type=review,env-name=review,build-type=node,cloud-run-service-name=$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api" | awk '{print tolower($0)}') --env-vars-file=____envvars.yaml --min-instances=0 --max-instances=100 --cpu-throttling --allow-unauthenticated --ingress=all --cpu-boost",
5018
- "echo -e "\\e[0Ksection_end:$(date +%s):deploy\\r\\e[0K"",
5019
- "echo -e "\\e[0Ksection_start:$(date +%s):cleanup[collapsed=true]\\r\\e[0KCleanup"",
5020
- "gcloud run revisions list --project=asdf --region=asia-east1 --service=$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api" | awk '{print tolower($0)}') --limit=unlimited --sort-by=metadata.creationTimestamp --format="value(name)" --filter='(status.conditions.status=False OR status.conditions.status=Unknown)' | while read -r revisionname; do gcloud run revisions delete --project=asdf --region=asia-east1 --quiet $revisionname ; done",
5021
- "gcloud artifacts docker images list asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/review/api/$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }) --sort-by=~CREATE_TIME --format="value(version)" | tail -n +2 | while read -r version; do gcloud artifacts docker images delete asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/review/api/$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })@$version --quiet --delete-tags; done",
5022
- "gcloud artifacts docker images list asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/caches/api --sort-by=~CREATE_TIME --format="value(version)" | tail -n +2 | while read -r version; do gcloud artifacts docker images delete asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/caches/api@$version --quiet --delete-tags; done",
5023
- "set +e",
5024
- "gcloud artifacts docker images delete asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/review/api --quiet --delete-tags",
5025
- "set -e",
5026
- "echo -e "\\e[0Ksection_end:$(date +%s):cleanup\\r\\e[0K"",
5027
- "echo 'Uploading SBOM to Dependency Track'",
5028
- "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/api" "https://$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api-$CL_review_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" "__sbom.json" vex.json || true",
5029
- "echo "CL_GITLAB_ENVIRONMENT_URL=https://$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api-$CL_review_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" >> gitlab_environment.env",
5030
- ],
5031
- "stage": "deploy review",
5032
- "variables": {
5033
- "KUBERNETES_CPU_REQUEST": "0.22",
5034
- "KUBERNETES_MEMORY_LIMIT": "400Mi",
5035
- "KUBERNETES_MEMORY_REQUEST": "200Mi",
5036
- },
5037
- },
5038
- "api 🛑 Stop ⚠️ | review ": {
5039
- "allow_failure": true,
5040
- "artifacts": {
5041
- "reports": {
5042
- "dotenv": "gitlab_environment.env",
5043
- },
5044
- },
5045
- "environment": {
5046
- "action": "stop",
5047
- "name": "review/$CI_COMMIT_REF_NAME/api",
5048
- "url": "$CL_GITLAB_ENVIRONMENT_URL",
5049
- },
5050
- "image": "path/to/docker/gcloud:the-version",
5051
- "interruptible": true,
5052
- "needs": [],
5053
- "retry": {
5054
- "max": 2,
5055
- "when": [
5056
- "runner_system_failure",
5057
- "stuck_or_timeout_failure",
5058
- ],
5059
- },
5060
- "rules": [
5061
- {
5062
- "if": "$CI_COMMIT_BRANCH =~ /^[0-9]+\\.([0-9]+|x)\\.x$/",
5063
- "when": "on_success",
5064
- },
5065
- {
5066
- "when": "manual",
5067
- },
5068
- ],
5069
- "script": [
5070
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
5071
- "export CLOUDSDK_CORE_DISABLE_PROMPTS="1"",
5072
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
5073
- "set +e",
5074
- "gcloud auth activate-service-account --key-file=<(echo "$CL_review_api_GCLOUD_DEPLOY_credentialsKey")",
5075
- "gcloud run services delete $(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api" | awk '{print tolower($0)}') --project=asdf --region=asia-east1",
5076
- "gcloud artifacts docker images delete asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/review/api/$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }) --quiet --delete-tags",
5077
- "gcloud artifacts docker images list asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/caches/api --sort-by=~CREATE_TIME --format="value(version)" | tail -n +2 | while read -r version; do gcloud artifacts docker images delete asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/caches/api@$version --quiet --delete-tags; done",
5078
- "set +e",
5079
- "gcloud artifacts docker images delete asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/review/api --quiet --delete-tags",
5080
- "set -e",
5081
- "echo 'Disabling component in Dependency Track'",
5082
- "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" disable "pan-test-app/api" "https://$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api-$CL_review_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" || true",
5083
- "set -e",
5084
- "echo "CL_GITLAB_ENVIRONMENT_URL=https://$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api-$CL_review_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" >> gitlab_environment.env",
5085
- ],
5086
- "stage": "stop review",
5087
- "variables": {
5088
- "GIT_STRATEGY": "none",
5089
- "KUBERNETES_CPU_REQUEST": "0.22",
5090
- "KUBERNETES_MEMORY_LIMIT": "400Mi",
5091
- "KUBERNETES_MEMORY_REQUEST": "200Mi",
5092
- },
5093
- },
5094
- "api 🛡 audit": {
5095
- "allow_failure": true,
5096
- "image": "path/to/docker/jobs-default:the-version",
5097
- "interruptible": true,
5098
- "needs": [],
5099
- "retry": {
5100
- "max": 2,
5101
- "when": [
5102
- "runner_system_failure",
5103
- "stuck_or_timeout_failure",
5104
- ],
5105
- },
5106
- "script": [
5107
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
5108
- "export APP_PATH="api"",
5109
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
5110
- "cd api",
5111
- "yarn npm audit --environment production",
5112
- ],
5113
- "stage": "test",
5114
- "variables": {
5115
- "KUBERNETES_CPU_REQUEST": "0.45",
5116
- "KUBERNETES_MEMORY_LIMIT": "4Gi",
5117
- "KUBERNETES_MEMORY_REQUEST": "1Gi",
5118
- },
5119
- },
5120
- "api 🧪 test": {
5121
- "cache": [
5122
- {
5123
- "key": "api-yarn",
5124
- "paths": [
5125
- "api/.yarn",
5126
- ],
5127
- "policy": "pull-push",
5128
- },
5129
- {
5130
- "key": "api-node-modules",
5131
- "paths": [
5132
- "api/node_modules",
5133
- ],
5134
- "policy": "pull-push",
5135
- },
5136
- ],
5137
- "image": "path/to/docker/jobs-testing-chrome:the-version",
5138
- "interruptible": true,
5139
- "needs": [],
5140
- "retry": {
5141
- "max": 2,
5142
- "when": [
5143
- "runner_system_failure",
5144
- "stuck_or_timeout_failure",
5145
- ],
5146
- },
5147
- "script": [
5148
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
5149
- "export APP_PATH="api"",
5150
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
5151
- "echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"",
5152
- "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
5153
- "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
5154
- "echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"",
5155
- "cd api",
5156
- "echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"",
5157
- "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
5158
- "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
5159
- "echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"",
5160
- "echo -e "\\e[0Ksection_start:$(date +%s):yarninstall[collapsed=true]\\r\\e[0KYarn install"",
5161
- "yarn install --immutable",
5162
- "echo -e "\\e[0Ksection_end:$(date +%s):yarninstall\\r\\e[0K"",
5163
- "yarn test",
5164
- ],
5165
- "stage": "test",
5166
- "variables": {
5167
- "KUBERNETES_CPU_REQUEST": "0.45",
5168
- "KUBERNETES_MEMORY_LIMIT": "4Gi",
5169
- "KUBERNETES_MEMORY_REQUEST": "1Gi",
5170
- },
5171
- },
5172
- "api 🧾 sbom | review ": {
5173
- "allow_failure": true,
5174
- "artifacts": {
5175
- "paths": [
5176
- "__sbom.json",
5177
- ],
5178
- },
5179
- "image": "aquasec/trivy:0.38.3",
5180
- "interruptible": true,
5181
- "needs": [],
5182
- "retry": {
5183
- "max": 2,
5184
- "when": [
5185
- "runner_system_failure",
5186
- "stuck_or_timeout_failure",
5187
- ],
5188
- },
5189
- "script": [
5190
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
5191
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
5192
- "trivy fs --quiet --format cyclonedx --output "__sbom.json" api",
5193
- ],
5194
- "stage": "build",
5195
- "variables": {},
5196
- },
5197
- "api2 ↩️ Rollback ⚠️ | review ": {
5198
- "allow_failure": true,
5199
- "artifacts": {
5200
- "reports": {
5201
- "dotenv": "gitlab_environment.env",
5202
- },
5203
- },
5204
- "environment": {
5205
- "action": "access",
5206
- "name": "review/$CI_COMMIT_REF_NAME/api2",
5207
- "url": "$CL_GITLAB_ENVIRONMENT_URL",
5208
- },
5209
- "image": "path/to/docker/kubernetes:the-version",
5210
- "interruptible": true,
5211
- "needs": [],
5212
- "retry": {
5213
- "max": 2,
5214
- "when": [
5215
- "runner_system_failure",
5216
- "stuck_or_timeout_failure",
5217
- ],
5218
- },
5219
- "rules": [
5220
- {
5221
- "when": "manual",
5222
- },
5223
- ],
5224
- "script": [
5225
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
5226
- "export ENV_SHORT="review"",
5227
- "export APP_DIR="api"",
5228
- "export ENV_TYPE="review"",
5229
- "export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
5230
- "export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
5231
- "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")"",
5232
- "export HOST="api2.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud"",
5233
- "export ROOT_URL="https://api2.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud"",
5234
- "export HOST_INTERNAL="api2.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud"",
5235
- "export HOST_CANONICAL="api2.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud"",
5236
- "export ROOT_URL_INTERNAL="https://api2.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud"",
5237
- "export KUBE_NAMESPACE="pan-test-app-review"",
5238
- "export KUBE_APP_NAME="$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api2"",
5239
- "export KUBE_APP_NAME_PREFIX="$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-"",
5240
- "export multiline_from_api="line1
5241
- line2
5242
- line3
5243
-
5244
- single quote: '
5245
- doouble quote: \\"
5246
- "",
5247
- "export multiline2="yeah
5248
- yeah2
5249
- yeah3
5250
-
5251
- single quote: '
5252
- doouble quote: \\"
5253
- "",
5254
- "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\\",\\"KUBE_NAMESPACE\\",\\"KUBE_APP_NAME\\",\\"KUBE_APP_NAME_PREFIX\\",\\"multiline_from_api\\",\\"multiline2\\"]"",
5255
- "export RELEASE_NAME="pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api2"",
5256
- "export HELM_EXPERIMENTAL_OCI="1"",
5257
- "export KUBE_DOCKER_IMAGE_PULL_SECRET="gitlab-registry-api2"",
5258
- "export HELM_GITLAB_CHART_NAME="/helm-charts/the-panter-chart"",
5259
- "export HELM_ARGS=""",
5260
- "export COMPONENT_NAME="api2"",
5261
- "export BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
5262
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
5263
- "kubectl config set-cluster "kube-pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api2" --server="$CL_review_api2_KUBE_URL" --certificate-authority <(echo $CL_review_api2_KUBE_CA_PEM | base64 -d) --embed-certs=true",
5264
- "kubectl config set-credentials "kube-pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api2" --token="$CL_review_api2_KUBE_TOKEN"",
5265
- "kubectl config set-context "kube-pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api2" --cluster="kube-pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api2" --user="kube-pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api2" --namespace="pan-test-app-review"",
5266
- "kubectl config use-context "kube-pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api2"",
5267
- "kubernetesRollback",
5268
- "echo "CL_GITLAB_ENVIRONMENT_URL=https://api2.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud" >> gitlab_environment.env",
5269
- ],
5270
- "stage": "rollback review",
5271
- "variables": {
5272
- "GIT_STRATEGY": "none",
5273
- "KUBERNETES_CPU_REQUEST": "0.22",
5274
- "KUBERNETES_MEMORY_LIMIT": "400Mi",
5275
- "KUBERNETES_MEMORY_REQUEST": "200Mi",
5276
- },
5277
- },
5278
- "api2 👮 lint": {
5279
- "cache": [
5280
- {
5281
- "key": "api-yarn",
5282
- "paths": [
5283
- "api/.yarn",
5284
- ],
5285
- "policy": "pull-push",
5286
- },
5287
- {
5288
- "key": "api-node-modules",
5289
- "paths": [
5290
- "api/node_modules",
5291
- ],
5292
- "policy": "pull-push",
5293
- },
5294
- ],
5295
- "image": "path/to/docker/jobs-default:the-version",
5296
- "interruptible": true,
5297
- "needs": [],
5298
- "retry": {
5299
- "max": 2,
5300
- "when": [
5301
- "runner_system_failure",
5302
- "stuck_or_timeout_failure",
5303
- ],
5304
- },
5305
- "script": [
5306
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
5307
- "export APP_PATH="api"",
5308
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
5309
- "echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"",
5310
- "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
5311
- "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
5312
- "echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"",
5313
- "cd api",
5314
- "echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"",
5315
- "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
5316
- "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
5317
- "echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"",
5318
- "echo -e "\\e[0Ksection_start:$(date +%s):yarninstall[collapsed=true]\\r\\e[0KYarn install"",
5319
- "yarn install --immutable",
5320
- "echo -e "\\e[0Ksection_end:$(date +%s):yarninstall\\r\\e[0K"",
5321
- "yarn lint",
5322
- ],
5323
- "stage": "test",
5324
- "variables": {
5325
- "KUBERNETES_CPU_REQUEST": "0.45",
5326
- "KUBERNETES_MEMORY_LIMIT": "4Gi",
5327
- "KUBERNETES_MEMORY_REQUEST": "1Gi",
5328
- },
5329
- },
5330
- "api2 🔨 app | review ": {
5331
- "artifacts": {
5332
- "expire_in": "1 day",
5333
- "paths": [
5334
- "api/__build_info.json",
5335
- "api/.next",
5336
- "api/dist",
5337
- ],
5338
- "reports": {
5339
- "junit": undefined,
5340
- },
5341
- "when": "always",
5342
- },
5343
- "cache": [
5344
- {
5345
- "key": "api-yarn",
5346
- "paths": [
5347
- "api/.yarn",
5348
- ],
5349
- "policy": "pull-push",
5350
- },
5351
- {
5352
- "key": "api-node-modules",
5353
- "paths": [
5354
- "api/node_modules",
5355
- ],
5356
- "policy": "pull-push",
5357
- },
5358
- {
5359
- "key": "api2-next-cache",
5360
- "paths": [
5361
- "api/.next/cache",
5362
- ],
5363
- "policy": "pull-push",
5364
- },
5365
- ],
5366
- "image": "path/to/docker/jobs-default:the-version",
5367
- "interruptible": true,
5368
- "needs": [],
5369
- "retry": {
5370
- "max": 2,
5371
- "when": [
5372
- "runner_system_failure",
5373
- "stuck_or_timeout_failure",
5374
- ],
5375
- },
5376
- "script": [
5377
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
5378
- "export ENV_SHORT="review"",
5379
- "export APP_DIR="api"",
5380
- "export ENV_TYPE="review"",
5381
- "export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
5382
- "export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
5383
- "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")"",
5384
- "export HOST="api2.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud"",
5385
- "export ROOT_URL="https://api2.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud"",
5386
- "export HOST_INTERNAL="api2.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud"",
5387
- "export HOST_CANONICAL="api2.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud"",
5388
- "export ROOT_URL_INTERNAL="https://api2.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud"",
5389
- "export KUBE_NAMESPACE="pan-test-app-review"",
5390
- "export KUBE_APP_NAME="$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api2"",
5391
- "export KUBE_APP_NAME_PREFIX="$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-"",
5392
- "export multiline_from_api="line1
5393
- line2
5394
- line3
5395
-
5396
- single quote: '
5397
- doouble quote: \\"
5398
- "",
5399
- "export multiline2="yeah
5400
- yeah2
5401
- yeah3
5402
-
5403
- single quote: '
5404
- doouble quote: \\"
5405
- "",
5406
- "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\\",\\"KUBE_NAMESPACE\\",\\"KUBE_APP_NAME\\",\\"KUBE_APP_NAME_PREFIX\\",\\"multiline_from_api\\",\\"multiline2\\"]"",
5407
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
5408
- "echo '{"id":"$(git describe --tags 2>/dev/null || git rev-parse HEAD)","time":"$CI_JOB_STARTED_AT"}' > api/__build_info.json",
5409
- "echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"",
5410
- "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
5411
- "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
5412
- "echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"",
5413
- "cd api",
5414
- "echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"",
5415
- "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
5416
- "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
5417
- "echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"",
5418
- "echo -e "\\e[0Ksection_start:$(date +%s):yarninstall[collapsed=true]\\r\\e[0KYarn install"",
5419
- "yarn install --immutable",
5420
- "echo -e "\\e[0Ksection_end:$(date +%s):yarninstall\\r\\e[0K"",
5421
- "yarn build",
5422
- ],
5423
- "stage": "build",
5424
- "variables": {
5425
- "KUBERNETES_CPU_REQUEST": "0.45",
5426
- "KUBERNETES_MEMORY_LIMIT": "4Gi",
5427
- "KUBERNETES_MEMORY_REQUEST": "1Gi",
5428
- },
5429
- },
5430
- "api2 🔨 docker | review ": {
5431
- "cache": [
5432
- {
5433
- "key": "api-yarn",
5434
- "paths": [
5435
- "api/.yarn",
5436
- ],
5437
- "policy": "pull",
5438
- },
5439
- ],
5440
- "image": "path/to/docker/docker-build:the-version",
5441
- "interruptible": true,
5442
- "needs": [
5443
- "api2 🔨 app | review ",
5444
- ],
5445
- "retry": {
5446
- "max": 2,
5447
- "when": [
5448
- "runner_system_failure",
5449
- "stuck_or_timeout_failure",
5450
- ],
5451
- },
5452
- "script": [
5453
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
5454
- "export APP_DIR="api"",
5455
- "export DOCKER_BUILD_CONTEXT="."",
5456
- "export DOCKER_REGISTRY="$CI_REGISTRY"",
5457
- "export DOCKER_CACHE_IMAGE="$CI_REGISTRY_IMAGE/caches/api2"",
5458
- "export DOCKER_IMAGE_NAME="review/api2"",
5459
- "export DOCKER_IMAGE="$CI_REGISTRY_IMAGE/$DOCKER_IMAGE_NAME"",
5460
- "export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"",
5461
- "export DOCKER_COPY_AND_INSTALL_APP="COPY --chown=node:node $APP_DIR .
5462
- RUN yarn plugin import workspace-tools
5463
- RUN yarn workspaces focus --production && yarn rebuild"",
5464
- "export DOCKER_COPY_WORKSPACE_FILES="COPY --chown=node:node api/package.json /app/api/package.json
5465
- COPY --chown=node:node api/yarn.lock /app/api/yarn.lock
5466
- COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
5467
- COPY --chown=node:node .yarn /app/.yarn"",
5468
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
5469
- "ensureNodeDockerfile",
5470
- "echo -e "\\e[0Ksection_start:$(date +%s):docker-login[collapsed=true]\\r\\e[0KDocker Login"",
5471
- "docker login --username gitlab-ci-token --password $CI_JOB_TOKEN $CI_REGISTRY",
5472
- "echo -e "\\e[0Ksection_end:$(date +%s):docker-login\\r\\e[0K"",
5473
- "echo -e "\\e[0Ksection_start:$(date +%s):docker-build[collapsed=true]\\r\\e[0KDocker build"",
5474
- "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",
5475
- "echo -e "\\e[0Ksection_end:$(date +%s):docker-build\\r\\e[0K"",
5476
- "echo -e "\\e[0Ksection_start:$(date +%s):docker-push[collapsed=true]\\r\\e[0KDocker push and tag"",
5477
- "docker push $DOCKER_IMAGE:$DOCKER_IMAGE_TAG",
5478
- "docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG $DOCKER_CACHE_IMAGE",
5479
- "docker push $DOCKER_CACHE_IMAGE",
5480
- "echo -e "\\e[0Ksection_end:$(date +%s):docker-push\\r\\e[0K"",
5481
- ],
5482
- "services": [
5483
- {
5484
- "command": [
5485
- "--tls=false",
5486
- ],
5487
- "name": "docker:24.0.6-dind",
5488
- },
5489
- ],
5490
- "stage": "build",
5491
- "variables": {
5492
- "DOCKER_BUILDKIT": "1",
5493
- "DOCKER_DRIVER": "overlay2",
5494
- "DOCKER_HOST": "tcp://0.0.0.0:2375",
5495
- "DOCKER_TLS_CERTDIR": "",
5496
- "KUBERNETES_CPU_REQUEST": "0.45",
5497
- "KUBERNETES_MEMORY_LIMIT": "2Gi",
5498
- "KUBERNETES_MEMORY_REQUEST": "1Gi",
5499
- },
5500
- },
5501
- "api2 🚀 Deploy | review ": {
5502
- "allow_failure": false,
5503
- "artifacts": {
5504
- "reports": {
5505
- "dotenv": "gitlab_environment.env",
5506
- },
5507
- },
5508
- "environment": {
5509
- "auto_stop_in": "1 week",
5510
- "name": "review/$CI_COMMIT_REF_NAME/api2",
5511
- "on_stop": "api2 🛑 Stop ⚠️ | review ",
5512
- "url": "$CL_GITLAB_ENVIRONMENT_URL",
5513
- },
5514
- "image": "path/to/docker/kubernetes:the-version",
5515
- "interruptible": true,
5516
- "needs": [
5517
- {
5518
- "artifacts": false,
5519
- "job": "api2 👮 lint",
5520
- },
5521
- {
5522
- "artifacts": false,
5523
- "job": "api2 🔨 app | review ",
5524
- },
5525
- {
5526
- "artifacts": false,
5527
- "job": "api2 🔨 docker | review ",
5528
- },
5529
- {
5530
- "artifacts": false,
5531
- "job": "api2 🧪 test",
5532
- },
5533
- {
5534
- "artifacts": true,
5535
- "job": "api2 🧾 sbom | review ",
5536
- },
5537
- {
5538
- "artifacts": false,
5539
- "job": "api2 🛡 audit",
5540
- },
5541
- ],
5542
- "retry": {
5543
- "max": 2,
5544
- "when": [
5545
- "runner_system_failure",
5546
- "stuck_or_timeout_failure",
5547
- ],
5548
- },
5549
- "rules": [
5550
- {
5551
- "when": "on_success",
5552
- },
5553
- ],
5554
- "script": [
5555
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
5556
- "export ENV_SHORT="review"",
5557
- "export APP_DIR="api"",
5558
- "export ENV_TYPE="review"",
5559
- "export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
5560
- "export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
5561
- "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")"",
5562
- "export HOST="api2.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud"",
5563
- "export ROOT_URL="https://api2.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud"",
5564
- "export HOST_INTERNAL="api2.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud"",
5565
- "export HOST_CANONICAL="api2.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud"",
5566
- "export ROOT_URL_INTERNAL="https://api2.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud"",
5567
- "export KUBE_NAMESPACE="pan-test-app-review"",
5568
- "export KUBE_APP_NAME="$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api2"",
5569
- "export KUBE_APP_NAME_PREFIX="$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-"",
5570
- "export multiline_from_api="line1
5571
- line2
5572
- line3
5573
-
5574
- single quote: '
5575
- doouble quote: \\"
5576
- "",
5577
- "export multiline2="yeah
5578
- yeah2
5579
- yeah3
5580
-
5581
- single quote: '
5582
- doouble quote: \\"
5583
- "",
5584
- "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\\",\\"KUBE_NAMESPACE\\",\\"KUBE_APP_NAME\\",\\"KUBE_APP_NAME_PREFIX\\",\\"multiline_from_api\\",\\"multiline2\\"]"",
5585
- "export DOCKER_REGISTRY="$CI_REGISTRY"",
5586
- "export DOCKER_CACHE_IMAGE="$CI_REGISTRY_IMAGE/caches/api2"",
5587
- "export DOCKER_IMAGE_NAME="review/api2"",
5588
- "export DOCKER_IMAGE="$CI_REGISTRY_IMAGE/$DOCKER_IMAGE_NAME"",
5589
- "export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"",
5590
- "export RELEASE_NAME="pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api2"",
5591
- "export HELM_EXPERIMENTAL_OCI="1"",
5592
- "export KUBE_DOCKER_IMAGE_PULL_SECRET="gitlab-registry-api2"",
5593
- "export HELM_GITLAB_CHART_NAME="/helm-charts/the-panter-chart"",
5594
- "export HELM_ARGS=""",
5595
- "export COMPONENT_NAME="api2"",
5596
- "export BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
5597
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
5598
- "kubectl config set-cluster "kube-pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api2" --server="$CL_review_api2_KUBE_URL" --certificate-authority <(echo $CL_review_api2_KUBE_CA_PEM | base64 -d) --embed-certs=true",
5599
- "kubectl config set-credentials "kube-pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api2" --token="$CL_review_api2_KUBE_TOKEN"",
5600
- "kubectl config set-context "kube-pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api2" --cluster="kube-pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api2" --user="kube-pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api2" --namespace="pan-test-app-review"",
5601
- "kubectl config use-context "kube-pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api2"",
5602
- "echo -e "\\e[0Ksection_start:$(date +%s):writeallvalues[collapsed=true]\\r\\e[0KWrite __all_values.yml for helm deployment"",
5603
- "cat > __all_values.yml <<EOF
5604
- env:
5605
- secret: {}
5606
- public:
5607
- ENV_SHORT: |-
5608
- review
5609
- APP_DIR: |-
5610
- api
5611
- ENV_TYPE: |-
5612
- review
5613
- BUILD_INFO_BUILD_ID: |-
5614
- $(printf %s "$(git describe --tags 2>/dev/null || git rev-parse HEAD)" | sed 's/^/ /')
5615
- BUILD_INFO_BUILD_TIME: |-
5616
- $(printf %s "$CI_JOB_STARTED_AT" | sed 's/^/ /')
5617
- BUILD_INFO_CURRENT_VERSION: |-
5618
- $(printf %s "$(tag=$(git ls-remote origin "refs/tags/v*[0-9]" 2>/dev/null | cut -f 2- | sort -V | tail -1 | sed 's/refs\\/tags\\/v//'); [ -z "$tag" ] && echo "0.0.0" || echo "$tag")" | sed 's/^/ /')
5619
- HOST: |-
5620
- $(printf %s "api2.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud" | sed 's/^/ /')
5621
- ROOT_URL: |-
5622
- $(printf %s "https://api2.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud" | sed 's/^/ /')
5623
- HOST_INTERNAL: |-
5624
- $(printf %s "api2.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud" | sed 's/^/ /')
5625
- HOST_CANONICAL: |-
5626
- $(printf %s "api2.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud" | sed 's/^/ /')
5627
- ROOT_URL_INTERNAL: |-
5628
- $(printf %s "https://api2.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud" | sed 's/^/ /')
5629
- KUBE_NAMESPACE: |-
5630
- pan-test-app-review
5631
- KUBE_APP_NAME: |-
5632
- $(printf %s "$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api2" | sed 's/^/ /')
5633
- KUBE_APP_NAME_PREFIX: |-
5634
- $(printf %s "$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-" | sed 's/^/ /')
5635
- multiline_from_api: |
5636
- line1
5637
- line2
5638
- line3
5639
-
5640
- single quote: '
5641
- doouble quote: "
5642
- multiline2: |
5643
- yeah
5644
- yeah2
5645
- yeah3
5646
-
5647
- single quote: '
5648
- doouble quote: "
5649
- _ALL_ENV_VAR_KEYS: |-
5650
- ["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","KUBE_NAMESPACE","KUBE_APP_NAME","KUBE_APP_NAME_PREFIX","multiline_from_api","multiline2"]
5651
- application:
5652
- host: |-
5653
- $(printf %s "api2.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud" | sed 's/^/ /')
5654
- command: |-
5655
- yarn start
5656
- livenessProbe:
5657
- httpGet:
5658
- path: |-
5659
- __health
5660
- readinessProbe:
5661
- httpGet:
5662
- path: |-
5663
- __health
5664
- startupProbe:
5665
- httpGet:
5666
- path: |-
5667
- __health
5668
-
5669
- EOF
5670
- ",
5671
- "echo -e "\\e[0Ksection_end:$(date +%s):writeallvalues\\r\\e[0K"",
5672
- "kubernetesCreateSecret",
5673
- "kubernetesDeploy",
5674
- "echo 'Uploading SBOM to Dependency Track'",
5675
- "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/api2" "https://api2.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud" "__sbom.json" vex.json || true",
5676
- "echo deployment successful 😻",
5677
- "echo "CL_GITLAB_ENVIRONMENT_URL=https://api2.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud" >> gitlab_environment.env",
5678
- ],
5679
- "stage": "deploy review",
5680
- "variables": {
5681
- "KUBERNETES_CPU_REQUEST": "0.22",
5682
- "KUBERNETES_MEMORY_LIMIT": "400Mi",
5683
- "KUBERNETES_MEMORY_REQUEST": "200Mi",
5684
- },
5685
- },
5686
- "api2 🛑 Stop ⚠️ | review ": {
5687
- "allow_failure": true,
5688
- "artifacts": {
5689
- "reports": {
5690
- "dotenv": "gitlab_environment.env",
5691
- },
5692
- },
5693
- "environment": {
5694
- "action": "stop",
5695
- "name": "review/$CI_COMMIT_REF_NAME/api2",
5696
- "url": "$CL_GITLAB_ENVIRONMENT_URL",
5697
- },
5698
- "image": "path/to/docker/kubernetes:the-version",
5699
- "interruptible": true,
5700
- "needs": [],
5701
- "retry": {
5702
- "max": 2,
5703
- "when": [
5704
- "runner_system_failure",
5705
- "stuck_or_timeout_failure",
5706
- ],
5707
- },
5708
- "rules": [
5709
- {
5710
- "if": "$CI_COMMIT_BRANCH =~ /^[0-9]+\\.([0-9]+|x)\\.x$/",
5711
- "when": "on_success",
5712
- },
5713
- {
5714
- "when": "manual",
5715
- },
5716
- ],
5717
- "script": [
5718
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
5719
- "export ENV_SHORT="review"",
5720
- "export APP_DIR="api"",
5721
- "export ENV_TYPE="review"",
5722
- "export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
5723
- "export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
5724
- "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")"",
5725
- "export HOST="api2.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud"",
5726
- "export ROOT_URL="https://api2.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud"",
5727
- "export HOST_INTERNAL="api2.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud"",
5728
- "export HOST_CANONICAL="api2.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud"",
5729
- "export ROOT_URL_INTERNAL="https://api2.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud"",
5730
- "export KUBE_NAMESPACE="pan-test-app-review"",
5731
- "export KUBE_APP_NAME="$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api2"",
5732
- "export KUBE_APP_NAME_PREFIX="$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-"",
5733
- "export multiline_from_api="line1
5734
- line2
5735
- line3
5736
-
5737
- single quote: '
5738
- doouble quote: \\"
5739
- "",
5740
- "export multiline2="yeah
5741
- yeah2
5742
- yeah3
5743
-
5744
- single quote: '
5745
- doouble quote: \\"
5746
- "",
5747
- "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\\",\\"KUBE_NAMESPACE\\",\\"KUBE_APP_NAME\\",\\"KUBE_APP_NAME_PREFIX\\",\\"multiline_from_api\\",\\"multiline2\\"]"",
5748
- "export RELEASE_NAME="pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api2"",
5749
- "export HELM_EXPERIMENTAL_OCI="1"",
5750
- "export KUBE_DOCKER_IMAGE_PULL_SECRET="gitlab-registry-api2"",
5751
- "export HELM_GITLAB_CHART_NAME="/helm-charts/the-panter-chart"",
5752
- "export HELM_ARGS=""",
5753
- "export COMPONENT_NAME="api2"",
5754
- "export BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
5755
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
5756
- "kubectl config set-cluster "kube-pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api2" --server="$CL_review_api2_KUBE_URL" --certificate-authority <(echo $CL_review_api2_KUBE_CA_PEM | base64 -d) --embed-certs=true",
5757
- "kubectl config set-credentials "kube-pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api2" --token="$CL_review_api2_KUBE_TOKEN"",
5758
- "kubectl config set-context "kube-pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api2" --cluster="kube-pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api2" --user="kube-pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api2" --namespace="pan-test-app-review"",
5759
- "kubectl config use-context "kube-pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api2"",
5760
- "kubernetesDelete",
5761
- "echo 'Disabling component in Dependency Track'",
5762
- "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" disable "pan-test-app/api2" "https://api2.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud" || true",
5763
- "echo "CL_GITLAB_ENVIRONMENT_URL=https://api2.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud" >> gitlab_environment.env",
5764
- ],
5765
- "stage": "stop review",
5766
- "variables": {
5767
- "GIT_STRATEGY": "none",
5768
- "KUBERNETES_CPU_REQUEST": "0.22",
5769
- "KUBERNETES_MEMORY_LIMIT": "400Mi",
5770
- "KUBERNETES_MEMORY_REQUEST": "200Mi",
5771
- },
5772
- },
5773
- "api2 🛡 audit": {
5774
- "allow_failure": true,
5775
- "image": "path/to/docker/jobs-default:the-version",
5776
- "interruptible": true,
5777
- "needs": [],
5778
- "retry": {
5779
- "max": 2,
5780
- "when": [
5781
- "runner_system_failure",
5782
- "stuck_or_timeout_failure",
5783
- ],
5784
- },
5785
- "script": [
5786
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
5787
- "export APP_PATH="api"",
5788
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
5789
- "cd api",
5790
- "yarn npm audit --environment production",
5791
- ],
5792
- "stage": "test",
5793
- "variables": {
5794
- "KUBERNETES_CPU_REQUEST": "0.45",
5795
- "KUBERNETES_MEMORY_LIMIT": "4Gi",
5796
- "KUBERNETES_MEMORY_REQUEST": "1Gi",
5797
- },
5798
- },
5799
- "api2 🧪 test": {
5800
- "cache": [
5801
- {
5802
- "key": "api-yarn",
5803
- "paths": [
5804
- "api/.yarn",
5805
- ],
5806
- "policy": "pull-push",
5807
- },
5808
- {
5809
- "key": "api-node-modules",
5810
- "paths": [
5811
- "api/node_modules",
5812
- ],
5813
- "policy": "pull-push",
5814
- },
5815
- ],
5816
- "image": "path/to/docker/jobs-testing-chrome:the-version",
5817
- "interruptible": true,
5818
- "needs": [],
5819
- "retry": {
5820
- "max": 2,
5821
- "when": [
5822
- "runner_system_failure",
5823
- "stuck_or_timeout_failure",
5824
- ],
5825
- },
5826
- "script": [
5827
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
5828
- "export APP_PATH="api"",
5829
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
5830
- "echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"",
5831
- "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
5832
- "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
5833
- "echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"",
5834
- "cd api",
5835
- "echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"",
5836
- "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
5837
- "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
5838
- "echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"",
5839
- "echo -e "\\e[0Ksection_start:$(date +%s):yarninstall[collapsed=true]\\r\\e[0KYarn install"",
5840
- "yarn install --immutable",
5841
- "echo -e "\\e[0Ksection_end:$(date +%s):yarninstall\\r\\e[0K"",
5842
- "yarn test",
5843
- ],
5844
- "stage": "test",
5845
- "variables": {
5846
- "KUBERNETES_CPU_REQUEST": "0.45",
5847
- "KUBERNETES_MEMORY_LIMIT": "4Gi",
5848
- "KUBERNETES_MEMORY_REQUEST": "1Gi",
5849
- },
5850
- },
5851
- "api2 🧾 sbom | review ": {
5852
- "allow_failure": true,
5853
- "artifacts": {
5854
- "paths": [
5855
- "__sbom.json",
5856
- ],
5857
- },
5858
- "image": "aquasec/trivy:0.38.3",
5859
- "interruptible": true,
5860
- "needs": [],
5861
- "retry": {
5862
- "max": 2,
5863
- "when": [
5864
- "runner_system_failure",
5865
- "stuck_or_timeout_failure",
5866
- ],
5867
- },
5868
- "script": [
5869
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
5870
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
5871
- "trivy fs --quiet --format cyclonedx --output "__sbom.json" api",
5872
- ],
5873
- "stage": "build",
5874
- "variables": {},
5875
- },
5876
- },
5877
- "stages": [
5878
- "setup",
5879
- "setup dev",
5880
- "setup review",
5881
- "setup stage",
5882
- "setup prod",
5883
- "test",
5884
- "test dev",
5885
- "test review",
5886
- "test stage",
5887
- "test prod",
5888
- "build",
5889
- "build dev",
5890
- "build review",
5891
- "build stage",
5892
- "build prod",
5893
- "deploy",
5894
- "deploy dev",
5895
- "deploy review",
5896
- "deploy stage",
5897
- "deploy prod",
5898
- "verify",
5899
- "verify dev",
5900
- "verify review",
5901
- "verify stage",
5902
- "verify prod",
5903
- "rollback",
5904
- "rollback dev",
5905
- "rollback review",
5906
- "rollback stage",
5907
- "rollback prod",
5908
- "stop",
5909
- "stop dev",
5910
- "stop review",
5911
- "stop stage",
5912
- "stop prod",
5913
- ],
5914
- "variables": {
5915
- "ARTIFACT_COMPRESSION_LEVEL": "fast",
5916
- "CACHE_COMPRESSION_LEVEL": "fast",
5917
- "FF_USE_FASTZIP": "true",
5918
- "GIT_DEPTH": "1",
5919
- "TRANSFER_METER_FREQUENCY": "5s",
5920
- },
5921
- "workflow": {
5922
- "rules": [
5923
- {
5924
- "if": "$CI_COMMIT_TAG",
5925
- },
5926
- {
5927
- "if": "$CI_COMMIT_MESSAGE =~ /^chore\\(release\\).*/",
5928
- "when": "never",
5929
- },
5930
- {
5931
- "if": "$CI_PIPELINE_SOURCE == "schedule"",
5932
- "when": "never",
5933
- },
5934
- {
5935
- "if": "$CI_COMMIT_BRANCH =~ /^[0-9]+.([0-9]+|x).x$/",
5936
- },
5937
- {
5938
- "if": "$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH",
5939
- },
5940
- {
5941
- "if": "$CI_MERGE_REQUEST_ID",
5942
- },
5943
- ],
5944
- },
5945
- },
5946
- "taggedRelease": {
5947
- "image": "path/to/docker/jobs-default:the-version",
5948
- "jobs": {
5949
- "api 🔨 app | prod ": {
5950
- "artifacts": {
5951
- "expire_in": "1 day",
5952
- "paths": [
5953
- "api/__build_info.json",
5954
- "api/.next",
5955
- "api/dist",
5956
- ],
5957
- "reports": {
5958
- "junit": undefined,
5959
- },
5960
- "when": "always",
5961
- },
5962
- "cache": [
5963
- {
5964
- "key": "api-yarn",
5965
- "paths": [
5966
- "api/.yarn",
5967
- ],
5968
- "policy": "pull-push",
5969
- },
5970
- {
5971
- "key": "api-node-modules",
5972
- "paths": [
5973
- "api/node_modules",
5974
- ],
5975
- "policy": "pull-push",
5976
- },
5977
- {
5978
- "key": "api-next-cache",
5979
- "paths": [
5980
- "api/.next/cache",
5981
- ],
5982
- "policy": "pull-push",
5983
- },
5984
- ],
5985
- "image": "path/to/docker/jobs-default:the-version",
5986
- "interruptible": true,
5987
- "needs": [],
5988
- "retry": {
5989
- "max": 2,
5990
- "when": [
5991
- "runner_system_failure",
5992
- "stuck_or_timeout_failure",
5993
- ],
5994
- },
5995
- "script": [
5996
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
5997
- "export ENV_SHORT="prod"",
5998
- "export APP_DIR="api"",
5999
- "export ENV_TYPE="prod"",
6000
- "export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
6001
- "export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
6002
- "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")"",
6003
- "export HOST="$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
6004
- "export ROOT_URL="https://$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
6005
- "export HOST_INTERNAL="$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
6006
- "export HOST_CANONICAL="$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
6007
- "export ROOT_URL_INTERNAL="https://$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
6008
- "export DEPLOY_CLOUD_RUN_PROJECT_ID="asdf"",
6009
- "export DEPLOY_CLOUD_RUN_REGION="asia-east1"",
6010
- "export GCLOUD_DEPLOY_credentialsKey="$CL_prod_api_GCLOUD_DEPLOY_credentialsKey"",
6011
- "export GCLOUD_RUN_canonicalHostSuffix="$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix"",
6012
- "export foo="foo-value"",
6013
- "export multiline="line1
6014
- line2
6015
- line3
6016
-
6017
- single quote: '
6018
- doouble quote: \\"
6019
- "",
6020
- "export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOST\\",\\"ROOT_URL\\",\\"HOST_INTERNAL\\",\\"HOST_CANONICAL\\",\\"ROOT_URL_INTERNAL\\",\\"DEPLOY_CLOUD_RUN_PROJECT_ID\\",\\"DEPLOY_CLOUD_RUN_REGION\\",\\"GCLOUD_DEPLOY_credentialsKey\\",\\"GCLOUD_RUN_canonicalHostSuffix\\",\\"foo\\",\\"multiline\\"]"",
6021
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
6022
- "echo '{"id":"$(git describe --tags 2>/dev/null || git rev-parse HEAD)","time":"$CI_JOB_STARTED_AT"}' > api/__build_info.json",
6023
- "echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"",
6024
- "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
6025
- "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
6026
- "echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"",
6027
- "cd api",
6028
- "echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"",
6029
- "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
6030
- "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
6031
- "echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"",
6032
- "echo -e "\\e[0Ksection_start:$(date +%s):yarninstall[collapsed=true]\\r\\e[0KYarn install"",
6033
- "yarn install --immutable",
6034
- "echo -e "\\e[0Ksection_end:$(date +%s):yarninstall\\r\\e[0K"",
6035
- "yarn build",
6036
- ],
6037
- "stage": "build",
6038
- "variables": {
6039
- "KUBERNETES_CPU_REQUEST": "0.45",
6040
- "KUBERNETES_MEMORY_LIMIT": "4Gi",
6041
- "KUBERNETES_MEMORY_REQUEST": "1Gi",
6042
- },
6043
- },
6044
- "api 🔨 app | stage ": {
6045
- "artifacts": {
6046
- "expire_in": "1 day",
6047
- "paths": [
6048
- "api/__build_info.json",
6049
- "api/.next",
6050
- "api/dist",
6051
- ],
6052
- "reports": {
6053
- "junit": undefined,
6054
- },
6055
- "when": "always",
6056
- },
6057
- "cache": [
6058
- {
6059
- "key": "api-yarn",
6060
- "paths": [
6061
- "api/.yarn",
6062
- ],
6063
- "policy": "pull-push",
6064
- },
6065
- {
6066
- "key": "api-node-modules",
6067
- "paths": [
6068
- "api/node_modules",
6069
- ],
6070
- "policy": "pull-push",
6071
- },
6072
- {
6073
- "key": "api-next-cache",
6074
- "paths": [
6075
- "api/.next/cache",
6076
- ],
6077
- "policy": "pull-push",
6078
- },
6079
- ],
6080
- "image": "path/to/docker/jobs-default:the-version",
6081
- "interruptible": true,
6082
- "needs": [],
6083
- "retry": {
6084
- "max": 2,
6085
- "when": [
6086
- "runner_system_failure",
6087
- "stuck_or_timeout_failure",
6088
- ],
6089
- },
6090
- "script": [
6091
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
6092
- "export ENV_SHORT="stage"",
6093
- "export APP_DIR="api"",
6094
- "export ENV_TYPE="stage"",
6095
- "export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
6096
- "export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
6097
- "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")"",
6098
- "export HOST="$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
6099
- "export ROOT_URL="https://$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
6100
- "export HOST_INTERNAL="$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
6101
- "export HOST_CANONICAL="$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
6102
- "export ROOT_URL_INTERNAL="https://$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
6103
- "export DEPLOY_CLOUD_RUN_PROJECT_ID="asdf"",
6104
- "export DEPLOY_CLOUD_RUN_REGION="asia-east1"",
6105
- "export GCLOUD_DEPLOY_credentialsKey="$CL_stage_api_GCLOUD_DEPLOY_credentialsKey"",
6106
- "export GCLOUD_RUN_canonicalHostSuffix="$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix"",
6107
- "export foo="foo-value"",
6108
- "export multiline="line1
6109
- line2
6110
- line3
6111
-
6112
- single quote: '
6113
- doouble quote: \\"
6114
- "",
6115
- "export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOST\\",\\"ROOT_URL\\",\\"HOST_INTERNAL\\",\\"HOST_CANONICAL\\",\\"ROOT_URL_INTERNAL\\",\\"DEPLOY_CLOUD_RUN_PROJECT_ID\\",\\"DEPLOY_CLOUD_RUN_REGION\\",\\"GCLOUD_DEPLOY_credentialsKey\\",\\"GCLOUD_RUN_canonicalHostSuffix\\",\\"foo\\",\\"multiline\\"]"",
6116
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
6117
- "echo '{"id":"$(git describe --tags 2>/dev/null || git rev-parse HEAD)","time":"$CI_JOB_STARTED_AT"}' > api/__build_info.json",
6118
- "echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"",
6119
- "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
6120
- "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
6121
- "echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"",
6122
- "cd api",
6123
- "echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"",
6124
- "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
6125
- "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
6126
- "echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"",
6127
- "echo -e "\\e[0Ksection_start:$(date +%s):yarninstall[collapsed=true]\\r\\e[0KYarn install"",
6128
- "yarn install --immutable",
6129
- "echo -e "\\e[0Ksection_end:$(date +%s):yarninstall\\r\\e[0K"",
6130
- "yarn build",
6131
- ],
6132
- "stage": "build",
6133
- "variables": {
6134
- "KUBERNETES_CPU_REQUEST": "0.45",
6135
- "KUBERNETES_MEMORY_LIMIT": "4Gi",
6136
- "KUBERNETES_MEMORY_REQUEST": "1Gi",
6137
- },
6138
- },
6139
- "api 🔨 docker | prod ": {
6140
- "cache": [
6141
- {
6142
- "key": "api-yarn",
6143
- "paths": [
6144
- "api/.yarn",
6145
- ],
6146
- "policy": "pull",
6147
- },
6148
- ],
6149
- "image": "path/to/docker/docker-build:the-version",
6150
- "interruptible": true,
6151
- "needs": [
6152
- "api 🔨 app | prod ",
6153
- ],
6154
- "retry": {
6155
- "max": 2,
6156
- "when": [
6157
- "runner_system_failure",
6158
- "stuck_or_timeout_failure",
6159
- ],
6160
- },
6161
- "script": [
6162
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
6163
- "export APP_DIR="api"",
6164
- "export DOCKER_BUILD_CONTEXT="."",
6165
- "export DOCKER_REGISTRY="asia-east1-docker.pkg.dev"",
6166
- "export DOCKER_IMAGE="asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/prod/api"",
6167
- "export DOCKER_CACHE_IMAGE="asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/caches/api"",
6168
- "export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"",
6169
- "export DOCKER_COPY_AND_INSTALL_APP="COPY --chown=node:node $APP_DIR .
6170
- RUN yarn plugin import workspace-tools
6171
- RUN yarn workspaces focus --production && yarn rebuild"",
6172
- "export DOCKER_COPY_WORKSPACE_FILES="COPY --chown=node:node api/package.json /app/api/package.json
6173
- COPY --chown=node:node api/yarn.lock /app/api/yarn.lock
6174
- COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
6175
- COPY --chown=node:node .yarn /app/.yarn"",
6176
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
6177
- "ensureNodeDockerfile",
6178
- "echo -e "\\e[0Ksection_start:$(date +%s):docker-login[collapsed=true]\\r\\e[0KDocker Login"",
6179
- "gcloud auth activate-service-account --key-file=<(echo "$CL_prod_api_GCLOUD_DEPLOY_credentialsKey")",
6180
- "gcloud auth configure-docker asia-east1-docker.pkg.dev",
6181
- "echo -e "\\e[0Ksection_end:$(date +%s):docker-login\\r\\e[0K"",
6182
- "echo -e "\\e[0Ksection_start:$(date +%s):docker-build[collapsed=true]\\r\\e[0KDocker build"",
6183
- "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",
6184
- "echo -e "\\e[0Ksection_end:$(date +%s):docker-build\\r\\e[0K"",
6185
- "echo -e "\\e[0Ksection_start:$(date +%s):docker-push[collapsed=true]\\r\\e[0KDocker push and tag"",
6186
- "docker push $DOCKER_IMAGE:$DOCKER_IMAGE_TAG",
6187
- "docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG $DOCKER_CACHE_IMAGE",
6188
- "docker push $DOCKER_CACHE_IMAGE",
6189
- "echo -e "\\e[0Ksection_end:$(date +%s):docker-push\\r\\e[0K"",
6190
- ],
6191
- "services": [
6192
- {
6193
- "command": [
6194
- "--tls=false",
6195
- ],
6196
- "name": "docker:24.0.6-dind",
6197
- },
6198
- ],
6199
- "stage": "build",
6200
- "variables": {
6201
- "DOCKER_BUILDKIT": "1",
6202
- "DOCKER_DRIVER": "overlay2",
6203
- "DOCKER_HOST": "tcp://0.0.0.0:2375",
6204
- "DOCKER_TLS_CERTDIR": "",
6205
- "KUBERNETES_CPU_REQUEST": "0.45",
6206
- "KUBERNETES_MEMORY_LIMIT": "2Gi",
6207
- "KUBERNETES_MEMORY_REQUEST": "1Gi",
6208
- },
6209
- },
6210
- "api 🔨 docker | stage ": {
6211
- "cache": [
6212
- {
6213
- "key": "api-yarn",
6214
- "paths": [
6215
- "api/.yarn",
6216
- ],
6217
- "policy": "pull",
6218
- },
6219
- ],
6220
- "image": "path/to/docker/docker-build:the-version",
6221
- "interruptible": true,
6222
- "needs": [
6223
- "api 🔨 app | stage ",
6224
- ],
6225
- "retry": {
6226
- "max": 2,
6227
- "when": [
6228
- "runner_system_failure",
6229
- "stuck_or_timeout_failure",
6230
- ],
6231
- },
6232
- "script": [
6233
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
6234
- "export APP_DIR="api"",
6235
- "export DOCKER_BUILD_CONTEXT="."",
6236
- "export DOCKER_REGISTRY="asia-east1-docker.pkg.dev"",
6237
- "export DOCKER_IMAGE="asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/stage/api"",
6238
- "export DOCKER_CACHE_IMAGE="asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/caches/api"",
6239
- "export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"",
6240
- "export DOCKER_COPY_AND_INSTALL_APP="COPY --chown=node:node $APP_DIR .
6241
- RUN yarn plugin import workspace-tools
6242
- RUN yarn workspaces focus --production && yarn rebuild"",
6243
- "export DOCKER_COPY_WORKSPACE_FILES="COPY --chown=node:node api/package.json /app/api/package.json
6244
- COPY --chown=node:node api/yarn.lock /app/api/yarn.lock
6245
- COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
6246
- COPY --chown=node:node .yarn /app/.yarn"",
6247
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
6248
- "ensureNodeDockerfile",
6249
- "echo -e "\\e[0Ksection_start:$(date +%s):docker-login[collapsed=true]\\r\\e[0KDocker Login"",
6250
- "gcloud auth activate-service-account --key-file=<(echo "$CL_stage_api_GCLOUD_DEPLOY_credentialsKey")",
6251
- "gcloud auth configure-docker asia-east1-docker.pkg.dev",
6252
- "echo -e "\\e[0Ksection_end:$(date +%s):docker-login\\r\\e[0K"",
6253
- "echo -e "\\e[0Ksection_start:$(date +%s):docker-build[collapsed=true]\\r\\e[0KDocker build"",
6254
- "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",
6255
- "echo -e "\\e[0Ksection_end:$(date +%s):docker-build\\r\\e[0K"",
6256
- "echo -e "\\e[0Ksection_start:$(date +%s):docker-push[collapsed=true]\\r\\e[0KDocker push and tag"",
6257
- "docker push $DOCKER_IMAGE:$DOCKER_IMAGE_TAG",
6258
- "docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG $DOCKER_CACHE_IMAGE",
6259
- "docker push $DOCKER_CACHE_IMAGE",
6260
- "echo -e "\\e[0Ksection_end:$(date +%s):docker-push\\r\\e[0K"",
6261
- ],
6262
- "services": [
6263
- {
6264
- "command": [
6265
- "--tls=false",
6266
- ],
6267
- "name": "docker:24.0.6-dind",
6268
- },
6269
- ],
6270
- "stage": "build",
6271
- "variables": {
6272
- "DOCKER_BUILDKIT": "1",
6273
- "DOCKER_DRIVER": "overlay2",
6274
- "DOCKER_HOST": "tcp://0.0.0.0:2375",
6275
- "DOCKER_TLS_CERTDIR": "",
6276
- "KUBERNETES_CPU_REQUEST": "0.45",
6277
- "KUBERNETES_MEMORY_LIMIT": "2Gi",
6278
- "KUBERNETES_MEMORY_REQUEST": "1Gi",
6279
- },
6280
- },
6281
- "api 🚀 Deploy | prod ": {
6282
- "allow_failure": true,
6283
- "artifacts": {
6284
- "reports": {
6285
- "dotenv": "gitlab_environment.env",
6286
- },
6287
- },
6288
- "environment": {
6289
- "auto_stop_in": undefined,
6290
- "name": "prod/api",
6291
- "on_stop": "api 🛑 Stop ⚠️ | prod ",
6292
- "url": "$CL_GITLAB_ENVIRONMENT_URL",
6293
- },
6294
- "image": "path/to/docker/gcloud:the-version",
6295
- "interruptible": true,
6296
- "needs": [
6297
- {
6298
- "artifacts": false,
6299
- "job": "api 🔨 app | prod ",
6300
- },
6301
- {
6302
- "artifacts": false,
6303
- "job": "api 🔨 docker | prod ",
6304
- },
6305
- {
6306
- "artifacts": true,
6307
- "job": "api 🧾 sbom | prod ",
6308
- },
6309
- ],
6310
- "retry": {
6311
- "max": 2,
6312
- "when": [
6313
- "runner_system_failure",
6314
- "stuck_or_timeout_failure",
6315
- ],
6316
- },
6317
- "rules": [
6318
- {
6319
- "when": "manual",
6320
- },
6321
- ],
6322
- "script": [
6323
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
6324
- "export ENV_SHORT="prod"",
6325
- "export APP_DIR="api"",
6326
- "export ENV_TYPE="prod"",
6327
- "export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
6328
- "export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
6329
- "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")"",
6330
- "export HOST="$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
6331
- "export ROOT_URL="https://$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
6332
- "export HOST_INTERNAL="$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
6333
- "export HOST_CANONICAL="$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
6334
- "export ROOT_URL_INTERNAL="https://$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
6335
- "export DEPLOY_CLOUD_RUN_PROJECT_ID="asdf"",
6336
- "export DEPLOY_CLOUD_RUN_REGION="asia-east1"",
6337
- "export GCLOUD_DEPLOY_credentialsKey="$CL_prod_api_GCLOUD_DEPLOY_credentialsKey"",
6338
- "export GCLOUD_RUN_canonicalHostSuffix="$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix"",
6339
- "export foo="foo-value"",
6340
- "export multiline="line1
6341
- line2
6342
- line3
6343
-
6344
- single quote: '
6345
- doouble quote: \\"
6346
- "",
6347
- "export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOST\\",\\"ROOT_URL\\",\\"HOST_INTERNAL\\",\\"HOST_CANONICAL\\",\\"ROOT_URL_INTERNAL\\",\\"DEPLOY_CLOUD_RUN_PROJECT_ID\\",\\"DEPLOY_CLOUD_RUN_REGION\\",\\"GCLOUD_DEPLOY_credentialsKey\\",\\"GCLOUD_RUN_canonicalHostSuffix\\",\\"foo\\",\\"multiline\\"]"",
6348
- "export DOCKER_REGISTRY="asia-east1-docker.pkg.dev"",
6349
- "export DOCKER_IMAGE="asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/prod/api"",
6350
- "export DOCKER_CACHE_IMAGE="asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/caches/api"",
6351
- "export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"",
6352
- "export CLOUDSDK_CORE_DISABLE_PROMPTS="1"",
6353
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
6354
- "echo -e "\\e[0Ksection_start:$(date +%s):prepare[collapsed=true]\\r\\e[0KPrepare..."",
6355
- "gcloud auth activate-service-account --key-file=<(echo "$CL_prod_api_GCLOUD_DEPLOY_credentialsKey")",
6356
- "export GCLOUD_PROJECT_NUMBER=$(gcloud projects describe asdf --format="value(projectNumber)")",
6357
- "echo "GCLOUD_PROJECT_NUMBER: $GCLOUD_PROJECT_NUMBER"",
6358
- "echo -e "\\e[0Ksection_end:$(date +%s):prepare\\r\\e[0K"",
6359
- "echo -e "\\e[0Ksection_start:$(date +%s):writeenvvars[collapsed=true]\\r\\e[0KWrite env vars to file"",
6360
- "cat > ____envvars.yaml <<EOF
6361
- ENV_SHORT: |-
6362
- prod
6363
- APP_DIR: |-
6364
- api
6365
- ENV_TYPE: |-
6366
- prod
6367
- BUILD_INFO_BUILD_ID: |-
6368
- $(printf %s "$(git describe --tags 2>/dev/null || git rev-parse HEAD)" | sed 's/^/ /')
6369
- BUILD_INFO_BUILD_TIME: |-
6370
- $(printf %s "$CI_JOB_STARTED_AT" | sed 's/^/ /')
6371
- BUILD_INFO_CURRENT_VERSION: |-
6372
- $(printf %s "$(tag=$(git ls-remote origin "refs/tags/v*[0-9]" 2>/dev/null | cut -f 2- | sort -V | tail -1 | sed 's/refs\\/tags\\/v//'); [ -z "$tag" ] && echo "0.0.0" || echo "$tag")" | sed 's/^/ /')
6373
- HOST: |-
6374
- $(printf %s "$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
6375
- ROOT_URL: |-
6376
- $(printf %s "https://$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
6377
- HOST_INTERNAL: |-
6378
- $(printf %s "$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
6379
- HOST_CANONICAL: |-
6380
- $(printf %s "$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
6381
- ROOT_URL_INTERNAL: |-
6382
- $(printf %s "https://$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
6383
- DEPLOY_CLOUD_RUN_PROJECT_ID: |-
6384
- asdf
6385
- DEPLOY_CLOUD_RUN_REGION: |-
6386
- asia-east1
6387
- GCLOUD_RUN_canonicalHostSuffix: |-
6388
- $(printf %s "$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | sed 's/^/ /')
6389
- foo: |-
6390
- foo-value
6391
- multiline: |
6392
- line1
6393
- line2
6394
- line3
6395
-
6396
- single quote: '
6397
- doouble quote: "
6398
- _ALL_ENV_VAR_KEYS: |-
6399
- ["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","HOST_INTERNAL","HOST_CANONICAL","ROOT_URL_INTERNAL","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix","foo","multiline"]
6400
-
6401
- EOF
6402
- ",
6403
- "echo -e "\\e[0Ksection_end:$(date +%s):writeenvvars\\r\\e[0K"",
6404
- "echo -e "\\e[0Ksection_start:$(date +%s):deploy[collapsed=true]\\r\\e[0KDeploy to cloud run"",
6405
- "gcloud run deploy pan-test-app-prod-api --command="yarn,start" --image=asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/prod/api:$DOCKER_IMAGE_TAG --project=asdf --region=asia-east1 --labels=customer-name=pan,component-name=api,app-name=test-app,env-type=prod,env-name=prod,build-type=node,cloud-run-service-name=pan-test-app-prod-api --env-vars-file=____envvars.yaml --min-instances=0 --max-instances=100 --cpu-throttling --allow-unauthenticated --ingress=all --cpu-boost",
6406
- "echo -e "\\e[0Ksection_end:$(date +%s):deploy\\r\\e[0K"",
6407
- "echo -e "\\e[0Ksection_start:$(date +%s):cleanup[collapsed=true]\\r\\e[0KCleanup"",
6408
- "gcloud run revisions list --project=asdf --region=asia-east1 --service=pan-test-app-prod-api --limit=unlimited --sort-by=metadata.creationTimestamp --format="value(name)" --filter='(status.conditions.status=False OR status.conditions.status=Unknown)' | tail -n +6 | while read -r revisionname; do gcloud run revisions delete --project=asdf --region=asia-east1 --quiet $revisionname ; done",
6409
- "gcloud artifacts docker images list asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/prod/api --sort-by=~CREATE_TIME --format="value(version)" | tail -n +7 | while read -r version; do gcloud artifacts docker images delete asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/prod/api@$version --quiet --delete-tags; done",
6410
- "gcloud artifacts docker images list asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/caches/api --sort-by=~CREATE_TIME --format="value(version)" | tail -n +2 | while read -r version; do gcloud artifacts docker images delete asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/caches/api@$version --quiet --delete-tags; done",
6411
- "echo -e "\\e[0Ksection_end:$(date +%s):cleanup\\r\\e[0K"",
6412
- "echo 'Uploading SBOM to Dependency Track'",
6413
- "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/api" "https://$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" "__sbom.json" vex.json || true",
6414
- "echo "CL_GITLAB_ENVIRONMENT_URL=https://$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" >> gitlab_environment.env",
6415
- ],
6416
- "stage": "deploy prod",
6417
- "variables": {
6418
- "KUBERNETES_CPU_REQUEST": "0.22",
6419
- "KUBERNETES_MEMORY_LIMIT": "400Mi",
6420
- "KUBERNETES_MEMORY_REQUEST": "200Mi",
6421
- },
6422
- },
6423
- "api 🚀 Deploy | stage ": {
6424
- "allow_failure": false,
6425
- "artifacts": {
6426
- "reports": {
6427
- "dotenv": "gitlab_environment.env",
6428
- },
6429
- },
6430
- "environment": {
6431
- "auto_stop_in": undefined,
6432
- "name": "stage/api",
6433
- "on_stop": "api 🛑 Stop ⚠️ | stage ",
6434
- "url": "$CL_GITLAB_ENVIRONMENT_URL",
6435
- },
6436
- "image": "path/to/docker/gcloud:the-version",
6437
- "interruptible": true,
6438
- "needs": [
6439
- {
6440
- "artifacts": false,
6441
- "job": "api 🔨 app | stage ",
6442
- },
6443
- {
6444
- "artifacts": false,
6445
- "job": "api 🔨 docker | stage ",
6446
- },
6447
- {
6448
- "artifacts": true,
6449
- "job": "api 🧾 sbom | stage ",
6450
- },
6451
- ],
6452
- "retry": {
6453
- "max": 2,
6454
- "when": [
6455
- "runner_system_failure",
6456
- "stuck_or_timeout_failure",
6457
- ],
6458
- },
6459
- "rules": [
6460
- {
6461
- "when": "on_success",
6462
- },
6463
- ],
6464
- "script": [
6465
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
6466
- "export ENV_SHORT="stage"",
6467
- "export APP_DIR="api"",
6468
- "export ENV_TYPE="stage"",
6469
- "export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
6470
- "export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
6471
- "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")"",
6472
- "export HOST="$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
6473
- "export ROOT_URL="https://$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
6474
- "export HOST_INTERNAL="$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
6475
- "export HOST_CANONICAL="$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
6476
- "export ROOT_URL_INTERNAL="https://$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
6477
- "export DEPLOY_CLOUD_RUN_PROJECT_ID="asdf"",
6478
- "export DEPLOY_CLOUD_RUN_REGION="asia-east1"",
6479
- "export GCLOUD_DEPLOY_credentialsKey="$CL_stage_api_GCLOUD_DEPLOY_credentialsKey"",
6480
- "export GCLOUD_RUN_canonicalHostSuffix="$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix"",
6481
- "export foo="foo-value"",
6482
- "export multiline="line1
6483
- line2
6484
- line3
6485
-
6486
- single quote: '
6487
- doouble quote: \\"
6488
- "",
6489
- "export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOST\\",\\"ROOT_URL\\",\\"HOST_INTERNAL\\",\\"HOST_CANONICAL\\",\\"ROOT_URL_INTERNAL\\",\\"DEPLOY_CLOUD_RUN_PROJECT_ID\\",\\"DEPLOY_CLOUD_RUN_REGION\\",\\"GCLOUD_DEPLOY_credentialsKey\\",\\"GCLOUD_RUN_canonicalHostSuffix\\",\\"foo\\",\\"multiline\\"]"",
6490
- "export DOCKER_REGISTRY="asia-east1-docker.pkg.dev"",
6491
- "export DOCKER_IMAGE="asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/stage/api"",
6492
- "export DOCKER_CACHE_IMAGE="asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/caches/api"",
6493
- "export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"",
6494
- "export CLOUDSDK_CORE_DISABLE_PROMPTS="1"",
6495
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
6496
- "echo -e "\\e[0Ksection_start:$(date +%s):prepare[collapsed=true]\\r\\e[0KPrepare..."",
6497
- "gcloud auth activate-service-account --key-file=<(echo "$CL_stage_api_GCLOUD_DEPLOY_credentialsKey")",
6498
- "export GCLOUD_PROJECT_NUMBER=$(gcloud projects describe asdf --format="value(projectNumber)")",
6499
- "echo "GCLOUD_PROJECT_NUMBER: $GCLOUD_PROJECT_NUMBER"",
6500
- "echo -e "\\e[0Ksection_end:$(date +%s):prepare\\r\\e[0K"",
6501
- "echo -e "\\e[0Ksection_start:$(date +%s):writeenvvars[collapsed=true]\\r\\e[0KWrite env vars to file"",
6502
- "cat > ____envvars.yaml <<EOF
6503
- ENV_SHORT: |-
6504
- stage
6505
- APP_DIR: |-
6506
- api
6507
- ENV_TYPE: |-
6508
- stage
6509
- BUILD_INFO_BUILD_ID: |-
6510
- $(printf %s "$(git describe --tags 2>/dev/null || git rev-parse HEAD)" | sed 's/^/ /')
6511
- BUILD_INFO_BUILD_TIME: |-
6512
- $(printf %s "$CI_JOB_STARTED_AT" | sed 's/^/ /')
6513
- BUILD_INFO_CURRENT_VERSION: |-
6514
- $(printf %s "$(tag=$(git ls-remote origin "refs/tags/v*[0-9]" 2>/dev/null | cut -f 2- | sort -V | tail -1 | sed 's/refs\\/tags\\/v//'); [ -z "$tag" ] && echo "0.0.0" || echo "$tag")" | sed 's/^/ /')
6515
- HOST: |-
6516
- $(printf %s "$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
6517
- ROOT_URL: |-
6518
- $(printf %s "https://$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
6519
- HOST_INTERNAL: |-
6520
- $(printf %s "$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
6521
- HOST_CANONICAL: |-
6522
- $(printf %s "$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
6523
- ROOT_URL_INTERNAL: |-
6524
- $(printf %s "https://$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
6525
- DEPLOY_CLOUD_RUN_PROJECT_ID: |-
6526
- asdf
6527
- DEPLOY_CLOUD_RUN_REGION: |-
6528
- asia-east1
6529
- GCLOUD_RUN_canonicalHostSuffix: |-
6530
- $(printf %s "$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | sed 's/^/ /')
6531
- foo: |-
6532
- foo-value
6533
- multiline: |
6534
- line1
6535
- line2
6536
- line3
6537
-
6538
- single quote: '
6539
- doouble quote: "
6540
- _ALL_ENV_VAR_KEYS: |-
6541
- ["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","HOST_INTERNAL","HOST_CANONICAL","ROOT_URL_INTERNAL","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix","foo","multiline"]
6542
-
6543
- EOF
6544
- ",
6545
- "echo -e "\\e[0Ksection_end:$(date +%s):writeenvvars\\r\\e[0K"",
6546
- "echo -e "\\e[0Ksection_start:$(date +%s):deploy[collapsed=true]\\r\\e[0KDeploy to cloud run"",
6547
- "gcloud run deploy pan-test-app-stage-api --command="yarn,start" --image=asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/stage/api:$DOCKER_IMAGE_TAG --project=asdf --region=asia-east1 --labels=customer-name=pan,component-name=api,app-name=test-app,env-type=stage,env-name=stage,build-type=node,cloud-run-service-name=pan-test-app-stage-api --env-vars-file=____envvars.yaml --min-instances=0 --max-instances=100 --cpu-throttling --allow-unauthenticated --ingress=all --cpu-boost",
6548
- "echo -e "\\e[0Ksection_end:$(date +%s):deploy\\r\\e[0K"",
6549
- "echo -e "\\e[0Ksection_start:$(date +%s):cleanup[collapsed=true]\\r\\e[0KCleanup"",
6550
- "gcloud run revisions list --project=asdf --region=asia-east1 --service=pan-test-app-stage-api --limit=unlimited --sort-by=metadata.creationTimestamp --format="value(name)" --filter='(status.conditions.status=False OR status.conditions.status=Unknown)' | while read -r revisionname; do gcloud run revisions delete --project=asdf --region=asia-east1 --quiet $revisionname ; done",
6551
- "gcloud artifacts docker images list asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/stage/api --sort-by=~CREATE_TIME --format="value(version)" | tail -n +2 | while read -r version; do gcloud artifacts docker images delete asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/stage/api@$version --quiet --delete-tags; done",
6552
- "gcloud artifacts docker images list asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/caches/api --sort-by=~CREATE_TIME --format="value(version)" | tail -n +2 | while read -r version; do gcloud artifacts docker images delete asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/caches/api@$version --quiet --delete-tags; done",
6553
- "echo -e "\\e[0Ksection_end:$(date +%s):cleanup\\r\\e[0K"",
6554
- "echo 'Uploading SBOM to Dependency Track'",
6555
- "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/api" "https://$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" "__sbom.json" vex.json || true",
6556
- "echo "CL_GITLAB_ENVIRONMENT_URL=https://$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" >> gitlab_environment.env",
6557
- ],
6558
- "stage": "deploy stage",
6559
- "variables": {
6560
- "KUBERNETES_CPU_REQUEST": "0.22",
6561
- "KUBERNETES_MEMORY_LIMIT": "400Mi",
6562
- "KUBERNETES_MEMORY_REQUEST": "200Mi",
6563
- },
6564
- },
6565
- "api 🛑 Stop ⚠️ | prod ": {
6566
- "allow_failure": true,
6567
- "artifacts": {
6568
- "reports": {
6569
- "dotenv": "gitlab_environment.env",
6570
- },
6571
- },
6572
- "environment": {
6573
- "action": "stop",
6574
- "name": "prod/api",
6575
- "url": "$CL_GITLAB_ENVIRONMENT_URL",
6576
- },
6577
- "image": "path/to/docker/gcloud:the-version",
6578
- "interruptible": true,
6579
- "needs": [],
6580
- "retry": {
6581
- "max": 2,
6582
- "when": [
6583
- "runner_system_failure",
6584
- "stuck_or_timeout_failure",
6585
- ],
6586
- },
6587
- "rules": [
6588
- {
6589
- "if": "$CI_COMMIT_BRANCH =~ /^[0-9]+\\.([0-9]+|x)\\.x$/",
6590
- "when": "on_success",
6591
- },
6592
- {
6593
- "when": "manual",
6594
- },
6595
- ],
6596
- "script": [
6597
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
6598
- "export CLOUDSDK_CORE_DISABLE_PROMPTS="1"",
6599
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
6600
- "set +e",
6601
- "gcloud auth activate-service-account --key-file=<(echo "$CL_prod_api_GCLOUD_DEPLOY_credentialsKey")",
6602
- "gcloud run services delete pan-test-app-prod-api --project=asdf --region=asia-east1",
6603
- "gcloud artifacts docker images delete asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/prod/api --quiet --delete-tags",
6604
- "gcloud artifacts docker images list asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/caches/api --sort-by=~CREATE_TIME --format="value(version)" | tail -n +2 | while read -r version; do gcloud artifacts docker images delete asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/caches/api@$version --quiet --delete-tags; done",
6605
- "echo 'Disabling component in Dependency Track'",
6606
- "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" disable "pan-test-app/api" "https://$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" || true",
6607
- "set -e",
6608
- "echo "CL_GITLAB_ENVIRONMENT_URL=https://$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" >> gitlab_environment.env",
6609
- ],
6610
- "stage": "stop prod",
6611
- "variables": {
6612
- "GIT_STRATEGY": "none",
6613
- "KUBERNETES_CPU_REQUEST": "0.22",
6614
- "KUBERNETES_MEMORY_LIMIT": "400Mi",
6615
- "KUBERNETES_MEMORY_REQUEST": "200Mi",
6616
- },
6617
- },
6618
- "api 🛑 Stop ⚠️ | stage ": {
6619
- "allow_failure": true,
6620
- "artifacts": {
6621
- "reports": {
6622
- "dotenv": "gitlab_environment.env",
6623
- },
6624
- },
6625
- "environment": {
6626
- "action": "stop",
6627
- "name": "stage/api",
6628
- "url": "$CL_GITLAB_ENVIRONMENT_URL",
6629
- },
6630
- "image": "path/to/docker/gcloud:the-version",
6631
- "interruptible": true,
6632
- "needs": [],
6633
- "retry": {
6634
- "max": 2,
6635
- "when": [
6636
- "runner_system_failure",
6637
- "stuck_or_timeout_failure",
6638
- ],
6639
- },
6640
- "rules": [
6641
- {
6642
- "if": "$CI_COMMIT_BRANCH =~ /^[0-9]+\\.([0-9]+|x)\\.x$/",
6643
- "when": "on_success",
6644
- },
6645
- {
6646
- "when": "manual",
6647
- },
6648
- ],
6649
- "script": [
6650
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
6651
- "export CLOUDSDK_CORE_DISABLE_PROMPTS="1"",
6652
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
6653
- "set +e",
6654
- "gcloud auth activate-service-account --key-file=<(echo "$CL_stage_api_GCLOUD_DEPLOY_credentialsKey")",
6655
- "gcloud run services delete pan-test-app-stage-api --project=asdf --region=asia-east1",
6656
- "gcloud artifacts docker images delete asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/stage/api --quiet --delete-tags",
6657
- "gcloud artifacts docker images list asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/caches/api --sort-by=~CREATE_TIME --format="value(version)" | tail -n +2 | while read -r version; do gcloud artifacts docker images delete asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/caches/api@$version --quiet --delete-tags; done",
6658
- "echo 'Disabling component in Dependency Track'",
6659
- "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" disable "pan-test-app/api" "https://$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" || true",
6660
- "set -e",
6661
- "echo "CL_GITLAB_ENVIRONMENT_URL=https://$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" >> gitlab_environment.env",
6662
- ],
6663
- "stage": "stop stage",
6664
- "variables": {
6665
- "GIT_STRATEGY": "none",
6666
- "KUBERNETES_CPU_REQUEST": "0.22",
6667
- "KUBERNETES_MEMORY_LIMIT": "400Mi",
6668
- "KUBERNETES_MEMORY_REQUEST": "200Mi",
6669
- },
6670
- },
6671
- "api 🧾 sbom | prod ": {
6672
- "allow_failure": true,
6673
- "artifacts": {
6674
- "paths": [
6675
- "__sbom.json",
6676
- ],
6677
- },
6678
- "image": "aquasec/trivy:0.38.3",
6679
- "interruptible": true,
6680
- "needs": [],
6681
- "retry": {
6682
- "max": 2,
6683
- "when": [
6684
- "runner_system_failure",
6685
- "stuck_or_timeout_failure",
6686
- ],
6687
- },
6688
- "script": [
6689
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
6690
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
6691
- "trivy fs --quiet --format cyclonedx --output "__sbom.json" api",
6692
- ],
6693
- "stage": "build",
6694
- "variables": {},
6695
- },
6696
- "api 🧾 sbom | stage ": {
6697
- "allow_failure": true,
6698
- "artifacts": {
6699
- "paths": [
6700
- "__sbom.json",
6701
- ],
6702
- },
6703
- "image": "aquasec/trivy:0.38.3",
6704
- "interruptible": true,
6705
- "needs": [],
6706
- "retry": {
6707
- "max": 2,
6708
- "when": [
6709
- "runner_system_failure",
6710
- "stuck_or_timeout_failure",
6711
- ],
6712
- },
6713
- "script": [
6714
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
6715
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
6716
- "trivy fs --quiet --format cyclonedx --output "__sbom.json" api",
6717
- ],
6718
- "stage": "build",
6719
- "variables": {},
6720
- },
6721
- "api2 ↩️ Rollback ⚠️ | prod ": {
6722
- "allow_failure": true,
6723
- "artifacts": {
6724
- "reports": {
6725
- "dotenv": "gitlab_environment.env",
6726
- },
6727
- },
6728
- "environment": {
6729
- "action": "access",
6730
- "name": "prod/api2",
6731
- "url": "$CL_GITLAB_ENVIRONMENT_URL",
6732
- },
6733
- "image": "path/to/docker/kubernetes:the-version",
6734
- "interruptible": true,
6735
- "needs": [],
6736
- "retry": {
6737
- "max": 2,
6738
- "when": [
6739
- "runner_system_failure",
6740
- "stuck_or_timeout_failure",
6741
- ],
6742
- },
6743
- "rules": [
6744
- {
6745
- "when": "manual",
6746
- },
6747
- ],
6748
- "script": [
6749
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
6750
- "export ENV_SHORT="prod"",
6751
- "export APP_DIR="api"",
6752
- "export ENV_TYPE="prod"",
6753
- "export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
6754
- "export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
6755
- "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")"",
6756
- "export HOST="api2.prod.test-app.pan.panter.cloud"",
6757
- "export ROOT_URL="https://api2.prod.test-app.pan.panter.cloud"",
6758
- "export HOST_INTERNAL="api2.prod.test-app.pan.panter.cloud"",
6759
- "export HOST_CANONICAL="api2.prod.test-app.pan.panter.cloud"",
6760
- "export ROOT_URL_INTERNAL="https://api2.prod.test-app.pan.panter.cloud"",
6761
- "export KUBE_NAMESPACE="pan-test-app-prod"",
6762
- "export KUBE_APP_NAME="api2"",
6763
- "export KUBE_APP_NAME_PREFIX=""",
6764
- "export multiline_from_api="line1
6765
- line2
6766
- line3
6767
-
6768
- single quote: '
6769
- doouble quote: \\"
6770
- "",
6771
- "export multiline2="yeah
6772
- yeah2
6773
- yeah3
6774
-
6775
- single quote: '
6776
- doouble quote: \\"
6777
- "",
6778
- "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\\",\\"KUBE_NAMESPACE\\",\\"KUBE_APP_NAME\\",\\"KUBE_APP_NAME_PREFIX\\",\\"multiline_from_api\\",\\"multiline2\\"]"",
6779
- "export RELEASE_NAME="pan-test-app-prod-api2"",
6780
- "export HELM_EXPERIMENTAL_OCI="1"",
6781
- "export KUBE_DOCKER_IMAGE_PULL_SECRET="gitlab-registry-api2"",
6782
- "export HELM_GITLAB_CHART_NAME="/helm-charts/the-panter-chart"",
6783
- "export HELM_ARGS=""",
6784
- "export COMPONENT_NAME="api2"",
6785
- "export BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
6786
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
6787
- "kubectl config set-cluster "kube-pan-test-app-prod-api2" --server="$CL_prod_api2_KUBE_URL" --certificate-authority <(echo $CL_prod_api2_KUBE_CA_PEM | base64 -d) --embed-certs=true",
6788
- "kubectl config set-credentials "kube-pan-test-app-prod-api2" --token="$CL_prod_api2_KUBE_TOKEN"",
6789
- "kubectl config set-context "kube-pan-test-app-prod-api2" --cluster="kube-pan-test-app-prod-api2" --user="kube-pan-test-app-prod-api2" --namespace="pan-test-app-prod"",
6790
- "kubectl config use-context "kube-pan-test-app-prod-api2"",
6791
- "kubernetesRollback",
6792
- "echo "CL_GITLAB_ENVIRONMENT_URL=https://api2.prod.test-app.pan.panter.cloud" >> gitlab_environment.env",
6793
- ],
6794
- "stage": "rollback prod",
6795
- "variables": {
6796
- "GIT_STRATEGY": "none",
6797
- "KUBERNETES_CPU_REQUEST": "0.22",
6798
- "KUBERNETES_MEMORY_LIMIT": "400Mi",
6799
- "KUBERNETES_MEMORY_REQUEST": "200Mi",
6800
- },
6801
- },
6802
- "api2 ↩️ Rollback ⚠️ | stage ": {
6803
- "allow_failure": true,
6804
- "artifacts": {
6805
- "reports": {
6806
- "dotenv": "gitlab_environment.env",
6807
- },
6808
- },
6809
- "environment": {
6810
- "action": "access",
6811
- "name": "stage/api2",
6812
- "url": "$CL_GITLAB_ENVIRONMENT_URL",
6813
- },
6814
- "image": "path/to/docker/kubernetes:the-version",
6815
- "interruptible": true,
6816
- "needs": [],
6817
- "retry": {
6818
- "max": 2,
6819
- "when": [
6820
- "runner_system_failure",
6821
- "stuck_or_timeout_failure",
6822
- ],
6823
- },
6824
- "rules": [
6825
- {
6826
- "when": "manual",
6827
- },
6828
- ],
6829
- "script": [
6830
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
6831
- "export ENV_SHORT="stage"",
6832
- "export APP_DIR="api"",
6833
- "export ENV_TYPE="stage"",
6834
- "export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
6835
- "export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
6836
- "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")"",
6837
- "export HOST="api2.stage.test-app.pan.panter.cloud"",
6838
- "export ROOT_URL="https://api2.stage.test-app.pan.panter.cloud"",
6839
- "export HOST_INTERNAL="api2.stage.test-app.pan.panter.cloud"",
6840
- "export HOST_CANONICAL="api2.stage.test-app.pan.panter.cloud"",
6841
- "export ROOT_URL_INTERNAL="https://api2.stage.test-app.pan.panter.cloud"",
6842
- "export KUBE_NAMESPACE="pan-test-app-stage"",
6843
- "export KUBE_APP_NAME="api2"",
6844
- "export KUBE_APP_NAME_PREFIX=""",
6845
- "export multiline_from_api="line1
6846
- line2
6847
- line3
6848
-
6849
- single quote: '
6850
- doouble quote: \\"
6851
- "",
6852
- "export multiline2="yeah
6853
- yeah2
6854
- yeah3
6855
-
6856
- single quote: '
6857
- doouble quote: \\"
6858
- "",
6859
- "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\\",\\"KUBE_NAMESPACE\\",\\"KUBE_APP_NAME\\",\\"KUBE_APP_NAME_PREFIX\\",\\"multiline_from_api\\",\\"multiline2\\"]"",
6860
- "export RELEASE_NAME="pan-test-app-stage-api2"",
6861
- "export HELM_EXPERIMENTAL_OCI="1"",
6862
- "export KUBE_DOCKER_IMAGE_PULL_SECRET="gitlab-registry-api2"",
6863
- "export HELM_GITLAB_CHART_NAME="/helm-charts/the-panter-chart"",
6864
- "export HELM_ARGS=""",
6865
- "export COMPONENT_NAME="api2"",
6866
- "export BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
6867
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
6868
- "kubectl config set-cluster "kube-pan-test-app-stage-api2" --server="$CL_stage_api2_KUBE_URL" --certificate-authority <(echo $CL_stage_api2_KUBE_CA_PEM | base64 -d) --embed-certs=true",
6869
- "kubectl config set-credentials "kube-pan-test-app-stage-api2" --token="$CL_stage_api2_KUBE_TOKEN"",
6870
- "kubectl config set-context "kube-pan-test-app-stage-api2" --cluster="kube-pan-test-app-stage-api2" --user="kube-pan-test-app-stage-api2" --namespace="pan-test-app-stage"",
6871
- "kubectl config use-context "kube-pan-test-app-stage-api2"",
6872
- "kubernetesRollback",
6873
- "echo "CL_GITLAB_ENVIRONMENT_URL=https://api2.stage.test-app.pan.panter.cloud" >> gitlab_environment.env",
6874
- ],
6875
- "stage": "rollback stage",
6876
- "variables": {
6877
- "GIT_STRATEGY": "none",
6878
- "KUBERNETES_CPU_REQUEST": "0.22",
6879
- "KUBERNETES_MEMORY_LIMIT": "400Mi",
6880
- "KUBERNETES_MEMORY_REQUEST": "200Mi",
6881
- },
6882
- },
6883
- "api2 🔨 app | prod ": {
6884
- "artifacts": {
6885
- "expire_in": "1 day",
6886
- "paths": [
6887
- "api/__build_info.json",
6888
- "api/.next",
6889
- "api/dist",
6890
- ],
6891
- "reports": {
6892
- "junit": undefined,
6893
- },
6894
- "when": "always",
6895
- },
6896
- "cache": [
6897
- {
6898
- "key": "api-yarn",
6899
- "paths": [
6900
- "api/.yarn",
6901
- ],
6902
- "policy": "pull-push",
6903
- },
6904
- {
6905
- "key": "api-node-modules",
6906
- "paths": [
6907
- "api/node_modules",
6908
- ],
6909
- "policy": "pull-push",
6910
- },
6911
- {
6912
- "key": "api2-next-cache",
6913
- "paths": [
6914
- "api/.next/cache",
6915
- ],
6916
- "policy": "pull-push",
6917
- },
6918
- ],
6919
- "image": "path/to/docker/jobs-default:the-version",
6920
- "interruptible": true,
6921
- "needs": [],
6922
- "retry": {
6923
- "max": 2,
6924
- "when": [
6925
- "runner_system_failure",
6926
- "stuck_or_timeout_failure",
6927
- ],
6928
- },
6929
- "script": [
6930
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
6931
- "export ENV_SHORT="prod"",
6932
- "export APP_DIR="api"",
6933
- "export ENV_TYPE="prod"",
6934
- "export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
6935
- "export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
6936
- "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")"",
6937
- "export HOST="api2.prod.test-app.pan.panter.cloud"",
6938
- "export ROOT_URL="https://api2.prod.test-app.pan.panter.cloud"",
6939
- "export HOST_INTERNAL="api2.prod.test-app.pan.panter.cloud"",
6940
- "export HOST_CANONICAL="api2.prod.test-app.pan.panter.cloud"",
6941
- "export ROOT_URL_INTERNAL="https://api2.prod.test-app.pan.panter.cloud"",
6942
- "export KUBE_NAMESPACE="pan-test-app-prod"",
6943
- "export KUBE_APP_NAME="api2"",
6944
- "export KUBE_APP_NAME_PREFIX=""",
6945
- "export multiline_from_api="line1
6946
- line2
6947
- line3
6948
-
6949
- single quote: '
6950
- doouble quote: \\"
6951
- "",
6952
- "export multiline2="yeah
6953
- yeah2
6954
- yeah3
6955
-
6956
- single quote: '
6957
- doouble quote: \\"
6958
- "",
6959
- "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\\",\\"KUBE_NAMESPACE\\",\\"KUBE_APP_NAME\\",\\"KUBE_APP_NAME_PREFIX\\",\\"multiline_from_api\\",\\"multiline2\\"]"",
6960
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
6961
- "echo '{"id":"$(git describe --tags 2>/dev/null || git rev-parse HEAD)","time":"$CI_JOB_STARTED_AT"}' > api/__build_info.json",
6962
- "echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"",
6963
- "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
6964
- "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
6965
- "echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"",
6966
- "cd api",
6967
- "echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"",
6968
- "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
6969
- "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
6970
- "echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"",
6971
- "echo -e "\\e[0Ksection_start:$(date +%s):yarninstall[collapsed=true]\\r\\e[0KYarn install"",
6972
- "yarn install --immutable",
6973
- "echo -e "\\e[0Ksection_end:$(date +%s):yarninstall\\r\\e[0K"",
6974
- "yarn build",
6975
- ],
6976
- "stage": "build",
6977
- "variables": {
6978
- "KUBERNETES_CPU_REQUEST": "0.45",
6979
- "KUBERNETES_MEMORY_LIMIT": "4Gi",
6980
- "KUBERNETES_MEMORY_REQUEST": "1Gi",
6981
- },
6982
- },
6983
- "api2 🔨 app | stage ": {
6984
- "artifacts": {
6985
- "expire_in": "1 day",
6986
- "paths": [
6987
- "api/__build_info.json",
6988
- "api/.next",
6989
- "api/dist",
6990
- ],
6991
- "reports": {
6992
- "junit": undefined,
6993
- },
6994
- "when": "always",
6995
- },
6996
- "cache": [
6997
- {
6998
- "key": "api-yarn",
6999
- "paths": [
7000
- "api/.yarn",
7001
- ],
7002
- "policy": "pull-push",
7003
- },
7004
- {
7005
- "key": "api-node-modules",
7006
- "paths": [
7007
- "api/node_modules",
7008
- ],
7009
- "policy": "pull-push",
7010
- },
7011
- {
7012
- "key": "api2-next-cache",
7013
- "paths": [
7014
- "api/.next/cache",
7015
- ],
7016
- "policy": "pull-push",
7017
- },
7018
- ],
7019
- "image": "path/to/docker/jobs-default:the-version",
7020
- "interruptible": true,
7021
- "needs": [],
7022
- "retry": {
7023
- "max": 2,
7024
- "when": [
7025
- "runner_system_failure",
7026
- "stuck_or_timeout_failure",
7027
- ],
7028
- },
7029
- "script": [
7030
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
7031
- "export ENV_SHORT="stage"",
7032
- "export APP_DIR="api"",
7033
- "export ENV_TYPE="stage"",
7034
- "export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
7035
- "export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
7036
- "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")"",
7037
- "export HOST="api2.stage.test-app.pan.panter.cloud"",
7038
- "export ROOT_URL="https://api2.stage.test-app.pan.panter.cloud"",
7039
- "export HOST_INTERNAL="api2.stage.test-app.pan.panter.cloud"",
7040
- "export HOST_CANONICAL="api2.stage.test-app.pan.panter.cloud"",
7041
- "export ROOT_URL_INTERNAL="https://api2.stage.test-app.pan.panter.cloud"",
7042
- "export KUBE_NAMESPACE="pan-test-app-stage"",
7043
- "export KUBE_APP_NAME="api2"",
7044
- "export KUBE_APP_NAME_PREFIX=""",
7045
- "export multiline_from_api="line1
7046
- line2
7047
- line3
7048
-
7049
- single quote: '
7050
- doouble quote: \\"
7051
- "",
7052
- "export multiline2="yeah
7053
- yeah2
7054
- yeah3
7055
-
7056
- single quote: '
7057
- doouble quote: \\"
7058
- "",
7059
- "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\\",\\"KUBE_NAMESPACE\\",\\"KUBE_APP_NAME\\",\\"KUBE_APP_NAME_PREFIX\\",\\"multiline_from_api\\",\\"multiline2\\"]"",
7060
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
7061
- "echo '{"id":"$(git describe --tags 2>/dev/null || git rev-parse HEAD)","time":"$CI_JOB_STARTED_AT"}' > api/__build_info.json",
7062
- "echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"",
7063
- "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
7064
- "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
7065
- "echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"",
7066
- "cd api",
7067
- "echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"",
7068
- "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
7069
- "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
7070
- "echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"",
7071
- "echo -e "\\e[0Ksection_start:$(date +%s):yarninstall[collapsed=true]\\r\\e[0KYarn install"",
7072
- "yarn install --immutable",
7073
- "echo -e "\\e[0Ksection_end:$(date +%s):yarninstall\\r\\e[0K"",
7074
- "yarn build",
7075
- ],
7076
- "stage": "build",
7077
- "variables": {
7078
- "KUBERNETES_CPU_REQUEST": "0.45",
7079
- "KUBERNETES_MEMORY_LIMIT": "4Gi",
7080
- "KUBERNETES_MEMORY_REQUEST": "1Gi",
7081
- },
7082
- },
7083
- "api2 🔨 docker | prod ": {
7084
- "cache": [
7085
- {
7086
- "key": "api-yarn",
7087
- "paths": [
7088
- "api/.yarn",
7089
- ],
7090
- "policy": "pull",
7091
- },
7092
- ],
7093
- "image": "path/to/docker/docker-build:the-version",
7094
- "interruptible": true,
7095
- "needs": [
7096
- "api2 🔨 app | prod ",
7097
- ],
7098
- "retry": {
7099
- "max": 2,
7100
- "when": [
7101
- "runner_system_failure",
7102
- "stuck_or_timeout_failure",
7103
- ],
7104
- },
7105
- "script": [
7106
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
7107
- "export APP_DIR="api"",
7108
- "export DOCKER_BUILD_CONTEXT="."",
7109
- "export DOCKER_REGISTRY="$CI_REGISTRY"",
7110
- "export DOCKER_CACHE_IMAGE="$CI_REGISTRY_IMAGE/caches/api2"",
7111
- "export DOCKER_IMAGE_NAME="prod/api2"",
7112
- "export DOCKER_IMAGE="$CI_REGISTRY_IMAGE/$DOCKER_IMAGE_NAME"",
7113
- "export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"",
7114
- "export DOCKER_COPY_AND_INSTALL_APP="COPY --chown=node:node $APP_DIR .
7115
- RUN yarn plugin import workspace-tools
7116
- RUN yarn workspaces focus --production && yarn rebuild"",
7117
- "export DOCKER_COPY_WORKSPACE_FILES="COPY --chown=node:node api/package.json /app/api/package.json
7118
- COPY --chown=node:node api/yarn.lock /app/api/yarn.lock
7119
- COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
7120
- COPY --chown=node:node .yarn /app/.yarn"",
7121
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
7122
- "ensureNodeDockerfile",
7123
- "echo -e "\\e[0Ksection_start:$(date +%s):docker-login[collapsed=true]\\r\\e[0KDocker Login"",
7124
- "docker login --username gitlab-ci-token --password $CI_JOB_TOKEN $CI_REGISTRY",
7125
- "echo -e "\\e[0Ksection_end:$(date +%s):docker-login\\r\\e[0K"",
7126
- "echo -e "\\e[0Ksection_start:$(date +%s):docker-build[collapsed=true]\\r\\e[0KDocker build"",
7127
- "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",
7128
- "echo -e "\\e[0Ksection_end:$(date +%s):docker-build\\r\\e[0K"",
7129
- "echo -e "\\e[0Ksection_start:$(date +%s):docker-push[collapsed=true]\\r\\e[0KDocker push and tag"",
7130
- "docker push $DOCKER_IMAGE:$DOCKER_IMAGE_TAG",
7131
- "docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG $DOCKER_CACHE_IMAGE",
7132
- "docker push $DOCKER_CACHE_IMAGE",
7133
- "echo -e "\\e[0Ksection_end:$(date +%s):docker-push\\r\\e[0K"",
7134
- ],
7135
- "services": [
7136
- {
7137
- "command": [
7138
- "--tls=false",
7139
- ],
7140
- "name": "docker:24.0.6-dind",
7141
- },
7142
- ],
7143
- "stage": "build",
7144
- "variables": {
7145
- "DOCKER_BUILDKIT": "1",
7146
- "DOCKER_DRIVER": "overlay2",
7147
- "DOCKER_HOST": "tcp://0.0.0.0:2375",
7148
- "DOCKER_TLS_CERTDIR": "",
7149
- "KUBERNETES_CPU_REQUEST": "0.45",
7150
- "KUBERNETES_MEMORY_LIMIT": "2Gi",
7151
- "KUBERNETES_MEMORY_REQUEST": "1Gi",
7152
- },
7153
- },
7154
- "api2 🔨 docker | stage ": {
7155
- "cache": [
7156
- {
7157
- "key": "api-yarn",
7158
- "paths": [
7159
- "api/.yarn",
7160
- ],
7161
- "policy": "pull",
7162
- },
7163
- ],
7164
- "image": "path/to/docker/docker-build:the-version",
7165
- "interruptible": true,
7166
- "needs": [
7167
- "api2 🔨 app | stage ",
7168
- ],
7169
- "retry": {
7170
- "max": 2,
7171
- "when": [
7172
- "runner_system_failure",
7173
- "stuck_or_timeout_failure",
7174
- ],
7175
- },
7176
- "script": [
7177
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
7178
- "export APP_DIR="api"",
7179
- "export DOCKER_BUILD_CONTEXT="."",
7180
- "export DOCKER_REGISTRY="$CI_REGISTRY"",
7181
- "export DOCKER_CACHE_IMAGE="$CI_REGISTRY_IMAGE/caches/api2"",
7182
- "export DOCKER_IMAGE_NAME="stage/api2"",
7183
- "export DOCKER_IMAGE="$CI_REGISTRY_IMAGE/$DOCKER_IMAGE_NAME"",
7184
- "export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"",
7185
- "export DOCKER_COPY_AND_INSTALL_APP="COPY --chown=node:node $APP_DIR .
7186
- RUN yarn plugin import workspace-tools
7187
- RUN yarn workspaces focus --production && yarn rebuild"",
7188
- "export DOCKER_COPY_WORKSPACE_FILES="COPY --chown=node:node api/package.json /app/api/package.json
7189
- COPY --chown=node:node api/yarn.lock /app/api/yarn.lock
7190
- COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
7191
- COPY --chown=node:node .yarn /app/.yarn"",
7192
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
7193
- "ensureNodeDockerfile",
7194
- "echo -e "\\e[0Ksection_start:$(date +%s):docker-login[collapsed=true]\\r\\e[0KDocker Login"",
7195
- "docker login --username gitlab-ci-token --password $CI_JOB_TOKEN $CI_REGISTRY",
7196
- "echo -e "\\e[0Ksection_end:$(date +%s):docker-login\\r\\e[0K"",
7197
- "echo -e "\\e[0Ksection_start:$(date +%s):docker-build[collapsed=true]\\r\\e[0KDocker build"",
7198
- "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",
7199
- "echo -e "\\e[0Ksection_end:$(date +%s):docker-build\\r\\e[0K"",
7200
- "echo -e "\\e[0Ksection_start:$(date +%s):docker-push[collapsed=true]\\r\\e[0KDocker push and tag"",
7201
- "docker push $DOCKER_IMAGE:$DOCKER_IMAGE_TAG",
7202
- "docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG $DOCKER_CACHE_IMAGE",
7203
- "docker push $DOCKER_CACHE_IMAGE",
7204
- "echo -e "\\e[0Ksection_end:$(date +%s):docker-push\\r\\e[0K"",
7205
- ],
7206
- "services": [
7207
- {
7208
- "command": [
7209
- "--tls=false",
7210
- ],
7211
- "name": "docker:24.0.6-dind",
7212
- },
7213
- ],
7214
- "stage": "build",
7215
- "variables": {
7216
- "DOCKER_BUILDKIT": "1",
7217
- "DOCKER_DRIVER": "overlay2",
7218
- "DOCKER_HOST": "tcp://0.0.0.0:2375",
7219
- "DOCKER_TLS_CERTDIR": "",
7220
- "KUBERNETES_CPU_REQUEST": "0.45",
7221
- "KUBERNETES_MEMORY_LIMIT": "2Gi",
7222
- "KUBERNETES_MEMORY_REQUEST": "1Gi",
7223
- },
7224
- },
7225
- "api2 🚀 Deploy | prod ": {
7226
- "allow_failure": true,
7227
- "artifacts": {
7228
- "reports": {
7229
- "dotenv": "gitlab_environment.env",
7230
- },
7231
- },
7232
- "environment": {
7233
- "auto_stop_in": undefined,
7234
- "name": "prod/api2",
7235
- "on_stop": "api2 🛑 Stop ⚠️ | prod ",
7236
- "url": "$CL_GITLAB_ENVIRONMENT_URL",
7237
- },
7238
- "image": "path/to/docker/kubernetes:the-version",
7239
- "interruptible": true,
7240
- "needs": [
7241
- {
7242
- "artifacts": false,
7243
- "job": "api2 🔨 app | prod ",
7244
- },
7245
- {
7246
- "artifacts": false,
7247
- "job": "api2 🔨 docker | prod ",
7248
- },
7249
- {
7250
- "artifacts": true,
7251
- "job": "api2 🧾 sbom | prod ",
7252
- },
7253
- ],
7254
- "retry": {
7255
- "max": 2,
7256
- "when": [
7257
- "runner_system_failure",
7258
- "stuck_or_timeout_failure",
7259
- ],
7260
- },
7261
- "rules": [
7262
- {
7263
- "when": "manual",
7264
- },
7265
- ],
7266
- "script": [
7267
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
7268
- "export ENV_SHORT="prod"",
7269
- "export APP_DIR="api"",
7270
- "export ENV_TYPE="prod"",
7271
- "export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
7272
- "export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
7273
- "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")"",
7274
- "export HOST="api2.prod.test-app.pan.panter.cloud"",
7275
- "export ROOT_URL="https://api2.prod.test-app.pan.panter.cloud"",
7276
- "export HOST_INTERNAL="api2.prod.test-app.pan.panter.cloud"",
7277
- "export HOST_CANONICAL="api2.prod.test-app.pan.panter.cloud"",
7278
- "export ROOT_URL_INTERNAL="https://api2.prod.test-app.pan.panter.cloud"",
7279
- "export KUBE_NAMESPACE="pan-test-app-prod"",
7280
- "export KUBE_APP_NAME="api2"",
7281
- "export KUBE_APP_NAME_PREFIX=""",
7282
- "export multiline_from_api="line1
7283
- line2
7284
- line3
7285
-
7286
- single quote: '
7287
- doouble quote: \\"
7288
- "",
7289
- "export multiline2="yeah
7290
- yeah2
7291
- yeah3
7292
-
7293
- single quote: '
7294
- doouble quote: \\"
7295
- "",
7296
- "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\\",\\"KUBE_NAMESPACE\\",\\"KUBE_APP_NAME\\",\\"KUBE_APP_NAME_PREFIX\\",\\"multiline_from_api\\",\\"multiline2\\"]"",
7297
- "export DOCKER_REGISTRY="$CI_REGISTRY"",
7298
- "export DOCKER_CACHE_IMAGE="$CI_REGISTRY_IMAGE/caches/api2"",
7299
- "export DOCKER_IMAGE_NAME="prod/api2"",
7300
- "export DOCKER_IMAGE="$CI_REGISTRY_IMAGE/$DOCKER_IMAGE_NAME"",
7301
- "export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"",
7302
- "export RELEASE_NAME="pan-test-app-prod-api2"",
7303
- "export HELM_EXPERIMENTAL_OCI="1"",
7304
- "export KUBE_DOCKER_IMAGE_PULL_SECRET="gitlab-registry-api2"",
7305
- "export HELM_GITLAB_CHART_NAME="/helm-charts/the-panter-chart"",
7306
- "export HELM_ARGS=""",
7307
- "export COMPONENT_NAME="api2"",
7308
- "export BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
7309
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
7310
- "kubectl config set-cluster "kube-pan-test-app-prod-api2" --server="$CL_prod_api2_KUBE_URL" --certificate-authority <(echo $CL_prod_api2_KUBE_CA_PEM | base64 -d) --embed-certs=true",
7311
- "kubectl config set-credentials "kube-pan-test-app-prod-api2" --token="$CL_prod_api2_KUBE_TOKEN"",
7312
- "kubectl config set-context "kube-pan-test-app-prod-api2" --cluster="kube-pan-test-app-prod-api2" --user="kube-pan-test-app-prod-api2" --namespace="pan-test-app-prod"",
7313
- "kubectl config use-context "kube-pan-test-app-prod-api2"",
7314
- "echo -e "\\e[0Ksection_start:$(date +%s):writeallvalues[collapsed=true]\\r\\e[0KWrite __all_values.yml for helm deployment"",
7315
- "cat > __all_values.yml <<EOF
7316
- env:
7317
- secret: {}
7318
- public:
7319
- ENV_SHORT: |-
7320
- prod
7321
- APP_DIR: |-
7322
- api
7323
- ENV_TYPE: |-
7324
- prod
7325
- BUILD_INFO_BUILD_ID: |-
7326
- $(printf %s "$(git describe --tags 2>/dev/null || git rev-parse HEAD)" | sed 's/^/ /')
7327
- BUILD_INFO_BUILD_TIME: |-
7328
- $(printf %s "$CI_JOB_STARTED_AT" | sed 's/^/ /')
7329
- BUILD_INFO_CURRENT_VERSION: |-
7330
- $(printf %s "$(tag=$(git ls-remote origin "refs/tags/v*[0-9]" 2>/dev/null | cut -f 2- | sort -V | tail -1 | sed 's/refs\\/tags\\/v//'); [ -z "$tag" ] && echo "0.0.0" || echo "$tag")" | sed 's/^/ /')
7331
- HOST: |-
7332
- api2.prod.test-app.pan.panter.cloud
7333
- ROOT_URL: |-
7334
- https://api2.prod.test-app.pan.panter.cloud
7335
- HOST_INTERNAL: |-
7336
- api2.prod.test-app.pan.panter.cloud
7337
- HOST_CANONICAL: |-
7338
- api2.prod.test-app.pan.panter.cloud
7339
- ROOT_URL_INTERNAL: |-
7340
- https://api2.prod.test-app.pan.panter.cloud
7341
- KUBE_NAMESPACE: |-
7342
- pan-test-app-prod
7343
- KUBE_APP_NAME: |-
7344
- api2
7345
- KUBE_APP_NAME_PREFIX: ""
7346
- multiline_from_api: |
7347
- line1
7348
- line2
7349
- line3
7350
-
7351
- single quote: '
7352
- doouble quote: "
7353
- multiline2: |
7354
- yeah
7355
- yeah2
7356
- yeah3
7357
-
7358
- single quote: '
7359
- doouble quote: "
7360
- _ALL_ENV_VAR_KEYS: |-
7361
- ["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","KUBE_NAMESPACE","KUBE_APP_NAME","KUBE_APP_NAME_PREFIX","multiline_from_api","multiline2"]
7362
- application:
7363
- host: |-
7364
- api2.prod.test-app.pan.panter.cloud
7365
- command: |-
7366
- yarn start
7367
- livenessProbe:
7368
- httpGet:
7369
- path: |-
7370
- __health
7371
- readinessProbe:
7372
- httpGet:
7373
- path: |-
7374
- __health
7375
- startupProbe:
7376
- httpGet:
7377
- path: |-
7378
- __health
7379
-
7380
- EOF
7381
- ",
7382
- "echo -e "\\e[0Ksection_end:$(date +%s):writeallvalues\\r\\e[0K"",
7383
- "kubernetesCreateSecret",
7384
- "kubernetesDeploy",
7385
- "echo 'Uploading SBOM to Dependency Track'",
7386
- "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/api2" "https://api2.prod.test-app.pan.panter.cloud" "__sbom.json" vex.json || true",
7387
- "echo deployment successful 😻",
7388
- "echo "CL_GITLAB_ENVIRONMENT_URL=https://api2.prod.test-app.pan.panter.cloud" >> gitlab_environment.env",
7389
- ],
7390
- "stage": "deploy prod",
7391
- "variables": {
7392
- "KUBERNETES_CPU_REQUEST": "0.22",
7393
- "KUBERNETES_MEMORY_LIMIT": "400Mi",
7394
- "KUBERNETES_MEMORY_REQUEST": "200Mi",
7395
- },
7396
- },
7397
- "api2 🚀 Deploy | stage ": {
7398
- "allow_failure": false,
7399
- "artifacts": {
7400
- "reports": {
7401
- "dotenv": "gitlab_environment.env",
7402
- },
7403
- },
7404
- "environment": {
7405
- "auto_stop_in": undefined,
7406
- "name": "stage/api2",
7407
- "on_stop": "api2 🛑 Stop ⚠️ | stage ",
7408
- "url": "$CL_GITLAB_ENVIRONMENT_URL",
7409
- },
7410
- "image": "path/to/docker/kubernetes:the-version",
7411
- "interruptible": true,
7412
- "needs": [
7413
- {
7414
- "artifacts": false,
7415
- "job": "api2 🔨 app | stage ",
7416
- },
7417
- {
7418
- "artifacts": false,
7419
- "job": "api2 🔨 docker | stage ",
7420
- },
7421
- {
7422
- "artifacts": true,
7423
- "job": "api2 🧾 sbom | stage ",
7424
- },
7425
- ],
7426
- "retry": {
7427
- "max": 2,
7428
- "when": [
7429
- "runner_system_failure",
7430
- "stuck_or_timeout_failure",
7431
- ],
7432
- },
7433
- "rules": [
7434
- {
7435
- "when": "on_success",
7436
- },
7437
- ],
7438
- "script": [
7439
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
7440
- "export ENV_SHORT="stage"",
7441
- "export APP_DIR="api"",
7442
- "export ENV_TYPE="stage"",
7443
- "export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
7444
- "export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
7445
- "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")"",
7446
- "export HOST="api2.stage.test-app.pan.panter.cloud"",
7447
- "export ROOT_URL="https://api2.stage.test-app.pan.panter.cloud"",
7448
- "export HOST_INTERNAL="api2.stage.test-app.pan.panter.cloud"",
7449
- "export HOST_CANONICAL="api2.stage.test-app.pan.panter.cloud"",
7450
- "export ROOT_URL_INTERNAL="https://api2.stage.test-app.pan.panter.cloud"",
7451
- "export KUBE_NAMESPACE="pan-test-app-stage"",
7452
- "export KUBE_APP_NAME="api2"",
7453
- "export KUBE_APP_NAME_PREFIX=""",
7454
- "export multiline_from_api="line1
7455
- line2
7456
- line3
7457
-
7458
- single quote: '
7459
- doouble quote: \\"
7460
- "",
7461
- "export multiline2="yeah
7462
- yeah2
7463
- yeah3
7464
-
7465
- single quote: '
7466
- doouble quote: \\"
7467
- "",
7468
- "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\\",\\"KUBE_NAMESPACE\\",\\"KUBE_APP_NAME\\",\\"KUBE_APP_NAME_PREFIX\\",\\"multiline_from_api\\",\\"multiline2\\"]"",
7469
- "export DOCKER_REGISTRY="$CI_REGISTRY"",
7470
- "export DOCKER_CACHE_IMAGE="$CI_REGISTRY_IMAGE/caches/api2"",
7471
- "export DOCKER_IMAGE_NAME="stage/api2"",
7472
- "export DOCKER_IMAGE="$CI_REGISTRY_IMAGE/$DOCKER_IMAGE_NAME"",
7473
- "export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"",
7474
- "export RELEASE_NAME="pan-test-app-stage-api2"",
7475
- "export HELM_EXPERIMENTAL_OCI="1"",
7476
- "export KUBE_DOCKER_IMAGE_PULL_SECRET="gitlab-registry-api2"",
7477
- "export HELM_GITLAB_CHART_NAME="/helm-charts/the-panter-chart"",
7478
- "export HELM_ARGS=""",
7479
- "export COMPONENT_NAME="api2"",
7480
- "export BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
7481
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
7482
- "kubectl config set-cluster "kube-pan-test-app-stage-api2" --server="$CL_stage_api2_KUBE_URL" --certificate-authority <(echo $CL_stage_api2_KUBE_CA_PEM | base64 -d) --embed-certs=true",
7483
- "kubectl config set-credentials "kube-pan-test-app-stage-api2" --token="$CL_stage_api2_KUBE_TOKEN"",
7484
- "kubectl config set-context "kube-pan-test-app-stage-api2" --cluster="kube-pan-test-app-stage-api2" --user="kube-pan-test-app-stage-api2" --namespace="pan-test-app-stage"",
7485
- "kubectl config use-context "kube-pan-test-app-stage-api2"",
7486
- "echo -e "\\e[0Ksection_start:$(date +%s):writeallvalues[collapsed=true]\\r\\e[0KWrite __all_values.yml for helm deployment"",
7487
- "cat > __all_values.yml <<EOF
7488
- env:
7489
- secret: {}
7490
- public:
7491
- ENV_SHORT: |-
7492
- stage
7493
- APP_DIR: |-
7494
- api
7495
- ENV_TYPE: |-
7496
- stage
7497
- BUILD_INFO_BUILD_ID: |-
7498
- $(printf %s "$(git describe --tags 2>/dev/null || git rev-parse HEAD)" | sed 's/^/ /')
7499
- BUILD_INFO_BUILD_TIME: |-
7500
- $(printf %s "$CI_JOB_STARTED_AT" | sed 's/^/ /')
7501
- BUILD_INFO_CURRENT_VERSION: |-
7502
- $(printf %s "$(tag=$(git ls-remote origin "refs/tags/v*[0-9]" 2>/dev/null | cut -f 2- | sort -V | tail -1 | sed 's/refs\\/tags\\/v//'); [ -z "$tag" ] && echo "0.0.0" || echo "$tag")" | sed 's/^/ /')
7503
- HOST: |-
7504
- api2.stage.test-app.pan.panter.cloud
7505
- ROOT_URL: |-
7506
- https://api2.stage.test-app.pan.panter.cloud
7507
- HOST_INTERNAL: |-
7508
- api2.stage.test-app.pan.panter.cloud
7509
- HOST_CANONICAL: |-
7510
- api2.stage.test-app.pan.panter.cloud
7511
- ROOT_URL_INTERNAL: |-
7512
- https://api2.stage.test-app.pan.panter.cloud
7513
- KUBE_NAMESPACE: |-
7514
- pan-test-app-stage
7515
- KUBE_APP_NAME: |-
7516
- api2
7517
- KUBE_APP_NAME_PREFIX: ""
7518
- multiline_from_api: |
7519
- line1
7520
- line2
7521
- line3
7522
-
7523
- single quote: '
7524
- doouble quote: "
7525
- multiline2: |
7526
- yeah
7527
- yeah2
7528
- yeah3
7529
-
7530
- single quote: '
7531
- doouble quote: "
7532
- _ALL_ENV_VAR_KEYS: |-
7533
- ["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","KUBE_NAMESPACE","KUBE_APP_NAME","KUBE_APP_NAME_PREFIX","multiline_from_api","multiline2"]
7534
- application:
7535
- host: |-
7536
- api2.stage.test-app.pan.panter.cloud
7537
- command: |-
7538
- yarn start
7539
- livenessProbe:
7540
- httpGet:
7541
- path: |-
7542
- __health
7543
- readinessProbe:
7544
- httpGet:
7545
- path: |-
7546
- __health
7547
- startupProbe:
7548
- httpGet:
7549
- path: |-
7550
- __health
7551
-
7552
- EOF
7553
- ",
7554
- "echo -e "\\e[0Ksection_end:$(date +%s):writeallvalues\\r\\e[0K"",
7555
- "kubernetesCreateSecret",
7556
- "kubernetesDeploy",
7557
- "echo 'Uploading SBOM to Dependency Track'",
7558
- "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/api2" "https://api2.stage.test-app.pan.panter.cloud" "__sbom.json" vex.json || true",
7559
- "echo deployment successful 😻",
7560
- "echo "CL_GITLAB_ENVIRONMENT_URL=https://api2.stage.test-app.pan.panter.cloud" >> gitlab_environment.env",
7561
- ],
7562
- "stage": "deploy stage",
7563
- "variables": {
7564
- "KUBERNETES_CPU_REQUEST": "0.22",
7565
- "KUBERNETES_MEMORY_LIMIT": "400Mi",
7566
- "KUBERNETES_MEMORY_REQUEST": "200Mi",
7567
- },
7568
- },
7569
- "api2 🛑 Stop ⚠️ | prod ": {
7570
- "allow_failure": true,
7571
- "artifacts": {
7572
- "reports": {
7573
- "dotenv": "gitlab_environment.env",
7574
- },
7575
- },
7576
- "environment": {
7577
- "action": "stop",
7578
- "name": "prod/api2",
7579
- "url": "$CL_GITLAB_ENVIRONMENT_URL",
7580
- },
7581
- "image": "path/to/docker/kubernetes:the-version",
7582
- "interruptible": true,
7583
- "needs": [],
7584
- "retry": {
7585
- "max": 2,
7586
- "when": [
7587
- "runner_system_failure",
7588
- "stuck_or_timeout_failure",
7589
- ],
7590
- },
7591
- "rules": [
7592
- {
7593
- "if": "$CI_COMMIT_BRANCH =~ /^[0-9]+\\.([0-9]+|x)\\.x$/",
7594
- "when": "on_success",
7595
- },
7596
- {
7597
- "when": "manual",
7598
- },
7599
- ],
7600
- "script": [
7601
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
7602
- "export ENV_SHORT="prod"",
7603
- "export APP_DIR="api"",
7604
- "export ENV_TYPE="prod"",
7605
- "export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
7606
- "export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
7607
- "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")"",
7608
- "export HOST="api2.prod.test-app.pan.panter.cloud"",
7609
- "export ROOT_URL="https://api2.prod.test-app.pan.panter.cloud"",
7610
- "export HOST_INTERNAL="api2.prod.test-app.pan.panter.cloud"",
7611
- "export HOST_CANONICAL="api2.prod.test-app.pan.panter.cloud"",
7612
- "export ROOT_URL_INTERNAL="https://api2.prod.test-app.pan.panter.cloud"",
7613
- "export KUBE_NAMESPACE="pan-test-app-prod"",
7614
- "export KUBE_APP_NAME="api2"",
7615
- "export KUBE_APP_NAME_PREFIX=""",
7616
- "export multiline_from_api="line1
7617
- line2
7618
- line3
7619
-
7620
- single quote: '
7621
- doouble quote: \\"
7622
- "",
7623
- "export multiline2="yeah
7624
- yeah2
7625
- yeah3
7626
-
7627
- single quote: '
7628
- doouble quote: \\"
7629
- "",
7630
- "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\\",\\"KUBE_NAMESPACE\\",\\"KUBE_APP_NAME\\",\\"KUBE_APP_NAME_PREFIX\\",\\"multiline_from_api\\",\\"multiline2\\"]"",
7631
- "export RELEASE_NAME="pan-test-app-prod-api2"",
7632
- "export HELM_EXPERIMENTAL_OCI="1"",
7633
- "export KUBE_DOCKER_IMAGE_PULL_SECRET="gitlab-registry-api2"",
7634
- "export HELM_GITLAB_CHART_NAME="/helm-charts/the-panter-chart"",
7635
- "export HELM_ARGS=""",
7636
- "export COMPONENT_NAME="api2"",
7637
- "export BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
7638
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
7639
- "kubectl config set-cluster "kube-pan-test-app-prod-api2" --server="$CL_prod_api2_KUBE_URL" --certificate-authority <(echo $CL_prod_api2_KUBE_CA_PEM | base64 -d) --embed-certs=true",
7640
- "kubectl config set-credentials "kube-pan-test-app-prod-api2" --token="$CL_prod_api2_KUBE_TOKEN"",
7641
- "kubectl config set-context "kube-pan-test-app-prod-api2" --cluster="kube-pan-test-app-prod-api2" --user="kube-pan-test-app-prod-api2" --namespace="pan-test-app-prod"",
7642
- "kubectl config use-context "kube-pan-test-app-prod-api2"",
7643
- "kubernetesDelete",
7644
- "echo 'Disabling component in Dependency Track'",
7645
- "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" disable "pan-test-app/api2" "https://api2.prod.test-app.pan.panter.cloud" || true",
7646
- "echo "CL_GITLAB_ENVIRONMENT_URL=https://api2.prod.test-app.pan.panter.cloud" >> gitlab_environment.env",
7647
- ],
7648
- "stage": "stop prod",
7649
- "variables": {
7650
- "GIT_STRATEGY": "none",
7651
- "KUBERNETES_CPU_REQUEST": "0.22",
7652
- "KUBERNETES_MEMORY_LIMIT": "400Mi",
7653
- "KUBERNETES_MEMORY_REQUEST": "200Mi",
7654
- },
7655
- },
7656
- "api2 🛑 Stop ⚠️ | stage ": {
7657
- "allow_failure": true,
7658
- "artifacts": {
7659
- "reports": {
7660
- "dotenv": "gitlab_environment.env",
7661
- },
7662
- },
7663
- "environment": {
7664
- "action": "stop",
7665
- "name": "stage/api2",
7666
- "url": "$CL_GITLAB_ENVIRONMENT_URL",
7667
- },
7668
- "image": "path/to/docker/kubernetes:the-version",
7669
- "interruptible": true,
7670
- "needs": [],
7671
- "retry": {
7672
- "max": 2,
7673
- "when": [
7674
- "runner_system_failure",
7675
- "stuck_or_timeout_failure",
7676
- ],
7677
- },
7678
- "rules": [
7679
- {
7680
- "if": "$CI_COMMIT_BRANCH =~ /^[0-9]+\\.([0-9]+|x)\\.x$/",
7681
- "when": "on_success",
7682
- },
7683
- {
7684
- "when": "manual",
7685
- },
7686
- ],
7687
- "script": [
7688
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
7689
- "export ENV_SHORT="stage"",
7690
- "export APP_DIR="api"",
7691
- "export ENV_TYPE="stage"",
7692
- "export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
7693
- "export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
7694
- "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")"",
7695
- "export HOST="api2.stage.test-app.pan.panter.cloud"",
7696
- "export ROOT_URL="https://api2.stage.test-app.pan.panter.cloud"",
7697
- "export HOST_INTERNAL="api2.stage.test-app.pan.panter.cloud"",
7698
- "export HOST_CANONICAL="api2.stage.test-app.pan.panter.cloud"",
7699
- "export ROOT_URL_INTERNAL="https://api2.stage.test-app.pan.panter.cloud"",
7700
- "export KUBE_NAMESPACE="pan-test-app-stage"",
7701
- "export KUBE_APP_NAME="api2"",
7702
- "export KUBE_APP_NAME_PREFIX=""",
7703
- "export multiline_from_api="line1
7704
- line2
7705
- line3
7706
-
7707
- single quote: '
7708
- doouble quote: \\"
7709
- "",
7710
- "export multiline2="yeah
7711
- yeah2
7712
- yeah3
7713
-
7714
- single quote: '
7715
- doouble quote: \\"
7716
- "",
7717
- "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\\",\\"KUBE_NAMESPACE\\",\\"KUBE_APP_NAME\\",\\"KUBE_APP_NAME_PREFIX\\",\\"multiline_from_api\\",\\"multiline2\\"]"",
7718
- "export RELEASE_NAME="pan-test-app-stage-api2"",
7719
- "export HELM_EXPERIMENTAL_OCI="1"",
7720
- "export KUBE_DOCKER_IMAGE_PULL_SECRET="gitlab-registry-api2"",
7721
- "export HELM_GITLAB_CHART_NAME="/helm-charts/the-panter-chart"",
7722
- "export HELM_ARGS=""",
7723
- "export COMPONENT_NAME="api2"",
7724
- "export BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
7725
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
7726
- "kubectl config set-cluster "kube-pan-test-app-stage-api2" --server="$CL_stage_api2_KUBE_URL" --certificate-authority <(echo $CL_stage_api2_KUBE_CA_PEM | base64 -d) --embed-certs=true",
7727
- "kubectl config set-credentials "kube-pan-test-app-stage-api2" --token="$CL_stage_api2_KUBE_TOKEN"",
7728
- "kubectl config set-context "kube-pan-test-app-stage-api2" --cluster="kube-pan-test-app-stage-api2" --user="kube-pan-test-app-stage-api2" --namespace="pan-test-app-stage"",
7729
- "kubectl config use-context "kube-pan-test-app-stage-api2"",
7730
- "kubernetesDelete",
7731
- "echo 'Disabling component in Dependency Track'",
7732
- "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" disable "pan-test-app/api2" "https://api2.stage.test-app.pan.panter.cloud" || true",
7733
- "echo "CL_GITLAB_ENVIRONMENT_URL=https://api2.stage.test-app.pan.panter.cloud" >> gitlab_environment.env",
7734
- ],
7735
- "stage": "stop stage",
7736
- "variables": {
7737
- "GIT_STRATEGY": "none",
7738
- "KUBERNETES_CPU_REQUEST": "0.22",
7739
- "KUBERNETES_MEMORY_LIMIT": "400Mi",
7740
- "KUBERNETES_MEMORY_REQUEST": "200Mi",
7741
- },
7742
- },
7743
- "api2 🧾 sbom | prod ": {
7744
- "allow_failure": true,
7745
- "artifacts": {
7746
- "paths": [
7747
- "__sbom.json",
7748
- ],
7749
- },
7750
- "image": "aquasec/trivy:0.38.3",
7751
- "interruptible": true,
7752
- "needs": [],
7753
- "retry": {
7754
- "max": 2,
7755
- "when": [
7756
- "runner_system_failure",
7757
- "stuck_or_timeout_failure",
7758
- ],
7759
- },
7760
- "script": [
7761
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
7762
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
7763
- "trivy fs --quiet --format cyclonedx --output "__sbom.json" api",
7764
- ],
7765
- "stage": "build",
7766
- "variables": {},
7767
- },
7768
- "api2 🧾 sbom | stage ": {
7769
- "allow_failure": true,
7770
- "artifacts": {
7771
- "paths": [
7772
- "__sbom.json",
7773
- ],
7774
- },
7775
- "image": "aquasec/trivy:0.38.3",
7776
- "interruptible": true,
7777
- "needs": [],
7778
- "retry": {
7779
- "max": 2,
7780
- "when": [
7781
- "runner_system_failure",
7782
- "stuck_or_timeout_failure",
7783
- ],
7784
- },
7785
- "script": [
7786
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
7787
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
7788
- "trivy fs --quiet --format cyclonedx --output "__sbom.json" api",
7789
- ],
7790
- "stage": "build",
7791
- "variables": {},
7792
- },
7793
- },
7794
- "stages": [
7795
- "setup",
7796
- "setup dev",
7797
- "setup review",
7798
- "setup stage",
7799
- "setup prod",
7800
- "test",
7801
- "test dev",
7802
- "test review",
7803
- "test stage",
7804
- "test prod",
7805
- "build",
7806
- "build dev",
7807
- "build review",
7808
- "build stage",
7809
- "build prod",
7810
- "deploy",
7811
- "deploy dev",
7812
- "deploy review",
7813
- "deploy stage",
7814
- "deploy prod",
7815
- "verify",
7816
- "verify dev",
7817
- "verify review",
7818
- "verify stage",
7819
- "verify prod",
7820
- "rollback",
7821
- "rollback dev",
7822
- "rollback review",
7823
- "rollback stage",
7824
- "rollback prod",
7825
- "stop",
7826
- "stop dev",
7827
- "stop review",
7828
- "stop stage",
7829
- "stop prod",
7830
- ],
7831
- "variables": {
7832
- "ARTIFACT_COMPRESSION_LEVEL": "fast",
7833
- "CACHE_COMPRESSION_LEVEL": "fast",
7834
- "FF_USE_FASTZIP": "true",
7835
- "GIT_DEPTH": "1",
7836
- "TRANSFER_METER_FREQUENCY": "5s",
7837
- },
7838
- "workflow": {
7839
- "rules": [
7840
- {
7841
- "if": "$CI_COMMIT_TAG",
7842
- },
7843
- {
7844
- "if": "$CI_COMMIT_MESSAGE =~ /^chore\\(release\\).*/",
7845
- "when": "never",
7846
- },
7847
- {
7848
- "if": "$CI_PIPELINE_SOURCE == "schedule"",
7849
- "when": "never",
7850
- },
7851
- {
7852
- "if": "$CI_COMMIT_BRANCH =~ /^[0-9]+.([0-9]+|x).x$/",
7853
- },
7854
- {
7855
- "if": "$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH",
7856
- },
7857
- {
7858
- "if": "$CI_MERGE_REQUEST_ID",
7859
- },
7860
- ],
7861
- },
7862
- },
7863
- }
7864
- `;