@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 cloud-run-no-service local pipeline YAML 1`] = `
4
4
  "image: path/to/docker/jobs-default:the-version
5
5
  stages:
6
6
  - setup
@@ -1392,2013 +1392,3 @@ create release:
1392
1392
  needs: []
1393
1393
  "
1394
1394
  `;
1395
-
1396
- exports[`matches snapshot for cloud-run-no-service 1`] = `
1397
- {
1398
- "mainBranch": {
1399
- "image": "path/to/docker/jobs-default:the-version",
1400
- "jobs": {
1401
- "api 👮 lint": {
1402
- "cache": [
1403
- {
1404
- "key": "app-yarn",
1405
- "paths": [
1406
- "app/.yarn",
1407
- ],
1408
- "policy": "pull-push",
1409
- },
1410
- {
1411
- "key": "app-node-modules",
1412
- "paths": [
1413
- "app/node_modules",
1414
- ],
1415
- "policy": "pull-push",
1416
- },
1417
- ],
1418
- "image": "path/to/docker/jobs-default:the-version",
1419
- "interruptible": true,
1420
- "needs": [],
1421
- "retry": {
1422
- "max": 2,
1423
- "when": [
1424
- "runner_system_failure",
1425
- "stuck_or_timeout_failure",
1426
- ],
1427
- },
1428
- "script": [
1429
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
1430
- "export APP_PATH="app"",
1431
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
1432
- "echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"",
1433
- "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
1434
- "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
1435
- "echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"",
1436
- "cd app",
1437
- "echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"",
1438
- "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
1439
- "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
1440
- "echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"",
1441
- "echo -e "\\e[0Ksection_start:$(date +%s):yarninstall[collapsed=true]\\r\\e[0KYarn install"",
1442
- "yarn install --immutable",
1443
- "echo -e "\\e[0Ksection_end:$(date +%s):yarninstall\\r\\e[0K"",
1444
- "yarn lint",
1445
- ],
1446
- "stage": "test",
1447
- "variables": {
1448
- "KUBERNETES_CPU_REQUEST": "0.45",
1449
- "KUBERNETES_MEMORY_LIMIT": "4Gi",
1450
- "KUBERNETES_MEMORY_REQUEST": "1Gi",
1451
- },
1452
- },
1453
- "api 🔨 app | dev ": {
1454
- "artifacts": {
1455
- "expire_in": "1 day",
1456
- "paths": [
1457
- "app/__build_info.json",
1458
- "app/.next",
1459
- "app/dist",
1460
- ],
1461
- "reports": {
1462
- "junit": undefined,
1463
- },
1464
- "when": "always",
1465
- },
1466
- "cache": [
1467
- {
1468
- "key": "app-yarn",
1469
- "paths": [
1470
- "app/.yarn",
1471
- ],
1472
- "policy": "pull-push",
1473
- },
1474
- {
1475
- "key": "app-node-modules",
1476
- "paths": [
1477
- "app/node_modules",
1478
- ],
1479
- "policy": "pull-push",
1480
- },
1481
- {
1482
- "key": "api-next-cache",
1483
- "paths": [
1484
- "app/.next/cache",
1485
- ],
1486
- "policy": "pull-push",
1487
- },
1488
- ],
1489
- "image": "path/to/docker/jobs-default:the-version",
1490
- "interruptible": true,
1491
- "needs": [],
1492
- "retry": {
1493
- "max": 2,
1494
- "when": [
1495
- "runner_system_failure",
1496
- "stuck_or_timeout_failure",
1497
- ],
1498
- },
1499
- "script": [
1500
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
1501
- "export ENV_SHORT="dev"",
1502
- "export APP_DIR="app"",
1503
- "export ENV_TYPE="dev"",
1504
- "export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
1505
- "export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
1506
- "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")"",
1507
- "export HOST="$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
1508
- "export ROOT_URL="https://$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
1509
- "export HOST_INTERNAL="$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
1510
- "export HOST_CANONICAL="$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
1511
- "export ROOT_URL_INTERNAL="https://$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
1512
- "export CLOUD_RUN_JOB_TRIGGER_URL_alarm_clock="https://asia-east1-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/asdf/jobs/pan-test-app-dev-api-alarm-clock:run"",
1513
- "export DEPLOY_CLOUD_RUN_PROJECT_ID="asdf"",
1514
- "export DEPLOY_CLOUD_RUN_REGION="asia-east1"",
1515
- "export GCLOUD_DEPLOY_credentialsKey="$CL_dev_api_GCLOUD_DEPLOY_credentialsKey"",
1516
- "export GCLOUD_RUN_canonicalHostSuffix="$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix"",
1517
- "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\\",\\"CLOUD_RUN_JOB_TRIGGER_URL_alarm_clock\\",\\"DEPLOY_CLOUD_RUN_PROJECT_ID\\",\\"DEPLOY_CLOUD_RUN_REGION\\",\\"GCLOUD_DEPLOY_credentialsKey\\",\\"GCLOUD_RUN_canonicalHostSuffix\\"]"",
1518
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
1519
- "echo '{"id":"$(git describe --tags 2>/dev/null || git rev-parse HEAD)","time":"$CI_JOB_STARTED_AT"}' > app/__build_info.json",
1520
- "echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"",
1521
- "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
1522
- "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
1523
- "echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"",
1524
- "cd app",
1525
- "echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"",
1526
- "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
1527
- "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
1528
- "echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"",
1529
- "echo -e "\\e[0Ksection_start:$(date +%s):yarninstall[collapsed=true]\\r\\e[0KYarn install"",
1530
- "yarn install --immutable",
1531
- "echo -e "\\e[0Ksection_end:$(date +%s):yarninstall\\r\\e[0K"",
1532
- "yarn build",
1533
- ],
1534
- "stage": "build",
1535
- "variables": {
1536
- "KUBERNETES_CPU_REQUEST": "0.45",
1537
- "KUBERNETES_MEMORY_LIMIT": "4Gi",
1538
- "KUBERNETES_MEMORY_REQUEST": "1Gi",
1539
- },
1540
- },
1541
- "api 🔨 docker | dev ": {
1542
- "cache": [
1543
- {
1544
- "key": "app-yarn",
1545
- "paths": [
1546
- "app/.yarn",
1547
- ],
1548
- "policy": "pull",
1549
- },
1550
- ],
1551
- "image": "path/to/docker/docker-build:the-version",
1552
- "interruptible": true,
1553
- "needs": [
1554
- "api 🔨 app | dev ",
1555
- ],
1556
- "retry": {
1557
- "max": 2,
1558
- "when": [
1559
- "runner_system_failure",
1560
- "stuck_or_timeout_failure",
1561
- ],
1562
- },
1563
- "script": [
1564
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
1565
- "export APP_DIR="app"",
1566
- "export DOCKER_BUILD_CONTEXT="."",
1567
- "export DOCKER_REGISTRY="asia-east1-docker.pkg.dev"",
1568
- "export DOCKER_IMAGE="asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/dev/api"",
1569
- "export DOCKER_CACHE_IMAGE="asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/caches/api"",
1570
- "export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"",
1571
- "export DOCKER_COPY_AND_INSTALL_APP="COPY --chown=node:node $APP_DIR .
1572
- RUN yarn plugin import workspace-tools
1573
- RUN yarn workspaces focus --production && yarn rebuild"",
1574
- "export DOCKER_COPY_WORKSPACE_FILES="COPY --chown=node:node app/package.json /app/app/package.json
1575
- COPY --chown=node:node app/yarn.lock /app/app/yarn.lock
1576
- COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
1577
- COPY --chown=node:node .yarn /app/.yarn"",
1578
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
1579
- "ensureNodeDockerfile",
1580
- "echo -e "\\e[0Ksection_start:$(date +%s):docker-login[collapsed=true]\\r\\e[0KDocker Login"",
1581
- "gcloud auth activate-service-account --key-file=<(echo "$CL_dev_api_GCLOUD_DEPLOY_credentialsKey")",
1582
- "gcloud auth configure-docker asia-east1-docker.pkg.dev",
1583
- "echo -e "\\e[0Ksection_end:$(date +%s):docker-login\\r\\e[0K"",
1584
- "echo -e "\\e[0Ksection_start:$(date +%s):docker-build[collapsed=true]\\r\\e[0KDocker build"",
1585
- "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",
1586
- "echo -e "\\e[0Ksection_end:$(date +%s):docker-build\\r\\e[0K"",
1587
- "echo -e "\\e[0Ksection_start:$(date +%s):docker-push[collapsed=true]\\r\\e[0KDocker push and tag"",
1588
- "docker push $DOCKER_IMAGE:$DOCKER_IMAGE_TAG",
1589
- "docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG $DOCKER_CACHE_IMAGE",
1590
- "docker push $DOCKER_CACHE_IMAGE",
1591
- "echo -e "\\e[0Ksection_end:$(date +%s):docker-push\\r\\e[0K"",
1592
- ],
1593
- "services": [
1594
- {
1595
- "command": [
1596
- "--tls=false",
1597
- ],
1598
- "name": "docker:24.0.6-dind",
1599
- },
1600
- ],
1601
- "stage": "build",
1602
- "variables": {
1603
- "DOCKER_BUILDKIT": "1",
1604
- "DOCKER_DRIVER": "overlay2",
1605
- "DOCKER_HOST": "tcp://0.0.0.0:2375",
1606
- "DOCKER_TLS_CERTDIR": "",
1607
- "KUBERNETES_CPU_REQUEST": "0.45",
1608
- "KUBERNETES_MEMORY_LIMIT": "2Gi",
1609
- "KUBERNETES_MEMORY_REQUEST": "1Gi",
1610
- },
1611
- },
1612
- "api 🚀 Deploy | dev ": {
1613
- "allow_failure": false,
1614
- "artifacts": {
1615
- "reports": {
1616
- "dotenv": "gitlab_environment.env",
1617
- },
1618
- },
1619
- "environment": {
1620
- "auto_stop_in": "4 weeks",
1621
- "name": "dev/api",
1622
- "on_stop": "api 🛑 Stop ⚠️ | dev ",
1623
- "url": "$CL_GITLAB_ENVIRONMENT_URL",
1624
- },
1625
- "image": "path/to/docker/gcloud:the-version",
1626
- "interruptible": true,
1627
- "needs": [
1628
- {
1629
- "artifacts": false,
1630
- "job": "api 👮 lint",
1631
- },
1632
- {
1633
- "artifacts": false,
1634
- "job": "api 🔨 app | dev ",
1635
- },
1636
- {
1637
- "artifacts": false,
1638
- "job": "api 🔨 docker | dev ",
1639
- },
1640
- {
1641
- "artifacts": false,
1642
- "job": "api 🧪 test",
1643
- },
1644
- {
1645
- "artifacts": true,
1646
- "job": "api 🧾 sbom | dev ",
1647
- },
1648
- {
1649
- "artifacts": false,
1650
- "job": "api 🛡 audit",
1651
- },
1652
- ],
1653
- "retry": {
1654
- "max": 2,
1655
- "when": [
1656
- "runner_system_failure",
1657
- "stuck_or_timeout_failure",
1658
- ],
1659
- },
1660
- "rules": [
1661
- {
1662
- "when": "on_success",
1663
- },
1664
- ],
1665
- "script": [
1666
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
1667
- "export ENV_SHORT="dev"",
1668
- "export APP_DIR="app"",
1669
- "export ENV_TYPE="dev"",
1670
- "export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
1671
- "export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
1672
- "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")"",
1673
- "export HOST="$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
1674
- "export ROOT_URL="https://$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
1675
- "export HOST_INTERNAL="$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
1676
- "export HOST_CANONICAL="$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
1677
- "export ROOT_URL_INTERNAL="https://$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
1678
- "export CLOUD_RUN_JOB_TRIGGER_URL_alarm_clock="https://asia-east1-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/asdf/jobs/pan-test-app-dev-api-alarm-clock:run"",
1679
- "export DEPLOY_CLOUD_RUN_PROJECT_ID="asdf"",
1680
- "export DEPLOY_CLOUD_RUN_REGION="asia-east1"",
1681
- "export GCLOUD_DEPLOY_credentialsKey="$CL_dev_api_GCLOUD_DEPLOY_credentialsKey"",
1682
- "export GCLOUD_RUN_canonicalHostSuffix="$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix"",
1683
- "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\\",\\"CLOUD_RUN_JOB_TRIGGER_URL_alarm_clock\\",\\"DEPLOY_CLOUD_RUN_PROJECT_ID\\",\\"DEPLOY_CLOUD_RUN_REGION\\",\\"GCLOUD_DEPLOY_credentialsKey\\",\\"GCLOUD_RUN_canonicalHostSuffix\\"]"",
1684
- "export DOCKER_REGISTRY="asia-east1-docker.pkg.dev"",
1685
- "export DOCKER_IMAGE="asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/dev/api"",
1686
- "export DOCKER_CACHE_IMAGE="asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/caches/api"",
1687
- "export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"",
1688
- "export CLOUDSDK_CORE_DISABLE_PROMPTS="1"",
1689
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
1690
- "echo -e "\\e[0Ksection_start:$(date +%s):prepare[collapsed=true]\\r\\e[0KPrepare..."",
1691
- "gcloud auth activate-service-account --key-file=<(echo "$CL_dev_api_GCLOUD_DEPLOY_credentialsKey")",
1692
- "export GCLOUD_PROJECT_NUMBER=$(gcloud projects describe asdf --format="value(projectNumber)")",
1693
- "echo "GCLOUD_PROJECT_NUMBER: $GCLOUD_PROJECT_NUMBER"",
1694
- "echo -e "\\e[0Ksection_end:$(date +%s):prepare\\r\\e[0K"",
1695
- "echo -e "\\e[0Ksection_start:$(date +%s):writeenvvars[collapsed=true]\\r\\e[0KWrite env vars to file"",
1696
- "cat > ____envvars.yaml <<EOF
1697
- ENV_SHORT: |-
1698
- dev
1699
- APP_DIR: |-
1700
- app
1701
- ENV_TYPE: |-
1702
- dev
1703
- BUILD_INFO_BUILD_ID: |-
1704
- $(printf %s "$(git describe --tags 2>/dev/null || git rev-parse HEAD)" | sed 's/^/ /')
1705
- BUILD_INFO_BUILD_TIME: |-
1706
- $(printf %s "$CI_JOB_STARTED_AT" | sed 's/^/ /')
1707
- BUILD_INFO_CURRENT_VERSION: |-
1708
- $(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/^/ /')
1709
- HOST: |-
1710
- $(printf %s "$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
1711
- ROOT_URL: |-
1712
- $(printf %s "https://$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
1713
- HOST_INTERNAL: |-
1714
- $(printf %s "$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
1715
- HOST_CANONICAL: |-
1716
- $(printf %s "$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
1717
- ROOT_URL_INTERNAL: |-
1718
- $(printf %s "https://$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
1719
- CLOUD_RUN_JOB_TRIGGER_URL_alarm_clock: |-
1720
- https://asia-east1-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/asdf/jobs/pan-test-app-dev-api-alarm-clock:run
1721
- DEPLOY_CLOUD_RUN_PROJECT_ID: |-
1722
- asdf
1723
- DEPLOY_CLOUD_RUN_REGION: |-
1724
- asia-east1
1725
- GCLOUD_RUN_canonicalHostSuffix: |-
1726
- $(printf %s "$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | sed 's/^/ /')
1727
- _ALL_ENV_VAR_KEYS: |-
1728
- ["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","CLOUD_RUN_JOB_TRIGGER_URL_alarm_clock","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]
1729
-
1730
- EOF
1731
- ",
1732
- "echo -e "\\e[0Ksection_end:$(date +%s):writeenvvars\\r\\e[0K"",
1733
- "echo -e "\\e[0Ksection_start:$(date +%s):deploy[collapsed=true]\\r\\e[0KDeploy to cloud run"",
1734
- "set +e",
1735
- "gcloud scheduler jobs create http pan-test-app-dev-api-alarm-clock-scheduler --project=asdf --location=asia-east1 --schedule="0 7 0 0 1-5" --max-retry-attempts=0 --uri="https://asia-east1-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/asdf/jobs/pan-test-app-dev-api-alarm-clock:run" --http-method=POST --oauth-service-account-email=$GCLOUD_PROJECT_NUMBER-compute@developer.gserviceaccount.com",
1736
- "set -e",
1737
- "gcloud scheduler jobs update http pan-test-app-dev-api-alarm-clock-scheduler --project=asdf --location=asia-east1 --schedule="0 7 0 0 1-5" --max-retry-attempts=0 --uri="https://asia-east1-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/asdf/jobs/pan-test-app-dev-api-alarm-clock:run" --http-method=POST --oauth-service-account-email=$GCLOUD_PROJECT_NUMBER-compute@developer.gserviceaccount.com",
1738
- "set +e",
1739
- "gcloud run jobs create pan-test-app-dev-api-alarm-clock --command="./wake-up-call" --image=asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/dev/api:$DOCKER_IMAGE_TAG --project=asdf --region=asia-east1 --labels=customer-name=pan,component-name=api,app-name=test-app,env-type=dev,env-name=dev,build-type=node,cloud-run-job-name=pan-test-app-dev-api-alarm-clock --memory=512Mi --task-timeout=10m --parallelism=1 --env-vars-file=____envvars.yaml --max-retries=0",
1740
- "set -e",
1741
- "gcloud run jobs update pan-test-app-dev-api-alarm-clock --command="./wake-up-call" --image=asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/dev/api:$DOCKER_IMAGE_TAG --project=asdf --region=asia-east1 --labels=customer-name=pan,component-name=api,app-name=test-app,env-type=dev,env-name=dev,build-type=node,cloud-run-job-name=pan-test-app-dev-api-alarm-clock --memory=512Mi --task-timeout=10m --parallelism=1 --env-vars-file=____envvars.yaml --max-retries=0 ",
1742
- "echo -e "\\e[0Ksection_end:$(date +%s):deploy\\r\\e[0K"",
1743
- "echo -e "\\e[0Ksection_start:$(date +%s):cleanup[collapsed=true]\\r\\e[0KCleanup"",
1744
- "gcloud run revisions list --project=asdf --region=asia-east1 --service=pan-test-app-dev-api --limit=unlimited --sort-by=metadata.creationTimestamp --format="value(name)" --filter='(status.conditions.status=False OR status.conditions.status=Unknown)' | while read -r revisionname; do gcloud run revisions delete --project=asdf --region=asia-east1 --quiet $revisionname ; done",
1745
- "gcloud artifacts docker images list asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/dev/api --sort-by=~CREATE_TIME --format="value(version)" | tail -n +2 | while read -r version; do gcloud artifacts docker images delete asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/dev/api@$version --quiet --delete-tags; done",
1746
- "gcloud artifacts docker images list asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/caches/api --sort-by=~CREATE_TIME --format="value(version)" | tail -n +2 | while read -r version; do gcloud artifacts docker images delete asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/caches/api@$version --quiet --delete-tags; done",
1747
- "echo -e "\\e[0Ksection_end:$(date +%s):cleanup\\r\\e[0K"",
1748
- "echo 'Uploading SBOM to Dependency Track'",
1749
- "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/api" "https://$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" "__sbom.json" vex.json || true",
1750
- "echo "CL_GITLAB_ENVIRONMENT_URL=https://$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" >> gitlab_environment.env",
1751
- ],
1752
- "stage": "deploy dev",
1753
- "variables": {
1754
- "KUBERNETES_CPU_REQUEST": "0.22",
1755
- "KUBERNETES_MEMORY_LIMIT": "400Mi",
1756
- "KUBERNETES_MEMORY_REQUEST": "200Mi",
1757
- },
1758
- },
1759
- "api 🛑 Stop ⚠️ | dev ": {
1760
- "allow_failure": true,
1761
- "artifacts": {
1762
- "reports": {
1763
- "dotenv": "gitlab_environment.env",
1764
- },
1765
- },
1766
- "environment": {
1767
- "action": "stop",
1768
- "name": "dev/api",
1769
- "url": "$CL_GITLAB_ENVIRONMENT_URL",
1770
- },
1771
- "image": "path/to/docker/gcloud:the-version",
1772
- "interruptible": true,
1773
- "needs": [],
1774
- "retry": {
1775
- "max": 2,
1776
- "when": [
1777
- "runner_system_failure",
1778
- "stuck_or_timeout_failure",
1779
- ],
1780
- },
1781
- "rules": [
1782
- {
1783
- "if": "$CI_COMMIT_BRANCH =~ /^[0-9]+\\.([0-9]+|x)\\.x$/",
1784
- "when": "on_success",
1785
- },
1786
- {
1787
- "when": "manual",
1788
- },
1789
- ],
1790
- "script": [
1791
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
1792
- "export CLOUDSDK_CORE_DISABLE_PROMPTS="1"",
1793
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
1794
- "set +e",
1795
- "gcloud auth activate-service-account --key-file=<(echo "$CL_dev_api_GCLOUD_DEPLOY_credentialsKey")",
1796
- "gcloud scheduler jobs delete pan-test-app-dev-api-alarm-clock-scheduler --project=asdf --location=asia-east1",
1797
- "gcloud run jobs executions list --project=asdf --region=asia-east1 --job pan-test-app-dev-api-alarm-clock --format="value(name)" | xargs -I {} gcloud run jobs executions delete {} --quiet --project=asdf --region=asia-east1",
1798
- "gcloud run jobs delete pan-test-app-dev-api-alarm-clock --project=asdf --region=asia-east1",
1799
- "gcloud artifacts docker images delete asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/dev/api --quiet --delete-tags",
1800
- "gcloud artifacts docker images list asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/caches/api --sort-by=~CREATE_TIME --format="value(version)" | tail -n +2 | while read -r version; do gcloud artifacts docker images delete asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/caches/api@$version --quiet --delete-tags; done",
1801
- "echo 'Disabling component in Dependency Track'",
1802
- "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" disable "pan-test-app/api" "https://$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" || true",
1803
- "set -e",
1804
- "echo "CL_GITLAB_ENVIRONMENT_URL=https://$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" >> gitlab_environment.env",
1805
- ],
1806
- "stage": "stop dev",
1807
- "variables": {
1808
- "GIT_STRATEGY": "none",
1809
- "KUBERNETES_CPU_REQUEST": "0.22",
1810
- "KUBERNETES_MEMORY_LIMIT": "400Mi",
1811
- "KUBERNETES_MEMORY_REQUEST": "200Mi",
1812
- },
1813
- },
1814
- "api 🛡 audit": {
1815
- "allow_failure": true,
1816
- "image": "path/to/docker/jobs-default:the-version",
1817
- "interruptible": true,
1818
- "needs": [],
1819
- "retry": {
1820
- "max": 2,
1821
- "when": [
1822
- "runner_system_failure",
1823
- "stuck_or_timeout_failure",
1824
- ],
1825
- },
1826
- "script": [
1827
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
1828
- "export APP_PATH="app"",
1829
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
1830
- "cd app",
1831
- "yarn npm audit --environment production",
1832
- ],
1833
- "stage": "test",
1834
- "variables": {
1835
- "KUBERNETES_CPU_REQUEST": "0.45",
1836
- "KUBERNETES_MEMORY_LIMIT": "4Gi",
1837
- "KUBERNETES_MEMORY_REQUEST": "1Gi",
1838
- },
1839
- },
1840
- "api 🧪 test": {
1841
- "cache": [
1842
- {
1843
- "key": "app-yarn",
1844
- "paths": [
1845
- "app/.yarn",
1846
- ],
1847
- "policy": "pull-push",
1848
- },
1849
- {
1850
- "key": "app-node-modules",
1851
- "paths": [
1852
- "app/node_modules",
1853
- ],
1854
- "policy": "pull-push",
1855
- },
1856
- ],
1857
- "image": "path/to/docker/jobs-testing-chrome:the-version",
1858
- "interruptible": true,
1859
- "needs": [],
1860
- "retry": {
1861
- "max": 2,
1862
- "when": [
1863
- "runner_system_failure",
1864
- "stuck_or_timeout_failure",
1865
- ],
1866
- },
1867
- "script": [
1868
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
1869
- "export APP_PATH="app"",
1870
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
1871
- "echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"",
1872
- "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
1873
- "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
1874
- "echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"",
1875
- "cd app",
1876
- "echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"",
1877
- "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
1878
- "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
1879
- "echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"",
1880
- "echo -e "\\e[0Ksection_start:$(date +%s):yarninstall[collapsed=true]\\r\\e[0KYarn install"",
1881
- "yarn install --immutable",
1882
- "echo -e "\\e[0Ksection_end:$(date +%s):yarninstall\\r\\e[0K"",
1883
- "yarn test",
1884
- ],
1885
- "stage": "test",
1886
- "variables": {
1887
- "KUBERNETES_CPU_REQUEST": "0.45",
1888
- "KUBERNETES_MEMORY_LIMIT": "4Gi",
1889
- "KUBERNETES_MEMORY_REQUEST": "1Gi",
1890
- },
1891
- },
1892
- "api 🧾 sbom | dev ": {
1893
- "allow_failure": true,
1894
- "artifacts": {
1895
- "paths": [
1896
- "__sbom.json",
1897
- ],
1898
- },
1899
- "image": "aquasec/trivy:0.38.3",
1900
- "interruptible": true,
1901
- "needs": [],
1902
- "retry": {
1903
- "max": 2,
1904
- "when": [
1905
- "runner_system_failure",
1906
- "stuck_or_timeout_failure",
1907
- ],
1908
- },
1909
- "script": [
1910
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
1911
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
1912
- "trivy fs --quiet --format cyclonedx --output "__sbom.json" app",
1913
- ],
1914
- "stage": "build",
1915
- "variables": {},
1916
- },
1917
- },
1918
- "stages": [
1919
- "setup",
1920
- "setup dev",
1921
- "setup review",
1922
- "setup stage",
1923
- "setup prod",
1924
- "test",
1925
- "test dev",
1926
- "test review",
1927
- "test stage",
1928
- "test prod",
1929
- "build",
1930
- "build dev",
1931
- "build review",
1932
- "build stage",
1933
- "build prod",
1934
- "deploy",
1935
- "deploy dev",
1936
- "deploy review",
1937
- "deploy stage",
1938
- "deploy prod",
1939
- "verify",
1940
- "verify dev",
1941
- "verify review",
1942
- "verify stage",
1943
- "verify prod",
1944
- "rollback",
1945
- "rollback dev",
1946
- "rollback review",
1947
- "rollback stage",
1948
- "rollback prod",
1949
- "stop",
1950
- "stop dev",
1951
- "stop review",
1952
- "stop stage",
1953
- "stop prod",
1954
- ],
1955
- "variables": {
1956
- "ARTIFACT_COMPRESSION_LEVEL": "fast",
1957
- "CACHE_COMPRESSION_LEVEL": "fast",
1958
- "FF_USE_FASTZIP": "true",
1959
- "GIT_DEPTH": "1",
1960
- "TRANSFER_METER_FREQUENCY": "5s",
1961
- },
1962
- "workflow": {
1963
- "rules": [
1964
- {
1965
- "if": "$CI_COMMIT_TAG",
1966
- },
1967
- {
1968
- "if": "$CI_COMMIT_MESSAGE =~ /^chore\\(release\\).*/",
1969
- "when": "never",
1970
- },
1971
- {
1972
- "if": "$CI_PIPELINE_SOURCE == "schedule"",
1973
- "when": "never",
1974
- },
1975
- {
1976
- "if": "$CI_COMMIT_BRANCH =~ /^[0-9]+.([0-9]+|x).x$/",
1977
- },
1978
- {
1979
- "if": "$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH",
1980
- },
1981
- {
1982
- "if": "$CI_MERGE_REQUEST_ID",
1983
- },
1984
- ],
1985
- },
1986
- },
1987
- "mr": {
1988
- "image": "path/to/docker/jobs-default:the-version",
1989
- "jobs": {
1990
- "api 👮 lint": {
1991
- "cache": [
1992
- {
1993
- "key": "app-yarn",
1994
- "paths": [
1995
- "app/.yarn",
1996
- ],
1997
- "policy": "pull-push",
1998
- },
1999
- {
2000
- "key": "app-node-modules",
2001
- "paths": [
2002
- "app/node_modules",
2003
- ],
2004
- "policy": "pull-push",
2005
- },
2006
- ],
2007
- "image": "path/to/docker/jobs-default:the-version",
2008
- "interruptible": true,
2009
- "needs": [],
2010
- "retry": {
2011
- "max": 2,
2012
- "when": [
2013
- "runner_system_failure",
2014
- "stuck_or_timeout_failure",
2015
- ],
2016
- },
2017
- "script": [
2018
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
2019
- "export APP_PATH="app"",
2020
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
2021
- "echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"",
2022
- "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
2023
- "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
2024
- "echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"",
2025
- "cd app",
2026
- "echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"",
2027
- "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
2028
- "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
2029
- "echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"",
2030
- "echo -e "\\e[0Ksection_start:$(date +%s):yarninstall[collapsed=true]\\r\\e[0KYarn install"",
2031
- "yarn install --immutable",
2032
- "echo -e "\\e[0Ksection_end:$(date +%s):yarninstall\\r\\e[0K"",
2033
- "yarn lint",
2034
- ],
2035
- "stage": "test",
2036
- "variables": {
2037
- "KUBERNETES_CPU_REQUEST": "0.45",
2038
- "KUBERNETES_MEMORY_LIMIT": "4Gi",
2039
- "KUBERNETES_MEMORY_REQUEST": "1Gi",
2040
- },
2041
- },
2042
- "api 🔨 app | review ": {
2043
- "artifacts": {
2044
- "expire_in": "1 day",
2045
- "paths": [
2046
- "app/__build_info.json",
2047
- "app/.next",
2048
- "app/dist",
2049
- ],
2050
- "reports": {
2051
- "junit": undefined,
2052
- },
2053
- "when": "always",
2054
- },
2055
- "cache": [
2056
- {
2057
- "key": "app-yarn",
2058
- "paths": [
2059
- "app/.yarn",
2060
- ],
2061
- "policy": "pull-push",
2062
- },
2063
- {
2064
- "key": "app-node-modules",
2065
- "paths": [
2066
- "app/node_modules",
2067
- ],
2068
- "policy": "pull-push",
2069
- },
2070
- {
2071
- "key": "api-next-cache",
2072
- "paths": [
2073
- "app/.next/cache",
2074
- ],
2075
- "policy": "pull-push",
2076
- },
2077
- ],
2078
- "image": "path/to/docker/jobs-default:the-version",
2079
- "interruptible": true,
2080
- "needs": [],
2081
- "retry": {
2082
- "max": 2,
2083
- "when": [
2084
- "runner_system_failure",
2085
- "stuck_or_timeout_failure",
2086
- ],
2087
- },
2088
- "script": [
2089
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
2090
- "export ENV_SHORT="review"",
2091
- "export APP_DIR="app"",
2092
- "export ENV_TYPE="review"",
2093
- "export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
2094
- "export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
2095
- "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")"",
2096
- "export HOST="$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api-$CL_review_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
2097
- "export ROOT_URL="https://$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api-$CL_review_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
2098
- "export HOST_INTERNAL="$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api-$CL_review_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
2099
- "export HOST_CANONICAL="$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api-$CL_review_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
2100
- "export ROOT_URL_INTERNAL="https://$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api-$CL_review_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
2101
- "export CLOUD_RUN_JOB_TRIGGER_URL_alarm_clock="https://asia-east1-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/asdf/jobs/$(printf %s \\"pan-test-app-review-$([ -n \\"$CI_MERGE_REQUEST_IID\\" ] && echo \\"mr$CI_MERGE_REQUEST_IID\\" || { [ -n \\"$CI_COMMIT_REF_SLUG\\" ] && echo \\"$CI_COMMIT_REF_SLUG\\" || echo \\"unknown\\"; })-api\\" | awk '{print tolower($0)}')-alarm-clock:run"",
2102
- "export DEPLOY_CLOUD_RUN_PROJECT_ID="asdf"",
2103
- "export DEPLOY_CLOUD_RUN_REGION="asia-east1"",
2104
- "export GCLOUD_DEPLOY_credentialsKey="$CL_review_api_GCLOUD_DEPLOY_credentialsKey"",
2105
- "export GCLOUD_RUN_canonicalHostSuffix="$CL_review_api_GCLOUD_RUN_canonicalHostSuffix"",
2106
- "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\\",\\"CLOUD_RUN_JOB_TRIGGER_URL_alarm_clock\\",\\"DEPLOY_CLOUD_RUN_PROJECT_ID\\",\\"DEPLOY_CLOUD_RUN_REGION\\",\\"GCLOUD_DEPLOY_credentialsKey\\",\\"GCLOUD_RUN_canonicalHostSuffix\\"]"",
2107
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
2108
- "echo '{"id":"$(git describe --tags 2>/dev/null || git rev-parse HEAD)","time":"$CI_JOB_STARTED_AT"}' > app/__build_info.json",
2109
- "echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"",
2110
- "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
2111
- "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
2112
- "echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"",
2113
- "cd app",
2114
- "echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"",
2115
- "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
2116
- "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
2117
- "echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"",
2118
- "echo -e "\\e[0Ksection_start:$(date +%s):yarninstall[collapsed=true]\\r\\e[0KYarn install"",
2119
- "yarn install --immutable",
2120
- "echo -e "\\e[0Ksection_end:$(date +%s):yarninstall\\r\\e[0K"",
2121
- "yarn build",
2122
- ],
2123
- "stage": "build",
2124
- "variables": {
2125
- "KUBERNETES_CPU_REQUEST": "0.45",
2126
- "KUBERNETES_MEMORY_LIMIT": "4Gi",
2127
- "KUBERNETES_MEMORY_REQUEST": "1Gi",
2128
- },
2129
- },
2130
- "api 🔨 docker | review ": {
2131
- "cache": [
2132
- {
2133
- "key": "app-yarn",
2134
- "paths": [
2135
- "app/.yarn",
2136
- ],
2137
- "policy": "pull",
2138
- },
2139
- ],
2140
- "image": "path/to/docker/docker-build:the-version",
2141
- "interruptible": true,
2142
- "needs": [
2143
- "api 🔨 app | review ",
2144
- ],
2145
- "retry": {
2146
- "max": 2,
2147
- "when": [
2148
- "runner_system_failure",
2149
- "stuck_or_timeout_failure",
2150
- ],
2151
- },
2152
- "script": [
2153
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
2154
- "export APP_DIR="app"",
2155
- "export DOCKER_BUILD_CONTEXT="."",
2156
- "export DOCKER_REGISTRY="asia-east1-docker.pkg.dev"",
2157
- "export DOCKER_IMAGE="asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/review/api/$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })"",
2158
- "export DOCKER_CACHE_IMAGE="asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/caches/api"",
2159
- "export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"",
2160
- "export DOCKER_COPY_AND_INSTALL_APP="COPY --chown=node:node $APP_DIR .
2161
- RUN yarn plugin import workspace-tools
2162
- RUN yarn workspaces focus --production && yarn rebuild"",
2163
- "export DOCKER_COPY_WORKSPACE_FILES="COPY --chown=node:node app/package.json /app/app/package.json
2164
- COPY --chown=node:node app/yarn.lock /app/app/yarn.lock
2165
- COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
2166
- COPY --chown=node:node .yarn /app/.yarn"",
2167
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
2168
- "ensureNodeDockerfile",
2169
- "echo -e "\\e[0Ksection_start:$(date +%s):docker-login[collapsed=true]\\r\\e[0KDocker Login"",
2170
- "gcloud auth activate-service-account --key-file=<(echo "$CL_review_api_GCLOUD_DEPLOY_credentialsKey")",
2171
- "gcloud auth configure-docker asia-east1-docker.pkg.dev",
2172
- "echo -e "\\e[0Ksection_end:$(date +%s):docker-login\\r\\e[0K"",
2173
- "echo -e "\\e[0Ksection_start:$(date +%s):docker-build[collapsed=true]\\r\\e[0KDocker build"",
2174
- "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",
2175
- "echo -e "\\e[0Ksection_end:$(date +%s):docker-build\\r\\e[0K"",
2176
- "echo -e "\\e[0Ksection_start:$(date +%s):docker-push[collapsed=true]\\r\\e[0KDocker push and tag"",
2177
- "docker push $DOCKER_IMAGE:$DOCKER_IMAGE_TAG",
2178
- "docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG $DOCKER_CACHE_IMAGE",
2179
- "docker push $DOCKER_CACHE_IMAGE",
2180
- "echo -e "\\e[0Ksection_end:$(date +%s):docker-push\\r\\e[0K"",
2181
- ],
2182
- "services": [
2183
- {
2184
- "command": [
2185
- "--tls=false",
2186
- ],
2187
- "name": "docker:24.0.6-dind",
2188
- },
2189
- ],
2190
- "stage": "build",
2191
- "variables": {
2192
- "DOCKER_BUILDKIT": "1",
2193
- "DOCKER_DRIVER": "overlay2",
2194
- "DOCKER_HOST": "tcp://0.0.0.0:2375",
2195
- "DOCKER_TLS_CERTDIR": "",
2196
- "KUBERNETES_CPU_REQUEST": "0.45",
2197
- "KUBERNETES_MEMORY_LIMIT": "2Gi",
2198
- "KUBERNETES_MEMORY_REQUEST": "1Gi",
2199
- },
2200
- },
2201
- "api 🚀 Deploy | review ": {
2202
- "allow_failure": false,
2203
- "artifacts": {
2204
- "reports": {
2205
- "dotenv": "gitlab_environment.env",
2206
- },
2207
- },
2208
- "environment": {
2209
- "auto_stop_in": "1 week",
2210
- "name": "review/$CI_COMMIT_REF_NAME/api",
2211
- "on_stop": "api 🛑 Stop ⚠️ | review ",
2212
- "url": "$CL_GITLAB_ENVIRONMENT_URL",
2213
- },
2214
- "image": "path/to/docker/gcloud:the-version",
2215
- "interruptible": true,
2216
- "needs": [
2217
- {
2218
- "artifacts": false,
2219
- "job": "api 👮 lint",
2220
- },
2221
- {
2222
- "artifacts": false,
2223
- "job": "api 🔨 app | review ",
2224
- },
2225
- {
2226
- "artifacts": false,
2227
- "job": "api 🔨 docker | review ",
2228
- },
2229
- {
2230
- "artifacts": false,
2231
- "job": "api 🧪 test",
2232
- },
2233
- {
2234
- "artifacts": true,
2235
- "job": "api 🧾 sbom | review ",
2236
- },
2237
- {
2238
- "artifacts": false,
2239
- "job": "api 🛡 audit",
2240
- },
2241
- ],
2242
- "retry": {
2243
- "max": 2,
2244
- "when": [
2245
- "runner_system_failure",
2246
- "stuck_or_timeout_failure",
2247
- ],
2248
- },
2249
- "rules": [
2250
- {
2251
- "when": "on_success",
2252
- },
2253
- ],
2254
- "script": [
2255
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
2256
- "export ENV_SHORT="review"",
2257
- "export APP_DIR="app"",
2258
- "export ENV_TYPE="review"",
2259
- "export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
2260
- "export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
2261
- "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")"",
2262
- "export HOST="$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api-$CL_review_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
2263
- "export ROOT_URL="https://$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api-$CL_review_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
2264
- "export HOST_INTERNAL="$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api-$CL_review_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
2265
- "export HOST_CANONICAL="$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api-$CL_review_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
2266
- "export ROOT_URL_INTERNAL="https://$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api-$CL_review_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
2267
- "export CLOUD_RUN_JOB_TRIGGER_URL_alarm_clock="https://asia-east1-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/asdf/jobs/$(printf %s \\"pan-test-app-review-$([ -n \\"$CI_MERGE_REQUEST_IID\\" ] && echo \\"mr$CI_MERGE_REQUEST_IID\\" || { [ -n \\"$CI_COMMIT_REF_SLUG\\" ] && echo \\"$CI_COMMIT_REF_SLUG\\" || echo \\"unknown\\"; })-api\\" | awk '{print tolower($0)}')-alarm-clock:run"",
2268
- "export DEPLOY_CLOUD_RUN_PROJECT_ID="asdf"",
2269
- "export DEPLOY_CLOUD_RUN_REGION="asia-east1"",
2270
- "export GCLOUD_DEPLOY_credentialsKey="$CL_review_api_GCLOUD_DEPLOY_credentialsKey"",
2271
- "export GCLOUD_RUN_canonicalHostSuffix="$CL_review_api_GCLOUD_RUN_canonicalHostSuffix"",
2272
- "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\\",\\"CLOUD_RUN_JOB_TRIGGER_URL_alarm_clock\\",\\"DEPLOY_CLOUD_RUN_PROJECT_ID\\",\\"DEPLOY_CLOUD_RUN_REGION\\",\\"GCLOUD_DEPLOY_credentialsKey\\",\\"GCLOUD_RUN_canonicalHostSuffix\\"]"",
2273
- "export DOCKER_REGISTRY="asia-east1-docker.pkg.dev"",
2274
- "export DOCKER_IMAGE="asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/review/api/$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })"",
2275
- "export DOCKER_CACHE_IMAGE="asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/caches/api"",
2276
- "export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"",
2277
- "export CLOUDSDK_CORE_DISABLE_PROMPTS="1"",
2278
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
2279
- "echo -e "\\e[0Ksection_start:$(date +%s):prepare[collapsed=true]\\r\\e[0KPrepare..."",
2280
- "gcloud auth activate-service-account --key-file=<(echo "$CL_review_api_GCLOUD_DEPLOY_credentialsKey")",
2281
- "export GCLOUD_PROJECT_NUMBER=$(gcloud projects describe asdf --format="value(projectNumber)")",
2282
- "echo "GCLOUD_PROJECT_NUMBER: $GCLOUD_PROJECT_NUMBER"",
2283
- "echo -e "\\e[0Ksection_end:$(date +%s):prepare\\r\\e[0K"",
2284
- "echo -e "\\e[0Ksection_start:$(date +%s):writeenvvars[collapsed=true]\\r\\e[0KWrite env vars to file"",
2285
- "cat > ____envvars.yaml <<EOF
2286
- ENV_SHORT: |-
2287
- review
2288
- APP_DIR: |-
2289
- app
2290
- ENV_TYPE: |-
2291
- review
2292
- BUILD_INFO_BUILD_ID: |-
2293
- $(printf %s "$(git describe --tags 2>/dev/null || git rev-parse HEAD)" | sed 's/^/ /')
2294
- BUILD_INFO_BUILD_TIME: |-
2295
- $(printf %s "$CI_JOB_STARTED_AT" | sed 's/^/ /')
2296
- BUILD_INFO_CURRENT_VERSION: |-
2297
- $(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/^/ /')
2298
- HOST: |-
2299
- $(printf %s "$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api-$CL_review_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
2300
- ROOT_URL: |-
2301
- $(printf %s "https://$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api-$CL_review_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
2302
- HOST_INTERNAL: |-
2303
- $(printf %s "$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api-$CL_review_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
2304
- HOST_CANONICAL: |-
2305
- $(printf %s "$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api-$CL_review_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
2306
- ROOT_URL_INTERNAL: |-
2307
- $(printf %s "https://$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api-$CL_review_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
2308
- CLOUD_RUN_JOB_TRIGGER_URL_alarm_clock: |-
2309
- https://asia-east1-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/asdf/jobs/$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api" | awk '{print tolower($0)}')-alarm-clock:run
2310
- DEPLOY_CLOUD_RUN_PROJECT_ID: |-
2311
- asdf
2312
- DEPLOY_CLOUD_RUN_REGION: |-
2313
- asia-east1
2314
- GCLOUD_RUN_canonicalHostSuffix: |-
2315
- $(printf %s "$CL_review_api_GCLOUD_RUN_canonicalHostSuffix" | sed 's/^/ /')
2316
- _ALL_ENV_VAR_KEYS: |-
2317
- ["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","CLOUD_RUN_JOB_TRIGGER_URL_alarm_clock","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]
2318
-
2319
- EOF
2320
- ",
2321
- "echo -e "\\e[0Ksection_end:$(date +%s):writeenvvars\\r\\e[0K"",
2322
- "echo -e "\\e[0Ksection_start:$(date +%s):deploy[collapsed=true]\\r\\e[0KDeploy to cloud run"",
2323
- "set +e",
2324
- "gcloud scheduler jobs create http $(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api" | awk '{print tolower($0)}')-alarm-clock-scheduler --project=asdf --location=asia-east1 --schedule="0 7 0 0 1-5" --max-retry-attempts=0 --uri="https://asia-east1-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/asdf/jobs/$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api" | awk '{print tolower($0)}')-alarm-clock:run" --http-method=POST --oauth-service-account-email=$GCLOUD_PROJECT_NUMBER-compute@developer.gserviceaccount.com",
2325
- "set -e",
2326
- "gcloud scheduler jobs update http $(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api" | awk '{print tolower($0)}')-alarm-clock-scheduler --project=asdf --location=asia-east1 --schedule="0 7 0 0 1-5" --max-retry-attempts=0 --uri="https://asia-east1-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/asdf/jobs/$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api" | awk '{print tolower($0)}')-alarm-clock:run" --http-method=POST --oauth-service-account-email=$GCLOUD_PROJECT_NUMBER-compute@developer.gserviceaccount.com",
2327
- "set +e",
2328
- "gcloud run jobs create $(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api" | awk '{print tolower($0)}')-alarm-clock --command="./wake-up-call" --image=asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/review/api/$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }):$DOCKER_IMAGE_TAG --project=asdf --region=asia-east1 --labels=customer-name=pan,component-name=api,app-name=test-app,env-type=review,env-name=review,build-type=node,cloud-run-job-name=$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api" | awk '{print tolower($0)}')-alarm-clock --memory=512Mi --task-timeout=10m --parallelism=1 --env-vars-file=____envvars.yaml --max-retries=0",
2329
- "set -e",
2330
- "gcloud run jobs update $(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api" | awk '{print tolower($0)}')-alarm-clock --command="./wake-up-call" --image=asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/review/api/$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }):$DOCKER_IMAGE_TAG --project=asdf --region=asia-east1 --labels=customer-name=pan,component-name=api,app-name=test-app,env-type=review,env-name=review,build-type=node,cloud-run-job-name=$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api" | awk '{print tolower($0)}')-alarm-clock --memory=512Mi --task-timeout=10m --parallelism=1 --env-vars-file=____envvars.yaml --max-retries=0 ",
2331
- "echo -e "\\e[0Ksection_end:$(date +%s):deploy\\r\\e[0K"",
2332
- "echo -e "\\e[0Ksection_start:$(date +%s):cleanup[collapsed=true]\\r\\e[0KCleanup"",
2333
- "gcloud run revisions list --project=asdf --region=asia-east1 --service=$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api" | awk '{print tolower($0)}') --limit=unlimited --sort-by=metadata.creationTimestamp --format="value(name)" --filter='(status.conditions.status=False OR status.conditions.status=Unknown)' | while read -r revisionname; do gcloud run revisions delete --project=asdf --region=asia-east1 --quiet $revisionname ; done",
2334
- "gcloud artifacts docker images list asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/review/api/$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }) --sort-by=~CREATE_TIME --format="value(version)" | tail -n +2 | while read -r version; do gcloud artifacts docker images delete asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/review/api/$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })@$version --quiet --delete-tags; done",
2335
- "gcloud artifacts docker images list asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/caches/api --sort-by=~CREATE_TIME --format="value(version)" | tail -n +2 | while read -r version; do gcloud artifacts docker images delete asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/caches/api@$version --quiet --delete-tags; done",
2336
- "set +e",
2337
- "gcloud artifacts docker images delete asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/review/api --quiet --delete-tags",
2338
- "set -e",
2339
- "echo -e "\\e[0Ksection_end:$(date +%s):cleanup\\r\\e[0K"",
2340
- "echo 'Uploading SBOM to Dependency Track'",
2341
- "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/api" "https://$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api-$CL_review_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" "__sbom.json" vex.json || true",
2342
- "echo "CL_GITLAB_ENVIRONMENT_URL=https://$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api-$CL_review_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" >> gitlab_environment.env",
2343
- ],
2344
- "stage": "deploy review",
2345
- "variables": {
2346
- "KUBERNETES_CPU_REQUEST": "0.22",
2347
- "KUBERNETES_MEMORY_LIMIT": "400Mi",
2348
- "KUBERNETES_MEMORY_REQUEST": "200Mi",
2349
- },
2350
- },
2351
- "api 🛑 Stop ⚠️ | review ": {
2352
- "allow_failure": true,
2353
- "artifacts": {
2354
- "reports": {
2355
- "dotenv": "gitlab_environment.env",
2356
- },
2357
- },
2358
- "environment": {
2359
- "action": "stop",
2360
- "name": "review/$CI_COMMIT_REF_NAME/api",
2361
- "url": "$CL_GITLAB_ENVIRONMENT_URL",
2362
- },
2363
- "image": "path/to/docker/gcloud:the-version",
2364
- "interruptible": true,
2365
- "needs": [],
2366
- "retry": {
2367
- "max": 2,
2368
- "when": [
2369
- "runner_system_failure",
2370
- "stuck_or_timeout_failure",
2371
- ],
2372
- },
2373
- "rules": [
2374
- {
2375
- "if": "$CI_COMMIT_BRANCH =~ /^[0-9]+\\.([0-9]+|x)\\.x$/",
2376
- "when": "on_success",
2377
- },
2378
- {
2379
- "when": "manual",
2380
- },
2381
- ],
2382
- "script": [
2383
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
2384
- "export CLOUDSDK_CORE_DISABLE_PROMPTS="1"",
2385
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
2386
- "set +e",
2387
- "gcloud auth activate-service-account --key-file=<(echo "$CL_review_api_GCLOUD_DEPLOY_credentialsKey")",
2388
- "gcloud scheduler jobs delete $(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api" | awk '{print tolower($0)}')-alarm-clock-scheduler --project=asdf --location=asia-east1",
2389
- "gcloud run jobs executions list --project=asdf --region=asia-east1 --job $(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api" | awk '{print tolower($0)}')-alarm-clock --format="value(name)" | xargs -I {} gcloud run jobs executions delete {} --quiet --project=asdf --region=asia-east1",
2390
- "gcloud run jobs delete $(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api" | awk '{print tolower($0)}')-alarm-clock --project=asdf --region=asia-east1",
2391
- "gcloud artifacts docker images delete asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/review/api/$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }) --quiet --delete-tags",
2392
- "gcloud artifacts docker images list asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/caches/api --sort-by=~CREATE_TIME --format="value(version)" | tail -n +2 | while read -r version; do gcloud artifacts docker images delete asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/caches/api@$version --quiet --delete-tags; done",
2393
- "set +e",
2394
- "gcloud artifacts docker images delete asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/review/api --quiet --delete-tags",
2395
- "set -e",
2396
- "echo 'Disabling component in Dependency Track'",
2397
- "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" disable "pan-test-app/api" "https://$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api-$CL_review_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" || true",
2398
- "set -e",
2399
- "echo "CL_GITLAB_ENVIRONMENT_URL=https://$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api-$CL_review_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" >> gitlab_environment.env",
2400
- ],
2401
- "stage": "stop review",
2402
- "variables": {
2403
- "GIT_STRATEGY": "none",
2404
- "KUBERNETES_CPU_REQUEST": "0.22",
2405
- "KUBERNETES_MEMORY_LIMIT": "400Mi",
2406
- "KUBERNETES_MEMORY_REQUEST": "200Mi",
2407
- },
2408
- },
2409
- "api 🛡 audit": {
2410
- "allow_failure": true,
2411
- "image": "path/to/docker/jobs-default:the-version",
2412
- "interruptible": true,
2413
- "needs": [],
2414
- "retry": {
2415
- "max": 2,
2416
- "when": [
2417
- "runner_system_failure",
2418
- "stuck_or_timeout_failure",
2419
- ],
2420
- },
2421
- "script": [
2422
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
2423
- "export APP_PATH="app"",
2424
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
2425
- "cd app",
2426
- "yarn npm audit --environment production",
2427
- ],
2428
- "stage": "test",
2429
- "variables": {
2430
- "KUBERNETES_CPU_REQUEST": "0.45",
2431
- "KUBERNETES_MEMORY_LIMIT": "4Gi",
2432
- "KUBERNETES_MEMORY_REQUEST": "1Gi",
2433
- },
2434
- },
2435
- "api 🧪 test": {
2436
- "cache": [
2437
- {
2438
- "key": "app-yarn",
2439
- "paths": [
2440
- "app/.yarn",
2441
- ],
2442
- "policy": "pull-push",
2443
- },
2444
- {
2445
- "key": "app-node-modules",
2446
- "paths": [
2447
- "app/node_modules",
2448
- ],
2449
- "policy": "pull-push",
2450
- },
2451
- ],
2452
- "image": "path/to/docker/jobs-testing-chrome:the-version",
2453
- "interruptible": true,
2454
- "needs": [],
2455
- "retry": {
2456
- "max": 2,
2457
- "when": [
2458
- "runner_system_failure",
2459
- "stuck_or_timeout_failure",
2460
- ],
2461
- },
2462
- "script": [
2463
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
2464
- "export APP_PATH="app"",
2465
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
2466
- "echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"",
2467
- "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
2468
- "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
2469
- "echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"",
2470
- "cd app",
2471
- "echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"",
2472
- "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
2473
- "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
2474
- "echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"",
2475
- "echo -e "\\e[0Ksection_start:$(date +%s):yarninstall[collapsed=true]\\r\\e[0KYarn install"",
2476
- "yarn install --immutable",
2477
- "echo -e "\\e[0Ksection_end:$(date +%s):yarninstall\\r\\e[0K"",
2478
- "yarn test",
2479
- ],
2480
- "stage": "test",
2481
- "variables": {
2482
- "KUBERNETES_CPU_REQUEST": "0.45",
2483
- "KUBERNETES_MEMORY_LIMIT": "4Gi",
2484
- "KUBERNETES_MEMORY_REQUEST": "1Gi",
2485
- },
2486
- },
2487
- "api 🧾 sbom | review ": {
2488
- "allow_failure": true,
2489
- "artifacts": {
2490
- "paths": [
2491
- "__sbom.json",
2492
- ],
2493
- },
2494
- "image": "aquasec/trivy:0.38.3",
2495
- "interruptible": true,
2496
- "needs": [],
2497
- "retry": {
2498
- "max": 2,
2499
- "when": [
2500
- "runner_system_failure",
2501
- "stuck_or_timeout_failure",
2502
- ],
2503
- },
2504
- "script": [
2505
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
2506
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
2507
- "trivy fs --quiet --format cyclonedx --output "__sbom.json" app",
2508
- ],
2509
- "stage": "build",
2510
- "variables": {},
2511
- },
2512
- },
2513
- "stages": [
2514
- "setup",
2515
- "setup dev",
2516
- "setup review",
2517
- "setup stage",
2518
- "setup prod",
2519
- "test",
2520
- "test dev",
2521
- "test review",
2522
- "test stage",
2523
- "test prod",
2524
- "build",
2525
- "build dev",
2526
- "build review",
2527
- "build stage",
2528
- "build prod",
2529
- "deploy",
2530
- "deploy dev",
2531
- "deploy review",
2532
- "deploy stage",
2533
- "deploy prod",
2534
- "verify",
2535
- "verify dev",
2536
- "verify review",
2537
- "verify stage",
2538
- "verify prod",
2539
- "rollback",
2540
- "rollback dev",
2541
- "rollback review",
2542
- "rollback stage",
2543
- "rollback prod",
2544
- "stop",
2545
- "stop dev",
2546
- "stop review",
2547
- "stop stage",
2548
- "stop prod",
2549
- ],
2550
- "variables": {
2551
- "ARTIFACT_COMPRESSION_LEVEL": "fast",
2552
- "CACHE_COMPRESSION_LEVEL": "fast",
2553
- "FF_USE_FASTZIP": "true",
2554
- "GIT_DEPTH": "1",
2555
- "TRANSFER_METER_FREQUENCY": "5s",
2556
- },
2557
- "workflow": {
2558
- "rules": [
2559
- {
2560
- "if": "$CI_COMMIT_TAG",
2561
- },
2562
- {
2563
- "if": "$CI_COMMIT_MESSAGE =~ /^chore\\(release\\).*/",
2564
- "when": "never",
2565
- },
2566
- {
2567
- "if": "$CI_PIPELINE_SOURCE == "schedule"",
2568
- "when": "never",
2569
- },
2570
- {
2571
- "if": "$CI_COMMIT_BRANCH =~ /^[0-9]+.([0-9]+|x).x$/",
2572
- },
2573
- {
2574
- "if": "$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH",
2575
- },
2576
- {
2577
- "if": "$CI_MERGE_REQUEST_ID",
2578
- },
2579
- ],
2580
- },
2581
- },
2582
- "taggedRelease": {
2583
- "image": "path/to/docker/jobs-default:the-version",
2584
- "jobs": {
2585
- "api 🔨 app | prod ": {
2586
- "artifacts": {
2587
- "expire_in": "1 day",
2588
- "paths": [
2589
- "app/__build_info.json",
2590
- "app/.next",
2591
- "app/dist",
2592
- ],
2593
- "reports": {
2594
- "junit": undefined,
2595
- },
2596
- "when": "always",
2597
- },
2598
- "cache": [
2599
- {
2600
- "key": "app-yarn",
2601
- "paths": [
2602
- "app/.yarn",
2603
- ],
2604
- "policy": "pull-push",
2605
- },
2606
- {
2607
- "key": "app-node-modules",
2608
- "paths": [
2609
- "app/node_modules",
2610
- ],
2611
- "policy": "pull-push",
2612
- },
2613
- {
2614
- "key": "api-next-cache",
2615
- "paths": [
2616
- "app/.next/cache",
2617
- ],
2618
- "policy": "pull-push",
2619
- },
2620
- ],
2621
- "image": "path/to/docker/jobs-default:the-version",
2622
- "interruptible": true,
2623
- "needs": [],
2624
- "retry": {
2625
- "max": 2,
2626
- "when": [
2627
- "runner_system_failure",
2628
- "stuck_or_timeout_failure",
2629
- ],
2630
- },
2631
- "script": [
2632
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
2633
- "export ENV_SHORT="prod"",
2634
- "export APP_DIR="app"",
2635
- "export ENV_TYPE="prod"",
2636
- "export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
2637
- "export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
2638
- "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")"",
2639
- "export HOST="$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
2640
- "export ROOT_URL="https://$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
2641
- "export HOST_INTERNAL="$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
2642
- "export HOST_CANONICAL="$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
2643
- "export ROOT_URL_INTERNAL="https://$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
2644
- "export CLOUD_RUN_JOB_TRIGGER_URL_alarm_clock="https://asia-east1-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/asdf/jobs/pan-test-app-prod-api-alarm-clock:run"",
2645
- "export DEPLOY_CLOUD_RUN_PROJECT_ID="asdf"",
2646
- "export DEPLOY_CLOUD_RUN_REGION="asia-east1"",
2647
- "export GCLOUD_DEPLOY_credentialsKey="$CL_prod_api_GCLOUD_DEPLOY_credentialsKey"",
2648
- "export GCLOUD_RUN_canonicalHostSuffix="$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix"",
2649
- "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\\",\\"CLOUD_RUN_JOB_TRIGGER_URL_alarm_clock\\",\\"DEPLOY_CLOUD_RUN_PROJECT_ID\\",\\"DEPLOY_CLOUD_RUN_REGION\\",\\"GCLOUD_DEPLOY_credentialsKey\\",\\"GCLOUD_RUN_canonicalHostSuffix\\"]"",
2650
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
2651
- "echo '{"id":"$(git describe --tags 2>/dev/null || git rev-parse HEAD)","time":"$CI_JOB_STARTED_AT"}' > app/__build_info.json",
2652
- "echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"",
2653
- "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
2654
- "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
2655
- "echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"",
2656
- "cd app",
2657
- "echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"",
2658
- "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
2659
- "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
2660
- "echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"",
2661
- "echo -e "\\e[0Ksection_start:$(date +%s):yarninstall[collapsed=true]\\r\\e[0KYarn install"",
2662
- "yarn install --immutable",
2663
- "echo -e "\\e[0Ksection_end:$(date +%s):yarninstall\\r\\e[0K"",
2664
- "yarn build",
2665
- ],
2666
- "stage": "build",
2667
- "variables": {
2668
- "KUBERNETES_CPU_REQUEST": "0.45",
2669
- "KUBERNETES_MEMORY_LIMIT": "4Gi",
2670
- "KUBERNETES_MEMORY_REQUEST": "1Gi",
2671
- },
2672
- },
2673
- "api 🔨 app | stage ": {
2674
- "artifacts": {
2675
- "expire_in": "1 day",
2676
- "paths": [
2677
- "app/__build_info.json",
2678
- "app/.next",
2679
- "app/dist",
2680
- ],
2681
- "reports": {
2682
- "junit": undefined,
2683
- },
2684
- "when": "always",
2685
- },
2686
- "cache": [
2687
- {
2688
- "key": "app-yarn",
2689
- "paths": [
2690
- "app/.yarn",
2691
- ],
2692
- "policy": "pull-push",
2693
- },
2694
- {
2695
- "key": "app-node-modules",
2696
- "paths": [
2697
- "app/node_modules",
2698
- ],
2699
- "policy": "pull-push",
2700
- },
2701
- {
2702
- "key": "api-next-cache",
2703
- "paths": [
2704
- "app/.next/cache",
2705
- ],
2706
- "policy": "pull-push",
2707
- },
2708
- ],
2709
- "image": "path/to/docker/jobs-default:the-version",
2710
- "interruptible": true,
2711
- "needs": [],
2712
- "retry": {
2713
- "max": 2,
2714
- "when": [
2715
- "runner_system_failure",
2716
- "stuck_or_timeout_failure",
2717
- ],
2718
- },
2719
- "script": [
2720
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
2721
- "export ENV_SHORT="stage"",
2722
- "export APP_DIR="app"",
2723
- "export ENV_TYPE="stage"",
2724
- "export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
2725
- "export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
2726
- "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")"",
2727
- "export HOST="$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
2728
- "export ROOT_URL="https://$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
2729
- "export HOST_INTERNAL="$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
2730
- "export HOST_CANONICAL="$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
2731
- "export ROOT_URL_INTERNAL="https://$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
2732
- "export CLOUD_RUN_JOB_TRIGGER_URL_alarm_clock="https://asia-east1-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/asdf/jobs/pan-test-app-stage-api-alarm-clock:run"",
2733
- "export DEPLOY_CLOUD_RUN_PROJECT_ID="asdf"",
2734
- "export DEPLOY_CLOUD_RUN_REGION="asia-east1"",
2735
- "export GCLOUD_DEPLOY_credentialsKey="$CL_stage_api_GCLOUD_DEPLOY_credentialsKey"",
2736
- "export GCLOUD_RUN_canonicalHostSuffix="$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix"",
2737
- "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\\",\\"CLOUD_RUN_JOB_TRIGGER_URL_alarm_clock\\",\\"DEPLOY_CLOUD_RUN_PROJECT_ID\\",\\"DEPLOY_CLOUD_RUN_REGION\\",\\"GCLOUD_DEPLOY_credentialsKey\\",\\"GCLOUD_RUN_canonicalHostSuffix\\"]"",
2738
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
2739
- "echo '{"id":"$(git describe --tags 2>/dev/null || git rev-parse HEAD)","time":"$CI_JOB_STARTED_AT"}' > app/__build_info.json",
2740
- "echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"",
2741
- "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
2742
- "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
2743
- "echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"",
2744
- "cd app",
2745
- "echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"",
2746
- "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
2747
- "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
2748
- "echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"",
2749
- "echo -e "\\e[0Ksection_start:$(date +%s):yarninstall[collapsed=true]\\r\\e[0KYarn install"",
2750
- "yarn install --immutable",
2751
- "echo -e "\\e[0Ksection_end:$(date +%s):yarninstall\\r\\e[0K"",
2752
- "yarn build",
2753
- ],
2754
- "stage": "build",
2755
- "variables": {
2756
- "KUBERNETES_CPU_REQUEST": "0.45",
2757
- "KUBERNETES_MEMORY_LIMIT": "4Gi",
2758
- "KUBERNETES_MEMORY_REQUEST": "1Gi",
2759
- },
2760
- },
2761
- "api 🔨 docker | prod ": {
2762
- "cache": [
2763
- {
2764
- "key": "app-yarn",
2765
- "paths": [
2766
- "app/.yarn",
2767
- ],
2768
- "policy": "pull",
2769
- },
2770
- ],
2771
- "image": "path/to/docker/docker-build:the-version",
2772
- "interruptible": true,
2773
- "needs": [
2774
- "api 🔨 app | prod ",
2775
- ],
2776
- "retry": {
2777
- "max": 2,
2778
- "when": [
2779
- "runner_system_failure",
2780
- "stuck_or_timeout_failure",
2781
- ],
2782
- },
2783
- "script": [
2784
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
2785
- "export APP_DIR="app"",
2786
- "export DOCKER_BUILD_CONTEXT="."",
2787
- "export DOCKER_REGISTRY="asia-east1-docker.pkg.dev"",
2788
- "export DOCKER_IMAGE="asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/prod/api"",
2789
- "export DOCKER_CACHE_IMAGE="asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/caches/api"",
2790
- "export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"",
2791
- "export DOCKER_COPY_AND_INSTALL_APP="COPY --chown=node:node $APP_DIR .
2792
- RUN yarn plugin import workspace-tools
2793
- RUN yarn workspaces focus --production && yarn rebuild"",
2794
- "export DOCKER_COPY_WORKSPACE_FILES="COPY --chown=node:node app/package.json /app/app/package.json
2795
- COPY --chown=node:node app/yarn.lock /app/app/yarn.lock
2796
- COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
2797
- COPY --chown=node:node .yarn /app/.yarn"",
2798
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
2799
- "ensureNodeDockerfile",
2800
- "echo -e "\\e[0Ksection_start:$(date +%s):docker-login[collapsed=true]\\r\\e[0KDocker Login"",
2801
- "gcloud auth activate-service-account --key-file=<(echo "$CL_prod_api_GCLOUD_DEPLOY_credentialsKey")",
2802
- "gcloud auth configure-docker asia-east1-docker.pkg.dev",
2803
- "echo -e "\\e[0Ksection_end:$(date +%s):docker-login\\r\\e[0K"",
2804
- "echo -e "\\e[0Ksection_start:$(date +%s):docker-build[collapsed=true]\\r\\e[0KDocker build"",
2805
- "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",
2806
- "echo -e "\\e[0Ksection_end:$(date +%s):docker-build\\r\\e[0K"",
2807
- "echo -e "\\e[0Ksection_start:$(date +%s):docker-push[collapsed=true]\\r\\e[0KDocker push and tag"",
2808
- "docker push $DOCKER_IMAGE:$DOCKER_IMAGE_TAG",
2809
- "docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG $DOCKER_CACHE_IMAGE",
2810
- "docker push $DOCKER_CACHE_IMAGE",
2811
- "echo -e "\\e[0Ksection_end:$(date +%s):docker-push\\r\\e[0K"",
2812
- ],
2813
- "services": [
2814
- {
2815
- "command": [
2816
- "--tls=false",
2817
- ],
2818
- "name": "docker:24.0.6-dind",
2819
- },
2820
- ],
2821
- "stage": "build",
2822
- "variables": {
2823
- "DOCKER_BUILDKIT": "1",
2824
- "DOCKER_DRIVER": "overlay2",
2825
- "DOCKER_HOST": "tcp://0.0.0.0:2375",
2826
- "DOCKER_TLS_CERTDIR": "",
2827
- "KUBERNETES_CPU_REQUEST": "0.45",
2828
- "KUBERNETES_MEMORY_LIMIT": "2Gi",
2829
- "KUBERNETES_MEMORY_REQUEST": "1Gi",
2830
- },
2831
- },
2832
- "api 🔨 docker | stage ": {
2833
- "cache": [
2834
- {
2835
- "key": "app-yarn",
2836
- "paths": [
2837
- "app/.yarn",
2838
- ],
2839
- "policy": "pull",
2840
- },
2841
- ],
2842
- "image": "path/to/docker/docker-build:the-version",
2843
- "interruptible": true,
2844
- "needs": [
2845
- "api 🔨 app | stage ",
2846
- ],
2847
- "retry": {
2848
- "max": 2,
2849
- "when": [
2850
- "runner_system_failure",
2851
- "stuck_or_timeout_failure",
2852
- ],
2853
- },
2854
- "script": [
2855
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
2856
- "export APP_DIR="app"",
2857
- "export DOCKER_BUILD_CONTEXT="."",
2858
- "export DOCKER_REGISTRY="asia-east1-docker.pkg.dev"",
2859
- "export DOCKER_IMAGE="asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/stage/api"",
2860
- "export DOCKER_CACHE_IMAGE="asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/caches/api"",
2861
- "export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"",
2862
- "export DOCKER_COPY_AND_INSTALL_APP="COPY --chown=node:node $APP_DIR .
2863
- RUN yarn plugin import workspace-tools
2864
- RUN yarn workspaces focus --production && yarn rebuild"",
2865
- "export DOCKER_COPY_WORKSPACE_FILES="COPY --chown=node:node app/package.json /app/app/package.json
2866
- COPY --chown=node:node app/yarn.lock /app/app/yarn.lock
2867
- COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
2868
- COPY --chown=node:node .yarn /app/.yarn"",
2869
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
2870
- "ensureNodeDockerfile",
2871
- "echo -e "\\e[0Ksection_start:$(date +%s):docker-login[collapsed=true]\\r\\e[0KDocker Login"",
2872
- "gcloud auth activate-service-account --key-file=<(echo "$CL_stage_api_GCLOUD_DEPLOY_credentialsKey")",
2873
- "gcloud auth configure-docker asia-east1-docker.pkg.dev",
2874
- "echo -e "\\e[0Ksection_end:$(date +%s):docker-login\\r\\e[0K"",
2875
- "echo -e "\\e[0Ksection_start:$(date +%s):docker-build[collapsed=true]\\r\\e[0KDocker build"",
2876
- "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",
2877
- "echo -e "\\e[0Ksection_end:$(date +%s):docker-build\\r\\e[0K"",
2878
- "echo -e "\\e[0Ksection_start:$(date +%s):docker-push[collapsed=true]\\r\\e[0KDocker push and tag"",
2879
- "docker push $DOCKER_IMAGE:$DOCKER_IMAGE_TAG",
2880
- "docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG $DOCKER_CACHE_IMAGE",
2881
- "docker push $DOCKER_CACHE_IMAGE",
2882
- "echo -e "\\e[0Ksection_end:$(date +%s):docker-push\\r\\e[0K"",
2883
- ],
2884
- "services": [
2885
- {
2886
- "command": [
2887
- "--tls=false",
2888
- ],
2889
- "name": "docker:24.0.6-dind",
2890
- },
2891
- ],
2892
- "stage": "build",
2893
- "variables": {
2894
- "DOCKER_BUILDKIT": "1",
2895
- "DOCKER_DRIVER": "overlay2",
2896
- "DOCKER_HOST": "tcp://0.0.0.0:2375",
2897
- "DOCKER_TLS_CERTDIR": "",
2898
- "KUBERNETES_CPU_REQUEST": "0.45",
2899
- "KUBERNETES_MEMORY_LIMIT": "2Gi",
2900
- "KUBERNETES_MEMORY_REQUEST": "1Gi",
2901
- },
2902
- },
2903
- "api 🚀 Deploy | prod ": {
2904
- "allow_failure": true,
2905
- "artifacts": {
2906
- "reports": {
2907
- "dotenv": "gitlab_environment.env",
2908
- },
2909
- },
2910
- "environment": {
2911
- "auto_stop_in": undefined,
2912
- "name": "prod/api",
2913
- "on_stop": "api 🛑 Stop ⚠️ | prod ",
2914
- "url": "$CL_GITLAB_ENVIRONMENT_URL",
2915
- },
2916
- "image": "path/to/docker/gcloud:the-version",
2917
- "interruptible": true,
2918
- "needs": [
2919
- {
2920
- "artifacts": false,
2921
- "job": "api 🔨 app | prod ",
2922
- },
2923
- {
2924
- "artifacts": false,
2925
- "job": "api 🔨 docker | prod ",
2926
- },
2927
- {
2928
- "artifacts": true,
2929
- "job": "api 🧾 sbom | prod ",
2930
- },
2931
- ],
2932
- "retry": {
2933
- "max": 2,
2934
- "when": [
2935
- "runner_system_failure",
2936
- "stuck_or_timeout_failure",
2937
- ],
2938
- },
2939
- "rules": [
2940
- {
2941
- "when": "manual",
2942
- },
2943
- ],
2944
- "script": [
2945
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
2946
- "export ENV_SHORT="prod"",
2947
- "export APP_DIR="app"",
2948
- "export ENV_TYPE="prod"",
2949
- "export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
2950
- "export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
2951
- "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")"",
2952
- "export HOST="$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
2953
- "export ROOT_URL="https://$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
2954
- "export HOST_INTERNAL="$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
2955
- "export HOST_CANONICAL="$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
2956
- "export ROOT_URL_INTERNAL="https://$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
2957
- "export CLOUD_RUN_JOB_TRIGGER_URL_alarm_clock="https://asia-east1-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/asdf/jobs/pan-test-app-prod-api-alarm-clock:run"",
2958
- "export DEPLOY_CLOUD_RUN_PROJECT_ID="asdf"",
2959
- "export DEPLOY_CLOUD_RUN_REGION="asia-east1"",
2960
- "export GCLOUD_DEPLOY_credentialsKey="$CL_prod_api_GCLOUD_DEPLOY_credentialsKey"",
2961
- "export GCLOUD_RUN_canonicalHostSuffix="$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix"",
2962
- "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\\",\\"CLOUD_RUN_JOB_TRIGGER_URL_alarm_clock\\",\\"DEPLOY_CLOUD_RUN_PROJECT_ID\\",\\"DEPLOY_CLOUD_RUN_REGION\\",\\"GCLOUD_DEPLOY_credentialsKey\\",\\"GCLOUD_RUN_canonicalHostSuffix\\"]"",
2963
- "export DOCKER_REGISTRY="asia-east1-docker.pkg.dev"",
2964
- "export DOCKER_IMAGE="asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/prod/api"",
2965
- "export DOCKER_CACHE_IMAGE="asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/caches/api"",
2966
- "export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"",
2967
- "export CLOUDSDK_CORE_DISABLE_PROMPTS="1"",
2968
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
2969
- "echo -e "\\e[0Ksection_start:$(date +%s):prepare[collapsed=true]\\r\\e[0KPrepare..."",
2970
- "gcloud auth activate-service-account --key-file=<(echo "$CL_prod_api_GCLOUD_DEPLOY_credentialsKey")",
2971
- "export GCLOUD_PROJECT_NUMBER=$(gcloud projects describe asdf --format="value(projectNumber)")",
2972
- "echo "GCLOUD_PROJECT_NUMBER: $GCLOUD_PROJECT_NUMBER"",
2973
- "echo -e "\\e[0Ksection_end:$(date +%s):prepare\\r\\e[0K"",
2974
- "echo -e "\\e[0Ksection_start:$(date +%s):writeenvvars[collapsed=true]\\r\\e[0KWrite env vars to file"",
2975
- "cat > ____envvars.yaml <<EOF
2976
- ENV_SHORT: |-
2977
- prod
2978
- APP_DIR: |-
2979
- app
2980
- ENV_TYPE: |-
2981
- prod
2982
- BUILD_INFO_BUILD_ID: |-
2983
- $(printf %s "$(git describe --tags 2>/dev/null || git rev-parse HEAD)" | sed 's/^/ /')
2984
- BUILD_INFO_BUILD_TIME: |-
2985
- $(printf %s "$CI_JOB_STARTED_AT" | sed 's/^/ /')
2986
- BUILD_INFO_CURRENT_VERSION: |-
2987
- $(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/^/ /')
2988
- HOST: |-
2989
- $(printf %s "$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
2990
- ROOT_URL: |-
2991
- $(printf %s "https://$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
2992
- HOST_INTERNAL: |-
2993
- $(printf %s "$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
2994
- HOST_CANONICAL: |-
2995
- $(printf %s "$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
2996
- ROOT_URL_INTERNAL: |-
2997
- $(printf %s "https://$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
2998
- CLOUD_RUN_JOB_TRIGGER_URL_alarm_clock: |-
2999
- https://asia-east1-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/asdf/jobs/pan-test-app-prod-api-alarm-clock:run
3000
- DEPLOY_CLOUD_RUN_PROJECT_ID: |-
3001
- asdf
3002
- DEPLOY_CLOUD_RUN_REGION: |-
3003
- asia-east1
3004
- GCLOUD_RUN_canonicalHostSuffix: |-
3005
- $(printf %s "$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | sed 's/^/ /')
3006
- _ALL_ENV_VAR_KEYS: |-
3007
- ["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","CLOUD_RUN_JOB_TRIGGER_URL_alarm_clock","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]
3008
-
3009
- EOF
3010
- ",
3011
- "echo -e "\\e[0Ksection_end:$(date +%s):writeenvvars\\r\\e[0K"",
3012
- "echo -e "\\e[0Ksection_start:$(date +%s):deploy[collapsed=true]\\r\\e[0KDeploy to cloud run"",
3013
- "set +e",
3014
- "gcloud scheduler jobs create http pan-test-app-prod-api-alarm-clock-scheduler --project=asdf --location=asia-east1 --schedule="0 7 0 0 1-5" --max-retry-attempts=0 --uri="https://asia-east1-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/asdf/jobs/pan-test-app-prod-api-alarm-clock:run" --http-method=POST --oauth-service-account-email=$GCLOUD_PROJECT_NUMBER-compute@developer.gserviceaccount.com",
3015
- "set -e",
3016
- "gcloud scheduler jobs update http pan-test-app-prod-api-alarm-clock-scheduler --project=asdf --location=asia-east1 --schedule="0 7 0 0 1-5" --max-retry-attempts=0 --uri="https://asia-east1-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/asdf/jobs/pan-test-app-prod-api-alarm-clock:run" --http-method=POST --oauth-service-account-email=$GCLOUD_PROJECT_NUMBER-compute@developer.gserviceaccount.com",
3017
- "set +e",
3018
- "gcloud run jobs create pan-test-app-prod-api-alarm-clock --command="./wake-up-call" --image=asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/prod/api:$DOCKER_IMAGE_TAG --project=asdf --region=asia-east1 --labels=customer-name=pan,component-name=api,app-name=test-app,env-type=prod,env-name=prod,build-type=node,cloud-run-job-name=pan-test-app-prod-api-alarm-clock --memory=512Mi --task-timeout=10m --parallelism=1 --env-vars-file=____envvars.yaml --max-retries=0",
3019
- "set -e",
3020
- "gcloud run jobs update pan-test-app-prod-api-alarm-clock --command="./wake-up-call" --image=asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/prod/api:$DOCKER_IMAGE_TAG --project=asdf --region=asia-east1 --labels=customer-name=pan,component-name=api,app-name=test-app,env-type=prod,env-name=prod,build-type=node,cloud-run-job-name=pan-test-app-prod-api-alarm-clock --memory=512Mi --task-timeout=10m --parallelism=1 --env-vars-file=____envvars.yaml --max-retries=0 ",
3021
- "echo -e "\\e[0Ksection_end:$(date +%s):deploy\\r\\e[0K"",
3022
- "echo -e "\\e[0Ksection_start:$(date +%s):cleanup[collapsed=true]\\r\\e[0KCleanup"",
3023
- "gcloud run revisions list --project=asdf --region=asia-east1 --service=pan-test-app-prod-api --limit=unlimited --sort-by=metadata.creationTimestamp --format="value(name)" --filter='(status.conditions.status=False OR status.conditions.status=Unknown)' | tail -n +6 | while read -r revisionname; do gcloud run revisions delete --project=asdf --region=asia-east1 --quiet $revisionname ; done",
3024
- "gcloud artifacts docker images list asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/prod/api --sort-by=~CREATE_TIME --format="value(version)" | tail -n +7 | while read -r version; do gcloud artifacts docker images delete asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/prod/api@$version --quiet --delete-tags; done",
3025
- "gcloud artifacts docker images list asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/caches/api --sort-by=~CREATE_TIME --format="value(version)" | tail -n +2 | while read -r version; do gcloud artifacts docker images delete asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/caches/api@$version --quiet --delete-tags; done",
3026
- "echo -e "\\e[0Ksection_end:$(date +%s):cleanup\\r\\e[0K"",
3027
- "echo 'Uploading SBOM to Dependency Track'",
3028
- "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/api" "https://$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" "__sbom.json" vex.json || true",
3029
- "echo "CL_GITLAB_ENVIRONMENT_URL=https://$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" >> gitlab_environment.env",
3030
- ],
3031
- "stage": "deploy prod",
3032
- "variables": {
3033
- "KUBERNETES_CPU_REQUEST": "0.22",
3034
- "KUBERNETES_MEMORY_LIMIT": "400Mi",
3035
- "KUBERNETES_MEMORY_REQUEST": "200Mi",
3036
- },
3037
- },
3038
- "api 🚀 Deploy | stage ": {
3039
- "allow_failure": false,
3040
- "artifacts": {
3041
- "reports": {
3042
- "dotenv": "gitlab_environment.env",
3043
- },
3044
- },
3045
- "environment": {
3046
- "auto_stop_in": undefined,
3047
- "name": "stage/api",
3048
- "on_stop": "api 🛑 Stop ⚠️ | stage ",
3049
- "url": "$CL_GITLAB_ENVIRONMENT_URL",
3050
- },
3051
- "image": "path/to/docker/gcloud:the-version",
3052
- "interruptible": true,
3053
- "needs": [
3054
- {
3055
- "artifacts": false,
3056
- "job": "api 🔨 app | stage ",
3057
- },
3058
- {
3059
- "artifacts": false,
3060
- "job": "api 🔨 docker | stage ",
3061
- },
3062
- {
3063
- "artifacts": true,
3064
- "job": "api 🧾 sbom | stage ",
3065
- },
3066
- ],
3067
- "retry": {
3068
- "max": 2,
3069
- "when": [
3070
- "runner_system_failure",
3071
- "stuck_or_timeout_failure",
3072
- ],
3073
- },
3074
- "rules": [
3075
- {
3076
- "when": "on_success",
3077
- },
3078
- ],
3079
- "script": [
3080
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
3081
- "export ENV_SHORT="stage"",
3082
- "export APP_DIR="app"",
3083
- "export ENV_TYPE="stage"",
3084
- "export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
3085
- "export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
3086
- "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")"",
3087
- "export HOST="$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
3088
- "export ROOT_URL="https://$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
3089
- "export HOST_INTERNAL="$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
3090
- "export HOST_CANONICAL="$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
3091
- "export ROOT_URL_INTERNAL="https://$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
3092
- "export CLOUD_RUN_JOB_TRIGGER_URL_alarm_clock="https://asia-east1-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/asdf/jobs/pan-test-app-stage-api-alarm-clock:run"",
3093
- "export DEPLOY_CLOUD_RUN_PROJECT_ID="asdf"",
3094
- "export DEPLOY_CLOUD_RUN_REGION="asia-east1"",
3095
- "export GCLOUD_DEPLOY_credentialsKey="$CL_stage_api_GCLOUD_DEPLOY_credentialsKey"",
3096
- "export GCLOUD_RUN_canonicalHostSuffix="$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix"",
3097
- "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\\",\\"CLOUD_RUN_JOB_TRIGGER_URL_alarm_clock\\",\\"DEPLOY_CLOUD_RUN_PROJECT_ID\\",\\"DEPLOY_CLOUD_RUN_REGION\\",\\"GCLOUD_DEPLOY_credentialsKey\\",\\"GCLOUD_RUN_canonicalHostSuffix\\"]"",
3098
- "export DOCKER_REGISTRY="asia-east1-docker.pkg.dev"",
3099
- "export DOCKER_IMAGE="asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/stage/api"",
3100
- "export DOCKER_CACHE_IMAGE="asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/caches/api"",
3101
- "export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"",
3102
- "export CLOUDSDK_CORE_DISABLE_PROMPTS="1"",
3103
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
3104
- "echo -e "\\e[0Ksection_start:$(date +%s):prepare[collapsed=true]\\r\\e[0KPrepare..."",
3105
- "gcloud auth activate-service-account --key-file=<(echo "$CL_stage_api_GCLOUD_DEPLOY_credentialsKey")",
3106
- "export GCLOUD_PROJECT_NUMBER=$(gcloud projects describe asdf --format="value(projectNumber)")",
3107
- "echo "GCLOUD_PROJECT_NUMBER: $GCLOUD_PROJECT_NUMBER"",
3108
- "echo -e "\\e[0Ksection_end:$(date +%s):prepare\\r\\e[0K"",
3109
- "echo -e "\\e[0Ksection_start:$(date +%s):writeenvvars[collapsed=true]\\r\\e[0KWrite env vars to file"",
3110
- "cat > ____envvars.yaml <<EOF
3111
- ENV_SHORT: |-
3112
- stage
3113
- APP_DIR: |-
3114
- app
3115
- ENV_TYPE: |-
3116
- stage
3117
- BUILD_INFO_BUILD_ID: |-
3118
- $(printf %s "$(git describe --tags 2>/dev/null || git rev-parse HEAD)" | sed 's/^/ /')
3119
- BUILD_INFO_BUILD_TIME: |-
3120
- $(printf %s "$CI_JOB_STARTED_AT" | sed 's/^/ /')
3121
- BUILD_INFO_CURRENT_VERSION: |-
3122
- $(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/^/ /')
3123
- HOST: |-
3124
- $(printf %s "$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
3125
- ROOT_URL: |-
3126
- $(printf %s "https://$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
3127
- HOST_INTERNAL: |-
3128
- $(printf %s "$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
3129
- HOST_CANONICAL: |-
3130
- $(printf %s "$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
3131
- ROOT_URL_INTERNAL: |-
3132
- $(printf %s "https://$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
3133
- CLOUD_RUN_JOB_TRIGGER_URL_alarm_clock: |-
3134
- https://asia-east1-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/asdf/jobs/pan-test-app-stage-api-alarm-clock:run
3135
- DEPLOY_CLOUD_RUN_PROJECT_ID: |-
3136
- asdf
3137
- DEPLOY_CLOUD_RUN_REGION: |-
3138
- asia-east1
3139
- GCLOUD_RUN_canonicalHostSuffix: |-
3140
- $(printf %s "$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | sed 's/^/ /')
3141
- _ALL_ENV_VAR_KEYS: |-
3142
- ["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","CLOUD_RUN_JOB_TRIGGER_URL_alarm_clock","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]
3143
-
3144
- EOF
3145
- ",
3146
- "echo -e "\\e[0Ksection_end:$(date +%s):writeenvvars\\r\\e[0K"",
3147
- "echo -e "\\e[0Ksection_start:$(date +%s):deploy[collapsed=true]\\r\\e[0KDeploy to cloud run"",
3148
- "set +e",
3149
- "gcloud scheduler jobs create http pan-test-app-stage-api-alarm-clock-scheduler --project=asdf --location=asia-east1 --schedule="0 7 0 0 1-5" --max-retry-attempts=0 --uri="https://asia-east1-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/asdf/jobs/pan-test-app-stage-api-alarm-clock:run" --http-method=POST --oauth-service-account-email=$GCLOUD_PROJECT_NUMBER-compute@developer.gserviceaccount.com",
3150
- "set -e",
3151
- "gcloud scheduler jobs update http pan-test-app-stage-api-alarm-clock-scheduler --project=asdf --location=asia-east1 --schedule="0 7 0 0 1-5" --max-retry-attempts=0 --uri="https://asia-east1-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/asdf/jobs/pan-test-app-stage-api-alarm-clock:run" --http-method=POST --oauth-service-account-email=$GCLOUD_PROJECT_NUMBER-compute@developer.gserviceaccount.com",
3152
- "set +e",
3153
- "gcloud run jobs create pan-test-app-stage-api-alarm-clock --command="./wake-up-call" --image=asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/stage/api:$DOCKER_IMAGE_TAG --project=asdf --region=asia-east1 --labels=customer-name=pan,component-name=api,app-name=test-app,env-type=stage,env-name=stage,build-type=node,cloud-run-job-name=pan-test-app-stage-api-alarm-clock --memory=512Mi --task-timeout=10m --parallelism=1 --env-vars-file=____envvars.yaml --max-retries=0",
3154
- "set -e",
3155
- "gcloud run jobs update pan-test-app-stage-api-alarm-clock --command="./wake-up-call" --image=asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/stage/api:$DOCKER_IMAGE_TAG --project=asdf --region=asia-east1 --labels=customer-name=pan,component-name=api,app-name=test-app,env-type=stage,env-name=stage,build-type=node,cloud-run-job-name=pan-test-app-stage-api-alarm-clock --memory=512Mi --task-timeout=10m --parallelism=1 --env-vars-file=____envvars.yaml --max-retries=0 ",
3156
- "echo -e "\\e[0Ksection_end:$(date +%s):deploy\\r\\e[0K"",
3157
- "echo -e "\\e[0Ksection_start:$(date +%s):cleanup[collapsed=true]\\r\\e[0KCleanup"",
3158
- "gcloud run revisions list --project=asdf --region=asia-east1 --service=pan-test-app-stage-api --limit=unlimited --sort-by=metadata.creationTimestamp --format="value(name)" --filter='(status.conditions.status=False OR status.conditions.status=Unknown)' | while read -r revisionname; do gcloud run revisions delete --project=asdf --region=asia-east1 --quiet $revisionname ; done",
3159
- "gcloud artifacts docker images list asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/stage/api --sort-by=~CREATE_TIME --format="value(version)" | tail -n +2 | while read -r version; do gcloud artifacts docker images delete asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/stage/api@$version --quiet --delete-tags; done",
3160
- "gcloud artifacts docker images list asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/caches/api --sort-by=~CREATE_TIME --format="value(version)" | tail -n +2 | while read -r version; do gcloud artifacts docker images delete asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/caches/api@$version --quiet --delete-tags; done",
3161
- "echo -e "\\e[0Ksection_end:$(date +%s):cleanup\\r\\e[0K"",
3162
- "echo 'Uploading SBOM to Dependency Track'",
3163
- "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/api" "https://$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" "__sbom.json" vex.json || true",
3164
- "echo "CL_GITLAB_ENVIRONMENT_URL=https://$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" >> gitlab_environment.env",
3165
- ],
3166
- "stage": "deploy stage",
3167
- "variables": {
3168
- "KUBERNETES_CPU_REQUEST": "0.22",
3169
- "KUBERNETES_MEMORY_LIMIT": "400Mi",
3170
- "KUBERNETES_MEMORY_REQUEST": "200Mi",
3171
- },
3172
- },
3173
- "api 🛑 Stop ⚠️ | prod ": {
3174
- "allow_failure": true,
3175
- "artifacts": {
3176
- "reports": {
3177
- "dotenv": "gitlab_environment.env",
3178
- },
3179
- },
3180
- "environment": {
3181
- "action": "stop",
3182
- "name": "prod/api",
3183
- "url": "$CL_GITLAB_ENVIRONMENT_URL",
3184
- },
3185
- "image": "path/to/docker/gcloud:the-version",
3186
- "interruptible": true,
3187
- "needs": [],
3188
- "retry": {
3189
- "max": 2,
3190
- "when": [
3191
- "runner_system_failure",
3192
- "stuck_or_timeout_failure",
3193
- ],
3194
- },
3195
- "rules": [
3196
- {
3197
- "if": "$CI_COMMIT_BRANCH =~ /^[0-9]+\\.([0-9]+|x)\\.x$/",
3198
- "when": "on_success",
3199
- },
3200
- {
3201
- "when": "manual",
3202
- },
3203
- ],
3204
- "script": [
3205
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
3206
- "export CLOUDSDK_CORE_DISABLE_PROMPTS="1"",
3207
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
3208
- "set +e",
3209
- "gcloud auth activate-service-account --key-file=<(echo "$CL_prod_api_GCLOUD_DEPLOY_credentialsKey")",
3210
- "gcloud scheduler jobs delete pan-test-app-prod-api-alarm-clock-scheduler --project=asdf --location=asia-east1",
3211
- "gcloud run jobs executions list --project=asdf --region=asia-east1 --job pan-test-app-prod-api-alarm-clock --format="value(name)" | xargs -I {} gcloud run jobs executions delete {} --quiet --project=asdf --region=asia-east1",
3212
- "gcloud run jobs delete pan-test-app-prod-api-alarm-clock --project=asdf --region=asia-east1",
3213
- "gcloud artifacts docker images delete asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/prod/api --quiet --delete-tags",
3214
- "gcloud artifacts docker images list asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/caches/api --sort-by=~CREATE_TIME --format="value(version)" | tail -n +2 | while read -r version; do gcloud artifacts docker images delete asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/caches/api@$version --quiet --delete-tags; done",
3215
- "echo 'Disabling component in Dependency Track'",
3216
- "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" disable "pan-test-app/api" "https://$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" || true",
3217
- "set -e",
3218
- "echo "CL_GITLAB_ENVIRONMENT_URL=https://$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" >> gitlab_environment.env",
3219
- ],
3220
- "stage": "stop prod",
3221
- "variables": {
3222
- "GIT_STRATEGY": "none",
3223
- "KUBERNETES_CPU_REQUEST": "0.22",
3224
- "KUBERNETES_MEMORY_LIMIT": "400Mi",
3225
- "KUBERNETES_MEMORY_REQUEST": "200Mi",
3226
- },
3227
- },
3228
- "api 🛑 Stop ⚠️ | stage ": {
3229
- "allow_failure": true,
3230
- "artifacts": {
3231
- "reports": {
3232
- "dotenv": "gitlab_environment.env",
3233
- },
3234
- },
3235
- "environment": {
3236
- "action": "stop",
3237
- "name": "stage/api",
3238
- "url": "$CL_GITLAB_ENVIRONMENT_URL",
3239
- },
3240
- "image": "path/to/docker/gcloud:the-version",
3241
- "interruptible": true,
3242
- "needs": [],
3243
- "retry": {
3244
- "max": 2,
3245
- "when": [
3246
- "runner_system_failure",
3247
- "stuck_or_timeout_failure",
3248
- ],
3249
- },
3250
- "rules": [
3251
- {
3252
- "if": "$CI_COMMIT_BRANCH =~ /^[0-9]+\\.([0-9]+|x)\\.x$/",
3253
- "when": "on_success",
3254
- },
3255
- {
3256
- "when": "manual",
3257
- },
3258
- ],
3259
- "script": [
3260
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
3261
- "export CLOUDSDK_CORE_DISABLE_PROMPTS="1"",
3262
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
3263
- "set +e",
3264
- "gcloud auth activate-service-account --key-file=<(echo "$CL_stage_api_GCLOUD_DEPLOY_credentialsKey")",
3265
- "gcloud scheduler jobs delete pan-test-app-stage-api-alarm-clock-scheduler --project=asdf --location=asia-east1",
3266
- "gcloud run jobs executions list --project=asdf --region=asia-east1 --job pan-test-app-stage-api-alarm-clock --format="value(name)" | xargs -I {} gcloud run jobs executions delete {} --quiet --project=asdf --region=asia-east1",
3267
- "gcloud run jobs delete pan-test-app-stage-api-alarm-clock --project=asdf --region=asia-east1",
3268
- "gcloud artifacts docker images delete asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/stage/api --quiet --delete-tags",
3269
- "gcloud artifacts docker images list asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/caches/api --sort-by=~CREATE_TIME --format="value(version)" | tail -n +2 | while read -r version; do gcloud artifacts docker images delete asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/caches/api@$version --quiet --delete-tags; done",
3270
- "echo 'Disabling component in Dependency Track'",
3271
- "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" disable "pan-test-app/api" "https://$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" || true",
3272
- "set -e",
3273
- "echo "CL_GITLAB_ENVIRONMENT_URL=https://$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" >> gitlab_environment.env",
3274
- ],
3275
- "stage": "stop stage",
3276
- "variables": {
3277
- "GIT_STRATEGY": "none",
3278
- "KUBERNETES_CPU_REQUEST": "0.22",
3279
- "KUBERNETES_MEMORY_LIMIT": "400Mi",
3280
- "KUBERNETES_MEMORY_REQUEST": "200Mi",
3281
- },
3282
- },
3283
- "api 🧾 sbom | prod ": {
3284
- "allow_failure": true,
3285
- "artifacts": {
3286
- "paths": [
3287
- "__sbom.json",
3288
- ],
3289
- },
3290
- "image": "aquasec/trivy:0.38.3",
3291
- "interruptible": true,
3292
- "needs": [],
3293
- "retry": {
3294
- "max": 2,
3295
- "when": [
3296
- "runner_system_failure",
3297
- "stuck_or_timeout_failure",
3298
- ],
3299
- },
3300
- "script": [
3301
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
3302
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
3303
- "trivy fs --quiet --format cyclonedx --output "__sbom.json" app",
3304
- ],
3305
- "stage": "build",
3306
- "variables": {},
3307
- },
3308
- "api 🧾 sbom | stage ": {
3309
- "allow_failure": true,
3310
- "artifacts": {
3311
- "paths": [
3312
- "__sbom.json",
3313
- ],
3314
- },
3315
- "image": "aquasec/trivy:0.38.3",
3316
- "interruptible": true,
3317
- "needs": [],
3318
- "retry": {
3319
- "max": 2,
3320
- "when": [
3321
- "runner_system_failure",
3322
- "stuck_or_timeout_failure",
3323
- ],
3324
- },
3325
- "script": [
3326
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
3327
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
3328
- "trivy fs --quiet --format cyclonedx --output "__sbom.json" app",
3329
- ],
3330
- "stage": "build",
3331
- "variables": {},
3332
- },
3333
- },
3334
- "stages": [
3335
- "setup",
3336
- "setup dev",
3337
- "setup review",
3338
- "setup stage",
3339
- "setup prod",
3340
- "test",
3341
- "test dev",
3342
- "test review",
3343
- "test stage",
3344
- "test prod",
3345
- "build",
3346
- "build dev",
3347
- "build review",
3348
- "build stage",
3349
- "build prod",
3350
- "deploy",
3351
- "deploy dev",
3352
- "deploy review",
3353
- "deploy stage",
3354
- "deploy prod",
3355
- "verify",
3356
- "verify dev",
3357
- "verify review",
3358
- "verify stage",
3359
- "verify prod",
3360
- "rollback",
3361
- "rollback dev",
3362
- "rollback review",
3363
- "rollback stage",
3364
- "rollback prod",
3365
- "stop",
3366
- "stop dev",
3367
- "stop review",
3368
- "stop stage",
3369
- "stop prod",
3370
- ],
3371
- "variables": {
3372
- "ARTIFACT_COMPRESSION_LEVEL": "fast",
3373
- "CACHE_COMPRESSION_LEVEL": "fast",
3374
- "FF_USE_FASTZIP": "true",
3375
- "GIT_DEPTH": "1",
3376
- "TRANSFER_METER_FREQUENCY": "5s",
3377
- },
3378
- "workflow": {
3379
- "rules": [
3380
- {
3381
- "if": "$CI_COMMIT_TAG",
3382
- },
3383
- {
3384
- "if": "$CI_COMMIT_MESSAGE =~ /^chore\\(release\\).*/",
3385
- "when": "never",
3386
- },
3387
- {
3388
- "if": "$CI_PIPELINE_SOURCE == "schedule"",
3389
- "when": "never",
3390
- },
3391
- {
3392
- "if": "$CI_COMMIT_BRANCH =~ /^[0-9]+.([0-9]+|x).x$/",
3393
- },
3394
- {
3395
- "if": "$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH",
3396
- },
3397
- {
3398
- "if": "$CI_MERGE_REQUEST_ID",
3399
- },
3400
- ],
3401
- },
3402
- },
3403
- }
3404
- `;