@catladder/pipeline 1.163.1 → 1.164.0

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