@catladder/pipeline 1.144.1 → 1.145.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 (307) hide show
  1. package/dist/bash/BashExpression.d.ts +40 -0
  2. package/dist/bash/BashExpression.js +124 -0
  3. package/dist/bash/bashExpressionPerPipelineType.d.ts +6 -0
  4. package/dist/bash/bashExpressionPerPipelineType.js +11 -0
  5. package/dist/bash/bashYaml.d.ts +10 -0
  6. package/dist/bash/bashYaml.js +46 -0
  7. package/dist/bash/getInjectVarsScript.d.ts +2 -0
  8. package/dist/bash/getInjectVarsScript.js +45 -0
  9. package/dist/bash/replaceAsync.d.ts +2 -0
  10. package/dist/{pipeline/commitInfo/getCommitInfo.js → bash/replaceAsync.js} +49 -21
  11. package/dist/build/base/__tests__/createArtifactsConfig.test.js +3 -1
  12. package/dist/build/base/constants.js +3 -1
  13. package/dist/build/base/createAppBuildJob.d.ts +2 -1
  14. package/dist/build/base/createAppBuildJob.js +10 -6
  15. package/dist/build/base/createArtifactsConfig.d.ts +1 -1
  16. package/dist/build/base/createArtifactsConfig.js +3 -1
  17. package/dist/build/base/index.js +3 -1
  18. package/dist/build/base/writeBuildInfo.js +4 -3
  19. package/dist/build/base/writeDotEnv.js +12 -3
  20. package/dist/build/custom/__tests__/testJob.test.js +3 -1
  21. package/dist/build/custom/buildJob.js +4 -12
  22. package/dist/build/custom/index.js +3 -1
  23. package/dist/build/custom/testJob.d.ts +1 -1
  24. package/dist/build/custom/testJob.js +18 -14
  25. package/dist/build/docker.d.ts +5 -31
  26. package/dist/build/docker.js +16 -9
  27. package/dist/build/index.d.ts +1 -1
  28. package/dist/build/index.js +13 -7
  29. package/dist/build/node/buildJob.js +4 -12
  30. package/dist/build/node/cache.js +6 -3
  31. package/dist/build/node/constants.js +3 -1
  32. package/dist/build/node/index.js +3 -1
  33. package/dist/build/node/meteor.js +5 -2
  34. package/dist/build/node/testJob.js +18 -14
  35. package/dist/build/node/yarn.d.ts +3 -2
  36. package/dist/build/node/yarn.js +6 -3
  37. package/dist/build/rails/build.js +3 -1
  38. package/dist/build/rails/index.js +3 -1
  39. package/dist/build/rails/test.js +15 -11
  40. package/dist/build/sbom.js +3 -1
  41. package/dist/build/types.d.ts +24 -18
  42. package/dist/build/types.js +3 -1
  43. package/dist/bundles/catladder-gitlab/index.js +3 -3
  44. package/dist/catladder-gitlab.js +10 -54
  45. package/dist/config/__tests__/configruedEnvs.test.js +3 -1
  46. package/dist/config/configruedEnvs.js +3 -1
  47. package/dist/config/index.js +13 -7
  48. package/dist/config/readConfig.js +6 -5
  49. package/dist/constants.js +5 -3
  50. package/dist/context/__tests__/resolveReferences.test.js +40 -8
  51. package/dist/context/getBuildInfoVariables.d.ts +7 -0
  52. package/dist/context/getBuildInfoVariables.js +29 -0
  53. package/dist/context/getEnvConfig.js +3 -1
  54. package/dist/context/getEnvType.js +3 -1
  55. package/dist/context/getEnvironment.d.ts +3 -3
  56. package/dist/context/getEnvironment.js +10 -14
  57. package/dist/context/getEnvironmentContext.d.ts +7 -3
  58. package/dist/context/getEnvironmentContext.js +21 -11
  59. package/dist/context/getEnvironmentVariables.d.ts +26 -5
  60. package/dist/context/getEnvironmentVariables.js +41 -25
  61. package/dist/context/getLabels.js +4 -2
  62. package/dist/context/getReviewSlug.d.ts +4 -0
  63. package/dist/context/getReviewSlug.js +22 -0
  64. package/dist/context/index.d.ts +12 -3
  65. package/dist/context/index.js +21 -15
  66. package/dist/context/resolveReferences.d.ts +3 -1
  67. package/dist/context/resolveReferences.js +53 -21
  68. package/dist/context/transformJobOnlyVars.d.ts +5 -2
  69. package/dist/context/transformJobOnlyVars.js +4 -2
  70. package/dist/context/utils/envVars.d.ts +1 -1
  71. package/dist/context/utils/envVars.js +5 -2
  72. package/dist/defaults/index.js +3 -1
  73. package/dist/deploy/base/deploy.d.ts +1 -1
  74. package/dist/deploy/base/deploy.js +12 -11
  75. package/dist/deploy/base/index.js +3 -1
  76. package/dist/deploy/base/rollback.d.ts +1 -1
  77. package/dist/deploy/base/rollback.js +13 -9
  78. package/dist/deploy/base/stop.d.ts +1 -1
  79. package/dist/deploy/base/stop.js +16 -11
  80. package/dist/deploy/base/types.d.ts +1 -1
  81. package/dist/deploy/base/types.js +3 -1
  82. package/dist/deploy/base/variables.js +3 -1
  83. package/dist/deploy/cloudRun/artifactsRegistry.d.ts +2 -1
  84. package/dist/deploy/cloudRun/artifactsRegistry.js +6 -4
  85. package/dist/deploy/cloudRun/cleanup.js +3 -1
  86. package/dist/deploy/cloudRun/cloudRunRevisions.js +3 -1
  87. package/dist/deploy/cloudRun/createJobs/cloudRunJobs.js +8 -5
  88. package/dist/deploy/cloudRun/createJobs/cloudRunServices.d.ts +2 -2
  89. package/dist/deploy/cloudRun/createJobs/cloudRunServices.js +6 -3
  90. package/dist/deploy/cloudRun/createJobs/common.d.ts +3 -3
  91. package/dist/deploy/cloudRun/createJobs/common.js +3 -1
  92. package/dist/deploy/cloudRun/createJobs/constants.d.ts +1 -0
  93. package/dist/deploy/cloudRun/createJobs/constants.js +7 -0
  94. package/dist/deploy/cloudRun/createJobs/getCloudRunDeployScripts.js +9 -2
  95. package/dist/deploy/cloudRun/createJobs/getCloudRunStopScripts.js +3 -1
  96. package/dist/deploy/cloudRun/createJobs/index.js +25 -8
  97. package/dist/deploy/cloudRun/createJobs/volumes.js +3 -1
  98. package/dist/deploy/cloudRun/index.js +5 -3
  99. package/dist/deploy/cloudRun/utils/createArgsString.d.ts +2 -1
  100. package/dist/deploy/cloudRun/utils/createArgsString.js +3 -1
  101. package/dist/deploy/cloudRun/utils/database.js +13 -13
  102. package/dist/deploy/cloudRun/utils/gcloudServiceAccountLoginCommands.js +3 -1
  103. package/dist/deploy/cloudRun/utils/getServiceName.d.ts +1 -1
  104. package/dist/deploy/cloudRun/utils/getServiceName.js +3 -1
  105. package/dist/deploy/cloudRun/utils/jobName.d.ts +2 -1
  106. package/dist/deploy/cloudRun/utils/jobName.js +4 -2
  107. package/dist/deploy/cloudRun/utils/removeFirstLinesFromCommandOutput.js +3 -1
  108. package/dist/deploy/cloudSql/utils.d.ts +2 -1
  109. package/dist/deploy/cloudSql/utils.js +7 -2
  110. package/dist/deploy/custom/deployJob.js +3 -1
  111. package/dist/deploy/custom/index.js +3 -1
  112. package/dist/deploy/dockerTag/deployJob.js +3 -1
  113. package/dist/deploy/dockerTag/index.js +3 -1
  114. package/dist/deploy/index.d.ts +4 -3
  115. package/dist/deploy/index.js +13 -7
  116. package/dist/deploy/kubernetes/additionalSecretKeys.js +3 -1
  117. package/dist/deploy/kubernetes/cloudSql/index.d.ts +3 -2
  118. package/dist/deploy/kubernetes/cloudSql/index.js +6 -4
  119. package/dist/deploy/kubernetes/deployJob.js +22 -15
  120. package/dist/deploy/kubernetes/index.js +51 -14
  121. package/dist/deploy/kubernetes/kubeEnv.d.ts +3 -2
  122. package/dist/deploy/kubernetes/kubeEnv.js +7 -4
  123. package/dist/deploy/kubernetes/kubeValues.d.ts +2 -2
  124. package/dist/deploy/kubernetes/kubeValues.js +3 -2
  125. package/dist/deploy/kubernetes/mongodb.js +3 -1
  126. package/dist/deploy/kubernetes/processSecretsAsFiles.d.ts +2 -1
  127. package/dist/deploy/kubernetes/processSecretsAsFiles.js +3 -1
  128. package/dist/deploy/sbom.js +3 -1
  129. package/dist/deploy/types/base.d.ts +8 -2
  130. package/dist/deploy/types/base.js +3 -1
  131. package/dist/deploy/types/custom.d.ts +1 -1
  132. package/dist/deploy/types/custom.js +3 -1
  133. package/dist/deploy/types/dockerTag.d.ts +1 -1
  134. package/dist/deploy/types/dockerTag.js +3 -1
  135. package/dist/deploy/types/googleCloudRun.d.ts +19 -18
  136. package/dist/deploy/types/googleCloudRun.js +3 -1
  137. package/dist/deploy/types/index.d.ts +6 -6
  138. package/dist/deploy/types/index.js +13 -7
  139. package/dist/deploy/types/kubernetes.d.ts +22 -22
  140. package/dist/deploy/types/kubernetes.js +3 -1
  141. package/dist/deploy/utils.js +3 -1
  142. package/dist/index.d.ts +3 -2
  143. package/dist/index.js +16 -9
  144. package/dist/packageInfos.d.ts +2 -0
  145. package/dist/packageInfos.js +14 -0
  146. package/dist/pipeline/createAllJobs.d.ts +13 -5
  147. package/dist/pipeline/createAllJobs.js +21 -10
  148. package/dist/pipeline/createChildPipeline.d.ts +1 -1
  149. package/dist/pipeline/createChildPipeline.js +24 -7
  150. package/dist/pipeline/createJobsForComponent.d.ts +3 -3
  151. package/dist/pipeline/createJobsForComponent.js +19 -18
  152. package/dist/pipeline/createMainPipeline.d.ts +3 -0
  153. package/dist/pipeline/createMainPipeline.js +248 -0
  154. package/dist/pipeline/generatePipelineFiles.d.ts +2 -0
  155. package/dist/pipeline/generatePipelineFiles.js +178 -0
  156. package/dist/pipeline/getPipelineStages.js +3 -1
  157. package/dist/pipeline/gitlab/createGitlabJobs.d.ts +15 -5
  158. package/dist/pipeline/gitlab/createGitlabJobs.js +98 -25
  159. package/dist/pipeline/gitlab/createGitlabPipeline.d.ts +7 -2
  160. package/dist/pipeline/gitlab/createGitlabPipeline.js +34 -17
  161. package/dist/pipeline/gitlab/getPipelineTriggerForGitlabChildPipeline.d.ts +1 -0
  162. package/dist/pipeline/gitlab/getPipelineTriggerForGitlabChildPipeline.js +29 -0
  163. package/dist/pipeline/gitlab/gitlabReleaseJobs.d.ts +33 -0
  164. package/dist/pipeline/gitlab/gitlabReleaseJobs.js +24 -0
  165. package/dist/pipeline/index.d.ts +3 -1
  166. package/dist/pipeline/index.js +16 -8
  167. package/dist/pipeline/packageManager.js +4 -2
  168. package/dist/pipeline/yarn/yarnUtils.js +6 -4
  169. package/dist/rules/index.d.ts +4 -1
  170. package/dist/rules/index.js +25 -18
  171. package/dist/runner/index.d.ts +1 -1
  172. package/dist/runner/index.js +3 -1
  173. package/dist/tsconfig.tsbuildinfo +1 -1
  174. package/dist/types/config.d.ts +18 -15
  175. package/dist/types/config.js +5 -2
  176. package/dist/types/context.d.ts +37 -32
  177. package/dist/types/context.js +3 -1
  178. package/dist/types/environmentContext.d.ts +11 -7
  179. package/dist/types/environmentContext.js +3 -1
  180. package/dist/types/gitlab-ci-yml.d.ts +30 -30
  181. package/dist/types/gitlab-ci-yml.js +3 -2
  182. package/dist/types/gitlab-types.d.ts +4 -6
  183. package/dist/types/gitlab-types.js +3 -1
  184. package/dist/types/index.js +13 -7
  185. package/dist/types/jobs.d.ts +23 -6
  186. package/dist/types/jobs.js +3 -1
  187. package/dist/types/pipeline.d.ts +4 -3
  188. package/dist/types/pipeline.js +3 -1
  189. package/dist/types/utils.d.ts +1 -1
  190. package/dist/types/utils.js +3 -1
  191. package/dist/utils/gitlab.js +3 -1
  192. package/dist/utils/index.d.ts +1 -1
  193. package/dist/utils/index.js +3 -1
  194. package/dist/utils/writeFiles.d.ts +7 -0
  195. package/dist/{pipeline/commitInfo/getBuildId.js → utils/writeFiles.js} +39 -22
  196. package/examples/__snapshots__/cloud-run-memory-limit.ts.snap +480 -384
  197. package/examples/__snapshots__/cloud-run-meteor-with-worker.ts.snap +462 -366
  198. package/examples/__snapshots__/cloud-run-no-cpu-throttling.ts.snap +480 -384
  199. package/examples/__snapshots__/cloud-run-no-service.ts.snap +501 -393
  200. package/examples/__snapshots__/cloud-run-non-public.ts.snap +480 -384
  201. package/examples/__snapshots__/cloud-run-post-stop-job.ts.snap +489 -392
  202. package/examples/__snapshots__/cloud-run-service-gen2.ts.snap +480 -384
  203. package/examples/__snapshots__/cloud-run-service-with-volumes.ts.snap +501 -401
  204. package/examples/__snapshots__/cloud-run-with-sql-reuse-db.ts.snap +1155 -915
  205. package/examples/__snapshots__/cloud-run-with-sql.ts.snap +1116 -888
  206. package/examples/__snapshots__/cloud-run-with-worker.ts.snap +482 -386
  207. package/examples/__snapshots__/custom-build-job-with-tests.ts.snap +452 -356
  208. package/examples/__snapshots__/custom-build-job.ts.snap +434 -350
  209. package/examples/__snapshots__/custom-deploy.ts.snap +319 -223
  210. package/examples/__snapshots__/custom-envs.ts.snap +123 -81
  211. package/examples/__snapshots__/custom-sbom-java.ts.snap +434 -350
  212. package/examples/__snapshots__/kubernetes-application-customization.ts.snap +846 -969
  213. package/examples/__snapshots__/kubernetes-with-cloud-sql-legacy.ts.snap +886 -957
  214. package/examples/__snapshots__/kubernetes-with-cloud-sql.ts.snap +894 -969
  215. package/examples/__snapshots__/kubernetes-with-jobs.ts.snap +1626 -1728
  216. package/examples/__snapshots__/kubernetes-with-mongodb.ts.snap +974 -1137
  217. package/examples/__snapshots__/local-dot-env.ts.snap +480 -384
  218. package/examples/__snapshots__/meteor-kubernetes.ts.snap +906 -1069
  219. package/examples/__snapshots__/multiline-var.ts.snap +4500 -0
  220. package/examples/__snapshots__/native-app.ts.snap +706 -578
  221. package/examples/__snapshots__/node-build-with-custom-image.ts.snap +480 -384
  222. package/examples/__snapshots__/node-build-with-docker-additions.ts.snap +488 -384
  223. package/examples/__snapshots__/rails-k8s-with-worker.ts.snap +1656 -1942
  224. package/examples/__snapshots__/wait-for-other-deploy.ts.snap +287 -231
  225. package/examples/custom-deploy.ts +7 -7
  226. package/examples/multiline-var.ts +64 -0
  227. package/package.json +5 -8
  228. package/src/bash/BashExpression.ts +81 -0
  229. package/src/bash/bashExpressionPerPipelineType.ts +16 -0
  230. package/src/bash/bashYaml.ts +46 -0
  231. package/src/bash/getInjectVarsScript.ts +12 -0
  232. package/src/bash/replaceAsync.ts +50 -0
  233. package/src/build/base/createAppBuildJob.ts +6 -2
  234. package/src/build/base/writeBuildInfo.ts +1 -1
  235. package/src/build/base/writeDotEnv.ts +6 -1
  236. package/src/build/custom/buildJob.ts +2 -4
  237. package/src/build/custom/testJob.ts +3 -2
  238. package/src/build/docker.ts +15 -7
  239. package/src/build/node/buildJob.ts +1 -3
  240. package/src/build/node/testJob.ts +3 -2
  241. package/src/build/node/yarn.ts +9 -4
  242. package/src/build/rails/test.ts +2 -1
  243. package/src/build/types.ts +8 -1
  244. package/src/catladder-gitlab.ts +8 -55
  245. package/src/config/readConfig.ts +2 -3
  246. package/src/constants.ts +5 -2
  247. package/src/context/__tests__/resolveReferences.test.ts +11 -6
  248. package/src/context/getBuildInfoVariables.ts +40 -0
  249. package/src/context/getEnvironment.ts +7 -30
  250. package/src/context/getEnvironmentContext.ts +25 -29
  251. package/src/context/getEnvironmentVariables.ts +61 -36
  252. package/src/context/getReviewSlug.ts +27 -0
  253. package/src/context/index.ts +24 -23
  254. package/src/context/resolveReferences.ts +28 -8
  255. package/src/context/transformJobOnlyVars.ts +5 -2
  256. package/src/context/utils/envVars.ts +2 -1
  257. package/src/deploy/base/deploy.ts +20 -18
  258. package/src/deploy/base/rollback.ts +8 -10
  259. package/src/deploy/base/stop.ts +8 -9
  260. package/src/deploy/cloudRun/artifactsRegistry.ts +9 -4
  261. package/src/deploy/cloudRun/createJobs/cloudRunJobs.ts +12 -7
  262. package/src/deploy/cloudRun/createJobs/cloudRunServices.ts +3 -2
  263. package/src/deploy/cloudRun/createJobs/constants.ts +1 -0
  264. package/src/deploy/cloudRun/createJobs/getCloudRunDeployScripts.ts +20 -2
  265. package/src/deploy/cloudRun/createJobs/index.ts +17 -8
  266. package/src/deploy/cloudRun/index.ts +14 -6
  267. package/src/deploy/cloudRun/utils/createArgsString.ts +2 -1
  268. package/src/deploy/cloudRun/utils/database.ts +2 -2
  269. package/src/deploy/cloudRun/utils/jobName.ts +7 -2
  270. package/src/deploy/cloudSql/utils.ts +12 -9
  271. package/src/deploy/index.ts +2 -1
  272. package/src/deploy/kubernetes/cloudSql/index.ts +3 -2
  273. package/src/deploy/kubernetes/deployJob.ts +24 -10
  274. package/src/deploy/kubernetes/index.ts +15 -8
  275. package/src/deploy/kubernetes/kubeEnv.ts +8 -6
  276. package/src/deploy/kubernetes/kubeValues.ts +0 -1
  277. package/src/deploy/kubernetes/processSecretsAsFiles.ts +2 -1
  278. package/src/deploy/types/base.ts +6 -0
  279. package/src/deploy/types/googleCloudRun.ts +2 -0
  280. package/src/index.ts +2 -1
  281. package/src/packageInfos.ts +10 -0
  282. package/src/pipeline/createAllJobs.ts +24 -10
  283. package/src/pipeline/createChildPipeline.ts +19 -8
  284. package/src/pipeline/createJobsForComponent.ts +14 -22
  285. package/src/pipeline/createMainPipeline.ts +88 -0
  286. package/src/pipeline/generatePipelineFiles.ts +29 -0
  287. package/src/pipeline/gitlab/createGitlabJobs.ts +174 -51
  288. package/src/pipeline/gitlab/createGitlabPipeline.ts +16 -14
  289. package/src/pipeline/gitlab/getPipelineTriggerForGitlabChildPipeline.ts +46 -0
  290. package/src/pipeline/gitlab/gitlabReleaseJobs.ts +20 -0
  291. package/src/pipeline/index.ts +2 -0
  292. package/src/rules/index.ts +15 -9
  293. package/src/types/config.ts +11 -2
  294. package/src/types/context.ts +39 -26
  295. package/src/types/environmentContext.ts +12 -6
  296. package/src/types/gitlab-ci-yml.ts +0 -1
  297. package/src/types/gitlab-types.ts +5 -4
  298. package/src/types/jobs.ts +28 -3
  299. package/src/types/pipeline.ts +4 -0
  300. package/src/utils/writeFiles.ts +40 -0
  301. package/dist/deploy/cloudRun/createJobs/variables.d.ts +0 -5
  302. package/dist/deploy/cloudRun/createJobs/variables.js +0 -19
  303. package/dist/pipeline/commitInfo/getBuildId.d.ts +0 -6
  304. package/dist/pipeline/commitInfo/getCommitInfo.d.ts +0 -2
  305. package/src/deploy/cloudRun/createJobs/variables.ts +0 -21
  306. package/src/pipeline/commitInfo/getBuildId.ts +0 -17
  307. package/src/pipeline/commitInfo/getCommitInfo.ts +0 -15
@@ -33,6 +33,9 @@ exports[`matches snapshot 1`] = `
33
33
  ],
34
34
  },
35
35
  "script": [
36
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
37
+ "export APP_PATH="api"",
38
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
36
39
  "echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"",
37
40
  "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
38
41
  "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
@@ -49,7 +52,6 @@ exports[`matches snapshot 1`] = `
49
52
  ],
50
53
  "stage": "test",
51
54
  "variables": {
52
- "APP_PATH": "api",
53
55
  "KUBERNETES_CPU_REQUEST": "0.5",
54
56
  "KUBERNETES_MEMORY_LIMIT": "4Gi",
55
57
  "KUBERNETES_MEMORY_REQUEST": "2Gi",
@@ -102,7 +104,25 @@ exports[`matches snapshot 1`] = `
102
104
  ],
103
105
  },
104
106
  "script": [
105
- "echo '{"id":"some-id","time":"01-01-2023 12:13:14"}' > api/__build_info.json",
107
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
108
+ "export ENV_SHORT="dev"",
109
+ "export APP_DIR="api"",
110
+ "export ENV_TYPE="dev"",
111
+ "export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
112
+ "export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
113
+ "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\\///'); [ -z "$tag" ] && echo "v0.0.0" || echo "$tag")"",
114
+ "export HOST="$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
115
+ "export ROOT_URL="https://$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
116
+ "export HOST_INTERNAL="$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
117
+ "export HOST_CANONICAL="$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
118
+ "export ROOT_URL_INTERNAL="https://$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
119
+ "export DEPLOY_CLOUD_RUN_PROJECT_ID="google-project-id"",
120
+ "export DEPLOY_CLOUD_RUN_REGION="europe-west6"",
121
+ "export GCLOUD_DEPLOY_credentialsKey="$CL_dev_api_GCLOUD_DEPLOY_credentialsKey"",
122
+ "export GCLOUD_RUN_canonicalHostSuffix="$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix"",
123
+ "export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOST\\",\\"ROOT_URL\\",\\"HOST_INTERNAL\\",\\"HOST_CANONICAL\\",\\"ROOT_URL_INTERNAL\\",\\"DEPLOY_CLOUD_RUN_PROJECT_ID\\",\\"DEPLOY_CLOUD_RUN_REGION\\",\\"GCLOUD_DEPLOY_credentialsKey\\",\\"GCLOUD_RUN_canonicalHostSuffix\\"]"",
124
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
125
+ "echo '{"id":"$(git describe --tags 2>/dev/null || git rev-parse HEAD)","time":"$CI_JOB_STARTED_AT"}' > api/__build_info.json",
106
126
  "echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"",
107
127
  "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
108
128
  "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
@@ -119,25 +139,9 @@ exports[`matches snapshot 1`] = `
119
139
  ],
120
140
  "stage": "build",
121
141
  "variables": {
122
- "APP_DIR": "api",
123
- "BUILD_INFO_BUILD_TIME": "01-01-2023 12:13:14",
124
- "BUILD_INFO_CURRENT_VERSION": "3.2.1",
125
- "BUILD_INFO_ID": "some-id",
126
- "DEPLOY_CLOUD_RUN_PROJECT_ID": "google-project-id",
127
- "DEPLOY_CLOUD_RUN_REGION": "europe-west6",
128
- "ENV_SHORT": "dev",
129
- "ENV_TYPE": "dev",
130
- "GCLOUD_DEPLOY_credentialsKey": "$CL_dev_api_GCLOUD_DEPLOY_credentialsKey",
131
- "GCLOUD_RUN_canonicalHostSuffix": "$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix",
132
- "HOST": "pan-test-app-dev-api-unknown-host.example.com",
133
- "HOST_CANONICAL": "pan-test-app-dev-api-unknown-host.example.com",
134
- "HOST_INTERNAL": "pan-test-app-dev-api-unknown-host.example.com",
135
142
  "KUBERNETES_CPU_REQUEST": "0.5",
136
143
  "KUBERNETES_MEMORY_LIMIT": "4Gi",
137
144
  "KUBERNETES_MEMORY_REQUEST": "2Gi",
138
- "ROOT_URL": "https://pan-test-app-dev-api-unknown-host.example.com",
139
- "ROOT_URL_INTERNAL": "https://pan-test-app-dev-api-unknown-host.example.com",
140
- "_ALL_ENV_VAR_KEYS": "["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","HOST_CANONICAL","ROOT_URL_INTERNAL","HOST_INTERNAL","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]",
141
145
  },
142
146
  },
143
147
  "api 🔨 docker | dev ": {
@@ -163,6 +167,21 @@ exports[`matches snapshot 1`] = `
163
167
  ],
164
168
  },
165
169
  "script": [
170
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
171
+ "export APP_DIR="api"",
172
+ "export DOCKER_DIR="."",
173
+ "export DOCKER_REGISTRY="europe-west6-docker.pkg.dev"",
174
+ "export DOCKER_IMAGE="europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/dev/api"",
175
+ "export DOCKER_CACHE_IMAGE="europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/api"",
176
+ "export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"",
177
+ "export DOCKER_COPY_AND_INSTALL_APP="COPY --chown=node:node $APP_DIR .
178
+ RUN yarn plugin import workspace-tools
179
+ RUN yarn workspaces focus --production && yarn rebuild"",
180
+ "export DOCKER_COPY_WORKSPACE_FILES="COPY --chown=node:node api/package.json /app/api/package.json
181
+ COPY --chown=node:node api/yarn.lock /app/api/yarn.lock
182
+ COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
183
+ COPY --chown=node:node .yarn /app/.yarn"",
184
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
166
185
  "ensureNodeDockerfile",
167
186
  "echo -e "\\e[0Ksection_start:$(date +%s):docker-login[collapsed=true]\\r\\e[0KDocker Login"",
168
187
  "gcloud auth activate-service-account --key-file=<(echo "$CL_dev_api_GCLOUD_DEPLOY_credentialsKey")",
@@ -187,24 +206,9 @@ exports[`matches snapshot 1`] = `
187
206
  ],
188
207
  "stage": "build",
189
208
  "variables": {
190
- "APP_DIR": "api",
191
- "DOCKERFILE_ADDITIONS": undefined,
192
- "DOCKERFILE_ADDITIONS_END": undefined,
193
209
  "DOCKER_BUILDKIT": "1",
194
- "DOCKER_CACHE_IMAGE": "europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/api",
195
- "DOCKER_COPY_AND_INSTALL_APP": "COPY --chown=node:node $APP_DIR .
196
- RUN yarn plugin import workspace-tools
197
- RUN yarn workspaces focus --production && yarn rebuild",
198
- "DOCKER_COPY_WORKSPACE_FILES": "COPY --chown=node:node api/package.json /app/api/package.json
199
- COPY --chown=node:node api/yarn.lock /app/api/yarn.lock
200
- COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
201
- COPY --chown=node:node .yarn /app/.yarn",
202
- "DOCKER_DIR": ".",
203
210
  "DOCKER_DRIVER": "overlay2",
204
211
  "DOCKER_HOST": "tcp://0.0.0.0:2375",
205
- "DOCKER_IMAGE": "europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/dev/api",
206
- "DOCKER_IMAGE_TAG": "$CI_COMMIT_SHA",
207
- "DOCKER_REGISTRY": "europe-west6-docker.pkg.dev",
208
212
  "DOCKER_TLS_CERTDIR": "",
209
213
  "KUBERNETES_CPU_REQUEST": "0.5",
210
214
  "KUBERNETES_MEMORY_LIMIT": "2Gi",
@@ -214,15 +218,15 @@ COPY --chown=node:node .yarn /app/.yarn",
214
218
  "api 🚀 Deploy | dev ": {
215
219
  "allow_failure": false,
216
220
  "artifacts": {
217
- "paths": [
218
- "____envvars.yaml",
219
- ],
221
+ "reports": {
222
+ "dotenv": "gitlab_environment.env",
223
+ },
220
224
  },
221
225
  "environment": {
222
226
  "auto_stop_in": "4 weeks",
223
227
  "name": "dev/api",
224
228
  "on_stop": "api 🛑 Stop ⚠️ | dev ",
225
- "url": "https://pan-test-app-dev-api-unknown-host.example.com",
229
+ "url": "$CL_GITLAB_ENVIRONMENT_URL",
226
230
  },
227
231
  "image": "path/to/docker/gcloud:the-version",
228
232
  "interruptible": true,
@@ -265,13 +269,71 @@ COPY --chown=node:node .yarn /app/.yarn",
265
269
  },
266
270
  ],
267
271
  "script": [
272
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
273
+ "export ENV_SHORT="dev"",
274
+ "export APP_DIR="api"",
275
+ "export ENV_TYPE="dev"",
276
+ "export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
277
+ "export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
278
+ "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\\///'); [ -z "$tag" ] && echo "v0.0.0" || echo "$tag")"",
279
+ "export HOST="$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
280
+ "export ROOT_URL="https://$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
281
+ "export HOST_INTERNAL="$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
282
+ "export HOST_CANONICAL="$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
283
+ "export ROOT_URL_INTERNAL="https://$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
284
+ "export DEPLOY_CLOUD_RUN_PROJECT_ID="google-project-id"",
285
+ "export DEPLOY_CLOUD_RUN_REGION="europe-west6"",
286
+ "export GCLOUD_DEPLOY_credentialsKey="$CL_dev_api_GCLOUD_DEPLOY_credentialsKey"",
287
+ "export GCLOUD_RUN_canonicalHostSuffix="$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix"",
288
+ "export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOST\\",\\"ROOT_URL\\",\\"HOST_INTERNAL\\",\\"HOST_CANONICAL\\",\\"ROOT_URL_INTERNAL\\",\\"DEPLOY_CLOUD_RUN_PROJECT_ID\\",\\"DEPLOY_CLOUD_RUN_REGION\\",\\"GCLOUD_DEPLOY_credentialsKey\\",\\"GCLOUD_RUN_canonicalHostSuffix\\"]"",
289
+ "export DOCKER_REGISTRY="europe-west6-docker.pkg.dev"",
290
+ "export DOCKER_IMAGE="europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/dev/api"",
291
+ "export DOCKER_CACHE_IMAGE="europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/api"",
292
+ "export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"",
293
+ "export CLOUDSDK_CORE_DISABLE_PROMPTS="1"",
294
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
268
295
  "echo -e "\\e[0Ksection_start:$(date +%s):prepare[collapsed=true]\\r\\e[0KPrepare..."",
269
296
  "gcloud auth activate-service-account --key-file=<(echo "$CL_dev_api_GCLOUD_DEPLOY_credentialsKey")",
270
297
  "export GCLOUD_PROJECT_NUMBER=$(gcloud projects describe google-project-id --format="value(projectNumber)")",
271
298
  "echo "GCLOUD_PROJECT_NUMBER: $GCLOUD_PROJECT_NUMBER"",
272
299
  "echo -e "\\e[0Ksection_end:$(date +%s):prepare\\r\\e[0K"",
300
+ "echo -e "\\e[0Ksection_start:$(date +%s):writeenvvars[collapsed=true]\\r\\e[0KWrite env vars to file"",
301
+ "cat > ____envvars.yaml <<EOF
302
+ ENV_SHORT: |-
303
+ dev
304
+ APP_DIR: |-
305
+ api
306
+ ENV_TYPE: |-
307
+ dev
308
+ BUILD_INFO_BUILD_ID: |-
309
+ $(printf %s "$(git describe --tags 2>/dev/null || git rev-parse HEAD)" | sed 's/^/ /')
310
+ BUILD_INFO_BUILD_TIME: |-
311
+ $(printf %s "$CI_JOB_STARTED_AT" | sed 's/^/ /')
312
+ BUILD_INFO_CURRENT_VERSION: |-
313
+ $(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\\///'); [ -z "$tag" ] && echo "v0.0.0" || echo "$tag")" | sed 's/^/ /')
314
+ HOST: |-
315
+ $(printf %s "$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
316
+ ROOT_URL: |-
317
+ $(printf %s "https://$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
318
+ HOST_INTERNAL: |-
319
+ $(printf %s "$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
320
+ HOST_CANONICAL: |-
321
+ $(printf %s "$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
322
+ ROOT_URL_INTERNAL: |-
323
+ $(printf %s "https://$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
324
+ DEPLOY_CLOUD_RUN_PROJECT_ID: |-
325
+ google-project-id
326
+ DEPLOY_CLOUD_RUN_REGION: |-
327
+ europe-west6
328
+ GCLOUD_RUN_canonicalHostSuffix: |-
329
+ $(printf %s "$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | sed 's/^/ /')
330
+ _ALL_ENV_VAR_KEYS: |-
331
+ ["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","HOST_INTERNAL","HOST_CANONICAL","ROOT_URL_INTERNAL","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]
332
+
333
+ EOF
334
+ ",
335
+ "echo -e "\\e[0Ksection_end:$(date +%s):writeenvvars\\r\\e[0K"",
273
336
  "echo -e "\\e[0Ksection_start:$(date +%s):deploy[collapsed=true]\\r\\e[0KDeploy to cloud run"",
274
- "echo "$ENV_VARS" > ____envvars.yaml",
275
337
  "gcloud run deploy pan-test-app-dev-api --command="yarn,start" --image=europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/dev/api:$DOCKER_IMAGE_TAG --project=google-project-id --region=europe-west6 --labels=customer-name=pan,component-name=api,app-name=test-app,env-type=dev,env-name=dev,build-type=node,cloud-run-service-name=pan-test-app-dev-api --env-vars-file=____envvars.yaml --min-instances=0 --max-instances=100 --cpu-throttling --allow-unauthenticated --ingress=all --cpu-boost",
276
338
  "gcloud run deploy pan-test-app-dev-api-worker --command="yarn,start:worker" --image=europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/dev/api:$DOCKER_IMAGE_TAG --project=google-project-id --region=europe-west6 --labels=customer-name=pan,component-name=api,app-name=test-app,env-type=dev,env-name=dev,build-type=node,cloud-run-service-name=pan-test-app-dev-api-worker --env-vars-file=____envvars.yaml --min-instances=1 --max-instances=1 --no-cpu-throttling --allow-unauthenticated --ingress=all --cpu-boost",
277
339
  "echo -e "\\e[0Ksection_end:$(date +%s):deploy\\r\\e[0K"",
@@ -281,69 +343,27 @@ COPY --chown=node:node .yarn /app/.yarn",
281
343
  "gcloud artifacts docker images list europe-west6-docker.pkg.dev/google-project-id/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 europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/api@$version --quiet --delete-tags; done",
282
344
  "echo -e "\\e[0Ksection_end:$(date +%s):cleanup\\r\\e[0K"",
283
345
  "echo Uploading SBOM to Dependency Track",
284
- "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/api" "https://pan-test-app-dev-api-unknown-host.example.com" "__sbom.json" vex.json || true",
285
- ],
286
- "services": [
287
- {
288
- "command": [
289
- "--tls=false",
290
- ],
291
- "name": "docker:24.0.6-dind",
292
- },
346
+ "/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",
347
+ "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",
293
348
  ],
294
349
  "stage": "deploy dev",
295
350
  "variables": {
296
- "APP_DIR": "api",
297
- "BUILD_INFO_BUILD_TIME": "01-01-2023 12:13:14",
298
- "BUILD_INFO_CURRENT_VERSION": "3.2.1",
299
- "BUILD_INFO_ID": "some-id",
300
- "CLOUDSDK_CORE_DISABLE_PROMPTS": "1",
301
- "DEPLOY_CLOUD_RUN_PROJECT_ID": "google-project-id",
302
- "DEPLOY_CLOUD_RUN_REGION": "europe-west6",
303
- "DOCKER_BUILDKIT": "1",
304
- "DOCKER_CACHE_IMAGE": "europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/api",
305
- "DOCKER_DRIVER": "overlay2",
306
- "DOCKER_HOST": "tcp://0.0.0.0:2375",
307
- "DOCKER_IMAGE": "europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/dev/api",
308
- "DOCKER_IMAGE_TAG": "$CI_COMMIT_SHA",
309
- "DOCKER_REGISTRY": "europe-west6-docker.pkg.dev",
310
- "DOCKER_TLS_CERTDIR": "",
311
- "ENV_SHORT": "dev",
312
- "ENV_TYPE": "dev",
313
- "ENV_VARS": "ENV_SHORT: 'dev'
314
- APP_DIR: 'api'
315
- ENV_TYPE: 'dev'
316
- BUILD_INFO_ID: 'some-id'
317
- BUILD_INFO_BUILD_TIME: '01-01-2023 12:13:14'
318
- BUILD_INFO_CURRENT_VERSION: '3.2.1'
319
- HOST: 'pan-test-app-dev-api-unknown-host.example.com'
320
- ROOT_URL: 'https://pan-test-app-dev-api-unknown-host.example.com'
321
- HOST_CANONICAL: 'pan-test-app-dev-api-unknown-host.example.com'
322
- ROOT_URL_INTERNAL: 'https://pan-test-app-dev-api-unknown-host.example.com'
323
- HOST_INTERNAL: 'pan-test-app-dev-api-unknown-host.example.com'
324
- DEPLOY_CLOUD_RUN_PROJECT_ID: 'google-project-id'
325
- DEPLOY_CLOUD_RUN_REGION: 'europe-west6'
326
- GCLOUD_RUN_canonicalHostSuffix: '$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix'
327
- _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","HOST_CANONICAL","ROOT_URL_INTERNAL","HOST_INTERNAL","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]'
328
- ",
329
- "GCLOUD_DEPLOY_credentialsKey": "$CL_dev_api_GCLOUD_DEPLOY_credentialsKey",
330
- "GCLOUD_RUN_canonicalHostSuffix": "$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix",
331
- "HOST": "pan-test-app-dev-api-unknown-host.example.com",
332
- "HOST_CANONICAL": "pan-test-app-dev-api-unknown-host.example.com",
333
- "HOST_INTERNAL": "pan-test-app-dev-api-unknown-host.example.com",
334
351
  "KUBERNETES_CPU_REQUEST": "0.5",
335
352
  "KUBERNETES_MEMORY_LIMIT": "400Mi",
336
353
  "KUBERNETES_MEMORY_REQUEST": "200Mi",
337
- "ROOT_URL": "https://pan-test-app-dev-api-unknown-host.example.com",
338
- "ROOT_URL_INTERNAL": "https://pan-test-app-dev-api-unknown-host.example.com",
339
- "_ALL_ENV_VAR_KEYS": "["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","HOST_CANONICAL","ROOT_URL_INTERNAL","HOST_INTERNAL","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]",
340
354
  },
341
355
  },
342
356
  "api 🛑 Stop ⚠️ | dev ": {
357
+ "allow_failure": true,
358
+ "artifacts": {
359
+ "reports": {
360
+ "dotenv": "gitlab_environment.env",
361
+ },
362
+ },
343
363
  "environment": {
344
364
  "action": "stop",
345
365
  "name": "dev/api",
346
- "url": "https://pan-test-app-dev-api-unknown-host.example.com",
366
+ "url": "$CL_GITLAB_ENVIRONMENT_URL",
347
367
  },
348
368
  "image": "path/to/docker/gcloud:the-version",
349
369
  "interruptible": true,
@@ -357,16 +377,17 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
357
377
  },
358
378
  "rules": [
359
379
  {
360
- "allow_failure": true,
361
380
  "if": "$CI_COMMIT_BRANCH =~ /^[0-9]+\\.([0-9]+|x)\\.x$/",
362
381
  "when": "on_success",
363
382
  },
364
383
  {
365
- "allow_failure": true,
366
384
  "when": "manual",
367
385
  },
368
386
  ],
369
387
  "script": [
388
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
389
+ "export CLOUDSDK_CORE_DISABLE_PROMPTS="1"",
390
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
370
391
  "set +e",
371
392
  "gcloud auth activate-service-account --key-file=<(echo "$CL_dev_api_GCLOUD_DEPLOY_credentialsKey")",
372
393
  "gcloud run services delete pan-test-app-dev-api --project=google-project-id --region=europe-west6",
@@ -374,12 +395,12 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
374
395
  "gcloud artifacts docker images delete europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/dev/api --quiet --delete-tags",
375
396
  "gcloud artifacts docker images list europe-west6-docker.pkg.dev/google-project-id/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 europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/api@$version --quiet --delete-tags; done",
376
397
  "echo Disabling component in Dependency Track",
377
- "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" disable "pan-test-app/api" "https://pan-test-app-dev-api-unknown-host.example.com" || true",
398
+ "/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",
378
399
  "set -e",
400
+ "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",
379
401
  ],
380
402
  "stage": "stop dev",
381
403
  "variables": {
382
- "CLOUDSDK_CORE_DISABLE_PROMPTS": "1",
383
404
  "GIT_STRATEGY": "none",
384
405
  "KUBERNETES_CPU_REQUEST": "0.5",
385
406
  "KUBERNETES_MEMORY_LIMIT": "400Mi",
@@ -399,12 +420,14 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
399
420
  ],
400
421
  },
401
422
  "script": [
423
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
424
+ "export APP_PATH="api"",
425
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
402
426
  "cd api",
403
427
  "yarn npm audit --environment production",
404
428
  ],
405
429
  "stage": "test",
406
430
  "variables": {
407
- "APP_PATH": "api",
408
431
  "KUBERNETES_CPU_REQUEST": "0.5",
409
432
  "KUBERNETES_MEMORY_LIMIT": "4Gi",
410
433
  "KUBERNETES_MEMORY_REQUEST": "2Gi",
@@ -438,6 +461,9 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
438
461
  ],
439
462
  },
440
463
  "script": [
464
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
465
+ "export APP_PATH="api"",
466
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
441
467
  "echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"",
442
468
  "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
443
469
  "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
@@ -454,7 +480,6 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
454
480
  ],
455
481
  "stage": "test",
456
482
  "variables": {
457
- "APP_PATH": "api",
458
483
  "KUBERNETES_CPU_REQUEST": "0.5",
459
484
  "KUBERNETES_MEMORY_LIMIT": "4Gi",
460
485
  "KUBERNETES_MEMORY_REQUEST": "2Gi",
@@ -478,6 +503,8 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
478
503
  ],
479
504
  },
480
505
  "script": [
506
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
507
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
481
508
  "trivy fs --quiet --format cyclonedx --output "__sbom.json" api",
482
509
  ],
483
510
  "stage": "build",
@@ -530,7 +557,7 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
530
557
  ],
531
558
  "variables": {
532
559
  "FF_USE_FASTZIP": "true",
533
- "GIT_DEPTH": 1,
560
+ "GIT_DEPTH": "1",
534
561
  },
535
562
  "workflow": {
536
563
  "rules": [
@@ -588,6 +615,9 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
588
615
  ],
589
616
  },
590
617
  "script": [
618
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
619
+ "export APP_PATH="api"",
620
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
591
621
  "echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"",
592
622
  "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
593
623
  "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
@@ -604,7 +634,6 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
604
634
  ],
605
635
  "stage": "test",
606
636
  "variables": {
607
- "APP_PATH": "api",
608
637
  "KUBERNETES_CPU_REQUEST": "0.5",
609
638
  "KUBERNETES_MEMORY_LIMIT": "4Gi",
610
639
  "KUBERNETES_MEMORY_REQUEST": "2Gi",
@@ -657,7 +686,25 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
657
686
  ],
658
687
  },
659
688
  "script": [
660
- "echo '{"id":"some-id","time":"01-01-2023 12:13:14"}' > api/__build_info.json",
689
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
690
+ "export ENV_SHORT="review"",
691
+ "export APP_DIR="api"",
692
+ "export ENV_TYPE="review"",
693
+ "export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
694
+ "export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
695
+ "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\\///'); [ -z "$tag" ] && echo "v0.0.0" || echo "$tag")"",
696
+ "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)}')"",
697
+ "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)}')"",
698
+ "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)}')"",
699
+ "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)}')"",
700
+ "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)}')"",
701
+ "export DEPLOY_CLOUD_RUN_PROJECT_ID="google-project-id"",
702
+ "export DEPLOY_CLOUD_RUN_REGION="europe-west6"",
703
+ "export GCLOUD_DEPLOY_credentialsKey="$CL_review_api_GCLOUD_DEPLOY_credentialsKey"",
704
+ "export GCLOUD_RUN_canonicalHostSuffix="$CL_review_api_GCLOUD_RUN_canonicalHostSuffix"",
705
+ "export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOST\\",\\"ROOT_URL\\",\\"HOST_INTERNAL\\",\\"HOST_CANONICAL\\",\\"ROOT_URL_INTERNAL\\",\\"DEPLOY_CLOUD_RUN_PROJECT_ID\\",\\"DEPLOY_CLOUD_RUN_REGION\\",\\"GCLOUD_DEPLOY_credentialsKey\\",\\"GCLOUD_RUN_canonicalHostSuffix\\"]"",
706
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
707
+ "echo '{"id":"$(git describe --tags 2>/dev/null || git rev-parse HEAD)","time":"$CI_JOB_STARTED_AT"}' > api/__build_info.json",
661
708
  "echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"",
662
709
  "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
663
710
  "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
@@ -674,25 +721,9 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
674
721
  ],
675
722
  "stage": "build",
676
723
  "variables": {
677
- "APP_DIR": "api",
678
- "BUILD_INFO_BUILD_TIME": "01-01-2023 12:13:14",
679
- "BUILD_INFO_CURRENT_VERSION": "3.2.1",
680
- "BUILD_INFO_ID": "some-id",
681
- "DEPLOY_CLOUD_RUN_PROJECT_ID": "google-project-id",
682
- "DEPLOY_CLOUD_RUN_REGION": "europe-west6",
683
- "ENV_SHORT": "review",
684
- "ENV_TYPE": "review",
685
- "GCLOUD_DEPLOY_credentialsKey": "$CL_review_api_GCLOUD_DEPLOY_credentialsKey",
686
- "GCLOUD_RUN_canonicalHostSuffix": "$CL_review_api_GCLOUD_RUN_canonicalHostSuffix",
687
- "HOST": "pan-test-app-review-mr1234-api-unknown-host.example.com",
688
- "HOST_CANONICAL": "pan-test-app-review-mr1234-api-unknown-host.example.com",
689
- "HOST_INTERNAL": "pan-test-app-review-mr1234-api-unknown-host.example.com",
690
724
  "KUBERNETES_CPU_REQUEST": "0.5",
691
725
  "KUBERNETES_MEMORY_LIMIT": "4Gi",
692
726
  "KUBERNETES_MEMORY_REQUEST": "2Gi",
693
- "ROOT_URL": "https://pan-test-app-review-mr1234-api-unknown-host.example.com",
694
- "ROOT_URL_INTERNAL": "https://pan-test-app-review-mr1234-api-unknown-host.example.com",
695
- "_ALL_ENV_VAR_KEYS": "["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","HOST_CANONICAL","ROOT_URL_INTERNAL","HOST_INTERNAL","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]",
696
727
  },
697
728
  },
698
729
  "api 🔨 docker | review ": {
@@ -718,6 +749,21 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
718
749
  ],
719
750
  },
720
751
  "script": [
752
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
753
+ "export APP_DIR="api"",
754
+ "export DOCKER_DIR="."",
755
+ "export DOCKER_REGISTRY="europe-west6-docker.pkg.dev"",
756
+ "export DOCKER_IMAGE="europe-west6-docker.pkg.dev/google-project-id/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"; })"",
757
+ "export DOCKER_CACHE_IMAGE="europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/api"",
758
+ "export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"",
759
+ "export DOCKER_COPY_AND_INSTALL_APP="COPY --chown=node:node $APP_DIR .
760
+ RUN yarn plugin import workspace-tools
761
+ RUN yarn workspaces focus --production && yarn rebuild"",
762
+ "export DOCKER_COPY_WORKSPACE_FILES="COPY --chown=node:node api/package.json /app/api/package.json
763
+ COPY --chown=node:node api/yarn.lock /app/api/yarn.lock
764
+ COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
765
+ COPY --chown=node:node .yarn /app/.yarn"",
766
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
721
767
  "ensureNodeDockerfile",
722
768
  "echo -e "\\e[0Ksection_start:$(date +%s):docker-login[collapsed=true]\\r\\e[0KDocker Login"",
723
769
  "gcloud auth activate-service-account --key-file=<(echo "$CL_review_api_GCLOUD_DEPLOY_credentialsKey")",
@@ -742,24 +788,9 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
742
788
  ],
743
789
  "stage": "build",
744
790
  "variables": {
745
- "APP_DIR": "api",
746
- "DOCKERFILE_ADDITIONS": undefined,
747
- "DOCKERFILE_ADDITIONS_END": undefined,
748
791
  "DOCKER_BUILDKIT": "1",
749
- "DOCKER_CACHE_IMAGE": "europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/api",
750
- "DOCKER_COPY_AND_INSTALL_APP": "COPY --chown=node:node $APP_DIR .
751
- RUN yarn plugin import workspace-tools
752
- RUN yarn workspaces focus --production && yarn rebuild",
753
- "DOCKER_COPY_WORKSPACE_FILES": "COPY --chown=node:node api/package.json /app/api/package.json
754
- COPY --chown=node:node api/yarn.lock /app/api/yarn.lock
755
- COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
756
- COPY --chown=node:node .yarn /app/.yarn",
757
- "DOCKER_DIR": ".",
758
792
  "DOCKER_DRIVER": "overlay2",
759
793
  "DOCKER_HOST": "tcp://0.0.0.0:2375",
760
- "DOCKER_IMAGE": "europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/review/api/mr1234",
761
- "DOCKER_IMAGE_TAG": "$CI_COMMIT_SHA",
762
- "DOCKER_REGISTRY": "europe-west6-docker.pkg.dev",
763
794
  "DOCKER_TLS_CERTDIR": "",
764
795
  "KUBERNETES_CPU_REQUEST": "0.5",
765
796
  "KUBERNETES_MEMORY_LIMIT": "2Gi",
@@ -769,15 +800,15 @@ COPY --chown=node:node .yarn /app/.yarn",
769
800
  "api 🚀 Deploy | review ": {
770
801
  "allow_failure": false,
771
802
  "artifacts": {
772
- "paths": [
773
- "____envvars.yaml",
774
- ],
803
+ "reports": {
804
+ "dotenv": "gitlab_environment.env",
805
+ },
775
806
  },
776
807
  "environment": {
777
808
  "auto_stop_in": "1 week",
778
- "name": "review/some-commit/api",
809
+ "name": "review/$CI_COMMIT_REF_NAME/api",
779
810
  "on_stop": "api 🛑 Stop ⚠️ | review ",
780
- "url": "https://pan-test-app-review-mr1234-api-unknown-host.example.com",
811
+ "url": "$CL_GITLAB_ENVIRONMENT_URL",
781
812
  },
782
813
  "image": "path/to/docker/gcloud:the-version",
783
814
  "interruptible": true,
@@ -820,88 +851,104 @@ COPY --chown=node:node .yarn /app/.yarn",
820
851
  },
821
852
  ],
822
853
  "script": [
854
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
855
+ "export ENV_SHORT="review"",
856
+ "export APP_DIR="api"",
857
+ "export ENV_TYPE="review"",
858
+ "export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
859
+ "export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
860
+ "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\\///'); [ -z "$tag" ] && echo "v0.0.0" || echo "$tag")"",
861
+ "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)}')"",
862
+ "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)}')"",
863
+ "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)}')"",
864
+ "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)}')"",
865
+ "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)}')"",
866
+ "export DEPLOY_CLOUD_RUN_PROJECT_ID="google-project-id"",
867
+ "export DEPLOY_CLOUD_RUN_REGION="europe-west6"",
868
+ "export GCLOUD_DEPLOY_credentialsKey="$CL_review_api_GCLOUD_DEPLOY_credentialsKey"",
869
+ "export GCLOUD_RUN_canonicalHostSuffix="$CL_review_api_GCLOUD_RUN_canonicalHostSuffix"",
870
+ "export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOST\\",\\"ROOT_URL\\",\\"HOST_INTERNAL\\",\\"HOST_CANONICAL\\",\\"ROOT_URL_INTERNAL\\",\\"DEPLOY_CLOUD_RUN_PROJECT_ID\\",\\"DEPLOY_CLOUD_RUN_REGION\\",\\"GCLOUD_DEPLOY_credentialsKey\\",\\"GCLOUD_RUN_canonicalHostSuffix\\"]"",
871
+ "export DOCKER_REGISTRY="europe-west6-docker.pkg.dev"",
872
+ "export DOCKER_IMAGE="europe-west6-docker.pkg.dev/google-project-id/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"; })"",
873
+ "export DOCKER_CACHE_IMAGE="europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/api"",
874
+ "export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"",
875
+ "export CLOUDSDK_CORE_DISABLE_PROMPTS="1"",
876
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
823
877
  "echo -e "\\e[0Ksection_start:$(date +%s):prepare[collapsed=true]\\r\\e[0KPrepare..."",
824
878
  "gcloud auth activate-service-account --key-file=<(echo "$CL_review_api_GCLOUD_DEPLOY_credentialsKey")",
825
879
  "export GCLOUD_PROJECT_NUMBER=$(gcloud projects describe google-project-id --format="value(projectNumber)")",
826
880
  "echo "GCLOUD_PROJECT_NUMBER: $GCLOUD_PROJECT_NUMBER"",
827
881
  "echo -e "\\e[0Ksection_end:$(date +%s):prepare\\r\\e[0K"",
882
+ "echo -e "\\e[0Ksection_start:$(date +%s):writeenvvars[collapsed=true]\\r\\e[0KWrite env vars to file"",
883
+ "cat > ____envvars.yaml <<EOF
884
+ ENV_SHORT: |-
885
+ review
886
+ APP_DIR: |-
887
+ api
888
+ ENV_TYPE: |-
889
+ review
890
+ BUILD_INFO_BUILD_ID: |-
891
+ $(printf %s "$(git describe --tags 2>/dev/null || git rev-parse HEAD)" | sed 's/^/ /')
892
+ BUILD_INFO_BUILD_TIME: |-
893
+ $(printf %s "$CI_JOB_STARTED_AT" | sed 's/^/ /')
894
+ BUILD_INFO_CURRENT_VERSION: |-
895
+ $(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\\///'); [ -z "$tag" ] && echo "v0.0.0" || echo "$tag")" | sed 's/^/ /')
896
+ HOST: |-
897
+ $(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/^/ /')
898
+ ROOT_URL: |-
899
+ $(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/^/ /')
900
+ HOST_INTERNAL: |-
901
+ $(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/^/ /')
902
+ HOST_CANONICAL: |-
903
+ $(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/^/ /')
904
+ ROOT_URL_INTERNAL: |-
905
+ $(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/^/ /')
906
+ DEPLOY_CLOUD_RUN_PROJECT_ID: |-
907
+ google-project-id
908
+ DEPLOY_CLOUD_RUN_REGION: |-
909
+ europe-west6
910
+ GCLOUD_RUN_canonicalHostSuffix: |-
911
+ $(printf %s "$CL_review_api_GCLOUD_RUN_canonicalHostSuffix" | sed 's/^/ /')
912
+ _ALL_ENV_VAR_KEYS: |-
913
+ ["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","HOST_INTERNAL","HOST_CANONICAL","ROOT_URL_INTERNAL","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]
914
+
915
+ EOF
916
+ ",
917
+ "echo -e "\\e[0Ksection_end:$(date +%s):writeenvvars\\r\\e[0K"",
828
918
  "echo -e "\\e[0Ksection_start:$(date +%s):deploy[collapsed=true]\\r\\e[0KDeploy to cloud run"",
829
- "echo "$ENV_VARS" > ____envvars.yaml",
830
- "gcloud run deploy pan-test-app-review-mr1234-api --command="yarn,start" --image=europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/review/api/mr1234:$DOCKER_IMAGE_TAG --project=google-project-id --region=europe-west6 --labels=customer-name=pan,component-name=api,app-name=test-app,env-type=review,env-name=review,build-type=node,cloud-run-service-name=pan-test-app-review-mr1234-api --env-vars-file=____envvars.yaml --min-instances=0 --max-instances=100 --cpu-throttling --allow-unauthenticated --ingress=all --cpu-boost",
831
- "gcloud run deploy pan-test-app-review-mr1234-api-worker --command="yarn,start:worker" --image=europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/review/api/mr1234:$DOCKER_IMAGE_TAG --project=google-project-id --region=europe-west6 --labels=customer-name=pan,component-name=api,app-name=test-app,env-type=review,env-name=review,build-type=node,cloud-run-service-name=pan-test-app-review-mr1234-api-worker --env-vars-file=____envvars.yaml --min-instances=1 --max-instances=1 --no-cpu-throttling --allow-unauthenticated --ingress=all --cpu-boost",
919
+ "gcloud run deploy $(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api" | awk '{print tolower($0)}') --command="yarn,start" --image=europe-west6-docker.pkg.dev/google-project-id/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=google-project-id --region=europe-west6 --labels=customer-name=pan,component-name=api,app-name=test-app,env-type=review,env-name=review,build-type=node,cloud-run-service-name=$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api" | awk '{print tolower($0)}') --env-vars-file=____envvars.yaml --min-instances=0 --max-instances=100 --cpu-throttling --allow-unauthenticated --ingress=all --cpu-boost",
920
+ "gcloud run deploy $(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api" | awk '{print tolower($0)}')-worker --command="yarn,start:worker" --image=europe-west6-docker.pkg.dev/google-project-id/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=google-project-id --region=europe-west6 --labels=customer-name=pan,component-name=api,app-name=test-app,env-type=review,env-name=review,build-type=node,cloud-run-service-name=$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api" | awk '{print tolower($0)}')-worker --env-vars-file=____envvars.yaml --min-instances=1 --max-instances=1 --no-cpu-throttling --allow-unauthenticated --ingress=all --cpu-boost",
832
921
  "echo -e "\\e[0Ksection_end:$(date +%s):deploy\\r\\e[0K"",
833
922
  "echo -e "\\e[0Ksection_start:$(date +%s):cleanup[collapsed=true]\\r\\e[0KCleanup"",
834
- "gcloud run revisions list --project=google-project-id --region=europe-west6 --service=pan-test-app-review-mr1234-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=google-project-id --region=europe-west6 --quiet $revisionname ; done",
835
- "gcloud artifacts docker images list europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/review/api/mr1234 --sort-by=~CREATE_TIME --format="value(version)" | tail -n +2 | while read -r version; do gcloud artifacts docker images delete europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/review/api/mr1234@$version --quiet --delete-tags; done",
923
+ "gcloud run revisions list --project=google-project-id --region=europe-west6 --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=google-project-id --region=europe-west6 --quiet $revisionname ; done",
924
+ "gcloud artifacts docker images list europe-west6-docker.pkg.dev/google-project-id/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 europe-west6-docker.pkg.dev/google-project-id/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",
836
925
  "gcloud artifacts docker images list europe-west6-docker.pkg.dev/google-project-id/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 europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/api@$version --quiet --delete-tags; done",
837
926
  "set +e",
838
927
  "gcloud artifacts docker images delete europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/review/api --quiet --delete-tags",
839
928
  "set -e",
840
929
  "echo -e "\\e[0Ksection_end:$(date +%s):cleanup\\r\\e[0K"",
841
930
  "echo Uploading SBOM to Dependency Track",
842
- "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/api" "https://pan-test-app-review-mr1234-api-unknown-host.example.com" "__sbom.json" vex.json || true",
843
- ],
844
- "services": [
845
- {
846
- "command": [
847
- "--tls=false",
848
- ],
849
- "name": "docker:24.0.6-dind",
850
- },
931
+ "/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",
932
+ "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",
851
933
  ],
852
934
  "stage": "deploy review",
853
935
  "variables": {
854
- "APP_DIR": "api",
855
- "BUILD_INFO_BUILD_TIME": "01-01-2023 12:13:14",
856
- "BUILD_INFO_CURRENT_VERSION": "3.2.1",
857
- "BUILD_INFO_ID": "some-id",
858
- "CLOUDSDK_CORE_DISABLE_PROMPTS": "1",
859
- "DEPLOY_CLOUD_RUN_PROJECT_ID": "google-project-id",
860
- "DEPLOY_CLOUD_RUN_REGION": "europe-west6",
861
- "DOCKER_BUILDKIT": "1",
862
- "DOCKER_CACHE_IMAGE": "europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/api",
863
- "DOCKER_DRIVER": "overlay2",
864
- "DOCKER_HOST": "tcp://0.0.0.0:2375",
865
- "DOCKER_IMAGE": "europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/review/api/mr1234",
866
- "DOCKER_IMAGE_TAG": "$CI_COMMIT_SHA",
867
- "DOCKER_REGISTRY": "europe-west6-docker.pkg.dev",
868
- "DOCKER_TLS_CERTDIR": "",
869
- "ENV_SHORT": "review",
870
- "ENV_TYPE": "review",
871
- "ENV_VARS": "ENV_SHORT: 'review'
872
- APP_DIR: 'api'
873
- ENV_TYPE: 'review'
874
- BUILD_INFO_ID: 'some-id'
875
- BUILD_INFO_BUILD_TIME: '01-01-2023 12:13:14'
876
- BUILD_INFO_CURRENT_VERSION: '3.2.1'
877
- HOST: 'pan-test-app-review-mr1234-api-unknown-host.example.com'
878
- ROOT_URL: 'https://pan-test-app-review-mr1234-api-unknown-host.example.com'
879
- HOST_CANONICAL: 'pan-test-app-review-mr1234-api-unknown-host.example.com'
880
- ROOT_URL_INTERNAL: 'https://pan-test-app-review-mr1234-api-unknown-host.example.com'
881
- HOST_INTERNAL: 'pan-test-app-review-mr1234-api-unknown-host.example.com'
882
- DEPLOY_CLOUD_RUN_PROJECT_ID: 'google-project-id'
883
- DEPLOY_CLOUD_RUN_REGION: 'europe-west6'
884
- GCLOUD_RUN_canonicalHostSuffix: '$CL_review_api_GCLOUD_RUN_canonicalHostSuffix'
885
- _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","HOST_CANONICAL","ROOT_URL_INTERNAL","HOST_INTERNAL","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]'
886
- ",
887
- "GCLOUD_DEPLOY_credentialsKey": "$CL_review_api_GCLOUD_DEPLOY_credentialsKey",
888
- "GCLOUD_RUN_canonicalHostSuffix": "$CL_review_api_GCLOUD_RUN_canonicalHostSuffix",
889
- "HOST": "pan-test-app-review-mr1234-api-unknown-host.example.com",
890
- "HOST_CANONICAL": "pan-test-app-review-mr1234-api-unknown-host.example.com",
891
- "HOST_INTERNAL": "pan-test-app-review-mr1234-api-unknown-host.example.com",
892
936
  "KUBERNETES_CPU_REQUEST": "0.5",
893
937
  "KUBERNETES_MEMORY_LIMIT": "400Mi",
894
938
  "KUBERNETES_MEMORY_REQUEST": "200Mi",
895
- "ROOT_URL": "https://pan-test-app-review-mr1234-api-unknown-host.example.com",
896
- "ROOT_URL_INTERNAL": "https://pan-test-app-review-mr1234-api-unknown-host.example.com",
897
- "_ALL_ENV_VAR_KEYS": "["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","HOST_CANONICAL","ROOT_URL_INTERNAL","HOST_INTERNAL","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]",
898
939
  },
899
940
  },
900
941
  "api 🛑 Stop ⚠️ | review ": {
942
+ "allow_failure": true,
943
+ "artifacts": {
944
+ "reports": {
945
+ "dotenv": "gitlab_environment.env",
946
+ },
947
+ },
901
948
  "environment": {
902
949
  "action": "stop",
903
- "name": "review/some-commit/api",
904
- "url": "https://pan-test-app-review-mr1234-api-unknown-host.example.com",
950
+ "name": "review/$CI_COMMIT_REF_NAME/api",
951
+ "url": "$CL_GITLAB_ENVIRONMENT_URL",
905
952
  },
906
953
  "image": "path/to/docker/gcloud:the-version",
907
954
  "interruptible": true,
@@ -915,32 +962,33 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
915
962
  },
916
963
  "rules": [
917
964
  {
918
- "allow_failure": true,
919
965
  "if": "$CI_COMMIT_BRANCH =~ /^[0-9]+\\.([0-9]+|x)\\.x$/",
920
966
  "when": "on_success",
921
967
  },
922
968
  {
923
- "allow_failure": true,
924
969
  "when": "manual",
925
970
  },
926
971
  ],
927
972
  "script": [
973
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
974
+ "export CLOUDSDK_CORE_DISABLE_PROMPTS="1"",
975
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
928
976
  "set +e",
929
977
  "gcloud auth activate-service-account --key-file=<(echo "$CL_review_api_GCLOUD_DEPLOY_credentialsKey")",
930
- "gcloud run services delete pan-test-app-review-mr1234-api --project=google-project-id --region=europe-west6",
931
- "gcloud run services delete pan-test-app-review-mr1234-api-worker --project=google-project-id --region=europe-west6",
932
- "gcloud artifacts docker images delete europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/review/api/mr1234 --quiet --delete-tags",
978
+ "gcloud run services delete $(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api" | awk '{print tolower($0)}') --project=google-project-id --region=europe-west6",
979
+ "gcloud run services delete $(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api" | awk '{print tolower($0)}')-worker --project=google-project-id --region=europe-west6",
980
+ "gcloud artifacts docker images delete europe-west6-docker.pkg.dev/google-project-id/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",
933
981
  "gcloud artifacts docker images list europe-west6-docker.pkg.dev/google-project-id/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 europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/api@$version --quiet --delete-tags; done",
934
982
  "set +e",
935
983
  "gcloud artifacts docker images delete europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/review/api --quiet --delete-tags",
936
984
  "set -e",
937
985
  "echo Disabling component in Dependency Track",
938
- "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" disable "pan-test-app/api" "https://pan-test-app-review-mr1234-api-unknown-host.example.com" || true",
986
+ "/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",
939
987
  "set -e",
988
+ "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",
940
989
  ],
941
990
  "stage": "stop review",
942
991
  "variables": {
943
- "CLOUDSDK_CORE_DISABLE_PROMPTS": "1",
944
992
  "GIT_STRATEGY": "none",
945
993
  "KUBERNETES_CPU_REQUEST": "0.5",
946
994
  "KUBERNETES_MEMORY_LIMIT": "400Mi",
@@ -960,12 +1008,14 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
960
1008
  ],
961
1009
  },
962
1010
  "script": [
1011
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
1012
+ "export APP_PATH="api"",
1013
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
963
1014
  "cd api",
964
1015
  "yarn npm audit --environment production",
965
1016
  ],
966
1017
  "stage": "test",
967
1018
  "variables": {
968
- "APP_PATH": "api",
969
1019
  "KUBERNETES_CPU_REQUEST": "0.5",
970
1020
  "KUBERNETES_MEMORY_LIMIT": "4Gi",
971
1021
  "KUBERNETES_MEMORY_REQUEST": "2Gi",
@@ -999,6 +1049,9 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
999
1049
  ],
1000
1050
  },
1001
1051
  "script": [
1052
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
1053
+ "export APP_PATH="api"",
1054
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
1002
1055
  "echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"",
1003
1056
  "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
1004
1057
  "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
@@ -1015,7 +1068,6 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
1015
1068
  ],
1016
1069
  "stage": "test",
1017
1070
  "variables": {
1018
- "APP_PATH": "api",
1019
1071
  "KUBERNETES_CPU_REQUEST": "0.5",
1020
1072
  "KUBERNETES_MEMORY_LIMIT": "4Gi",
1021
1073
  "KUBERNETES_MEMORY_REQUEST": "2Gi",
@@ -1039,6 +1091,8 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
1039
1091
  ],
1040
1092
  },
1041
1093
  "script": [
1094
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
1095
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
1042
1096
  "trivy fs --quiet --format cyclonedx --output "__sbom.json" api",
1043
1097
  ],
1044
1098
  "stage": "build",
@@ -1091,7 +1145,7 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
1091
1145
  ],
1092
1146
  "variables": {
1093
1147
  "FF_USE_FASTZIP": "true",
1094
- "GIT_DEPTH": 1,
1148
+ "GIT_DEPTH": "1",
1095
1149
  },
1096
1150
  "workflow": {
1097
1151
  "rules": [
@@ -1168,7 +1222,25 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
1168
1222
  ],
1169
1223
  },
1170
1224
  "script": [
1171
- "echo '{"id":"some-id","time":"01-01-2023 12:13:14"}' > api/__build_info.json",
1225
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
1226
+ "export ENV_SHORT="prod"",
1227
+ "export APP_DIR="api"",
1228
+ "export ENV_TYPE="prod"",
1229
+ "export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
1230
+ "export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
1231
+ "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\\///'); [ -z "$tag" ] && echo "v0.0.0" || echo "$tag")"",
1232
+ "export HOST="$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
1233
+ "export ROOT_URL="https://$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
1234
+ "export HOST_INTERNAL="$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
1235
+ "export HOST_CANONICAL="$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
1236
+ "export ROOT_URL_INTERNAL="https://$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
1237
+ "export DEPLOY_CLOUD_RUN_PROJECT_ID="google-project-id"",
1238
+ "export DEPLOY_CLOUD_RUN_REGION="europe-west6"",
1239
+ "export GCLOUD_DEPLOY_credentialsKey="$CL_prod_api_GCLOUD_DEPLOY_credentialsKey"",
1240
+ "export GCLOUD_RUN_canonicalHostSuffix="$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix"",
1241
+ "export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOST\\",\\"ROOT_URL\\",\\"HOST_INTERNAL\\",\\"HOST_CANONICAL\\",\\"ROOT_URL_INTERNAL\\",\\"DEPLOY_CLOUD_RUN_PROJECT_ID\\",\\"DEPLOY_CLOUD_RUN_REGION\\",\\"GCLOUD_DEPLOY_credentialsKey\\",\\"GCLOUD_RUN_canonicalHostSuffix\\"]"",
1242
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
1243
+ "echo '{"id":"$(git describe --tags 2>/dev/null || git rev-parse HEAD)","time":"$CI_JOB_STARTED_AT"}' > api/__build_info.json",
1172
1244
  "echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"",
1173
1245
  "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
1174
1246
  "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
@@ -1185,25 +1257,9 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
1185
1257
  ],
1186
1258
  "stage": "build",
1187
1259
  "variables": {
1188
- "APP_DIR": "api",
1189
- "BUILD_INFO_BUILD_TIME": "01-01-2023 12:13:14",
1190
- "BUILD_INFO_CURRENT_VERSION": "3.2.1",
1191
- "BUILD_INFO_ID": "some-id",
1192
- "DEPLOY_CLOUD_RUN_PROJECT_ID": "google-project-id",
1193
- "DEPLOY_CLOUD_RUN_REGION": "europe-west6",
1194
- "ENV_SHORT": "prod",
1195
- "ENV_TYPE": "prod",
1196
- "GCLOUD_DEPLOY_credentialsKey": "$CL_prod_api_GCLOUD_DEPLOY_credentialsKey",
1197
- "GCLOUD_RUN_canonicalHostSuffix": "$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix",
1198
- "HOST": "pan-test-app-prod-api-unknown-host.example.com",
1199
- "HOST_CANONICAL": "pan-test-app-prod-api-unknown-host.example.com",
1200
- "HOST_INTERNAL": "pan-test-app-prod-api-unknown-host.example.com",
1201
1260
  "KUBERNETES_CPU_REQUEST": "0.5",
1202
1261
  "KUBERNETES_MEMORY_LIMIT": "4Gi",
1203
1262
  "KUBERNETES_MEMORY_REQUEST": "2Gi",
1204
- "ROOT_URL": "https://pan-test-app-prod-api-unknown-host.example.com",
1205
- "ROOT_URL_INTERNAL": "https://pan-test-app-prod-api-unknown-host.example.com",
1206
- "_ALL_ENV_VAR_KEYS": "["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","HOST_CANONICAL","ROOT_URL_INTERNAL","HOST_INTERNAL","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]",
1207
1263
  },
1208
1264
  },
1209
1265
  "api 🔨 app | stage ": {
@@ -1253,7 +1309,25 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
1253
1309
  ],
1254
1310
  },
1255
1311
  "script": [
1256
- "echo '{"id":"some-id","time":"01-01-2023 12:13:14"}' > api/__build_info.json",
1312
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
1313
+ "export ENV_SHORT="stage"",
1314
+ "export APP_DIR="api"",
1315
+ "export ENV_TYPE="stage"",
1316
+ "export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
1317
+ "export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
1318
+ "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\\///'); [ -z "$tag" ] && echo "v0.0.0" || echo "$tag")"",
1319
+ "export HOST="$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
1320
+ "export ROOT_URL="https://$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
1321
+ "export HOST_INTERNAL="$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
1322
+ "export HOST_CANONICAL="$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
1323
+ "export ROOT_URL_INTERNAL="https://$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
1324
+ "export DEPLOY_CLOUD_RUN_PROJECT_ID="google-project-id"",
1325
+ "export DEPLOY_CLOUD_RUN_REGION="europe-west6"",
1326
+ "export GCLOUD_DEPLOY_credentialsKey="$CL_stage_api_GCLOUD_DEPLOY_credentialsKey"",
1327
+ "export GCLOUD_RUN_canonicalHostSuffix="$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix"",
1328
+ "export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOST\\",\\"ROOT_URL\\",\\"HOST_INTERNAL\\",\\"HOST_CANONICAL\\",\\"ROOT_URL_INTERNAL\\",\\"DEPLOY_CLOUD_RUN_PROJECT_ID\\",\\"DEPLOY_CLOUD_RUN_REGION\\",\\"GCLOUD_DEPLOY_credentialsKey\\",\\"GCLOUD_RUN_canonicalHostSuffix\\"]"",
1329
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
1330
+ "echo '{"id":"$(git describe --tags 2>/dev/null || git rev-parse HEAD)","time":"$CI_JOB_STARTED_AT"}' > api/__build_info.json",
1257
1331
  "echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"",
1258
1332
  "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
1259
1333
  "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
@@ -1270,25 +1344,9 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
1270
1344
  ],
1271
1345
  "stage": "build",
1272
1346
  "variables": {
1273
- "APP_DIR": "api",
1274
- "BUILD_INFO_BUILD_TIME": "01-01-2023 12:13:14",
1275
- "BUILD_INFO_CURRENT_VERSION": "3.2.1",
1276
- "BUILD_INFO_ID": "some-id",
1277
- "DEPLOY_CLOUD_RUN_PROJECT_ID": "google-project-id",
1278
- "DEPLOY_CLOUD_RUN_REGION": "europe-west6",
1279
- "ENV_SHORT": "stage",
1280
- "ENV_TYPE": "stage",
1281
- "GCLOUD_DEPLOY_credentialsKey": "$CL_stage_api_GCLOUD_DEPLOY_credentialsKey",
1282
- "GCLOUD_RUN_canonicalHostSuffix": "$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix",
1283
- "HOST": "pan-test-app-stage-api-unknown-host.example.com",
1284
- "HOST_CANONICAL": "pan-test-app-stage-api-unknown-host.example.com",
1285
- "HOST_INTERNAL": "pan-test-app-stage-api-unknown-host.example.com",
1286
1347
  "KUBERNETES_CPU_REQUEST": "0.5",
1287
1348
  "KUBERNETES_MEMORY_LIMIT": "4Gi",
1288
1349
  "KUBERNETES_MEMORY_REQUEST": "2Gi",
1289
- "ROOT_URL": "https://pan-test-app-stage-api-unknown-host.example.com",
1290
- "ROOT_URL_INTERNAL": "https://pan-test-app-stage-api-unknown-host.example.com",
1291
- "_ALL_ENV_VAR_KEYS": "["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","HOST_CANONICAL","ROOT_URL_INTERNAL","HOST_INTERNAL","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]",
1292
1350
  },
1293
1351
  },
1294
1352
  "api 🔨 docker | prod ": {
@@ -1314,6 +1372,21 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
1314
1372
  ],
1315
1373
  },
1316
1374
  "script": [
1375
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
1376
+ "export APP_DIR="api"",
1377
+ "export DOCKER_DIR="."",
1378
+ "export DOCKER_REGISTRY="europe-west6-docker.pkg.dev"",
1379
+ "export DOCKER_IMAGE="europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/prod/api"",
1380
+ "export DOCKER_CACHE_IMAGE="europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/api"",
1381
+ "export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"",
1382
+ "export DOCKER_COPY_AND_INSTALL_APP="COPY --chown=node:node $APP_DIR .
1383
+ RUN yarn plugin import workspace-tools
1384
+ RUN yarn workspaces focus --production && yarn rebuild"",
1385
+ "export DOCKER_COPY_WORKSPACE_FILES="COPY --chown=node:node api/package.json /app/api/package.json
1386
+ COPY --chown=node:node api/yarn.lock /app/api/yarn.lock
1387
+ COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
1388
+ COPY --chown=node:node .yarn /app/.yarn"",
1389
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
1317
1390
  "ensureNodeDockerfile",
1318
1391
  "echo -e "\\e[0Ksection_start:$(date +%s):docker-login[collapsed=true]\\r\\e[0KDocker Login"",
1319
1392
  "gcloud auth activate-service-account --key-file=<(echo "$CL_prod_api_GCLOUD_DEPLOY_credentialsKey")",
@@ -1338,24 +1411,9 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
1338
1411
  ],
1339
1412
  "stage": "build",
1340
1413
  "variables": {
1341
- "APP_DIR": "api",
1342
- "DOCKERFILE_ADDITIONS": undefined,
1343
- "DOCKERFILE_ADDITIONS_END": undefined,
1344
1414
  "DOCKER_BUILDKIT": "1",
1345
- "DOCKER_CACHE_IMAGE": "europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/api",
1346
- "DOCKER_COPY_AND_INSTALL_APP": "COPY --chown=node:node $APP_DIR .
1347
- RUN yarn plugin import workspace-tools
1348
- RUN yarn workspaces focus --production && yarn rebuild",
1349
- "DOCKER_COPY_WORKSPACE_FILES": "COPY --chown=node:node api/package.json /app/api/package.json
1350
- COPY --chown=node:node api/yarn.lock /app/api/yarn.lock
1351
- COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
1352
- COPY --chown=node:node .yarn /app/.yarn",
1353
- "DOCKER_DIR": ".",
1354
1415
  "DOCKER_DRIVER": "overlay2",
1355
1416
  "DOCKER_HOST": "tcp://0.0.0.0:2375",
1356
- "DOCKER_IMAGE": "europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/prod/api",
1357
- "DOCKER_IMAGE_TAG": "$CI_COMMIT_SHA",
1358
- "DOCKER_REGISTRY": "europe-west6-docker.pkg.dev",
1359
1417
  "DOCKER_TLS_CERTDIR": "",
1360
1418
  "KUBERNETES_CPU_REQUEST": "0.5",
1361
1419
  "KUBERNETES_MEMORY_LIMIT": "2Gi",
@@ -1385,6 +1443,21 @@ COPY --chown=node:node .yarn /app/.yarn",
1385
1443
  ],
1386
1444
  },
1387
1445
  "script": [
1446
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
1447
+ "export APP_DIR="api"",
1448
+ "export DOCKER_DIR="."",
1449
+ "export DOCKER_REGISTRY="europe-west6-docker.pkg.dev"",
1450
+ "export DOCKER_IMAGE="europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/stage/api"",
1451
+ "export DOCKER_CACHE_IMAGE="europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/api"",
1452
+ "export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"",
1453
+ "export DOCKER_COPY_AND_INSTALL_APP="COPY --chown=node:node $APP_DIR .
1454
+ RUN yarn plugin import workspace-tools
1455
+ RUN yarn workspaces focus --production && yarn rebuild"",
1456
+ "export DOCKER_COPY_WORKSPACE_FILES="COPY --chown=node:node api/package.json /app/api/package.json
1457
+ COPY --chown=node:node api/yarn.lock /app/api/yarn.lock
1458
+ COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
1459
+ COPY --chown=node:node .yarn /app/.yarn"",
1460
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
1388
1461
  "ensureNodeDockerfile",
1389
1462
  "echo -e "\\e[0Ksection_start:$(date +%s):docker-login[collapsed=true]\\r\\e[0KDocker Login"",
1390
1463
  "gcloud auth activate-service-account --key-file=<(echo "$CL_stage_api_GCLOUD_DEPLOY_credentialsKey")",
@@ -1409,24 +1482,9 @@ COPY --chown=node:node .yarn /app/.yarn",
1409
1482
  ],
1410
1483
  "stage": "build",
1411
1484
  "variables": {
1412
- "APP_DIR": "api",
1413
- "DOCKERFILE_ADDITIONS": undefined,
1414
- "DOCKERFILE_ADDITIONS_END": undefined,
1415
1485
  "DOCKER_BUILDKIT": "1",
1416
- "DOCKER_CACHE_IMAGE": "europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/api",
1417
- "DOCKER_COPY_AND_INSTALL_APP": "COPY --chown=node:node $APP_DIR .
1418
- RUN yarn plugin import workspace-tools
1419
- RUN yarn workspaces focus --production && yarn rebuild",
1420
- "DOCKER_COPY_WORKSPACE_FILES": "COPY --chown=node:node api/package.json /app/api/package.json
1421
- COPY --chown=node:node api/yarn.lock /app/api/yarn.lock
1422
- COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
1423
- COPY --chown=node:node .yarn /app/.yarn",
1424
- "DOCKER_DIR": ".",
1425
1486
  "DOCKER_DRIVER": "overlay2",
1426
1487
  "DOCKER_HOST": "tcp://0.0.0.0:2375",
1427
- "DOCKER_IMAGE": "europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/stage/api",
1428
- "DOCKER_IMAGE_TAG": "$CI_COMMIT_SHA",
1429
- "DOCKER_REGISTRY": "europe-west6-docker.pkg.dev",
1430
1488
  "DOCKER_TLS_CERTDIR": "",
1431
1489
  "KUBERNETES_CPU_REQUEST": "0.5",
1432
1490
  "KUBERNETES_MEMORY_LIMIT": "2Gi",
@@ -1436,15 +1494,15 @@ COPY --chown=node:node .yarn /app/.yarn",
1436
1494
  "api 🚀 Deploy | prod ": {
1437
1495
  "allow_failure": true,
1438
1496
  "artifacts": {
1439
- "paths": [
1440
- "____envvars.yaml",
1441
- ],
1497
+ "reports": {
1498
+ "dotenv": "gitlab_environment.env",
1499
+ },
1442
1500
  },
1443
1501
  "environment": {
1444
1502
  "auto_stop_in": undefined,
1445
1503
  "name": "prod/api",
1446
1504
  "on_stop": "api 🛑 Stop ⚠️ | prod ",
1447
- "url": "https://pan-test-app-prod-api-unknown-host.example.com",
1505
+ "url": "$CL_GITLAB_ENVIRONMENT_URL",
1448
1506
  },
1449
1507
  "image": "path/to/docker/gcloud:the-version",
1450
1508
  "interruptible": true,
@@ -1475,13 +1533,71 @@ COPY --chown=node:node .yarn /app/.yarn",
1475
1533
  },
1476
1534
  ],
1477
1535
  "script": [
1536
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
1537
+ "export ENV_SHORT="prod"",
1538
+ "export APP_DIR="api"",
1539
+ "export ENV_TYPE="prod"",
1540
+ "export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
1541
+ "export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
1542
+ "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\\///'); [ -z "$tag" ] && echo "v0.0.0" || echo "$tag")"",
1543
+ "export HOST="$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
1544
+ "export ROOT_URL="https://$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
1545
+ "export HOST_INTERNAL="$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
1546
+ "export HOST_CANONICAL="$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
1547
+ "export ROOT_URL_INTERNAL="https://$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
1548
+ "export DEPLOY_CLOUD_RUN_PROJECT_ID="google-project-id"",
1549
+ "export DEPLOY_CLOUD_RUN_REGION="europe-west6"",
1550
+ "export GCLOUD_DEPLOY_credentialsKey="$CL_prod_api_GCLOUD_DEPLOY_credentialsKey"",
1551
+ "export GCLOUD_RUN_canonicalHostSuffix="$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix"",
1552
+ "export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOST\\",\\"ROOT_URL\\",\\"HOST_INTERNAL\\",\\"HOST_CANONICAL\\",\\"ROOT_URL_INTERNAL\\",\\"DEPLOY_CLOUD_RUN_PROJECT_ID\\",\\"DEPLOY_CLOUD_RUN_REGION\\",\\"GCLOUD_DEPLOY_credentialsKey\\",\\"GCLOUD_RUN_canonicalHostSuffix\\"]"",
1553
+ "export DOCKER_REGISTRY="europe-west6-docker.pkg.dev"",
1554
+ "export DOCKER_IMAGE="europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/prod/api"",
1555
+ "export DOCKER_CACHE_IMAGE="europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/api"",
1556
+ "export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"",
1557
+ "export CLOUDSDK_CORE_DISABLE_PROMPTS="1"",
1558
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
1478
1559
  "echo -e "\\e[0Ksection_start:$(date +%s):prepare[collapsed=true]\\r\\e[0KPrepare..."",
1479
1560
  "gcloud auth activate-service-account --key-file=<(echo "$CL_prod_api_GCLOUD_DEPLOY_credentialsKey")",
1480
1561
  "export GCLOUD_PROJECT_NUMBER=$(gcloud projects describe google-project-id --format="value(projectNumber)")",
1481
1562
  "echo "GCLOUD_PROJECT_NUMBER: $GCLOUD_PROJECT_NUMBER"",
1482
1563
  "echo -e "\\e[0Ksection_end:$(date +%s):prepare\\r\\e[0K"",
1564
+ "echo -e "\\e[0Ksection_start:$(date +%s):writeenvvars[collapsed=true]\\r\\e[0KWrite env vars to file"",
1565
+ "cat > ____envvars.yaml <<EOF
1566
+ ENV_SHORT: |-
1567
+ prod
1568
+ APP_DIR: |-
1569
+ api
1570
+ ENV_TYPE: |-
1571
+ prod
1572
+ BUILD_INFO_BUILD_ID: |-
1573
+ $(printf %s "$(git describe --tags 2>/dev/null || git rev-parse HEAD)" | sed 's/^/ /')
1574
+ BUILD_INFO_BUILD_TIME: |-
1575
+ $(printf %s "$CI_JOB_STARTED_AT" | sed 's/^/ /')
1576
+ BUILD_INFO_CURRENT_VERSION: |-
1577
+ $(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\\///'); [ -z "$tag" ] && echo "v0.0.0" || echo "$tag")" | sed 's/^/ /')
1578
+ HOST: |-
1579
+ $(printf %s "$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
1580
+ ROOT_URL: |-
1581
+ $(printf %s "https://$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
1582
+ HOST_INTERNAL: |-
1583
+ $(printf %s "$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
1584
+ HOST_CANONICAL: |-
1585
+ $(printf %s "$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
1586
+ ROOT_URL_INTERNAL: |-
1587
+ $(printf %s "https://$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
1588
+ DEPLOY_CLOUD_RUN_PROJECT_ID: |-
1589
+ google-project-id
1590
+ DEPLOY_CLOUD_RUN_REGION: |-
1591
+ europe-west6
1592
+ GCLOUD_RUN_canonicalHostSuffix: |-
1593
+ $(printf %s "$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | sed 's/^/ /')
1594
+ _ALL_ENV_VAR_KEYS: |-
1595
+ ["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","HOST_INTERNAL","HOST_CANONICAL","ROOT_URL_INTERNAL","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]
1596
+
1597
+ EOF
1598
+ ",
1599
+ "echo -e "\\e[0Ksection_end:$(date +%s):writeenvvars\\r\\e[0K"",
1483
1600
  "echo -e "\\e[0Ksection_start:$(date +%s):deploy[collapsed=true]\\r\\e[0KDeploy to cloud run"",
1484
- "echo "$ENV_VARS" > ____envvars.yaml",
1485
1601
  "gcloud run deploy pan-test-app-prod-api --command="yarn,start" --image=europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/prod/api:$DOCKER_IMAGE_TAG --project=google-project-id --region=europe-west6 --labels=customer-name=pan,component-name=api,app-name=test-app,env-type=prod,env-name=prod,build-type=node,cloud-run-service-name=pan-test-app-prod-api --env-vars-file=____envvars.yaml --min-instances=0 --max-instances=100 --cpu-throttling --allow-unauthenticated --ingress=all --cpu-boost",
1486
1602
  "gcloud run deploy pan-test-app-prod-api-worker --command="yarn,start:worker" --image=europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/prod/api:$DOCKER_IMAGE_TAG --project=google-project-id --region=europe-west6 --labels=customer-name=pan,component-name=api,app-name=test-app,env-type=prod,env-name=prod,build-type=node,cloud-run-service-name=pan-test-app-prod-api-worker --env-vars-file=____envvars.yaml --min-instances=1 --max-instances=1 --no-cpu-throttling --allow-unauthenticated --ingress=all --cpu-boost",
1487
1603
  "echo -e "\\e[0Ksection_end:$(date +%s):deploy\\r\\e[0K"",
@@ -1491,76 +1607,28 @@ COPY --chown=node:node .yarn /app/.yarn",
1491
1607
  "gcloud artifacts docker images list europe-west6-docker.pkg.dev/google-project-id/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 europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/api@$version --quiet --delete-tags; done",
1492
1608
  "echo -e "\\e[0Ksection_end:$(date +%s):cleanup\\r\\e[0K"",
1493
1609
  "echo Uploading SBOM to Dependency Track",
1494
- "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/api" "https://pan-test-app-prod-api-unknown-host.example.com" "__sbom.json" vex.json || true",
1495
- ],
1496
- "services": [
1497
- {
1498
- "command": [
1499
- "--tls=false",
1500
- ],
1501
- "name": "docker:24.0.6-dind",
1502
- },
1610
+ "/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",
1611
+ "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",
1503
1612
  ],
1504
1613
  "stage": "deploy prod",
1505
1614
  "variables": {
1506
- "APP_DIR": "api",
1507
- "BUILD_INFO_BUILD_TIME": "01-01-2023 12:13:14",
1508
- "BUILD_INFO_CURRENT_VERSION": "3.2.1",
1509
- "BUILD_INFO_ID": "some-id",
1510
- "CLOUDSDK_CORE_DISABLE_PROMPTS": "1",
1511
- "DEPLOY_CLOUD_RUN_PROJECT_ID": "google-project-id",
1512
- "DEPLOY_CLOUD_RUN_REGION": "europe-west6",
1513
- "DOCKER_BUILDKIT": "1",
1514
- "DOCKER_CACHE_IMAGE": "europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/api",
1515
- "DOCKER_DRIVER": "overlay2",
1516
- "DOCKER_HOST": "tcp://0.0.0.0:2375",
1517
- "DOCKER_IMAGE": "europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/prod/api",
1518
- "DOCKER_IMAGE_TAG": "$CI_COMMIT_SHA",
1519
- "DOCKER_REGISTRY": "europe-west6-docker.pkg.dev",
1520
- "DOCKER_TLS_CERTDIR": "",
1521
- "ENV_SHORT": "prod",
1522
- "ENV_TYPE": "prod",
1523
- "ENV_VARS": "ENV_SHORT: 'prod'
1524
- APP_DIR: 'api'
1525
- ENV_TYPE: 'prod'
1526
- BUILD_INFO_ID: 'some-id'
1527
- BUILD_INFO_BUILD_TIME: '01-01-2023 12:13:14'
1528
- BUILD_INFO_CURRENT_VERSION: '3.2.1'
1529
- HOST: 'pan-test-app-prod-api-unknown-host.example.com'
1530
- ROOT_URL: 'https://pan-test-app-prod-api-unknown-host.example.com'
1531
- HOST_CANONICAL: 'pan-test-app-prod-api-unknown-host.example.com'
1532
- ROOT_URL_INTERNAL: 'https://pan-test-app-prod-api-unknown-host.example.com'
1533
- HOST_INTERNAL: 'pan-test-app-prod-api-unknown-host.example.com'
1534
- DEPLOY_CLOUD_RUN_PROJECT_ID: 'google-project-id'
1535
- DEPLOY_CLOUD_RUN_REGION: 'europe-west6'
1536
- GCLOUD_RUN_canonicalHostSuffix: '$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix'
1537
- _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","HOST_CANONICAL","ROOT_URL_INTERNAL","HOST_INTERNAL","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]'
1538
- ",
1539
- "GCLOUD_DEPLOY_credentialsKey": "$CL_prod_api_GCLOUD_DEPLOY_credentialsKey",
1540
- "GCLOUD_RUN_canonicalHostSuffix": "$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix",
1541
- "HOST": "pan-test-app-prod-api-unknown-host.example.com",
1542
- "HOST_CANONICAL": "pan-test-app-prod-api-unknown-host.example.com",
1543
- "HOST_INTERNAL": "pan-test-app-prod-api-unknown-host.example.com",
1544
1615
  "KUBERNETES_CPU_REQUEST": "0.5",
1545
1616
  "KUBERNETES_MEMORY_LIMIT": "400Mi",
1546
1617
  "KUBERNETES_MEMORY_REQUEST": "200Mi",
1547
- "ROOT_URL": "https://pan-test-app-prod-api-unknown-host.example.com",
1548
- "ROOT_URL_INTERNAL": "https://pan-test-app-prod-api-unknown-host.example.com",
1549
- "_ALL_ENV_VAR_KEYS": "["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","HOST_CANONICAL","ROOT_URL_INTERNAL","HOST_INTERNAL","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]",
1550
1618
  },
1551
1619
  },
1552
1620
  "api 🚀 Deploy | stage ": {
1553
1621
  "allow_failure": false,
1554
1622
  "artifacts": {
1555
- "paths": [
1556
- "____envvars.yaml",
1557
- ],
1623
+ "reports": {
1624
+ "dotenv": "gitlab_environment.env",
1625
+ },
1558
1626
  },
1559
1627
  "environment": {
1560
1628
  "auto_stop_in": undefined,
1561
1629
  "name": "stage/api",
1562
1630
  "on_stop": "api 🛑 Stop ⚠️ | stage ",
1563
- "url": "https://pan-test-app-stage-api-unknown-host.example.com",
1631
+ "url": "$CL_GITLAB_ENVIRONMENT_URL",
1564
1632
  },
1565
1633
  "image": "path/to/docker/gcloud:the-version",
1566
1634
  "interruptible": true,
@@ -1591,13 +1659,71 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
1591
1659
  },
1592
1660
  ],
1593
1661
  "script": [
1662
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
1663
+ "export ENV_SHORT="stage"",
1664
+ "export APP_DIR="api"",
1665
+ "export ENV_TYPE="stage"",
1666
+ "export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
1667
+ "export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
1668
+ "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\\///'); [ -z "$tag" ] && echo "v0.0.0" || echo "$tag")"",
1669
+ "export HOST="$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
1670
+ "export ROOT_URL="https://$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
1671
+ "export HOST_INTERNAL="$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
1672
+ "export HOST_CANONICAL="$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
1673
+ "export ROOT_URL_INTERNAL="https://$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
1674
+ "export DEPLOY_CLOUD_RUN_PROJECT_ID="google-project-id"",
1675
+ "export DEPLOY_CLOUD_RUN_REGION="europe-west6"",
1676
+ "export GCLOUD_DEPLOY_credentialsKey="$CL_stage_api_GCLOUD_DEPLOY_credentialsKey"",
1677
+ "export GCLOUD_RUN_canonicalHostSuffix="$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix"",
1678
+ "export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOST\\",\\"ROOT_URL\\",\\"HOST_INTERNAL\\",\\"HOST_CANONICAL\\",\\"ROOT_URL_INTERNAL\\",\\"DEPLOY_CLOUD_RUN_PROJECT_ID\\",\\"DEPLOY_CLOUD_RUN_REGION\\",\\"GCLOUD_DEPLOY_credentialsKey\\",\\"GCLOUD_RUN_canonicalHostSuffix\\"]"",
1679
+ "export DOCKER_REGISTRY="europe-west6-docker.pkg.dev"",
1680
+ "export DOCKER_IMAGE="europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/stage/api"",
1681
+ "export DOCKER_CACHE_IMAGE="europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/api"",
1682
+ "export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"",
1683
+ "export CLOUDSDK_CORE_DISABLE_PROMPTS="1"",
1684
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
1594
1685
  "echo -e "\\e[0Ksection_start:$(date +%s):prepare[collapsed=true]\\r\\e[0KPrepare..."",
1595
1686
  "gcloud auth activate-service-account --key-file=<(echo "$CL_stage_api_GCLOUD_DEPLOY_credentialsKey")",
1596
1687
  "export GCLOUD_PROJECT_NUMBER=$(gcloud projects describe google-project-id --format="value(projectNumber)")",
1597
1688
  "echo "GCLOUD_PROJECT_NUMBER: $GCLOUD_PROJECT_NUMBER"",
1598
1689
  "echo -e "\\e[0Ksection_end:$(date +%s):prepare\\r\\e[0K"",
1690
+ "echo -e "\\e[0Ksection_start:$(date +%s):writeenvvars[collapsed=true]\\r\\e[0KWrite env vars to file"",
1691
+ "cat > ____envvars.yaml <<EOF
1692
+ ENV_SHORT: |-
1693
+ stage
1694
+ APP_DIR: |-
1695
+ api
1696
+ ENV_TYPE: |-
1697
+ stage
1698
+ BUILD_INFO_BUILD_ID: |-
1699
+ $(printf %s "$(git describe --tags 2>/dev/null || git rev-parse HEAD)" | sed 's/^/ /')
1700
+ BUILD_INFO_BUILD_TIME: |-
1701
+ $(printf %s "$CI_JOB_STARTED_AT" | sed 's/^/ /')
1702
+ BUILD_INFO_CURRENT_VERSION: |-
1703
+ $(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\\///'); [ -z "$tag" ] && echo "v0.0.0" || echo "$tag")" | sed 's/^/ /')
1704
+ HOST: |-
1705
+ $(printf %s "$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
1706
+ ROOT_URL: |-
1707
+ $(printf %s "https://$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
1708
+ HOST_INTERNAL: |-
1709
+ $(printf %s "$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
1710
+ HOST_CANONICAL: |-
1711
+ $(printf %s "$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
1712
+ ROOT_URL_INTERNAL: |-
1713
+ $(printf %s "https://$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
1714
+ DEPLOY_CLOUD_RUN_PROJECT_ID: |-
1715
+ google-project-id
1716
+ DEPLOY_CLOUD_RUN_REGION: |-
1717
+ europe-west6
1718
+ GCLOUD_RUN_canonicalHostSuffix: |-
1719
+ $(printf %s "$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | sed 's/^/ /')
1720
+ _ALL_ENV_VAR_KEYS: |-
1721
+ ["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","HOST_INTERNAL","HOST_CANONICAL","ROOT_URL_INTERNAL","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]
1722
+
1723
+ EOF
1724
+ ",
1725
+ "echo -e "\\e[0Ksection_end:$(date +%s):writeenvvars\\r\\e[0K"",
1599
1726
  "echo -e "\\e[0Ksection_start:$(date +%s):deploy[collapsed=true]\\r\\e[0KDeploy to cloud run"",
1600
- "echo "$ENV_VARS" > ____envvars.yaml",
1601
1727
  "gcloud run deploy pan-test-app-stage-api --command="yarn,start" --image=europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/stage/api:$DOCKER_IMAGE_TAG --project=google-project-id --region=europe-west6 --labels=customer-name=pan,component-name=api,app-name=test-app,env-type=stage,env-name=stage,build-type=node,cloud-run-service-name=pan-test-app-stage-api --env-vars-file=____envvars.yaml --min-instances=0 --max-instances=100 --cpu-throttling --allow-unauthenticated --ingress=all --cpu-boost",
1602
1728
  "gcloud run deploy pan-test-app-stage-api-worker --command="yarn,start:worker" --image=europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/stage/api:$DOCKER_IMAGE_TAG --project=google-project-id --region=europe-west6 --labels=customer-name=pan,component-name=api,app-name=test-app,env-type=stage,env-name=stage,build-type=node,cloud-run-service-name=pan-test-app-stage-api-worker --env-vars-file=____envvars.yaml --min-instances=1 --max-instances=1 --no-cpu-throttling --allow-unauthenticated --ingress=all --cpu-boost",
1603
1729
  "echo -e "\\e[0Ksection_end:$(date +%s):deploy\\r\\e[0K"",
@@ -1607,69 +1733,27 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
1607
1733
  "gcloud artifacts docker images list europe-west6-docker.pkg.dev/google-project-id/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 europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/api@$version --quiet --delete-tags; done",
1608
1734
  "echo -e "\\e[0Ksection_end:$(date +%s):cleanup\\r\\e[0K"",
1609
1735
  "echo Uploading SBOM to Dependency Track",
1610
- "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/api" "https://pan-test-app-stage-api-unknown-host.example.com" "__sbom.json" vex.json || true",
1611
- ],
1612
- "services": [
1613
- {
1614
- "command": [
1615
- "--tls=false",
1616
- ],
1617
- "name": "docker:24.0.6-dind",
1618
- },
1736
+ "/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",
1737
+ "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",
1619
1738
  ],
1620
1739
  "stage": "deploy stage",
1621
1740
  "variables": {
1622
- "APP_DIR": "api",
1623
- "BUILD_INFO_BUILD_TIME": "01-01-2023 12:13:14",
1624
- "BUILD_INFO_CURRENT_VERSION": "3.2.1",
1625
- "BUILD_INFO_ID": "some-id",
1626
- "CLOUDSDK_CORE_DISABLE_PROMPTS": "1",
1627
- "DEPLOY_CLOUD_RUN_PROJECT_ID": "google-project-id",
1628
- "DEPLOY_CLOUD_RUN_REGION": "europe-west6",
1629
- "DOCKER_BUILDKIT": "1",
1630
- "DOCKER_CACHE_IMAGE": "europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/api",
1631
- "DOCKER_DRIVER": "overlay2",
1632
- "DOCKER_HOST": "tcp://0.0.0.0:2375",
1633
- "DOCKER_IMAGE": "europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/stage/api",
1634
- "DOCKER_IMAGE_TAG": "$CI_COMMIT_SHA",
1635
- "DOCKER_REGISTRY": "europe-west6-docker.pkg.dev",
1636
- "DOCKER_TLS_CERTDIR": "",
1637
- "ENV_SHORT": "stage",
1638
- "ENV_TYPE": "stage",
1639
- "ENV_VARS": "ENV_SHORT: 'stage'
1640
- APP_DIR: 'api'
1641
- ENV_TYPE: 'stage'
1642
- BUILD_INFO_ID: 'some-id'
1643
- BUILD_INFO_BUILD_TIME: '01-01-2023 12:13:14'
1644
- BUILD_INFO_CURRENT_VERSION: '3.2.1'
1645
- HOST: 'pan-test-app-stage-api-unknown-host.example.com'
1646
- ROOT_URL: 'https://pan-test-app-stage-api-unknown-host.example.com'
1647
- HOST_CANONICAL: 'pan-test-app-stage-api-unknown-host.example.com'
1648
- ROOT_URL_INTERNAL: 'https://pan-test-app-stage-api-unknown-host.example.com'
1649
- HOST_INTERNAL: 'pan-test-app-stage-api-unknown-host.example.com'
1650
- DEPLOY_CLOUD_RUN_PROJECT_ID: 'google-project-id'
1651
- DEPLOY_CLOUD_RUN_REGION: 'europe-west6'
1652
- GCLOUD_RUN_canonicalHostSuffix: '$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix'
1653
- _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","HOST_CANONICAL","ROOT_URL_INTERNAL","HOST_INTERNAL","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]'
1654
- ",
1655
- "GCLOUD_DEPLOY_credentialsKey": "$CL_stage_api_GCLOUD_DEPLOY_credentialsKey",
1656
- "GCLOUD_RUN_canonicalHostSuffix": "$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix",
1657
- "HOST": "pan-test-app-stage-api-unknown-host.example.com",
1658
- "HOST_CANONICAL": "pan-test-app-stage-api-unknown-host.example.com",
1659
- "HOST_INTERNAL": "pan-test-app-stage-api-unknown-host.example.com",
1660
1741
  "KUBERNETES_CPU_REQUEST": "0.5",
1661
1742
  "KUBERNETES_MEMORY_LIMIT": "400Mi",
1662
1743
  "KUBERNETES_MEMORY_REQUEST": "200Mi",
1663
- "ROOT_URL": "https://pan-test-app-stage-api-unknown-host.example.com",
1664
- "ROOT_URL_INTERNAL": "https://pan-test-app-stage-api-unknown-host.example.com",
1665
- "_ALL_ENV_VAR_KEYS": "["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","HOST_CANONICAL","ROOT_URL_INTERNAL","HOST_INTERNAL","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]",
1666
1744
  },
1667
1745
  },
1668
1746
  "api 🛑 Stop ⚠️ | prod ": {
1747
+ "allow_failure": true,
1748
+ "artifacts": {
1749
+ "reports": {
1750
+ "dotenv": "gitlab_environment.env",
1751
+ },
1752
+ },
1669
1753
  "environment": {
1670
1754
  "action": "stop",
1671
1755
  "name": "prod/api",
1672
- "url": "https://pan-test-app-prod-api-unknown-host.example.com",
1756
+ "url": "$CL_GITLAB_ENVIRONMENT_URL",
1673
1757
  },
1674
1758
  "image": "path/to/docker/gcloud:the-version",
1675
1759
  "interruptible": true,
@@ -1683,16 +1767,17 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
1683
1767
  },
1684
1768
  "rules": [
1685
1769
  {
1686
- "allow_failure": true,
1687
1770
  "if": "$CI_COMMIT_BRANCH =~ /^[0-9]+\\.([0-9]+|x)\\.x$/",
1688
1771
  "when": "on_success",
1689
1772
  },
1690
1773
  {
1691
- "allow_failure": true,
1692
1774
  "when": "manual",
1693
1775
  },
1694
1776
  ],
1695
1777
  "script": [
1778
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
1779
+ "export CLOUDSDK_CORE_DISABLE_PROMPTS="1"",
1780
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
1696
1781
  "set +e",
1697
1782
  "gcloud auth activate-service-account --key-file=<(echo "$CL_prod_api_GCLOUD_DEPLOY_credentialsKey")",
1698
1783
  "gcloud run services delete pan-test-app-prod-api --project=google-project-id --region=europe-west6",
@@ -1700,12 +1785,12 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
1700
1785
  "gcloud artifacts docker images delete europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/prod/api --quiet --delete-tags",
1701
1786
  "gcloud artifacts docker images list europe-west6-docker.pkg.dev/google-project-id/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 europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/api@$version --quiet --delete-tags; done",
1702
1787
  "echo Disabling component in Dependency Track",
1703
- "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" disable "pan-test-app/api" "https://pan-test-app-prod-api-unknown-host.example.com" || true",
1788
+ "/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",
1704
1789
  "set -e",
1790
+ "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",
1705
1791
  ],
1706
1792
  "stage": "stop prod",
1707
1793
  "variables": {
1708
- "CLOUDSDK_CORE_DISABLE_PROMPTS": "1",
1709
1794
  "GIT_STRATEGY": "none",
1710
1795
  "KUBERNETES_CPU_REQUEST": "0.5",
1711
1796
  "KUBERNETES_MEMORY_LIMIT": "400Mi",
@@ -1713,10 +1798,16 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
1713
1798
  },
1714
1799
  },
1715
1800
  "api 🛑 Stop ⚠️ | stage ": {
1801
+ "allow_failure": true,
1802
+ "artifacts": {
1803
+ "reports": {
1804
+ "dotenv": "gitlab_environment.env",
1805
+ },
1806
+ },
1716
1807
  "environment": {
1717
1808
  "action": "stop",
1718
1809
  "name": "stage/api",
1719
- "url": "https://pan-test-app-stage-api-unknown-host.example.com",
1810
+ "url": "$CL_GITLAB_ENVIRONMENT_URL",
1720
1811
  },
1721
1812
  "image": "path/to/docker/gcloud:the-version",
1722
1813
  "interruptible": true,
@@ -1730,16 +1821,17 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
1730
1821
  },
1731
1822
  "rules": [
1732
1823
  {
1733
- "allow_failure": true,
1734
1824
  "if": "$CI_COMMIT_BRANCH =~ /^[0-9]+\\.([0-9]+|x)\\.x$/",
1735
1825
  "when": "on_success",
1736
1826
  },
1737
1827
  {
1738
- "allow_failure": true,
1739
1828
  "when": "manual",
1740
1829
  },
1741
1830
  ],
1742
1831
  "script": [
1832
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
1833
+ "export CLOUDSDK_CORE_DISABLE_PROMPTS="1"",
1834
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
1743
1835
  "set +e",
1744
1836
  "gcloud auth activate-service-account --key-file=<(echo "$CL_stage_api_GCLOUD_DEPLOY_credentialsKey")",
1745
1837
  "gcloud run services delete pan-test-app-stage-api --project=google-project-id --region=europe-west6",
@@ -1747,12 +1839,12 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
1747
1839
  "gcloud artifacts docker images delete europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/stage/api --quiet --delete-tags",
1748
1840
  "gcloud artifacts docker images list europe-west6-docker.pkg.dev/google-project-id/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 europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/api@$version --quiet --delete-tags; done",
1749
1841
  "echo Disabling component in Dependency Track",
1750
- "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" disable "pan-test-app/api" "https://pan-test-app-stage-api-unknown-host.example.com" || true",
1842
+ "/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",
1751
1843
  "set -e",
1844
+ "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",
1752
1845
  ],
1753
1846
  "stage": "stop stage",
1754
1847
  "variables": {
1755
- "CLOUDSDK_CORE_DISABLE_PROMPTS": "1",
1756
1848
  "GIT_STRATEGY": "none",
1757
1849
  "KUBERNETES_CPU_REQUEST": "0.5",
1758
1850
  "KUBERNETES_MEMORY_LIMIT": "400Mi",
@@ -1777,6 +1869,8 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
1777
1869
  ],
1778
1870
  },
1779
1871
  "script": [
1872
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
1873
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
1780
1874
  "trivy fs --quiet --format cyclonedx --output "__sbom.json" api",
1781
1875
  ],
1782
1876
  "stage": "build",
@@ -1800,6 +1894,8 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
1800
1894
  ],
1801
1895
  },
1802
1896
  "script": [
1897
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
1898
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
1803
1899
  "trivy fs --quiet --format cyclonedx --output "__sbom.json" api",
1804
1900
  ],
1805
1901
  "stage": "build",
@@ -1852,7 +1948,7 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
1852
1948
  ],
1853
1949
  "variables": {
1854
1950
  "FF_USE_FASTZIP": "true",
1855
- "GIT_DEPTH": 1,
1951
+ "GIT_DEPTH": "1",
1856
1952
  },
1857
1953
  "workflow": {
1858
1954
  "rules": [