@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,33 @@ 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 CLOUD_SQL_INSTANCE_CONNECTION_NAME="projectId:region:instancename"",
120
+ "export DB_NAME="pan-test-app-dev-api"",
121
+ "export DB_USER="my-user"",
122
+ "export DB_PASSWORD="$CL_dev_api_DB_PASSWORD"",
123
+ "export DATABASE_URL="postgresql://$DB_USER:$DB_PASSWORD@localhost/$DB_NAME?host=/cloudsql/$CLOUD_SQL_INSTANCE_CONNECTION_NAME"",
124
+ "export DATABASE_JDBC_URL="jdbc:postgresql:///$DB_NAME?cloudSqlInstance=$CLOUD_SQL_INSTANCE_CONNECTION_NAME&socketFactory=com.google.cloud.sql.postgres.SocketFactory&user=$DB_USER&password=$DB_PASSWORD"",
125
+ "export CLOUD_RUN_JOB_TRIGGER_URL_migration="https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/jobs/pan-test-app-dev-api-migration:run"",
126
+ "export CLOUD_RUN_JOB_TRIGGER_URL_send_reminders="https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/jobs/pan-test-app-dev-api-send-reminders:run"",
127
+ "export DEPLOY_CLOUD_RUN_PROJECT_ID="google-project-id"",
128
+ "export DEPLOY_CLOUD_RUN_REGION="europe-west6"",
129
+ "export GCLOUD_DEPLOY_credentialsKey="$CL_dev_api_GCLOUD_DEPLOY_credentialsKey"",
130
+ "export GCLOUD_RUN_canonicalHostSuffix="$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix"",
131
+ "export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOST\\",\\"ROOT_URL\\",\\"HOST_INTERNAL\\",\\"HOST_CANONICAL\\",\\"ROOT_URL_INTERNAL\\",\\"CLOUD_SQL_INSTANCE_CONNECTION_NAME\\",\\"DB_NAME\\",\\"DB_USER\\",\\"DB_PASSWORD\\",\\"DATABASE_URL\\",\\"DATABASE_JDBC_URL\\",\\"CLOUD_RUN_JOB_TRIGGER_URL_migration\\",\\"CLOUD_RUN_JOB_TRIGGER_URL_send_reminders\\",\\"DEPLOY_CLOUD_RUN_PROJECT_ID\\",\\"DEPLOY_CLOUD_RUN_REGION\\",\\"GCLOUD_DEPLOY_credentialsKey\\",\\"GCLOUD_RUN_canonicalHostSuffix\\"]"",
132
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
133
+ "echo '{"id":"$(git describe --tags 2>/dev/null || git rev-parse HEAD)","time":"$CI_JOB_STARTED_AT"}' > api/__build_info.json",
106
134
  "echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"",
107
135
  "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
108
136
  "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
@@ -119,33 +147,9 @@ exports[`matches snapshot 1`] = `
119
147
  ],
120
148
  "stage": "build",
121
149
  "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
- "CLOUD_RUN_JOB_TRIGGER_URL_migration": "https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/jobs/pan-test-app-dev-api-migration:run",
127
- "CLOUD_RUN_JOB_TRIGGER_URL_send_reminders": "https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/jobs/pan-test-app-dev-api-send-reminders:run",
128
- "CLOUD_SQL_INSTANCE_CONNECTION_NAME": "projectId:region:instancename",
129
- "DATABASE_JDBC_URL": "jdbc:postgresql:///$DB_NAME?cloudSqlInstance=$CLOUD_SQL_INSTANCE_CONNECTION_NAME&socketFactory=com.google.cloud.sql.postgres.SocketFactory&user=$DB_USER&password=$DB_PASSWORD",
130
- "DATABASE_URL": "postgresql://$DB_USER:$DB_PASSWORD@localhost/$DB_NAME?host=/cloudsql/$CLOUD_SQL_INSTANCE_CONNECTION_NAME",
131
- "DB_NAME": "pan-test-app-dev-api",
132
- "DB_PASSWORD": "$CL_dev_api_DB_PASSWORD",
133
- "DB_USER": "my-user",
134
- "DEPLOY_CLOUD_RUN_PROJECT_ID": "google-project-id",
135
- "DEPLOY_CLOUD_RUN_REGION": "europe-west6",
136
- "ENV_SHORT": "dev",
137
- "ENV_TYPE": "dev",
138
- "GCLOUD_DEPLOY_credentialsKey": "$CL_dev_api_GCLOUD_DEPLOY_credentialsKey",
139
- "GCLOUD_RUN_canonicalHostSuffix": "$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix",
140
- "HOST": "pan-test-app-dev-api-unknown-host.example.com",
141
- "HOST_CANONICAL": "pan-test-app-dev-api-unknown-host.example.com",
142
- "HOST_INTERNAL": "pan-test-app-dev-api-unknown-host.example.com",
143
150
  "KUBERNETES_CPU_REQUEST": "0.5",
144
151
  "KUBERNETES_MEMORY_LIMIT": "4Gi",
145
152
  "KUBERNETES_MEMORY_REQUEST": "2Gi",
146
- "ROOT_URL": "https://pan-test-app-dev-api-unknown-host.example.com",
147
- "ROOT_URL_INTERNAL": "https://pan-test-app-dev-api-unknown-host.example.com",
148
- "_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","CLOUD_SQL_INSTANCE_CONNECTION_NAME","DB_NAME","DB_USER","DB_PASSWORD","DATABASE_URL","DATABASE_JDBC_URL","CLOUD_RUN_JOB_TRIGGER_URL_migration","CLOUD_RUN_JOB_TRIGGER_URL_send_reminders","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]",
149
153
  },
150
154
  },
151
155
  "api 🔨 docker | dev ": {
@@ -171,6 +175,21 @@ exports[`matches snapshot 1`] = `
171
175
  ],
172
176
  },
173
177
  "script": [
178
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
179
+ "export APP_DIR="api"",
180
+ "export DOCKER_DIR="."",
181
+ "export DOCKER_REGISTRY="europe-west6-docker.pkg.dev"",
182
+ "export DOCKER_IMAGE="europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/dev/api"",
183
+ "export DOCKER_CACHE_IMAGE="europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/api"",
184
+ "export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"",
185
+ "export DOCKER_COPY_AND_INSTALL_APP="COPY --chown=node:node $APP_DIR .
186
+ RUN yarn plugin import workspace-tools
187
+ RUN yarn workspaces focus --production && yarn rebuild"",
188
+ "export DOCKER_COPY_WORKSPACE_FILES="COPY --chown=node:node api/package.json /app/api/package.json
189
+ COPY --chown=node:node api/yarn.lock /app/api/yarn.lock
190
+ COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
191
+ COPY --chown=node:node .yarn /app/.yarn"",
192
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
174
193
  "ensureNodeDockerfile",
175
194
  "echo -e "\\e[0Ksection_start:$(date +%s):docker-login[collapsed=true]\\r\\e[0KDocker Login"",
176
195
  "gcloud auth activate-service-account --key-file=<(echo "$CL_dev_api_GCLOUD_DEPLOY_credentialsKey")",
@@ -195,24 +214,9 @@ exports[`matches snapshot 1`] = `
195
214
  ],
196
215
  "stage": "build",
197
216
  "variables": {
198
- "APP_DIR": "api",
199
- "DOCKERFILE_ADDITIONS": undefined,
200
- "DOCKERFILE_ADDITIONS_END": undefined,
201
217
  "DOCKER_BUILDKIT": "1",
202
- "DOCKER_CACHE_IMAGE": "europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/api",
203
- "DOCKER_COPY_AND_INSTALL_APP": "COPY --chown=node:node $APP_DIR .
204
- RUN yarn plugin import workspace-tools
205
- RUN yarn workspaces focus --production && yarn rebuild",
206
- "DOCKER_COPY_WORKSPACE_FILES": "COPY --chown=node:node api/package.json /app/api/package.json
207
- COPY --chown=node:node api/yarn.lock /app/api/yarn.lock
208
- COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
209
- COPY --chown=node:node .yarn /app/.yarn",
210
- "DOCKER_DIR": ".",
211
218
  "DOCKER_DRIVER": "overlay2",
212
219
  "DOCKER_HOST": "tcp://0.0.0.0:2375",
213
- "DOCKER_IMAGE": "europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/dev/api",
214
- "DOCKER_IMAGE_TAG": "$CI_COMMIT_SHA",
215
- "DOCKER_REGISTRY": "europe-west6-docker.pkg.dev",
216
220
  "DOCKER_TLS_CERTDIR": "",
217
221
  "KUBERNETES_CPU_REQUEST": "0.5",
218
222
  "KUBERNETES_MEMORY_LIMIT": "2Gi",
@@ -222,15 +226,15 @@ COPY --chown=node:node .yarn /app/.yarn",
222
226
  "api 🚀 Deploy | dev ": {
223
227
  "allow_failure": false,
224
228
  "artifacts": {
225
- "paths": [
226
- "____envvars.yaml",
227
- ],
229
+ "reports": {
230
+ "dotenv": "gitlab_environment.env",
231
+ },
228
232
  },
229
233
  "environment": {
230
234
  "auto_stop_in": "4 weeks",
231
235
  "name": "dev/api",
232
236
  "on_stop": "api 🛑 Stop ⚠️ | dev ",
233
- "url": "https://pan-test-app-dev-api-unknown-host.example.com",
237
+ "url": "$CL_GITLAB_ENVIRONMENT_URL",
234
238
  },
235
239
  "image": "path/to/docker/gcloud:the-version",
236
240
  "interruptible": true,
@@ -273,13 +277,95 @@ COPY --chown=node:node .yarn /app/.yarn",
273
277
  },
274
278
  ],
275
279
  "script": [
280
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
281
+ "export ENV_SHORT="dev"",
282
+ "export APP_DIR="api"",
283
+ "export ENV_TYPE="dev"",
284
+ "export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
285
+ "export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
286
+ "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")"",
287
+ "export HOST="$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
288
+ "export ROOT_URL="https://$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
289
+ "export HOST_INTERNAL="$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
290
+ "export HOST_CANONICAL="$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
291
+ "export ROOT_URL_INTERNAL="https://$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
292
+ "export CLOUD_SQL_INSTANCE_CONNECTION_NAME="projectId:region:instancename"",
293
+ "export DB_NAME="pan-test-app-dev-api"",
294
+ "export DB_USER="my-user"",
295
+ "export DB_PASSWORD="$CL_dev_api_DB_PASSWORD"",
296
+ "export DATABASE_URL="postgresql://$DB_USER:$DB_PASSWORD@localhost/$DB_NAME?host=/cloudsql/$CLOUD_SQL_INSTANCE_CONNECTION_NAME"",
297
+ "export DATABASE_JDBC_URL="jdbc:postgresql:///$DB_NAME?cloudSqlInstance=$CLOUD_SQL_INSTANCE_CONNECTION_NAME&socketFactory=com.google.cloud.sql.postgres.SocketFactory&user=$DB_USER&password=$DB_PASSWORD"",
298
+ "export CLOUD_RUN_JOB_TRIGGER_URL_migration="https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/jobs/pan-test-app-dev-api-migration:run"",
299
+ "export CLOUD_RUN_JOB_TRIGGER_URL_send_reminders="https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/jobs/pan-test-app-dev-api-send-reminders:run"",
300
+ "export DEPLOY_CLOUD_RUN_PROJECT_ID="google-project-id"",
301
+ "export DEPLOY_CLOUD_RUN_REGION="europe-west6"",
302
+ "export GCLOUD_DEPLOY_credentialsKey="$CL_dev_api_GCLOUD_DEPLOY_credentialsKey"",
303
+ "export GCLOUD_RUN_canonicalHostSuffix="$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix"",
304
+ "export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOST\\",\\"ROOT_URL\\",\\"HOST_INTERNAL\\",\\"HOST_CANONICAL\\",\\"ROOT_URL_INTERNAL\\",\\"CLOUD_SQL_INSTANCE_CONNECTION_NAME\\",\\"DB_NAME\\",\\"DB_USER\\",\\"DB_PASSWORD\\",\\"DATABASE_URL\\",\\"DATABASE_JDBC_URL\\",\\"CLOUD_RUN_JOB_TRIGGER_URL_migration\\",\\"CLOUD_RUN_JOB_TRIGGER_URL_send_reminders\\",\\"DEPLOY_CLOUD_RUN_PROJECT_ID\\",\\"DEPLOY_CLOUD_RUN_REGION\\",\\"GCLOUD_DEPLOY_credentialsKey\\",\\"GCLOUD_RUN_canonicalHostSuffix\\"]"",
305
+ "export DOCKER_REGISTRY="europe-west6-docker.pkg.dev"",
306
+ "export DOCKER_IMAGE="europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/dev/api"",
307
+ "export DOCKER_CACHE_IMAGE="europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/api"",
308
+ "export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"",
309
+ "export CLOUDSDK_CORE_DISABLE_PROMPTS="1"",
310
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
276
311
  "echo -e "\\e[0Ksection_start:$(date +%s):prepare[collapsed=true]\\r\\e[0KPrepare..."",
277
312
  "gcloud auth activate-service-account --key-file=<(echo "$CL_dev_api_GCLOUD_DEPLOY_credentialsKey")",
278
313
  "export GCLOUD_PROJECT_NUMBER=$(gcloud projects describe google-project-id --format="value(projectNumber)")",
279
314
  "echo "GCLOUD_PROJECT_NUMBER: $GCLOUD_PROJECT_NUMBER"",
280
315
  "echo -e "\\e[0Ksection_end:$(date +%s):prepare\\r\\e[0K"",
316
+ "echo -e "\\e[0Ksection_start:$(date +%s):writeenvvars[collapsed=true]\\r\\e[0KWrite env vars to file"",
317
+ "cat > ____envvars.yaml <<EOF
318
+ ENV_SHORT: |-
319
+ dev
320
+ APP_DIR: |-
321
+ api
322
+ ENV_TYPE: |-
323
+ dev
324
+ BUILD_INFO_BUILD_ID: |-
325
+ $(printf %s "$(git describe --tags 2>/dev/null || git rev-parse HEAD)" | sed 's/^/ /')
326
+ BUILD_INFO_BUILD_TIME: |-
327
+ $(printf %s "$CI_JOB_STARTED_AT" | sed 's/^/ /')
328
+ BUILD_INFO_CURRENT_VERSION: |-
329
+ $(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/^/ /')
330
+ HOST: |-
331
+ $(printf %s "$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
332
+ ROOT_URL: |-
333
+ $(printf %s "https://$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
334
+ HOST_INTERNAL: |-
335
+ $(printf %s "$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
336
+ HOST_CANONICAL: |-
337
+ $(printf %s "$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
338
+ ROOT_URL_INTERNAL: |-
339
+ $(printf %s "https://$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
340
+ CLOUD_SQL_INSTANCE_CONNECTION_NAME: |-
341
+ projectId:region:instancename
342
+ DB_NAME: |-
343
+ pan-test-app-dev-api
344
+ DB_USER: |-
345
+ my-user
346
+ DB_PASSWORD: |-
347
+ $(printf %s "$CL_dev_api_DB_PASSWORD" | sed 's/^/ /')
348
+ DATABASE_URL: |-
349
+ postgresql://$DB_USER:$DB_PASSWORD@localhost/$DB_NAME?host=/cloudsql/$CLOUD_SQL_INSTANCE_CONNECTION_NAME
350
+ DATABASE_JDBC_URL: |-
351
+ jdbc:postgresql:///$DB_NAME?cloudSqlInstance=$CLOUD_SQL_INSTANCE_CONNECTION_NAME&socketFactory=com.google.cloud.sql.postgres.SocketFactory&user=$DB_USER&password=$DB_PASSWORD
352
+ CLOUD_RUN_JOB_TRIGGER_URL_migration: |-
353
+ https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/jobs/pan-test-app-dev-api-migration:run
354
+ CLOUD_RUN_JOB_TRIGGER_URL_send_reminders: |-
355
+ https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/jobs/pan-test-app-dev-api-send-reminders:run
356
+ DEPLOY_CLOUD_RUN_PROJECT_ID: |-
357
+ google-project-id
358
+ DEPLOY_CLOUD_RUN_REGION: |-
359
+ europe-west6
360
+ GCLOUD_RUN_canonicalHostSuffix: |-
361
+ $(printf %s "$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | sed 's/^/ /')
362
+ _ALL_ENV_VAR_KEYS: |-
363
+ ["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","HOST_INTERNAL","HOST_CANONICAL","ROOT_URL_INTERNAL","CLOUD_SQL_INSTANCE_CONNECTION_NAME","DB_NAME","DB_USER","DB_PASSWORD","DATABASE_URL","DATABASE_JDBC_URL","CLOUD_RUN_JOB_TRIGGER_URL_migration","CLOUD_RUN_JOB_TRIGGER_URL_send_reminders","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]
364
+
365
+ EOF
366
+ ",
367
+ "echo -e "\\e[0Ksection_end:$(date +%s):writeenvvars\\r\\e[0K"",
281
368
  "echo -e "\\e[0Ksection_start:$(date +%s):deploy[collapsed=true]\\r\\e[0KDeploy to cloud run"",
282
- "echo "$ENV_VARS" > ____envvars.yaml",
283
369
  "set +e",
284
370
  "echo "ensuring Database..."",
285
371
  "gcloud sql databases create pan-test-app-dev-api --instance=instancename --project projectId",
@@ -305,85 +391,27 @@ COPY --chown=node:node .yarn /app/.yarn",
305
391
  "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",
306
392
  "echo -e "\\e[0Ksection_end:$(date +%s):cleanup\\r\\e[0K"",
307
393
  "echo Uploading SBOM to Dependency Track",
308
- "/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",
309
- ],
310
- "services": [
311
- {
312
- "command": [
313
- "--tls=false",
314
- ],
315
- "name": "docker:24.0.6-dind",
316
- },
394
+ "/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",
395
+ "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",
317
396
  ],
318
397
  "stage": "deploy dev",
319
398
  "variables": {
320
- "APP_DIR": "api",
321
- "BUILD_INFO_BUILD_TIME": "01-01-2023 12:13:14",
322
- "BUILD_INFO_CURRENT_VERSION": "3.2.1",
323
- "BUILD_INFO_ID": "some-id",
324
- "CLOUDSDK_CORE_DISABLE_PROMPTS": "1",
325
- "CLOUD_RUN_JOB_TRIGGER_URL_migration": "https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/jobs/pan-test-app-dev-api-migration:run",
326
- "CLOUD_RUN_JOB_TRIGGER_URL_send_reminders": "https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/jobs/pan-test-app-dev-api-send-reminders:run",
327
- "CLOUD_SQL_INSTANCE_CONNECTION_NAME": "projectId:region:instancename",
328
- "DATABASE_JDBC_URL": "jdbc:postgresql:///$DB_NAME?cloudSqlInstance=$CLOUD_SQL_INSTANCE_CONNECTION_NAME&socketFactory=com.google.cloud.sql.postgres.SocketFactory&user=$DB_USER&password=$DB_PASSWORD",
329
- "DATABASE_URL": "postgresql://$DB_USER:$DB_PASSWORD@localhost/$DB_NAME?host=/cloudsql/$CLOUD_SQL_INSTANCE_CONNECTION_NAME",
330
- "DB_NAME": "pan-test-app-dev-api",
331
- "DB_PASSWORD": "$CL_dev_api_DB_PASSWORD",
332
- "DB_USER": "my-user",
333
- "DEPLOY_CLOUD_RUN_PROJECT_ID": "google-project-id",
334
- "DEPLOY_CLOUD_RUN_REGION": "europe-west6",
335
- "DOCKER_BUILDKIT": "1",
336
- "DOCKER_CACHE_IMAGE": "europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/api",
337
- "DOCKER_DRIVER": "overlay2",
338
- "DOCKER_HOST": "tcp://0.0.0.0:2375",
339
- "DOCKER_IMAGE": "europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/dev/api",
340
- "DOCKER_IMAGE_TAG": "$CI_COMMIT_SHA",
341
- "DOCKER_REGISTRY": "europe-west6-docker.pkg.dev",
342
- "DOCKER_TLS_CERTDIR": "",
343
- "ENV_SHORT": "dev",
344
- "ENV_TYPE": "dev",
345
- "ENV_VARS": "ENV_SHORT: 'dev'
346
- APP_DIR: 'api'
347
- ENV_TYPE: 'dev'
348
- BUILD_INFO_ID: 'some-id'
349
- BUILD_INFO_BUILD_TIME: '01-01-2023 12:13:14'
350
- BUILD_INFO_CURRENT_VERSION: '3.2.1'
351
- HOST: 'pan-test-app-dev-api-unknown-host.example.com'
352
- ROOT_URL: 'https://pan-test-app-dev-api-unknown-host.example.com'
353
- HOST_CANONICAL: 'pan-test-app-dev-api-unknown-host.example.com'
354
- ROOT_URL_INTERNAL: 'https://pan-test-app-dev-api-unknown-host.example.com'
355
- HOST_INTERNAL: 'pan-test-app-dev-api-unknown-host.example.com'
356
- CLOUD_SQL_INSTANCE_CONNECTION_NAME: 'projectId:region:instancename'
357
- DB_NAME: 'pan-test-app-dev-api'
358
- DB_USER: 'my-user'
359
- DB_PASSWORD: '$CL_dev_api_DB_PASSWORD'
360
- DATABASE_URL: 'postgresql://$DB_USER:$DB_PASSWORD@localhost/$DB_NAME?host=/cloudsql/$CLOUD_SQL_INSTANCE_CONNECTION_NAME'
361
- DATABASE_JDBC_URL: 'jdbc:postgresql:///$DB_NAME?cloudSqlInstance=$CLOUD_SQL_INSTANCE_CONNECTION_NAME&socketFactory=com.google.cloud.sql.postgres.SocketFactory&user=$DB_USER&password=$DB_PASSWORD'
362
- CLOUD_RUN_JOB_TRIGGER_URL_migration: 'https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/jobs/pan-test-app-dev-api-migration:run'
363
- CLOUD_RUN_JOB_TRIGGER_URL_send_reminders: 'https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/jobs/pan-test-app-dev-api-send-reminders:run'
364
- DEPLOY_CLOUD_RUN_PROJECT_ID: 'google-project-id'
365
- DEPLOY_CLOUD_RUN_REGION: 'europe-west6'
366
- GCLOUD_RUN_canonicalHostSuffix: '$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix'
367
- _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","CLOUD_SQL_INSTANCE_CONNECTION_NAME","DB_NAME","DB_USER","DB_PASSWORD","DATABASE_URL","DATABASE_JDBC_URL","CLOUD_RUN_JOB_TRIGGER_URL_migration","CLOUD_RUN_JOB_TRIGGER_URL_send_reminders","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]'
368
- ",
369
- "GCLOUD_DEPLOY_credentialsKey": "$CL_dev_api_GCLOUD_DEPLOY_credentialsKey",
370
- "GCLOUD_RUN_canonicalHostSuffix": "$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix",
371
- "HOST": "pan-test-app-dev-api-unknown-host.example.com",
372
- "HOST_CANONICAL": "pan-test-app-dev-api-unknown-host.example.com",
373
- "HOST_INTERNAL": "pan-test-app-dev-api-unknown-host.example.com",
374
399
  "KUBERNETES_CPU_REQUEST": "0.5",
375
400
  "KUBERNETES_MEMORY_LIMIT": "400Mi",
376
401
  "KUBERNETES_MEMORY_REQUEST": "200Mi",
377
- "ROOT_URL": "https://pan-test-app-dev-api-unknown-host.example.com",
378
- "ROOT_URL_INTERNAL": "https://pan-test-app-dev-api-unknown-host.example.com",
379
- "_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","CLOUD_SQL_INSTANCE_CONNECTION_NAME","DB_NAME","DB_USER","DB_PASSWORD","DATABASE_URL","DATABASE_JDBC_URL","CLOUD_RUN_JOB_TRIGGER_URL_migration","CLOUD_RUN_JOB_TRIGGER_URL_send_reminders","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]",
380
402
  },
381
403
  },
382
404
  "api 🛑 Stop ⚠️ | dev ": {
405
+ "allow_failure": true,
406
+ "artifacts": {
407
+ "reports": {
408
+ "dotenv": "gitlab_environment.env",
409
+ },
410
+ },
383
411
  "environment": {
384
412
  "action": "stop",
385
413
  "name": "dev/api",
386
- "url": "https://pan-test-app-dev-api-unknown-host.example.com",
414
+ "url": "$CL_GITLAB_ENVIRONMENT_URL",
387
415
  },
388
416
  "image": "path/to/docker/gcloud:the-version",
389
417
  "interruptible": true,
@@ -397,16 +425,17 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
397
425
  },
398
426
  "rules": [
399
427
  {
400
- "allow_failure": true,
401
428
  "if": "$CI_COMMIT_BRANCH =~ /^[0-9]+\\.([0-9]+|x)\\.x$/",
402
429
  "when": "on_success",
403
430
  },
404
431
  {
405
- "allow_failure": true,
406
432
  "when": "manual",
407
433
  },
408
434
  ],
409
435
  "script": [
436
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
437
+ "export CLOUDSDK_CORE_DISABLE_PROMPTS="1"",
438
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
410
439
  "set +e",
411
440
  "gcloud auth activate-service-account --key-file=<(echo "$CL_dev_api_GCLOUD_DEPLOY_credentialsKey")",
412
441
  "gcloud run services delete pan-test-app-dev-api --project=google-project-id --region=europe-west6",
@@ -418,12 +447,12 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
418
447
  "gcloud artifacts docker images delete europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/dev/api --quiet --delete-tags",
419
448
  "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",
420
449
  "echo Disabling component in Dependency Track",
421
- "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" disable "pan-test-app/api" "https://pan-test-app-dev-api-unknown-host.example.com" || true",
450
+ "/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",
422
451
  "set -e",
452
+ "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",
423
453
  ],
424
454
  "stage": "stop dev",
425
455
  "variables": {
426
- "CLOUDSDK_CORE_DISABLE_PROMPTS": "1",
427
456
  "GIT_STRATEGY": "none",
428
457
  "KUBERNETES_CPU_REQUEST": "0.5",
429
458
  "KUBERNETES_MEMORY_LIMIT": "400Mi",
@@ -443,12 +472,14 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
443
472
  ],
444
473
  },
445
474
  "script": [
475
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
476
+ "export APP_PATH="api"",
477
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
446
478
  "cd api",
447
479
  "yarn npm audit --environment production",
448
480
  ],
449
481
  "stage": "test",
450
482
  "variables": {
451
- "APP_PATH": "api",
452
483
  "KUBERNETES_CPU_REQUEST": "0.5",
453
484
  "KUBERNETES_MEMORY_LIMIT": "4Gi",
454
485
  "KUBERNETES_MEMORY_REQUEST": "2Gi",
@@ -482,6 +513,9 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
482
513
  ],
483
514
  },
484
515
  "script": [
516
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
517
+ "export APP_PATH="api"",
518
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
485
519
  "echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"",
486
520
  "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
487
521
  "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
@@ -498,7 +532,6 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
498
532
  ],
499
533
  "stage": "test",
500
534
  "variables": {
501
- "APP_PATH": "api",
502
535
  "KUBERNETES_CPU_REQUEST": "0.5",
503
536
  "KUBERNETES_MEMORY_LIMIT": "4Gi",
504
537
  "KUBERNETES_MEMORY_REQUEST": "2Gi",
@@ -522,6 +555,8 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
522
555
  ],
523
556
  },
524
557
  "script": [
558
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
559
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
525
560
  "trivy fs --quiet --format cyclonedx --output "__sbom.json" api",
526
561
  ],
527
562
  "stage": "build",
@@ -555,6 +590,9 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
555
590
  ],
556
591
  },
557
592
  "script": [
593
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
594
+ "export APP_PATH="www"",
595
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
558
596
  "echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"",
559
597
  "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
560
598
  "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
@@ -571,7 +609,6 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
571
609
  ],
572
610
  "stage": "test",
573
611
  "variables": {
574
- "APP_PATH": "www",
575
612
  "KUBERNETES_CPU_REQUEST": "0.5",
576
613
  "KUBERNETES_MEMORY_LIMIT": "4Gi",
577
614
  "KUBERNETES_MEMORY_REQUEST": "2Gi",
@@ -624,7 +661,26 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
624
661
  ],
625
662
  },
626
663
  "script": [
627
- "echo '{"id":"some-id","time":"01-01-2023 12:13:14"}' > www/__build_info.json",
664
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
665
+ "export ENV_SHORT="dev"",
666
+ "export APP_DIR="www"",
667
+ "export ENV_TYPE="dev"",
668
+ "export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
669
+ "export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
670
+ "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")"",
671
+ "export HOST="$(printf %s "pan-test-app-dev-www-$CL_dev_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
672
+ "export ROOT_URL="https://$(printf %s "pan-test-app-dev-www-$CL_dev_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
673
+ "export HOST_INTERNAL="$(printf %s "pan-test-app-dev-www-$CL_dev_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
674
+ "export HOST_CANONICAL="$(printf %s "pan-test-app-dev-www-$CL_dev_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
675
+ "export ROOT_URL_INTERNAL="https://$(printf %s "pan-test-app-dev-www-$CL_dev_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
676
+ "export DEPLOY_CLOUD_RUN_PROJECT_ID="google-project-id"",
677
+ "export DEPLOY_CLOUD_RUN_REGION="europe-west6"",
678
+ "export GCLOUD_DEPLOY_credentialsKey="$CL_dev_www_GCLOUD_DEPLOY_credentialsKey"",
679
+ "export GCLOUD_RUN_canonicalHostSuffix="$CL_dev_www_GCLOUD_RUN_canonicalHostSuffix"",
680
+ "export API_URL="https://$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')/graphql"",
681
+ "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\\",\\"API_URL\\"]"",
682
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
683
+ "echo '{"id":"$(git describe --tags 2>/dev/null || git rev-parse HEAD)","time":"$CI_JOB_STARTED_AT"}' > www/__build_info.json",
628
684
  "echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"",
629
685
  "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
630
686
  "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
@@ -641,26 +697,9 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
641
697
  ],
642
698
  "stage": "build",
643
699
  "variables": {
644
- "API_URL": "https://pan-test-app-dev-api-unknown-host.example.com/graphql",
645
- "APP_DIR": "www",
646
- "BUILD_INFO_BUILD_TIME": "01-01-2023 12:13:14",
647
- "BUILD_INFO_CURRENT_VERSION": "3.2.1",
648
- "BUILD_INFO_ID": "some-id",
649
- "DEPLOY_CLOUD_RUN_PROJECT_ID": "google-project-id",
650
- "DEPLOY_CLOUD_RUN_REGION": "europe-west6",
651
- "ENV_SHORT": "dev",
652
- "ENV_TYPE": "dev",
653
- "GCLOUD_DEPLOY_credentialsKey": "$CL_dev_www_GCLOUD_DEPLOY_credentialsKey",
654
- "GCLOUD_RUN_canonicalHostSuffix": "$CL_dev_www_GCLOUD_RUN_canonicalHostSuffix",
655
- "HOST": "pan-test-app-dev-www-unknown-host.example.com",
656
- "HOST_CANONICAL": "pan-test-app-dev-www-unknown-host.example.com",
657
- "HOST_INTERNAL": "pan-test-app-dev-www-unknown-host.example.com",
658
700
  "KUBERNETES_CPU_REQUEST": "0.5",
659
701
  "KUBERNETES_MEMORY_LIMIT": "4Gi",
660
702
  "KUBERNETES_MEMORY_REQUEST": "2Gi",
661
- "ROOT_URL": "https://pan-test-app-dev-www-unknown-host.example.com",
662
- "ROOT_URL_INTERNAL": "https://pan-test-app-dev-www-unknown-host.example.com",
663
- "_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","API_URL"]",
664
703
  },
665
704
  },
666
705
  "www 🔨 docker | dev ": {
@@ -686,6 +725,21 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
686
725
  ],
687
726
  },
688
727
  "script": [
728
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
729
+ "export APP_DIR="www"",
730
+ "export DOCKER_DIR="."",
731
+ "export DOCKER_REGISTRY="europe-west6-docker.pkg.dev"",
732
+ "export DOCKER_IMAGE="europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/dev/www"",
733
+ "export DOCKER_CACHE_IMAGE="europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/www"",
734
+ "export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"",
735
+ "export DOCKER_COPY_AND_INSTALL_APP="COPY --chown=node:node $APP_DIR .
736
+ RUN yarn plugin import workspace-tools
737
+ RUN yarn workspaces focus --production && yarn rebuild"",
738
+ "export DOCKER_COPY_WORKSPACE_FILES="COPY --chown=node:node www/package.json /app/www/package.json
739
+ COPY --chown=node:node www/yarn.lock /app/www/yarn.lock
740
+ COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
741
+ COPY --chown=node:node .yarn /app/.yarn"",
742
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
689
743
  "ensureNodeDockerfile",
690
744
  "echo -e "\\e[0Ksection_start:$(date +%s):docker-login[collapsed=true]\\r\\e[0KDocker Login"",
691
745
  "gcloud auth activate-service-account --key-file=<(echo "$CL_dev_www_GCLOUD_DEPLOY_credentialsKey")",
@@ -710,24 +764,9 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
710
764
  ],
711
765
  "stage": "build",
712
766
  "variables": {
713
- "APP_DIR": "www",
714
- "DOCKERFILE_ADDITIONS": undefined,
715
- "DOCKERFILE_ADDITIONS_END": undefined,
716
767
  "DOCKER_BUILDKIT": "1",
717
- "DOCKER_CACHE_IMAGE": "europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/www",
718
- "DOCKER_COPY_AND_INSTALL_APP": "COPY --chown=node:node $APP_DIR .
719
- RUN yarn plugin import workspace-tools
720
- RUN yarn workspaces focus --production && yarn rebuild",
721
- "DOCKER_COPY_WORKSPACE_FILES": "COPY --chown=node:node www/package.json /app/www/package.json
722
- COPY --chown=node:node www/yarn.lock /app/www/yarn.lock
723
- COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
724
- COPY --chown=node:node .yarn /app/.yarn",
725
- "DOCKER_DIR": ".",
726
768
  "DOCKER_DRIVER": "overlay2",
727
769
  "DOCKER_HOST": "tcp://0.0.0.0:2375",
728
- "DOCKER_IMAGE": "europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/dev/www",
729
- "DOCKER_IMAGE_TAG": "$CI_COMMIT_SHA",
730
- "DOCKER_REGISTRY": "europe-west6-docker.pkg.dev",
731
770
  "DOCKER_TLS_CERTDIR": "",
732
771
  "KUBERNETES_CPU_REQUEST": "0.5",
733
772
  "KUBERNETES_MEMORY_LIMIT": "2Gi",
@@ -737,15 +776,15 @@ COPY --chown=node:node .yarn /app/.yarn",
737
776
  "www 🚀 Deploy | dev ": {
738
777
  "allow_failure": false,
739
778
  "artifacts": {
740
- "paths": [
741
- "____envvars.yaml",
742
- ],
779
+ "reports": {
780
+ "dotenv": "gitlab_environment.env",
781
+ },
743
782
  },
744
783
  "environment": {
745
784
  "auto_stop_in": "4 weeks",
746
785
  "name": "dev/www",
747
786
  "on_stop": "www 🛑 Stop ⚠️ | dev ",
748
- "url": "https://pan-test-app-dev-www-unknown-host.example.com",
787
+ "url": "$CL_GITLAB_ENVIRONMENT_URL",
749
788
  },
750
789
  "image": "path/to/docker/gcloud:the-version",
751
790
  "interruptible": true,
@@ -788,13 +827,74 @@ COPY --chown=node:node .yarn /app/.yarn",
788
827
  },
789
828
  ],
790
829
  "script": [
830
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
831
+ "export ENV_SHORT="dev"",
832
+ "export APP_DIR="www"",
833
+ "export ENV_TYPE="dev"",
834
+ "export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
835
+ "export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
836
+ "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")"",
837
+ "export HOST="$(printf %s "pan-test-app-dev-www-$CL_dev_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
838
+ "export ROOT_URL="https://$(printf %s "pan-test-app-dev-www-$CL_dev_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
839
+ "export HOST_INTERNAL="$(printf %s "pan-test-app-dev-www-$CL_dev_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
840
+ "export HOST_CANONICAL="$(printf %s "pan-test-app-dev-www-$CL_dev_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
841
+ "export ROOT_URL_INTERNAL="https://$(printf %s "pan-test-app-dev-www-$CL_dev_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
842
+ "export DEPLOY_CLOUD_RUN_PROJECT_ID="google-project-id"",
843
+ "export DEPLOY_CLOUD_RUN_REGION="europe-west6"",
844
+ "export GCLOUD_DEPLOY_credentialsKey="$CL_dev_www_GCLOUD_DEPLOY_credentialsKey"",
845
+ "export GCLOUD_RUN_canonicalHostSuffix="$CL_dev_www_GCLOUD_RUN_canonicalHostSuffix"",
846
+ "export API_URL="https://$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')/graphql"",
847
+ "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\\",\\"API_URL\\"]"",
848
+ "export DOCKER_REGISTRY="europe-west6-docker.pkg.dev"",
849
+ "export DOCKER_IMAGE="europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/dev/www"",
850
+ "export DOCKER_CACHE_IMAGE="europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/www"",
851
+ "export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"",
852
+ "export CLOUDSDK_CORE_DISABLE_PROMPTS="1"",
853
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
791
854
  "echo -e "\\e[0Ksection_start:$(date +%s):prepare[collapsed=true]\\r\\e[0KPrepare..."",
792
855
  "gcloud auth activate-service-account --key-file=<(echo "$CL_dev_www_GCLOUD_DEPLOY_credentialsKey")",
793
856
  "export GCLOUD_PROJECT_NUMBER=$(gcloud projects describe google-project-id --format="value(projectNumber)")",
794
857
  "echo "GCLOUD_PROJECT_NUMBER: $GCLOUD_PROJECT_NUMBER"",
795
858
  "echo -e "\\e[0Ksection_end:$(date +%s):prepare\\r\\e[0K"",
859
+ "echo -e "\\e[0Ksection_start:$(date +%s):writeenvvars[collapsed=true]\\r\\e[0KWrite env vars to file"",
860
+ "cat > ____envvars.yaml <<EOF
861
+ ENV_SHORT: |-
862
+ dev
863
+ APP_DIR: |-
864
+ www
865
+ ENV_TYPE: |-
866
+ dev
867
+ BUILD_INFO_BUILD_ID: |-
868
+ $(printf %s "$(git describe --tags 2>/dev/null || git rev-parse HEAD)" | sed 's/^/ /')
869
+ BUILD_INFO_BUILD_TIME: |-
870
+ $(printf %s "$CI_JOB_STARTED_AT" | sed 's/^/ /')
871
+ BUILD_INFO_CURRENT_VERSION: |-
872
+ $(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/^/ /')
873
+ HOST: |-
874
+ $(printf %s "$(printf %s "pan-test-app-dev-www-$CL_dev_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
875
+ ROOT_URL: |-
876
+ $(printf %s "https://$(printf %s "pan-test-app-dev-www-$CL_dev_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
877
+ HOST_INTERNAL: |-
878
+ $(printf %s "$(printf %s "pan-test-app-dev-www-$CL_dev_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
879
+ HOST_CANONICAL: |-
880
+ $(printf %s "$(printf %s "pan-test-app-dev-www-$CL_dev_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
881
+ ROOT_URL_INTERNAL: |-
882
+ $(printf %s "https://$(printf %s "pan-test-app-dev-www-$CL_dev_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
883
+ DEPLOY_CLOUD_RUN_PROJECT_ID: |-
884
+ google-project-id
885
+ DEPLOY_CLOUD_RUN_REGION: |-
886
+ europe-west6
887
+ GCLOUD_RUN_canonicalHostSuffix: |-
888
+ $(printf %s "$CL_dev_www_GCLOUD_RUN_canonicalHostSuffix" | sed 's/^/ /')
889
+ API_URL: |-
890
+ $(printf %s "https://$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')/graphql" | sed 's/^/ /')
891
+ _ALL_ENV_VAR_KEYS: |-
892
+ ["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","API_URL"]
893
+
894
+ EOF
895
+ ",
896
+ "echo -e "\\e[0Ksection_end:$(date +%s):writeenvvars\\r\\e[0K"",
796
897
  "echo -e "\\e[0Ksection_start:$(date +%s):deploy[collapsed=true]\\r\\e[0KDeploy to cloud run"",
797
- "echo "$ENV_VARS" > ____envvars.yaml",
798
898
  "gcloud run deploy pan-test-app-dev-www --command="yarn,start" --image=europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/dev/www:$DOCKER_IMAGE_TAG --project=google-project-id --region=europe-west6 --labels=customer-name=pan,component-name=www,app-name=test-app,env-type=dev,env-name=dev,build-type=node,cloud-run-service-name=pan-test-app-dev-www --env-vars-file=____envvars.yaml --min-instances=0 --max-instances=100 --cpu-throttling --allow-unauthenticated --ingress=all --cpu-boost",
799
899
  "echo -e "\\e[0Ksection_end:$(date +%s):deploy\\r\\e[0K"",
800
900
  "echo -e "\\e[0Ksection_start:$(date +%s):cleanup[collapsed=true]\\r\\e[0KCleanup"",
@@ -803,71 +903,27 @@ COPY --chown=node:node .yarn /app/.yarn",
803
903
  "gcloud artifacts docker images list europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/www --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/www@$version --quiet --delete-tags; done",
804
904
  "echo -e "\\e[0Ksection_end:$(date +%s):cleanup\\r\\e[0K"",
805
905
  "echo Uploading SBOM to Dependency Track",
806
- "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/www" "https://pan-test-app-dev-www-unknown-host.example.com" "__sbom.json" vex.json || true",
807
- ],
808
- "services": [
809
- {
810
- "command": [
811
- "--tls=false",
812
- ],
813
- "name": "docker:24.0.6-dind",
814
- },
906
+ "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/www" "https://$(printf %s "pan-test-app-dev-www-$CL_dev_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" "__sbom.json" vex.json || true",
907
+ "echo "CL_GITLAB_ENVIRONMENT_URL=https://$(printf %s "pan-test-app-dev-www-$CL_dev_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" >> gitlab_environment.env",
815
908
  ],
816
909
  "stage": "deploy dev",
817
910
  "variables": {
818
- "API_URL": "https://pan-test-app-dev-api-unknown-host.example.com/graphql",
819
- "APP_DIR": "www",
820
- "BUILD_INFO_BUILD_TIME": "01-01-2023 12:13:14",
821
- "BUILD_INFO_CURRENT_VERSION": "3.2.1",
822
- "BUILD_INFO_ID": "some-id",
823
- "CLOUDSDK_CORE_DISABLE_PROMPTS": "1",
824
- "DEPLOY_CLOUD_RUN_PROJECT_ID": "google-project-id",
825
- "DEPLOY_CLOUD_RUN_REGION": "europe-west6",
826
- "DOCKER_BUILDKIT": "1",
827
- "DOCKER_CACHE_IMAGE": "europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/www",
828
- "DOCKER_DRIVER": "overlay2",
829
- "DOCKER_HOST": "tcp://0.0.0.0:2375",
830
- "DOCKER_IMAGE": "europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/dev/www",
831
- "DOCKER_IMAGE_TAG": "$CI_COMMIT_SHA",
832
- "DOCKER_REGISTRY": "europe-west6-docker.pkg.dev",
833
- "DOCKER_TLS_CERTDIR": "",
834
- "ENV_SHORT": "dev",
835
- "ENV_TYPE": "dev",
836
- "ENV_VARS": "ENV_SHORT: 'dev'
837
- APP_DIR: 'www'
838
- ENV_TYPE: 'dev'
839
- BUILD_INFO_ID: 'some-id'
840
- BUILD_INFO_BUILD_TIME: '01-01-2023 12:13:14'
841
- BUILD_INFO_CURRENT_VERSION: '3.2.1'
842
- HOST: 'pan-test-app-dev-www-unknown-host.example.com'
843
- ROOT_URL: 'https://pan-test-app-dev-www-unknown-host.example.com'
844
- HOST_CANONICAL: 'pan-test-app-dev-www-unknown-host.example.com'
845
- ROOT_URL_INTERNAL: 'https://pan-test-app-dev-www-unknown-host.example.com'
846
- HOST_INTERNAL: 'pan-test-app-dev-www-unknown-host.example.com'
847
- DEPLOY_CLOUD_RUN_PROJECT_ID: 'google-project-id'
848
- DEPLOY_CLOUD_RUN_REGION: 'europe-west6'
849
- GCLOUD_RUN_canonicalHostSuffix: '$CL_dev_www_GCLOUD_RUN_canonicalHostSuffix'
850
- API_URL: 'https://pan-test-app-dev-api-unknown-host.example.com/graphql'
851
- _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","API_URL"]'
852
- ",
853
- "GCLOUD_DEPLOY_credentialsKey": "$CL_dev_www_GCLOUD_DEPLOY_credentialsKey",
854
- "GCLOUD_RUN_canonicalHostSuffix": "$CL_dev_www_GCLOUD_RUN_canonicalHostSuffix",
855
- "HOST": "pan-test-app-dev-www-unknown-host.example.com",
856
- "HOST_CANONICAL": "pan-test-app-dev-www-unknown-host.example.com",
857
- "HOST_INTERNAL": "pan-test-app-dev-www-unknown-host.example.com",
858
911
  "KUBERNETES_CPU_REQUEST": "0.5",
859
912
  "KUBERNETES_MEMORY_LIMIT": "400Mi",
860
913
  "KUBERNETES_MEMORY_REQUEST": "200Mi",
861
- "ROOT_URL": "https://pan-test-app-dev-www-unknown-host.example.com",
862
- "ROOT_URL_INTERNAL": "https://pan-test-app-dev-www-unknown-host.example.com",
863
- "_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","API_URL"]",
864
914
  },
865
915
  },
866
916
  "www 🛑 Stop ⚠️ | dev ": {
917
+ "allow_failure": true,
918
+ "artifacts": {
919
+ "reports": {
920
+ "dotenv": "gitlab_environment.env",
921
+ },
922
+ },
867
923
  "environment": {
868
924
  "action": "stop",
869
925
  "name": "dev/www",
870
- "url": "https://pan-test-app-dev-www-unknown-host.example.com",
926
+ "url": "$CL_GITLAB_ENVIRONMENT_URL",
871
927
  },
872
928
  "image": "path/to/docker/gcloud:the-version",
873
929
  "interruptible": true,
@@ -881,28 +937,29 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
881
937
  },
882
938
  "rules": [
883
939
  {
884
- "allow_failure": true,
885
940
  "if": "$CI_COMMIT_BRANCH =~ /^[0-9]+\\.([0-9]+|x)\\.x$/",
886
941
  "when": "on_success",
887
942
  },
888
943
  {
889
- "allow_failure": true,
890
944
  "when": "manual",
891
945
  },
892
946
  ],
893
947
  "script": [
948
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
949
+ "export CLOUDSDK_CORE_DISABLE_PROMPTS="1"",
950
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
894
951
  "set +e",
895
952
  "gcloud auth activate-service-account --key-file=<(echo "$CL_dev_www_GCLOUD_DEPLOY_credentialsKey")",
896
953
  "gcloud run services delete pan-test-app-dev-www --project=google-project-id --region=europe-west6",
897
954
  "gcloud artifacts docker images delete europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/dev/www --quiet --delete-tags",
898
955
  "gcloud artifacts docker images list europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/www --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/www@$version --quiet --delete-tags; done",
899
956
  "echo Disabling component in Dependency Track",
900
- "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" disable "pan-test-app/www" "https://pan-test-app-dev-www-unknown-host.example.com" || true",
957
+ "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" disable "pan-test-app/www" "https://$(printf %s "pan-test-app-dev-www-$CL_dev_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" || true",
901
958
  "set -e",
959
+ "echo "CL_GITLAB_ENVIRONMENT_URL=https://$(printf %s "pan-test-app-dev-www-$CL_dev_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" >> gitlab_environment.env",
902
960
  ],
903
961
  "stage": "stop dev",
904
962
  "variables": {
905
- "CLOUDSDK_CORE_DISABLE_PROMPTS": "1",
906
963
  "GIT_STRATEGY": "none",
907
964
  "KUBERNETES_CPU_REQUEST": "0.5",
908
965
  "KUBERNETES_MEMORY_LIMIT": "400Mi",
@@ -922,12 +979,14 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
922
979
  ],
923
980
  },
924
981
  "script": [
982
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
983
+ "export APP_PATH="www"",
984
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
925
985
  "cd www",
926
986
  "yarn npm audit --environment production",
927
987
  ],
928
988
  "stage": "test",
929
989
  "variables": {
930
- "APP_PATH": "www",
931
990
  "KUBERNETES_CPU_REQUEST": "0.5",
932
991
  "KUBERNETES_MEMORY_LIMIT": "4Gi",
933
992
  "KUBERNETES_MEMORY_REQUEST": "2Gi",
@@ -961,6 +1020,9 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
961
1020
  ],
962
1021
  },
963
1022
  "script": [
1023
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
1024
+ "export APP_PATH="www"",
1025
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
964
1026
  "echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"",
965
1027
  "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
966
1028
  "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
@@ -977,7 +1039,6 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
977
1039
  ],
978
1040
  "stage": "test",
979
1041
  "variables": {
980
- "APP_PATH": "www",
981
1042
  "KUBERNETES_CPU_REQUEST": "0.5",
982
1043
  "KUBERNETES_MEMORY_LIMIT": "4Gi",
983
1044
  "KUBERNETES_MEMORY_REQUEST": "2Gi",
@@ -1001,6 +1062,8 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
1001
1062
  ],
1002
1063
  },
1003
1064
  "script": [
1065
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
1066
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
1004
1067
  "trivy fs --quiet --format cyclonedx --output "__sbom.json" www",
1005
1068
  ],
1006
1069
  "stage": "build",
@@ -1053,7 +1116,7 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
1053
1116
  ],
1054
1117
  "variables": {
1055
1118
  "FF_USE_FASTZIP": "true",
1056
- "GIT_DEPTH": 1,
1119
+ "GIT_DEPTH": "1",
1057
1120
  },
1058
1121
  "workflow": {
1059
1122
  "rules": [
@@ -1111,6 +1174,9 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
1111
1174
  ],
1112
1175
  },
1113
1176
  "script": [
1177
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
1178
+ "export APP_PATH="api"",
1179
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
1114
1180
  "echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"",
1115
1181
  "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
1116
1182
  "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
@@ -1127,7 +1193,6 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
1127
1193
  ],
1128
1194
  "stage": "test",
1129
1195
  "variables": {
1130
- "APP_PATH": "api",
1131
1196
  "KUBERNETES_CPU_REQUEST": "0.5",
1132
1197
  "KUBERNETES_MEMORY_LIMIT": "4Gi",
1133
1198
  "KUBERNETES_MEMORY_REQUEST": "2Gi",
@@ -1180,7 +1245,33 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
1180
1245
  ],
1181
1246
  },
1182
1247
  "script": [
1183
- "echo '{"id":"some-id","time":"01-01-2023 12:13:14"}' > api/__build_info.json",
1248
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
1249
+ "export ENV_SHORT="review"",
1250
+ "export APP_DIR="api"",
1251
+ "export ENV_TYPE="review"",
1252
+ "export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
1253
+ "export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
1254
+ "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")"",
1255
+ "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)}')"",
1256
+ "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)}')"",
1257
+ "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)}')"",
1258
+ "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)}')"",
1259
+ "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)}')"",
1260
+ "export CLOUD_SQL_INSTANCE_CONNECTION_NAME="projectId:region:instancename"",
1261
+ "export DB_NAME="pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api"",
1262
+ "export DB_USER="my-user"",
1263
+ "export DB_PASSWORD="$CL_review_api_DB_PASSWORD"",
1264
+ "export DATABASE_URL="postgresql://$DB_USER:$DB_PASSWORD@localhost/$DB_NAME?host=/cloudsql/$CLOUD_SQL_INSTANCE_CONNECTION_NAME"",
1265
+ "export DATABASE_JDBC_URL="jdbc:postgresql:///$DB_NAME?cloudSqlInstance=$CLOUD_SQL_INSTANCE_CONNECTION_NAME&socketFactory=com.google.cloud.sql.postgres.SocketFactory&user=$DB_USER&password=$DB_PASSWORD"",
1266
+ "export CLOUD_RUN_JOB_TRIGGER_URL_migration="https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/jobs/$(printf %s \\"pan-test-app-review-$([ -n \\"$CI_MERGE_REQUEST_IID\\" ] && echo \\"mr$CI_MERGE_REQUEST_IID\\" || { [ -n \\"$CI_COMMIT_REF_SLUG\\" ] && echo \\"$CI_COMMIT_REF_SLUG\\" || echo \\"unknown\\"; })-api\\" | awk '{print tolower($0)}')-migration:run"",
1267
+ "export CLOUD_RUN_JOB_TRIGGER_URL_send_reminders="https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/jobs/$(printf %s \\"pan-test-app-review-$([ -n \\"$CI_MERGE_REQUEST_IID\\" ] && echo \\"mr$CI_MERGE_REQUEST_IID\\" || { [ -n \\"$CI_COMMIT_REF_SLUG\\" ] && echo \\"$CI_COMMIT_REF_SLUG\\" || echo \\"unknown\\"; })-api\\" | awk '{print tolower($0)}')-send-reminders:run"",
1268
+ "export DEPLOY_CLOUD_RUN_PROJECT_ID="google-project-id"",
1269
+ "export DEPLOY_CLOUD_RUN_REGION="europe-west6"",
1270
+ "export GCLOUD_DEPLOY_credentialsKey="$CL_review_api_GCLOUD_DEPLOY_credentialsKey"",
1271
+ "export GCLOUD_RUN_canonicalHostSuffix="$CL_review_api_GCLOUD_RUN_canonicalHostSuffix"",
1272
+ "export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOST\\",\\"ROOT_URL\\",\\"HOST_INTERNAL\\",\\"HOST_CANONICAL\\",\\"ROOT_URL_INTERNAL\\",\\"CLOUD_SQL_INSTANCE_CONNECTION_NAME\\",\\"DB_NAME\\",\\"DB_USER\\",\\"DB_PASSWORD\\",\\"DATABASE_URL\\",\\"DATABASE_JDBC_URL\\",\\"CLOUD_RUN_JOB_TRIGGER_URL_migration\\",\\"CLOUD_RUN_JOB_TRIGGER_URL_send_reminders\\",\\"DEPLOY_CLOUD_RUN_PROJECT_ID\\",\\"DEPLOY_CLOUD_RUN_REGION\\",\\"GCLOUD_DEPLOY_credentialsKey\\",\\"GCLOUD_RUN_canonicalHostSuffix\\"]"",
1273
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
1274
+ "echo '{"id":"$(git describe --tags 2>/dev/null || git rev-parse HEAD)","time":"$CI_JOB_STARTED_AT"}' > api/__build_info.json",
1184
1275
  "echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"",
1185
1276
  "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
1186
1277
  "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
@@ -1197,33 +1288,9 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
1197
1288
  ],
1198
1289
  "stage": "build",
1199
1290
  "variables": {
1200
- "APP_DIR": "api",
1201
- "BUILD_INFO_BUILD_TIME": "01-01-2023 12:13:14",
1202
- "BUILD_INFO_CURRENT_VERSION": "3.2.1",
1203
- "BUILD_INFO_ID": "some-id",
1204
- "CLOUD_RUN_JOB_TRIGGER_URL_migration": "https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/jobs/pan-test-app-review-mr1234-api-migration:run",
1205
- "CLOUD_RUN_JOB_TRIGGER_URL_send_reminders": "https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/jobs/pan-test-app-review-mr1234-api-send-reminders:run",
1206
- "CLOUD_SQL_INSTANCE_CONNECTION_NAME": "projectId:region:instancename",
1207
- "DATABASE_JDBC_URL": "jdbc:postgresql:///$DB_NAME?cloudSqlInstance=$CLOUD_SQL_INSTANCE_CONNECTION_NAME&socketFactory=com.google.cloud.sql.postgres.SocketFactory&user=$DB_USER&password=$DB_PASSWORD",
1208
- "DATABASE_URL": "postgresql://$DB_USER:$DB_PASSWORD@localhost/$DB_NAME?host=/cloudsql/$CLOUD_SQL_INSTANCE_CONNECTION_NAME",
1209
- "DB_NAME": "pan-test-app-review-mr1234-api",
1210
- "DB_PASSWORD": "$CL_review_api_DB_PASSWORD",
1211
- "DB_USER": "my-user",
1212
- "DEPLOY_CLOUD_RUN_PROJECT_ID": "google-project-id",
1213
- "DEPLOY_CLOUD_RUN_REGION": "europe-west6",
1214
- "ENV_SHORT": "review",
1215
- "ENV_TYPE": "review",
1216
- "GCLOUD_DEPLOY_credentialsKey": "$CL_review_api_GCLOUD_DEPLOY_credentialsKey",
1217
- "GCLOUD_RUN_canonicalHostSuffix": "$CL_review_api_GCLOUD_RUN_canonicalHostSuffix",
1218
- "HOST": "pan-test-app-review-mr1234-api-unknown-host.example.com",
1219
- "HOST_CANONICAL": "pan-test-app-review-mr1234-api-unknown-host.example.com",
1220
- "HOST_INTERNAL": "pan-test-app-review-mr1234-api-unknown-host.example.com",
1221
1291
  "KUBERNETES_CPU_REQUEST": "0.5",
1222
1292
  "KUBERNETES_MEMORY_LIMIT": "4Gi",
1223
1293
  "KUBERNETES_MEMORY_REQUEST": "2Gi",
1224
- "ROOT_URL": "https://pan-test-app-review-mr1234-api-unknown-host.example.com",
1225
- "ROOT_URL_INTERNAL": "https://pan-test-app-review-mr1234-api-unknown-host.example.com",
1226
- "_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","CLOUD_SQL_INSTANCE_CONNECTION_NAME","DB_NAME","DB_USER","DB_PASSWORD","DATABASE_URL","DATABASE_JDBC_URL","CLOUD_RUN_JOB_TRIGGER_URL_migration","CLOUD_RUN_JOB_TRIGGER_URL_send_reminders","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]",
1227
1294
  },
1228
1295
  },
1229
1296
  "api 🔨 docker | review ": {
@@ -1249,6 +1316,21 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
1249
1316
  ],
1250
1317
  },
1251
1318
  "script": [
1319
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
1320
+ "export APP_DIR="api"",
1321
+ "export DOCKER_DIR="."",
1322
+ "export DOCKER_REGISTRY="europe-west6-docker.pkg.dev"",
1323
+ "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"; })"",
1324
+ "export DOCKER_CACHE_IMAGE="europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/api"",
1325
+ "export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"",
1326
+ "export DOCKER_COPY_AND_INSTALL_APP="COPY --chown=node:node $APP_DIR .
1327
+ RUN yarn plugin import workspace-tools
1328
+ RUN yarn workspaces focus --production && yarn rebuild"",
1329
+ "export DOCKER_COPY_WORKSPACE_FILES="COPY --chown=node:node api/package.json /app/api/package.json
1330
+ COPY --chown=node:node api/yarn.lock /app/api/yarn.lock
1331
+ COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
1332
+ COPY --chown=node:node .yarn /app/.yarn"",
1333
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
1252
1334
  "ensureNodeDockerfile",
1253
1335
  "echo -e "\\e[0Ksection_start:$(date +%s):docker-login[collapsed=true]\\r\\e[0KDocker Login"",
1254
1336
  "gcloud auth activate-service-account --key-file=<(echo "$CL_review_api_GCLOUD_DEPLOY_credentialsKey")",
@@ -1273,24 +1355,9 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
1273
1355
  ],
1274
1356
  "stage": "build",
1275
1357
  "variables": {
1276
- "APP_DIR": "api",
1277
- "DOCKERFILE_ADDITIONS": undefined,
1278
- "DOCKERFILE_ADDITIONS_END": undefined,
1279
1358
  "DOCKER_BUILDKIT": "1",
1280
- "DOCKER_CACHE_IMAGE": "europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/api",
1281
- "DOCKER_COPY_AND_INSTALL_APP": "COPY --chown=node:node $APP_DIR .
1282
- RUN yarn plugin import workspace-tools
1283
- RUN yarn workspaces focus --production && yarn rebuild",
1284
- "DOCKER_COPY_WORKSPACE_FILES": "COPY --chown=node:node api/package.json /app/api/package.json
1285
- COPY --chown=node:node api/yarn.lock /app/api/yarn.lock
1286
- COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
1287
- COPY --chown=node:node .yarn /app/.yarn",
1288
- "DOCKER_DIR": ".",
1289
1359
  "DOCKER_DRIVER": "overlay2",
1290
1360
  "DOCKER_HOST": "tcp://0.0.0.0:2375",
1291
- "DOCKER_IMAGE": "europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/review/api/mr1234",
1292
- "DOCKER_IMAGE_TAG": "$CI_COMMIT_SHA",
1293
- "DOCKER_REGISTRY": "europe-west6-docker.pkg.dev",
1294
1361
  "DOCKER_TLS_CERTDIR": "",
1295
1362
  "KUBERNETES_CPU_REQUEST": "0.5",
1296
1363
  "KUBERNETES_MEMORY_LIMIT": "2Gi",
@@ -1300,15 +1367,15 @@ COPY --chown=node:node .yarn /app/.yarn",
1300
1367
  "api 🚀 Deploy | review ": {
1301
1368
  "allow_failure": false,
1302
1369
  "artifacts": {
1303
- "paths": [
1304
- "____envvars.yaml",
1305
- ],
1370
+ "reports": {
1371
+ "dotenv": "gitlab_environment.env",
1372
+ },
1306
1373
  },
1307
1374
  "environment": {
1308
1375
  "auto_stop_in": "1 week",
1309
- "name": "review/some-commit/api",
1376
+ "name": "review/$CI_COMMIT_REF_NAME/api",
1310
1377
  "on_stop": "api 🛑 Stop ⚠️ | review ",
1311
- "url": "https://pan-test-app-review-mr1234-api-unknown-host.example.com",
1378
+ "url": "$CL_GITLAB_ENVIRONMENT_URL",
1312
1379
  },
1313
1380
  "image": "path/to/docker/gcloud:the-version",
1314
1381
  "interruptible": true,
@@ -1351,120 +1418,144 @@ COPY --chown=node:node .yarn /app/.yarn",
1351
1418
  },
1352
1419
  ],
1353
1420
  "script": [
1421
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
1422
+ "export ENV_SHORT="review"",
1423
+ "export APP_DIR="api"",
1424
+ "export ENV_TYPE="review"",
1425
+ "export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
1426
+ "export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
1427
+ "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")"",
1428
+ "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)}')"",
1429
+ "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)}')"",
1430
+ "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)}')"",
1431
+ "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)}')"",
1432
+ "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)}')"",
1433
+ "export CLOUD_SQL_INSTANCE_CONNECTION_NAME="projectId:region:instancename"",
1434
+ "export DB_NAME="pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api"",
1435
+ "export DB_USER="my-user"",
1436
+ "export DB_PASSWORD="$CL_review_api_DB_PASSWORD"",
1437
+ "export DATABASE_URL="postgresql://$DB_USER:$DB_PASSWORD@localhost/$DB_NAME?host=/cloudsql/$CLOUD_SQL_INSTANCE_CONNECTION_NAME"",
1438
+ "export DATABASE_JDBC_URL="jdbc:postgresql:///$DB_NAME?cloudSqlInstance=$CLOUD_SQL_INSTANCE_CONNECTION_NAME&socketFactory=com.google.cloud.sql.postgres.SocketFactory&user=$DB_USER&password=$DB_PASSWORD"",
1439
+ "export CLOUD_RUN_JOB_TRIGGER_URL_migration="https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/jobs/$(printf %s \\"pan-test-app-review-$([ -n \\"$CI_MERGE_REQUEST_IID\\" ] && echo \\"mr$CI_MERGE_REQUEST_IID\\" || { [ -n \\"$CI_COMMIT_REF_SLUG\\" ] && echo \\"$CI_COMMIT_REF_SLUG\\" || echo \\"unknown\\"; })-api\\" | awk '{print tolower($0)}')-migration:run"",
1440
+ "export CLOUD_RUN_JOB_TRIGGER_URL_send_reminders="https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/jobs/$(printf %s \\"pan-test-app-review-$([ -n \\"$CI_MERGE_REQUEST_IID\\" ] && echo \\"mr$CI_MERGE_REQUEST_IID\\" || { [ -n \\"$CI_COMMIT_REF_SLUG\\" ] && echo \\"$CI_COMMIT_REF_SLUG\\" || echo \\"unknown\\"; })-api\\" | awk '{print tolower($0)}')-send-reminders:run"",
1441
+ "export DEPLOY_CLOUD_RUN_PROJECT_ID="google-project-id"",
1442
+ "export DEPLOY_CLOUD_RUN_REGION="europe-west6"",
1443
+ "export GCLOUD_DEPLOY_credentialsKey="$CL_review_api_GCLOUD_DEPLOY_credentialsKey"",
1444
+ "export GCLOUD_RUN_canonicalHostSuffix="$CL_review_api_GCLOUD_RUN_canonicalHostSuffix"",
1445
+ "export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOST\\",\\"ROOT_URL\\",\\"HOST_INTERNAL\\",\\"HOST_CANONICAL\\",\\"ROOT_URL_INTERNAL\\",\\"CLOUD_SQL_INSTANCE_CONNECTION_NAME\\",\\"DB_NAME\\",\\"DB_USER\\",\\"DB_PASSWORD\\",\\"DATABASE_URL\\",\\"DATABASE_JDBC_URL\\",\\"CLOUD_RUN_JOB_TRIGGER_URL_migration\\",\\"CLOUD_RUN_JOB_TRIGGER_URL_send_reminders\\",\\"DEPLOY_CLOUD_RUN_PROJECT_ID\\",\\"DEPLOY_CLOUD_RUN_REGION\\",\\"GCLOUD_DEPLOY_credentialsKey\\",\\"GCLOUD_RUN_canonicalHostSuffix\\"]"",
1446
+ "export DOCKER_REGISTRY="europe-west6-docker.pkg.dev"",
1447
+ "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"; })"",
1448
+ "export DOCKER_CACHE_IMAGE="europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/api"",
1449
+ "export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"",
1450
+ "export CLOUDSDK_CORE_DISABLE_PROMPTS="1"",
1451
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
1354
1452
  "echo -e "\\e[0Ksection_start:$(date +%s):prepare[collapsed=true]\\r\\e[0KPrepare..."",
1355
1453
  "gcloud auth activate-service-account --key-file=<(echo "$CL_review_api_GCLOUD_DEPLOY_credentialsKey")",
1356
1454
  "export GCLOUD_PROJECT_NUMBER=$(gcloud projects describe google-project-id --format="value(projectNumber)")",
1357
1455
  "echo "GCLOUD_PROJECT_NUMBER: $GCLOUD_PROJECT_NUMBER"",
1358
1456
  "echo -e "\\e[0Ksection_end:$(date +%s):prepare\\r\\e[0K"",
1457
+ "echo -e "\\e[0Ksection_start:$(date +%s):writeenvvars[collapsed=true]\\r\\e[0KWrite env vars to file"",
1458
+ "cat > ____envvars.yaml <<EOF
1459
+ ENV_SHORT: |-
1460
+ review
1461
+ APP_DIR: |-
1462
+ api
1463
+ ENV_TYPE: |-
1464
+ review
1465
+ BUILD_INFO_BUILD_ID: |-
1466
+ $(printf %s "$(git describe --tags 2>/dev/null || git rev-parse HEAD)" | sed 's/^/ /')
1467
+ BUILD_INFO_BUILD_TIME: |-
1468
+ $(printf %s "$CI_JOB_STARTED_AT" | sed 's/^/ /')
1469
+ BUILD_INFO_CURRENT_VERSION: |-
1470
+ $(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/^/ /')
1471
+ HOST: |-
1472
+ $(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/^/ /')
1473
+ ROOT_URL: |-
1474
+ $(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/^/ /')
1475
+ HOST_INTERNAL: |-
1476
+ $(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/^/ /')
1477
+ HOST_CANONICAL: |-
1478
+ $(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/^/ /')
1479
+ ROOT_URL_INTERNAL: |-
1480
+ $(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/^/ /')
1481
+ CLOUD_SQL_INSTANCE_CONNECTION_NAME: |-
1482
+ projectId:region:instancename
1483
+ DB_NAME: |-
1484
+ $(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" | sed 's/^/ /')
1485
+ DB_USER: |-
1486
+ my-user
1487
+ DB_PASSWORD: |-
1488
+ $(printf %s "$CL_review_api_DB_PASSWORD" | sed 's/^/ /')
1489
+ DATABASE_URL: |-
1490
+ postgresql://$DB_USER:$DB_PASSWORD@localhost/$DB_NAME?host=/cloudsql/$CLOUD_SQL_INSTANCE_CONNECTION_NAME
1491
+ DATABASE_JDBC_URL: |-
1492
+ jdbc:postgresql:///$DB_NAME?cloudSqlInstance=$CLOUD_SQL_INSTANCE_CONNECTION_NAME&socketFactory=com.google.cloud.sql.postgres.SocketFactory&user=$DB_USER&password=$DB_PASSWORD
1493
+ CLOUD_RUN_JOB_TRIGGER_URL_migration: |-
1494
+ https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/jobs/$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api" | awk '{print tolower($0)}')-migration:run
1495
+ CLOUD_RUN_JOB_TRIGGER_URL_send_reminders: |-
1496
+ https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/jobs/$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api" | awk '{print tolower($0)}')-send-reminders:run
1497
+ DEPLOY_CLOUD_RUN_PROJECT_ID: |-
1498
+ google-project-id
1499
+ DEPLOY_CLOUD_RUN_REGION: |-
1500
+ europe-west6
1501
+ GCLOUD_RUN_canonicalHostSuffix: |-
1502
+ $(printf %s "$CL_review_api_GCLOUD_RUN_canonicalHostSuffix" | sed 's/^/ /')
1503
+ _ALL_ENV_VAR_KEYS: |-
1504
+ ["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","HOST_INTERNAL","HOST_CANONICAL","ROOT_URL_INTERNAL","CLOUD_SQL_INSTANCE_CONNECTION_NAME","DB_NAME","DB_USER","DB_PASSWORD","DATABASE_URL","DATABASE_JDBC_URL","CLOUD_RUN_JOB_TRIGGER_URL_migration","CLOUD_RUN_JOB_TRIGGER_URL_send_reminders","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]
1505
+
1506
+ EOF
1507
+ ",
1508
+ "echo -e "\\e[0Ksection_end:$(date +%s):writeenvvars\\r\\e[0K"",
1359
1509
  "echo -e "\\e[0Ksection_start:$(date +%s):deploy[collapsed=true]\\r\\e[0KDeploy to cloud run"",
1360
- "echo "$ENV_VARS" > ____envvars.yaml",
1361
1510
  "set +e",
1362
1511
  "echo "ensuring Database..."",
1363
- "gcloud sql databases create pan-test-app-review-mr1234-api --instance=instancename --project projectId",
1512
+ "gcloud sql databases create 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 --instance=instancename --project projectId",
1364
1513
  "set -e",
1365
1514
  "set +e",
1366
- "gcloud scheduler jobs create http pan-test-app-review-mr1234-api-send-reminders-scheduler --project=google-project-id --location=europe-west6 --schedule="0 * * * *" --max-retry-attempts=0 --uri="https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/jobs/pan-test-app-review-mr1234-api-send-reminders:run" --http-method=POST --oauth-service-account-email=$GCLOUD_PROJECT_NUMBER-compute@developer.gserviceaccount.com",
1515
+ "gcloud scheduler jobs create http $(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api" | awk '{print tolower($0)}')-send-reminders-scheduler --project=google-project-id --location=europe-west6 --schedule="0 * * * *" --max-retry-attempts=0 --uri="https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/jobs/$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api" | awk '{print tolower($0)}')-send-reminders:run" --http-method=POST --oauth-service-account-email=$GCLOUD_PROJECT_NUMBER-compute@developer.gserviceaccount.com",
1367
1516
  "set -e",
1368
- "gcloud scheduler jobs update http pan-test-app-review-mr1234-api-send-reminders-scheduler --project=google-project-id --location=europe-west6 --schedule="0 * * * *" --max-retry-attempts=0 --uri="https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/jobs/pan-test-app-review-mr1234-api-send-reminders:run" --http-method=POST --oauth-service-account-email=$GCLOUD_PROJECT_NUMBER-compute@developer.gserviceaccount.com",
1517
+ "gcloud scheduler jobs update http $(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api" | awk '{print tolower($0)}')-send-reminders-scheduler --project=google-project-id --location=europe-west6 --schedule="0 * * * *" --max-retry-attempts=0 --uri="https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/jobs/$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api" | awk '{print tolower($0)}')-send-reminders:run" --http-method=POST --oauth-service-account-email=$GCLOUD_PROJECT_NUMBER-compute@developer.gserviceaccount.com",
1369
1518
  "set +e",
1370
- "gcloud run jobs create pan-test-app-review-mr1234-api-migration --command="yarn,migrate" --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 --set-cloudsql-instances=projectId:region:instancename --labels=customer-name=pan,component-name=api,app-name=test-app,env-type=review,env-name=review,build-type=node,cloud-run-job-name=pan-test-app-review-mr1234-api-migration --memory=512Mi --task-timeout=10m --parallelism=1 --env-vars-file=____envvars.yaml --max-retries=0",
1519
+ "gcloud run jobs create $(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api" | awk '{print tolower($0)}')-migration --command="yarn,migrate" --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 --set-cloudsql-instances=projectId:region:instancename --labels=customer-name=pan,component-name=api,app-name=test-app,env-type=review,env-name=review,build-type=node,cloud-run-job-name=$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api" | awk '{print tolower($0)}')-migration --memory=512Mi --task-timeout=10m --parallelism=1 --env-vars-file=____envvars.yaml --max-retries=0",
1371
1520
  "set -e",
1372
- "gcloud run jobs update pan-test-app-review-mr1234-api-migration --command="yarn,migrate" --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 --set-cloudsql-instances=projectId:region:instancename --labels=customer-name=pan,component-name=api,app-name=test-app,env-type=review,env-name=review,build-type=node,cloud-run-job-name=pan-test-app-review-mr1234-api-migration --memory=512Mi --task-timeout=10m --parallelism=1 --env-vars-file=____envvars.yaml --max-retries=0 ",
1521
+ "gcloud run jobs update $(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api" | awk '{print tolower($0)}')-migration --command="yarn,migrate" --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 --set-cloudsql-instances=projectId:region:instancename --labels=customer-name=pan,component-name=api,app-name=test-app,env-type=review,env-name=review,build-type=node,cloud-run-job-name=$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api" | awk '{print tolower($0)}')-migration --memory=512Mi --task-timeout=10m --parallelism=1 --env-vars-file=____envvars.yaml --max-retries=0 ",
1373
1522
  "set +e",
1374
- "gcloud run jobs create pan-test-app-review-mr1234-api-send-reminders --command="yarn,job:send-reminders" --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 --set-cloudsql-instances=projectId:region:instancename --labels=customer-name=pan,component-name=api,app-name=test-app,env-type=review,env-name=review,build-type=node,cloud-run-job-name=pan-test-app-review-mr1234-api-send-reminders --memory=512Mi --task-timeout=15m --parallelism=1 --env-vars-file=____envvars.yaml --max-retries=0",
1523
+ "gcloud run jobs create $(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api" | awk '{print tolower($0)}')-send-reminders --command="yarn,job:send-reminders" --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 --set-cloudsql-instances=projectId:region:instancename --labels=customer-name=pan,component-name=api,app-name=test-app,env-type=review,env-name=review,build-type=node,cloud-run-job-name=$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api" | awk '{print tolower($0)}')-send-reminders --memory=512Mi --task-timeout=15m --parallelism=1 --env-vars-file=____envvars.yaml --max-retries=0",
1375
1524
  "set -e",
1376
- "gcloud run jobs update pan-test-app-review-mr1234-api-send-reminders --command="yarn,job:send-reminders" --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 --set-cloudsql-instances=projectId:region:instancename --labels=customer-name=pan,component-name=api,app-name=test-app,env-type=review,env-name=review,build-type=node,cloud-run-job-name=pan-test-app-review-mr1234-api-send-reminders --memory=512Mi --task-timeout=15m --parallelism=1 --env-vars-file=____envvars.yaml --max-retries=0 ",
1377
- "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 --set-cloudsql-instances=projectId:region:instancename --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=5 --cpu-throttling --allow-unauthenticated --ingress=all --cpu-boost",
1378
- "gcloud run jobs execute pan-test-app-review-mr1234-api-migration --project=google-project-id --region=europe-west6",
1525
+ "gcloud run jobs update $(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api" | awk '{print tolower($0)}')-send-reminders --command="yarn,job:send-reminders" --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 --set-cloudsql-instances=projectId:region:instancename --labels=customer-name=pan,component-name=api,app-name=test-app,env-type=review,env-name=review,build-type=node,cloud-run-job-name=$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api" | awk '{print tolower($0)}')-send-reminders --memory=512Mi --task-timeout=15m --parallelism=1 --env-vars-file=____envvars.yaml --max-retries=0 ",
1526
+ "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 --set-cloudsql-instances=projectId:region:instancename --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=5 --cpu-throttling --allow-unauthenticated --ingress=all --cpu-boost",
1527
+ "gcloud run jobs execute $(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)}')-migration --project=google-project-id --region=europe-west6",
1379
1528
  "echo -e "\\e[0Ksection_end:$(date +%s):deploy\\r\\e[0K"",
1380
1529
  "echo -e "\\e[0Ksection_start:$(date +%s):cleanup[collapsed=true]\\r\\e[0KCleanup"",
1381
- "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",
1382
- "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",
1530
+ "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",
1531
+ "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",
1383
1532
  "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",
1384
1533
  "set +e",
1385
1534
  "gcloud artifacts docker images delete europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/review/api --quiet --delete-tags",
1386
1535
  "set -e",
1387
1536
  "echo -e "\\e[0Ksection_end:$(date +%s):cleanup\\r\\e[0K"",
1388
1537
  "echo Uploading SBOM to Dependency Track",
1389
- "/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",
1390
- ],
1391
- "services": [
1392
- {
1393
- "command": [
1394
- "--tls=false",
1395
- ],
1396
- "name": "docker:24.0.6-dind",
1397
- },
1538
+ "/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",
1539
+ "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",
1398
1540
  ],
1399
1541
  "stage": "deploy review",
1400
1542
  "variables": {
1401
- "APP_DIR": "api",
1402
- "BUILD_INFO_BUILD_TIME": "01-01-2023 12:13:14",
1403
- "BUILD_INFO_CURRENT_VERSION": "3.2.1",
1404
- "BUILD_INFO_ID": "some-id",
1405
- "CLOUDSDK_CORE_DISABLE_PROMPTS": "1",
1406
- "CLOUD_RUN_JOB_TRIGGER_URL_migration": "https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/jobs/pan-test-app-review-mr1234-api-migration:run",
1407
- "CLOUD_RUN_JOB_TRIGGER_URL_send_reminders": "https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/jobs/pan-test-app-review-mr1234-api-send-reminders:run",
1408
- "CLOUD_SQL_INSTANCE_CONNECTION_NAME": "projectId:region:instancename",
1409
- "DATABASE_JDBC_URL": "jdbc:postgresql:///$DB_NAME?cloudSqlInstance=$CLOUD_SQL_INSTANCE_CONNECTION_NAME&socketFactory=com.google.cloud.sql.postgres.SocketFactory&user=$DB_USER&password=$DB_PASSWORD",
1410
- "DATABASE_URL": "postgresql://$DB_USER:$DB_PASSWORD@localhost/$DB_NAME?host=/cloudsql/$CLOUD_SQL_INSTANCE_CONNECTION_NAME",
1411
- "DB_NAME": "pan-test-app-review-mr1234-api",
1412
- "DB_PASSWORD": "$CL_review_api_DB_PASSWORD",
1413
- "DB_USER": "my-user",
1414
- "DEPLOY_CLOUD_RUN_PROJECT_ID": "google-project-id",
1415
- "DEPLOY_CLOUD_RUN_REGION": "europe-west6",
1416
- "DOCKER_BUILDKIT": "1",
1417
- "DOCKER_CACHE_IMAGE": "europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/api",
1418
- "DOCKER_DRIVER": "overlay2",
1419
- "DOCKER_HOST": "tcp://0.0.0.0:2375",
1420
- "DOCKER_IMAGE": "europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/review/api/mr1234",
1421
- "DOCKER_IMAGE_TAG": "$CI_COMMIT_SHA",
1422
- "DOCKER_REGISTRY": "europe-west6-docker.pkg.dev",
1423
- "DOCKER_TLS_CERTDIR": "",
1424
- "ENV_SHORT": "review",
1425
- "ENV_TYPE": "review",
1426
- "ENV_VARS": "ENV_SHORT: 'review'
1427
- APP_DIR: 'api'
1428
- ENV_TYPE: 'review'
1429
- BUILD_INFO_ID: 'some-id'
1430
- BUILD_INFO_BUILD_TIME: '01-01-2023 12:13:14'
1431
- BUILD_INFO_CURRENT_VERSION: '3.2.1'
1432
- HOST: 'pan-test-app-review-mr1234-api-unknown-host.example.com'
1433
- ROOT_URL: 'https://pan-test-app-review-mr1234-api-unknown-host.example.com'
1434
- HOST_CANONICAL: 'pan-test-app-review-mr1234-api-unknown-host.example.com'
1435
- ROOT_URL_INTERNAL: 'https://pan-test-app-review-mr1234-api-unknown-host.example.com'
1436
- HOST_INTERNAL: 'pan-test-app-review-mr1234-api-unknown-host.example.com'
1437
- CLOUD_SQL_INSTANCE_CONNECTION_NAME: 'projectId:region:instancename'
1438
- DB_NAME: 'pan-test-app-review-mr1234-api'
1439
- DB_USER: 'my-user'
1440
- DB_PASSWORD: '$CL_review_api_DB_PASSWORD'
1441
- DATABASE_URL: 'postgresql://$DB_USER:$DB_PASSWORD@localhost/$DB_NAME?host=/cloudsql/$CLOUD_SQL_INSTANCE_CONNECTION_NAME'
1442
- DATABASE_JDBC_URL: 'jdbc:postgresql:///$DB_NAME?cloudSqlInstance=$CLOUD_SQL_INSTANCE_CONNECTION_NAME&socketFactory=com.google.cloud.sql.postgres.SocketFactory&user=$DB_USER&password=$DB_PASSWORD'
1443
- CLOUD_RUN_JOB_TRIGGER_URL_migration: 'https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/jobs/pan-test-app-review-mr1234-api-migration:run'
1444
- CLOUD_RUN_JOB_TRIGGER_URL_send_reminders: 'https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/jobs/pan-test-app-review-mr1234-api-send-reminders:run'
1445
- DEPLOY_CLOUD_RUN_PROJECT_ID: 'google-project-id'
1446
- DEPLOY_CLOUD_RUN_REGION: 'europe-west6'
1447
- GCLOUD_RUN_canonicalHostSuffix: '$CL_review_api_GCLOUD_RUN_canonicalHostSuffix'
1448
- _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","CLOUD_SQL_INSTANCE_CONNECTION_NAME","DB_NAME","DB_USER","DB_PASSWORD","DATABASE_URL","DATABASE_JDBC_URL","CLOUD_RUN_JOB_TRIGGER_URL_migration","CLOUD_RUN_JOB_TRIGGER_URL_send_reminders","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]'
1449
- ",
1450
- "GCLOUD_DEPLOY_credentialsKey": "$CL_review_api_GCLOUD_DEPLOY_credentialsKey",
1451
- "GCLOUD_RUN_canonicalHostSuffix": "$CL_review_api_GCLOUD_RUN_canonicalHostSuffix",
1452
- "HOST": "pan-test-app-review-mr1234-api-unknown-host.example.com",
1453
- "HOST_CANONICAL": "pan-test-app-review-mr1234-api-unknown-host.example.com",
1454
- "HOST_INTERNAL": "pan-test-app-review-mr1234-api-unknown-host.example.com",
1455
1543
  "KUBERNETES_CPU_REQUEST": "0.5",
1456
1544
  "KUBERNETES_MEMORY_LIMIT": "400Mi",
1457
1545
  "KUBERNETES_MEMORY_REQUEST": "200Mi",
1458
- "ROOT_URL": "https://pan-test-app-review-mr1234-api-unknown-host.example.com",
1459
- "ROOT_URL_INTERNAL": "https://pan-test-app-review-mr1234-api-unknown-host.example.com",
1460
- "_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","CLOUD_SQL_INSTANCE_CONNECTION_NAME","DB_NAME","DB_USER","DB_PASSWORD","DATABASE_URL","DATABASE_JDBC_URL","CLOUD_RUN_JOB_TRIGGER_URL_migration","CLOUD_RUN_JOB_TRIGGER_URL_send_reminders","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]",
1461
1546
  },
1462
1547
  },
1463
1548
  "api 🛑 Stop ⚠️ | review ": {
1549
+ "allow_failure": true,
1550
+ "artifacts": {
1551
+ "reports": {
1552
+ "dotenv": "gitlab_environment.env",
1553
+ },
1554
+ },
1464
1555
  "environment": {
1465
1556
  "action": "stop",
1466
- "name": "review/some-commit/api",
1467
- "url": "https://pan-test-app-review-mr1234-api-unknown-host.example.com",
1557
+ "name": "review/$CI_COMMIT_REF_NAME/api",
1558
+ "url": "$CL_GITLAB_ENVIRONMENT_URL",
1468
1559
  },
1469
1560
  "image": "path/to/docker/gcloud:the-version",
1470
1561
  "interruptible": true,
@@ -1478,45 +1569,46 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
1478
1569
  },
1479
1570
  "rules": [
1480
1571
  {
1481
- "allow_failure": true,
1482
1572
  "if": "$CI_COMMIT_BRANCH =~ /^[0-9]+\\.([0-9]+|x)\\.x$/",
1483
1573
  "when": "on_success",
1484
1574
  },
1485
1575
  {
1486
- "allow_failure": true,
1487
1576
  "when": "manual",
1488
1577
  },
1489
1578
  ],
1490
1579
  "script": [
1580
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
1581
+ "export CLOUDSDK_CORE_DISABLE_PROMPTS="1"",
1582
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
1491
1583
  "set +e",
1492
1584
  "gcloud auth activate-service-account --key-file=<(echo "$CL_review_api_GCLOUD_DEPLOY_credentialsKey")",
1493
- "gcloud run services delete pan-test-app-review-mr1234-api --project=google-project-id --region=europe-west6",
1494
- "gcloud scheduler jobs delete pan-test-app-review-mr1234-api-send-reminders-scheduler --project=google-project-id --location=europe-west6",
1495
- "gcloud run jobs executions list --project=google-project-id --region=europe-west6 --job pan-test-app-review-mr1234-api-migration --format="value(name)" | xargs -I {} gcloud run jobs executions delete {} --quiet --project=google-project-id --region=europe-west6",
1496
- "gcloud run jobs delete pan-test-app-review-mr1234-api-migration --project=google-project-id --region=europe-west6",
1497
- "gcloud run jobs executions list --project=google-project-id --region=europe-west6 --job pan-test-app-review-mr1234-api-send-reminders --format="value(name)" | xargs -I {} gcloud run jobs executions delete {} --quiet --project=google-project-id --region=europe-west6",
1498
- "gcloud run jobs delete pan-test-app-review-mr1234-api-send-reminders --project=google-project-id --region=europe-west6",
1499
- "echo "deleting database pan-test-app-review-mr1234-api..."",
1585
+ "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",
1586
+ "gcloud scheduler jobs delete $(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api" | awk '{print tolower($0)}')-send-reminders-scheduler --project=google-project-id --location=europe-west6",
1587
+ "gcloud run jobs executions list --project=google-project-id --region=europe-west6 --job $(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api" | awk '{print tolower($0)}')-migration --format="value(name)" | xargs -I {} gcloud run jobs executions delete {} --quiet --project=google-project-id --region=europe-west6",
1588
+ "gcloud run jobs delete $(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api" | awk '{print tolower($0)}')-migration --project=google-project-id --region=europe-west6",
1589
+ "gcloud run jobs executions list --project=google-project-id --region=europe-west6 --job $(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api" | awk '{print tolower($0)}')-send-reminders --format="value(name)" | xargs -I {} gcloud run jobs executions delete {} --quiet --project=google-project-id --region=europe-west6",
1590
+ "gcloud run jobs delete $(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api" | awk '{print tolower($0)}')-send-reminders --project=google-project-id --region=europe-west6",
1591
+ "echo "deleting database 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..."",
1500
1592
  "echo "👆 this can take multiple attemps (3-5min), because google cloud run may still have a connection to the database after the cloud run service is shut down"",
1501
1593
  "
1502
- until gcloud sql databases delete pan-test-app-review-mr1234-api --instance=instancename --project projectId
1594
+ until gcloud sql databases delete 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 --instance=instancename --project projectId
1503
1595
  do
1504
1596
  echo "Trying again."
1505
1597
  sleep 10
1506
1598
  done
1507
1599
  ",
1508
- "gcloud artifacts docker images delete europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/review/api/mr1234 --quiet --delete-tags",
1600
+ "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",
1509
1601
  "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",
1510
1602
  "set +e",
1511
1603
  "gcloud artifacts docker images delete europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/review/api --quiet --delete-tags",
1512
1604
  "set -e",
1513
1605
  "echo Disabling component in Dependency Track",
1514
- "/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",
1606
+ "/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",
1515
1607
  "set -e",
1608
+ "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",
1516
1609
  ],
1517
1610
  "stage": "stop review",
1518
1611
  "variables": {
1519
- "CLOUDSDK_CORE_DISABLE_PROMPTS": "1",
1520
1612
  "GIT_STRATEGY": "none",
1521
1613
  "KUBERNETES_CPU_REQUEST": "0.5",
1522
1614
  "KUBERNETES_MEMORY_LIMIT": "400Mi",
@@ -1536,12 +1628,14 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
1536
1628
  ],
1537
1629
  },
1538
1630
  "script": [
1631
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
1632
+ "export APP_PATH="api"",
1633
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
1539
1634
  "cd api",
1540
1635
  "yarn npm audit --environment production",
1541
1636
  ],
1542
1637
  "stage": "test",
1543
1638
  "variables": {
1544
- "APP_PATH": "api",
1545
1639
  "KUBERNETES_CPU_REQUEST": "0.5",
1546
1640
  "KUBERNETES_MEMORY_LIMIT": "4Gi",
1547
1641
  "KUBERNETES_MEMORY_REQUEST": "2Gi",
@@ -1575,6 +1669,9 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
1575
1669
  ],
1576
1670
  },
1577
1671
  "script": [
1672
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
1673
+ "export APP_PATH="api"",
1674
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
1578
1675
  "echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"",
1579
1676
  "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
1580
1677
  "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
@@ -1591,7 +1688,6 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
1591
1688
  ],
1592
1689
  "stage": "test",
1593
1690
  "variables": {
1594
- "APP_PATH": "api",
1595
1691
  "KUBERNETES_CPU_REQUEST": "0.5",
1596
1692
  "KUBERNETES_MEMORY_LIMIT": "4Gi",
1597
1693
  "KUBERNETES_MEMORY_REQUEST": "2Gi",
@@ -1615,6 +1711,8 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
1615
1711
  ],
1616
1712
  },
1617
1713
  "script": [
1714
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
1715
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
1618
1716
  "trivy fs --quiet --format cyclonedx --output "__sbom.json" api",
1619
1717
  ],
1620
1718
  "stage": "build",
@@ -1648,6 +1746,9 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
1648
1746
  ],
1649
1747
  },
1650
1748
  "script": [
1749
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
1750
+ "export APP_PATH="www"",
1751
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
1651
1752
  "echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"",
1652
1753
  "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
1653
1754
  "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
@@ -1664,7 +1765,6 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
1664
1765
  ],
1665
1766
  "stage": "test",
1666
1767
  "variables": {
1667
- "APP_PATH": "www",
1668
1768
  "KUBERNETES_CPU_REQUEST": "0.5",
1669
1769
  "KUBERNETES_MEMORY_LIMIT": "4Gi",
1670
1770
  "KUBERNETES_MEMORY_REQUEST": "2Gi",
@@ -1717,7 +1817,26 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
1717
1817
  ],
1718
1818
  },
1719
1819
  "script": [
1720
- "echo '{"id":"some-id","time":"01-01-2023 12:13:14"}' > www/__build_info.json",
1820
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
1821
+ "export ENV_SHORT="review"",
1822
+ "export APP_DIR="www"",
1823
+ "export ENV_TYPE="review"",
1824
+ "export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
1825
+ "export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
1826
+ "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")"",
1827
+ "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"; })-www-$CL_review_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
1828
+ "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"; })-www-$CL_review_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
1829
+ "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"; })-www-$CL_review_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
1830
+ "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"; })-www-$CL_review_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
1831
+ "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"; })-www-$CL_review_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
1832
+ "export DEPLOY_CLOUD_RUN_PROJECT_ID="google-project-id"",
1833
+ "export DEPLOY_CLOUD_RUN_REGION="europe-west6"",
1834
+ "export GCLOUD_DEPLOY_credentialsKey="$CL_review_www_GCLOUD_DEPLOY_credentialsKey"",
1835
+ "export GCLOUD_RUN_canonicalHostSuffix="$CL_review_www_GCLOUD_RUN_canonicalHostSuffix"",
1836
+ "export API_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)}')/graphql"",
1837
+ "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\\",\\"API_URL\\"]"",
1838
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
1839
+ "echo '{"id":"$(git describe --tags 2>/dev/null || git rev-parse HEAD)","time":"$CI_JOB_STARTED_AT"}' > www/__build_info.json",
1721
1840
  "echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"",
1722
1841
  "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
1723
1842
  "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
@@ -1734,26 +1853,9 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
1734
1853
  ],
1735
1854
  "stage": "build",
1736
1855
  "variables": {
1737
- "API_URL": "https://pan-test-app-review-mr1234-api-unknown-host.example.com/graphql",
1738
- "APP_DIR": "www",
1739
- "BUILD_INFO_BUILD_TIME": "01-01-2023 12:13:14",
1740
- "BUILD_INFO_CURRENT_VERSION": "3.2.1",
1741
- "BUILD_INFO_ID": "some-id",
1742
- "DEPLOY_CLOUD_RUN_PROJECT_ID": "google-project-id",
1743
- "DEPLOY_CLOUD_RUN_REGION": "europe-west6",
1744
- "ENV_SHORT": "review",
1745
- "ENV_TYPE": "review",
1746
- "GCLOUD_DEPLOY_credentialsKey": "$CL_review_www_GCLOUD_DEPLOY_credentialsKey",
1747
- "GCLOUD_RUN_canonicalHostSuffix": "$CL_review_www_GCLOUD_RUN_canonicalHostSuffix",
1748
- "HOST": "pan-test-app-review-mr1234-www-unknown-host.example.com",
1749
- "HOST_CANONICAL": "pan-test-app-review-mr1234-www-unknown-host.example.com",
1750
- "HOST_INTERNAL": "pan-test-app-review-mr1234-www-unknown-host.example.com",
1751
1856
  "KUBERNETES_CPU_REQUEST": "0.5",
1752
1857
  "KUBERNETES_MEMORY_LIMIT": "4Gi",
1753
1858
  "KUBERNETES_MEMORY_REQUEST": "2Gi",
1754
- "ROOT_URL": "https://pan-test-app-review-mr1234-www-unknown-host.example.com",
1755
- "ROOT_URL_INTERNAL": "https://pan-test-app-review-mr1234-www-unknown-host.example.com",
1756
- "_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","API_URL"]",
1757
1859
  },
1758
1860
  },
1759
1861
  "www 🔨 docker | review ": {
@@ -1779,6 +1881,21 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
1779
1881
  ],
1780
1882
  },
1781
1883
  "script": [
1884
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
1885
+ "export APP_DIR="www"",
1886
+ "export DOCKER_DIR="."",
1887
+ "export DOCKER_REGISTRY="europe-west6-docker.pkg.dev"",
1888
+ "export DOCKER_IMAGE="europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/review/www/$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })"",
1889
+ "export DOCKER_CACHE_IMAGE="europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/www"",
1890
+ "export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"",
1891
+ "export DOCKER_COPY_AND_INSTALL_APP="COPY --chown=node:node $APP_DIR .
1892
+ RUN yarn plugin import workspace-tools
1893
+ RUN yarn workspaces focus --production && yarn rebuild"",
1894
+ "export DOCKER_COPY_WORKSPACE_FILES="COPY --chown=node:node www/package.json /app/www/package.json
1895
+ COPY --chown=node:node www/yarn.lock /app/www/yarn.lock
1896
+ COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
1897
+ COPY --chown=node:node .yarn /app/.yarn"",
1898
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
1782
1899
  "ensureNodeDockerfile",
1783
1900
  "echo -e "\\e[0Ksection_start:$(date +%s):docker-login[collapsed=true]\\r\\e[0KDocker Login"",
1784
1901
  "gcloud auth activate-service-account --key-file=<(echo "$CL_review_www_GCLOUD_DEPLOY_credentialsKey")",
@@ -1803,24 +1920,9 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
1803
1920
  ],
1804
1921
  "stage": "build",
1805
1922
  "variables": {
1806
- "APP_DIR": "www",
1807
- "DOCKERFILE_ADDITIONS": undefined,
1808
- "DOCKERFILE_ADDITIONS_END": undefined,
1809
1923
  "DOCKER_BUILDKIT": "1",
1810
- "DOCKER_CACHE_IMAGE": "europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/www",
1811
- "DOCKER_COPY_AND_INSTALL_APP": "COPY --chown=node:node $APP_DIR .
1812
- RUN yarn plugin import workspace-tools
1813
- RUN yarn workspaces focus --production && yarn rebuild",
1814
- "DOCKER_COPY_WORKSPACE_FILES": "COPY --chown=node:node www/package.json /app/www/package.json
1815
- COPY --chown=node:node www/yarn.lock /app/www/yarn.lock
1816
- COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
1817
- COPY --chown=node:node .yarn /app/.yarn",
1818
- "DOCKER_DIR": ".",
1819
1924
  "DOCKER_DRIVER": "overlay2",
1820
1925
  "DOCKER_HOST": "tcp://0.0.0.0:2375",
1821
- "DOCKER_IMAGE": "europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/review/www/mr1234",
1822
- "DOCKER_IMAGE_TAG": "$CI_COMMIT_SHA",
1823
- "DOCKER_REGISTRY": "europe-west6-docker.pkg.dev",
1824
1926
  "DOCKER_TLS_CERTDIR": "",
1825
1927
  "KUBERNETES_CPU_REQUEST": "0.5",
1826
1928
  "KUBERNETES_MEMORY_LIMIT": "2Gi",
@@ -1830,15 +1932,15 @@ COPY --chown=node:node .yarn /app/.yarn",
1830
1932
  "www 🚀 Deploy | review ": {
1831
1933
  "allow_failure": false,
1832
1934
  "artifacts": {
1833
- "paths": [
1834
- "____envvars.yaml",
1835
- ],
1935
+ "reports": {
1936
+ "dotenv": "gitlab_environment.env",
1937
+ },
1836
1938
  },
1837
1939
  "environment": {
1838
1940
  "auto_stop_in": "1 week",
1839
- "name": "review/some-commit/www",
1941
+ "name": "review/$CI_COMMIT_REF_NAME/www",
1840
1942
  "on_stop": "www 🛑 Stop ⚠️ | review ",
1841
- "url": "https://pan-test-app-review-mr1234-www-unknown-host.example.com",
1943
+ "url": "$CL_GITLAB_ENVIRONMENT_URL",
1842
1944
  },
1843
1945
  "image": "path/to/docker/gcloud:the-version",
1844
1946
  "interruptible": true,
@@ -1881,89 +1983,106 @@ COPY --chown=node:node .yarn /app/.yarn",
1881
1983
  },
1882
1984
  ],
1883
1985
  "script": [
1986
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
1987
+ "export ENV_SHORT="review"",
1988
+ "export APP_DIR="www"",
1989
+ "export ENV_TYPE="review"",
1990
+ "export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
1991
+ "export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
1992
+ "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")"",
1993
+ "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"; })-www-$CL_review_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
1994
+ "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"; })-www-$CL_review_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
1995
+ "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"; })-www-$CL_review_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
1996
+ "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"; })-www-$CL_review_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
1997
+ "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"; })-www-$CL_review_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
1998
+ "export DEPLOY_CLOUD_RUN_PROJECT_ID="google-project-id"",
1999
+ "export DEPLOY_CLOUD_RUN_REGION="europe-west6"",
2000
+ "export GCLOUD_DEPLOY_credentialsKey="$CL_review_www_GCLOUD_DEPLOY_credentialsKey"",
2001
+ "export GCLOUD_RUN_canonicalHostSuffix="$CL_review_www_GCLOUD_RUN_canonicalHostSuffix"",
2002
+ "export API_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)}')/graphql"",
2003
+ "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\\",\\"API_URL\\"]"",
2004
+ "export DOCKER_REGISTRY="europe-west6-docker.pkg.dev"",
2005
+ "export DOCKER_IMAGE="europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/review/www/$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })"",
2006
+ "export DOCKER_CACHE_IMAGE="europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/www"",
2007
+ "export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"",
2008
+ "export CLOUDSDK_CORE_DISABLE_PROMPTS="1"",
2009
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
1884
2010
  "echo -e "\\e[0Ksection_start:$(date +%s):prepare[collapsed=true]\\r\\e[0KPrepare..."",
1885
2011
  "gcloud auth activate-service-account --key-file=<(echo "$CL_review_www_GCLOUD_DEPLOY_credentialsKey")",
1886
2012
  "export GCLOUD_PROJECT_NUMBER=$(gcloud projects describe google-project-id --format="value(projectNumber)")",
1887
2013
  "echo "GCLOUD_PROJECT_NUMBER: $GCLOUD_PROJECT_NUMBER"",
1888
2014
  "echo -e "\\e[0Ksection_end:$(date +%s):prepare\\r\\e[0K"",
2015
+ "echo -e "\\e[0Ksection_start:$(date +%s):writeenvvars[collapsed=true]\\r\\e[0KWrite env vars to file"",
2016
+ "cat > ____envvars.yaml <<EOF
2017
+ ENV_SHORT: |-
2018
+ review
2019
+ APP_DIR: |-
2020
+ www
2021
+ ENV_TYPE: |-
2022
+ review
2023
+ BUILD_INFO_BUILD_ID: |-
2024
+ $(printf %s "$(git describe --tags 2>/dev/null || git rev-parse HEAD)" | sed 's/^/ /')
2025
+ BUILD_INFO_BUILD_TIME: |-
2026
+ $(printf %s "$CI_JOB_STARTED_AT" | sed 's/^/ /')
2027
+ BUILD_INFO_CURRENT_VERSION: |-
2028
+ $(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/^/ /')
2029
+ HOST: |-
2030
+ $(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"; })-www-$CL_review_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
2031
+ ROOT_URL: |-
2032
+ $(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"; })-www-$CL_review_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
2033
+ HOST_INTERNAL: |-
2034
+ $(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"; })-www-$CL_review_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
2035
+ HOST_CANONICAL: |-
2036
+ $(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"; })-www-$CL_review_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
2037
+ ROOT_URL_INTERNAL: |-
2038
+ $(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"; })-www-$CL_review_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
2039
+ DEPLOY_CLOUD_RUN_PROJECT_ID: |-
2040
+ google-project-id
2041
+ DEPLOY_CLOUD_RUN_REGION: |-
2042
+ europe-west6
2043
+ GCLOUD_RUN_canonicalHostSuffix: |-
2044
+ $(printf %s "$CL_review_www_GCLOUD_RUN_canonicalHostSuffix" | sed 's/^/ /')
2045
+ API_URL: |-
2046
+ $(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)}')/graphql" | sed 's/^/ /')
2047
+ _ALL_ENV_VAR_KEYS: |-
2048
+ ["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","API_URL"]
2049
+
2050
+ EOF
2051
+ ",
2052
+ "echo -e "\\e[0Ksection_end:$(date +%s):writeenvvars\\r\\e[0K"",
1889
2053
  "echo -e "\\e[0Ksection_start:$(date +%s):deploy[collapsed=true]\\r\\e[0KDeploy to cloud run"",
1890
- "echo "$ENV_VARS" > ____envvars.yaml",
1891
- "gcloud run deploy pan-test-app-review-mr1234-www --command="yarn,start" --image=europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/review/www/mr1234:$DOCKER_IMAGE_TAG --project=google-project-id --region=europe-west6 --labels=customer-name=pan,component-name=www,app-name=test-app,env-type=review,env-name=review,build-type=node,cloud-run-service-name=pan-test-app-review-mr1234-www --env-vars-file=____envvars.yaml --min-instances=0 --max-instances=100 --cpu-throttling --allow-unauthenticated --ingress=all --cpu-boost",
2054
+ "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"; })-www" | awk '{print tolower($0)}') --command="yarn,start" --image=europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/review/www/$([ -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=www,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"; })-www" | awk '{print tolower($0)}') --env-vars-file=____envvars.yaml --min-instances=0 --max-instances=100 --cpu-throttling --allow-unauthenticated --ingress=all --cpu-boost",
1892
2055
  "echo -e "\\e[0Ksection_end:$(date +%s):deploy\\r\\e[0K"",
1893
2056
  "echo -e "\\e[0Ksection_start:$(date +%s):cleanup[collapsed=true]\\r\\e[0KCleanup"",
1894
- "gcloud run revisions list --project=google-project-id --region=europe-west6 --service=pan-test-app-review-mr1234-www --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",
1895
- "gcloud artifacts docker images list europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/review/www/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/www/mr1234@$version --quiet --delete-tags; done",
2057
+ "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"; })-www" | 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",
2058
+ "gcloud artifacts docker images list europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/review/www/$([ -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/www/$([ -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",
1896
2059
  "gcloud artifacts docker images list europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/www --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/www@$version --quiet --delete-tags; done",
1897
2060
  "set +e",
1898
2061
  "gcloud artifacts docker images delete europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/review/www --quiet --delete-tags",
1899
2062
  "set -e",
1900
2063
  "echo -e "\\e[0Ksection_end:$(date +%s):cleanup\\r\\e[0K"",
1901
2064
  "echo Uploading SBOM to Dependency Track",
1902
- "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/www" "https://pan-test-app-review-mr1234-www-unknown-host.example.com" "__sbom.json" vex.json || true",
1903
- ],
1904
- "services": [
1905
- {
1906
- "command": [
1907
- "--tls=false",
1908
- ],
1909
- "name": "docker:24.0.6-dind",
1910
- },
2065
+ "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/www" "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"; })-www-$CL_review_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" "__sbom.json" vex.json || true",
2066
+ "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"; })-www-$CL_review_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" >> gitlab_environment.env",
1911
2067
  ],
1912
2068
  "stage": "deploy review",
1913
2069
  "variables": {
1914
- "API_URL": "https://pan-test-app-review-mr1234-api-unknown-host.example.com/graphql",
1915
- "APP_DIR": "www",
1916
- "BUILD_INFO_BUILD_TIME": "01-01-2023 12:13:14",
1917
- "BUILD_INFO_CURRENT_VERSION": "3.2.1",
1918
- "BUILD_INFO_ID": "some-id",
1919
- "CLOUDSDK_CORE_DISABLE_PROMPTS": "1",
1920
- "DEPLOY_CLOUD_RUN_PROJECT_ID": "google-project-id",
1921
- "DEPLOY_CLOUD_RUN_REGION": "europe-west6",
1922
- "DOCKER_BUILDKIT": "1",
1923
- "DOCKER_CACHE_IMAGE": "europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/www",
1924
- "DOCKER_DRIVER": "overlay2",
1925
- "DOCKER_HOST": "tcp://0.0.0.0:2375",
1926
- "DOCKER_IMAGE": "europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/review/www/mr1234",
1927
- "DOCKER_IMAGE_TAG": "$CI_COMMIT_SHA",
1928
- "DOCKER_REGISTRY": "europe-west6-docker.pkg.dev",
1929
- "DOCKER_TLS_CERTDIR": "",
1930
- "ENV_SHORT": "review",
1931
- "ENV_TYPE": "review",
1932
- "ENV_VARS": "ENV_SHORT: 'review'
1933
- APP_DIR: 'www'
1934
- ENV_TYPE: 'review'
1935
- BUILD_INFO_ID: 'some-id'
1936
- BUILD_INFO_BUILD_TIME: '01-01-2023 12:13:14'
1937
- BUILD_INFO_CURRENT_VERSION: '3.2.1'
1938
- HOST: 'pan-test-app-review-mr1234-www-unknown-host.example.com'
1939
- ROOT_URL: 'https://pan-test-app-review-mr1234-www-unknown-host.example.com'
1940
- HOST_CANONICAL: 'pan-test-app-review-mr1234-www-unknown-host.example.com'
1941
- ROOT_URL_INTERNAL: 'https://pan-test-app-review-mr1234-www-unknown-host.example.com'
1942
- HOST_INTERNAL: 'pan-test-app-review-mr1234-www-unknown-host.example.com'
1943
- DEPLOY_CLOUD_RUN_PROJECT_ID: 'google-project-id'
1944
- DEPLOY_CLOUD_RUN_REGION: 'europe-west6'
1945
- GCLOUD_RUN_canonicalHostSuffix: '$CL_review_www_GCLOUD_RUN_canonicalHostSuffix'
1946
- API_URL: 'https://pan-test-app-review-mr1234-api-unknown-host.example.com/graphql'
1947
- _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","API_URL"]'
1948
- ",
1949
- "GCLOUD_DEPLOY_credentialsKey": "$CL_review_www_GCLOUD_DEPLOY_credentialsKey",
1950
- "GCLOUD_RUN_canonicalHostSuffix": "$CL_review_www_GCLOUD_RUN_canonicalHostSuffix",
1951
- "HOST": "pan-test-app-review-mr1234-www-unknown-host.example.com",
1952
- "HOST_CANONICAL": "pan-test-app-review-mr1234-www-unknown-host.example.com",
1953
- "HOST_INTERNAL": "pan-test-app-review-mr1234-www-unknown-host.example.com",
1954
2070
  "KUBERNETES_CPU_REQUEST": "0.5",
1955
2071
  "KUBERNETES_MEMORY_LIMIT": "400Mi",
1956
2072
  "KUBERNETES_MEMORY_REQUEST": "200Mi",
1957
- "ROOT_URL": "https://pan-test-app-review-mr1234-www-unknown-host.example.com",
1958
- "ROOT_URL_INTERNAL": "https://pan-test-app-review-mr1234-www-unknown-host.example.com",
1959
- "_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","API_URL"]",
1960
2073
  },
1961
2074
  },
1962
2075
  "www 🛑 Stop ⚠️ | review ": {
2076
+ "allow_failure": true,
2077
+ "artifacts": {
2078
+ "reports": {
2079
+ "dotenv": "gitlab_environment.env",
2080
+ },
2081
+ },
1963
2082
  "environment": {
1964
2083
  "action": "stop",
1965
- "name": "review/some-commit/www",
1966
- "url": "https://pan-test-app-review-mr1234-www-unknown-host.example.com",
2084
+ "name": "review/$CI_COMMIT_REF_NAME/www",
2085
+ "url": "$CL_GITLAB_ENVIRONMENT_URL",
1967
2086
  },
1968
2087
  "image": "path/to/docker/gcloud:the-version",
1969
2088
  "interruptible": true,
@@ -1977,31 +2096,32 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
1977
2096
  },
1978
2097
  "rules": [
1979
2098
  {
1980
- "allow_failure": true,
1981
2099
  "if": "$CI_COMMIT_BRANCH =~ /^[0-9]+\\.([0-9]+|x)\\.x$/",
1982
2100
  "when": "on_success",
1983
2101
  },
1984
2102
  {
1985
- "allow_failure": true,
1986
2103
  "when": "manual",
1987
2104
  },
1988
2105
  ],
1989
2106
  "script": [
2107
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
2108
+ "export CLOUDSDK_CORE_DISABLE_PROMPTS="1"",
2109
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
1990
2110
  "set +e",
1991
2111
  "gcloud auth activate-service-account --key-file=<(echo "$CL_review_www_GCLOUD_DEPLOY_credentialsKey")",
1992
- "gcloud run services delete pan-test-app-review-mr1234-www --project=google-project-id --region=europe-west6",
1993
- "gcloud artifacts docker images delete europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/review/www/mr1234 --quiet --delete-tags",
2112
+ "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"; })-www" | awk '{print tolower($0)}') --project=google-project-id --region=europe-west6",
2113
+ "gcloud artifacts docker images delete europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/review/www/$([ -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",
1994
2114
  "gcloud artifacts docker images list europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/www --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/www@$version --quiet --delete-tags; done",
1995
2115
  "set +e",
1996
2116
  "gcloud artifacts docker images delete europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/review/www --quiet --delete-tags",
1997
2117
  "set -e",
1998
2118
  "echo Disabling component in Dependency Track",
1999
- "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" disable "pan-test-app/www" "https://pan-test-app-review-mr1234-www-unknown-host.example.com" || true",
2119
+ "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" disable "pan-test-app/www" "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"; })-www-$CL_review_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" || true",
2000
2120
  "set -e",
2121
+ "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"; })-www-$CL_review_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" >> gitlab_environment.env",
2001
2122
  ],
2002
2123
  "stage": "stop review",
2003
2124
  "variables": {
2004
- "CLOUDSDK_CORE_DISABLE_PROMPTS": "1",
2005
2125
  "GIT_STRATEGY": "none",
2006
2126
  "KUBERNETES_CPU_REQUEST": "0.5",
2007
2127
  "KUBERNETES_MEMORY_LIMIT": "400Mi",
@@ -2021,12 +2141,14 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
2021
2141
  ],
2022
2142
  },
2023
2143
  "script": [
2144
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
2145
+ "export APP_PATH="www"",
2146
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
2024
2147
  "cd www",
2025
2148
  "yarn npm audit --environment production",
2026
2149
  ],
2027
2150
  "stage": "test",
2028
2151
  "variables": {
2029
- "APP_PATH": "www",
2030
2152
  "KUBERNETES_CPU_REQUEST": "0.5",
2031
2153
  "KUBERNETES_MEMORY_LIMIT": "4Gi",
2032
2154
  "KUBERNETES_MEMORY_REQUEST": "2Gi",
@@ -2060,6 +2182,9 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
2060
2182
  ],
2061
2183
  },
2062
2184
  "script": [
2185
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
2186
+ "export APP_PATH="www"",
2187
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
2063
2188
  "echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"",
2064
2189
  "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
2065
2190
  "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
@@ -2076,7 +2201,6 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
2076
2201
  ],
2077
2202
  "stage": "test",
2078
2203
  "variables": {
2079
- "APP_PATH": "www",
2080
2204
  "KUBERNETES_CPU_REQUEST": "0.5",
2081
2205
  "KUBERNETES_MEMORY_LIMIT": "4Gi",
2082
2206
  "KUBERNETES_MEMORY_REQUEST": "2Gi",
@@ -2100,6 +2224,8 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
2100
2224
  ],
2101
2225
  },
2102
2226
  "script": [
2227
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
2228
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
2103
2229
  "trivy fs --quiet --format cyclonedx --output "__sbom.json" www",
2104
2230
  ],
2105
2231
  "stage": "build",
@@ -2152,7 +2278,7 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
2152
2278
  ],
2153
2279
  "variables": {
2154
2280
  "FF_USE_FASTZIP": "true",
2155
- "GIT_DEPTH": 1,
2281
+ "GIT_DEPTH": "1",
2156
2282
  },
2157
2283
  "workflow": {
2158
2284
  "rules": [
@@ -2229,7 +2355,33 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
2229
2355
  ],
2230
2356
  },
2231
2357
  "script": [
2232
- "echo '{"id":"some-id","time":"01-01-2023 12:13:14"}' > api/__build_info.json",
2358
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
2359
+ "export ENV_SHORT="prod"",
2360
+ "export APP_DIR="api"",
2361
+ "export ENV_TYPE="prod"",
2362
+ "export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
2363
+ "export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
2364
+ "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")"",
2365
+ "export HOST="$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
2366
+ "export ROOT_URL="https://$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
2367
+ "export HOST_INTERNAL="$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
2368
+ "export HOST_CANONICAL="$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
2369
+ "export ROOT_URL_INTERNAL="https://$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
2370
+ "export CLOUD_SQL_INSTANCE_CONNECTION_NAME="projectId:region:instancename"",
2371
+ "export DB_NAME="pan-test-app-prod-api"",
2372
+ "export DB_USER="my-user"",
2373
+ "export DB_PASSWORD="$CL_prod_api_DB_PASSWORD"",
2374
+ "export DATABASE_URL="postgresql://$DB_USER:$DB_PASSWORD@localhost/$DB_NAME?host=/cloudsql/$CLOUD_SQL_INSTANCE_CONNECTION_NAME"",
2375
+ "export DATABASE_JDBC_URL="jdbc:postgresql:///$DB_NAME?cloudSqlInstance=$CLOUD_SQL_INSTANCE_CONNECTION_NAME&socketFactory=com.google.cloud.sql.postgres.SocketFactory&user=$DB_USER&password=$DB_PASSWORD"",
2376
+ "export CLOUD_RUN_JOB_TRIGGER_URL_migration="https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/jobs/pan-test-app-prod-api-migration:run"",
2377
+ "export CLOUD_RUN_JOB_TRIGGER_URL_send_reminders="https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/jobs/pan-test-app-prod-api-send-reminders:run"",
2378
+ "export DEPLOY_CLOUD_RUN_PROJECT_ID="google-project-id"",
2379
+ "export DEPLOY_CLOUD_RUN_REGION="europe-west6"",
2380
+ "export GCLOUD_DEPLOY_credentialsKey="$CL_prod_api_GCLOUD_DEPLOY_credentialsKey"",
2381
+ "export GCLOUD_RUN_canonicalHostSuffix="$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix"",
2382
+ "export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOST\\",\\"ROOT_URL\\",\\"HOST_INTERNAL\\",\\"HOST_CANONICAL\\",\\"ROOT_URL_INTERNAL\\",\\"CLOUD_SQL_INSTANCE_CONNECTION_NAME\\",\\"DB_NAME\\",\\"DB_USER\\",\\"DB_PASSWORD\\",\\"DATABASE_URL\\",\\"DATABASE_JDBC_URL\\",\\"CLOUD_RUN_JOB_TRIGGER_URL_migration\\",\\"CLOUD_RUN_JOB_TRIGGER_URL_send_reminders\\",\\"DEPLOY_CLOUD_RUN_PROJECT_ID\\",\\"DEPLOY_CLOUD_RUN_REGION\\",\\"GCLOUD_DEPLOY_credentialsKey\\",\\"GCLOUD_RUN_canonicalHostSuffix\\"]"",
2383
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
2384
+ "echo '{"id":"$(git describe --tags 2>/dev/null || git rev-parse HEAD)","time":"$CI_JOB_STARTED_AT"}' > api/__build_info.json",
2233
2385
  "echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"",
2234
2386
  "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
2235
2387
  "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
@@ -2246,33 +2398,9 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
2246
2398
  ],
2247
2399
  "stage": "build",
2248
2400
  "variables": {
2249
- "APP_DIR": "api",
2250
- "BUILD_INFO_BUILD_TIME": "01-01-2023 12:13:14",
2251
- "BUILD_INFO_CURRENT_VERSION": "3.2.1",
2252
- "BUILD_INFO_ID": "some-id",
2253
- "CLOUD_RUN_JOB_TRIGGER_URL_migration": "https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/jobs/pan-test-app-prod-api-migration:run",
2254
- "CLOUD_RUN_JOB_TRIGGER_URL_send_reminders": "https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/jobs/pan-test-app-prod-api-send-reminders:run",
2255
- "CLOUD_SQL_INSTANCE_CONNECTION_NAME": "projectId:region:instancename",
2256
- "DATABASE_JDBC_URL": "jdbc:postgresql:///$DB_NAME?cloudSqlInstance=$CLOUD_SQL_INSTANCE_CONNECTION_NAME&socketFactory=com.google.cloud.sql.postgres.SocketFactory&user=$DB_USER&password=$DB_PASSWORD",
2257
- "DATABASE_URL": "postgresql://$DB_USER:$DB_PASSWORD@localhost/$DB_NAME?host=/cloudsql/$CLOUD_SQL_INSTANCE_CONNECTION_NAME",
2258
- "DB_NAME": "pan-test-app-prod-api",
2259
- "DB_PASSWORD": "$CL_prod_api_DB_PASSWORD",
2260
- "DB_USER": "my-user",
2261
- "DEPLOY_CLOUD_RUN_PROJECT_ID": "google-project-id",
2262
- "DEPLOY_CLOUD_RUN_REGION": "europe-west6",
2263
- "ENV_SHORT": "prod",
2264
- "ENV_TYPE": "prod",
2265
- "GCLOUD_DEPLOY_credentialsKey": "$CL_prod_api_GCLOUD_DEPLOY_credentialsKey",
2266
- "GCLOUD_RUN_canonicalHostSuffix": "$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix",
2267
- "HOST": "pan-test-app-prod-api-unknown-host.example.com",
2268
- "HOST_CANONICAL": "pan-test-app-prod-api-unknown-host.example.com",
2269
- "HOST_INTERNAL": "pan-test-app-prod-api-unknown-host.example.com",
2270
2401
  "KUBERNETES_CPU_REQUEST": "0.5",
2271
2402
  "KUBERNETES_MEMORY_LIMIT": "4Gi",
2272
2403
  "KUBERNETES_MEMORY_REQUEST": "2Gi",
2273
- "ROOT_URL": "https://pan-test-app-prod-api-unknown-host.example.com",
2274
- "ROOT_URL_INTERNAL": "https://pan-test-app-prod-api-unknown-host.example.com",
2275
- "_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","CLOUD_SQL_INSTANCE_CONNECTION_NAME","DB_NAME","DB_USER","DB_PASSWORD","DATABASE_URL","DATABASE_JDBC_URL","CLOUD_RUN_JOB_TRIGGER_URL_migration","CLOUD_RUN_JOB_TRIGGER_URL_send_reminders","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]",
2276
2404
  },
2277
2405
  },
2278
2406
  "api 🔨 app | stage ": {
@@ -2322,7 +2450,33 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
2322
2450
  ],
2323
2451
  },
2324
2452
  "script": [
2325
- "echo '{"id":"some-id","time":"01-01-2023 12:13:14"}' > api/__build_info.json",
2453
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
2454
+ "export ENV_SHORT="stage"",
2455
+ "export APP_DIR="api"",
2456
+ "export ENV_TYPE="stage"",
2457
+ "export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
2458
+ "export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
2459
+ "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")"",
2460
+ "export HOST="$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
2461
+ "export ROOT_URL="https://$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
2462
+ "export HOST_INTERNAL="$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
2463
+ "export HOST_CANONICAL="$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
2464
+ "export ROOT_URL_INTERNAL="https://$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
2465
+ "export CLOUD_SQL_INSTANCE_CONNECTION_NAME="projectId:region:instancename"",
2466
+ "export DB_NAME="pan-test-app-stage-api"",
2467
+ "export DB_USER="my-user"",
2468
+ "export DB_PASSWORD="$CL_stage_api_DB_PASSWORD"",
2469
+ "export DATABASE_URL="postgresql://$DB_USER:$DB_PASSWORD@localhost/$DB_NAME?host=/cloudsql/$CLOUD_SQL_INSTANCE_CONNECTION_NAME"",
2470
+ "export DATABASE_JDBC_URL="jdbc:postgresql:///$DB_NAME?cloudSqlInstance=$CLOUD_SQL_INSTANCE_CONNECTION_NAME&socketFactory=com.google.cloud.sql.postgres.SocketFactory&user=$DB_USER&password=$DB_PASSWORD"",
2471
+ "export CLOUD_RUN_JOB_TRIGGER_URL_migration="https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/jobs/pan-test-app-stage-api-migration:run"",
2472
+ "export CLOUD_RUN_JOB_TRIGGER_URL_send_reminders="https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/jobs/pan-test-app-stage-api-send-reminders:run"",
2473
+ "export DEPLOY_CLOUD_RUN_PROJECT_ID="google-project-id"",
2474
+ "export DEPLOY_CLOUD_RUN_REGION="europe-west6"",
2475
+ "export GCLOUD_DEPLOY_credentialsKey="$CL_stage_api_GCLOUD_DEPLOY_credentialsKey"",
2476
+ "export GCLOUD_RUN_canonicalHostSuffix="$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix"",
2477
+ "export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOST\\",\\"ROOT_URL\\",\\"HOST_INTERNAL\\",\\"HOST_CANONICAL\\",\\"ROOT_URL_INTERNAL\\",\\"CLOUD_SQL_INSTANCE_CONNECTION_NAME\\",\\"DB_NAME\\",\\"DB_USER\\",\\"DB_PASSWORD\\",\\"DATABASE_URL\\",\\"DATABASE_JDBC_URL\\",\\"CLOUD_RUN_JOB_TRIGGER_URL_migration\\",\\"CLOUD_RUN_JOB_TRIGGER_URL_send_reminders\\",\\"DEPLOY_CLOUD_RUN_PROJECT_ID\\",\\"DEPLOY_CLOUD_RUN_REGION\\",\\"GCLOUD_DEPLOY_credentialsKey\\",\\"GCLOUD_RUN_canonicalHostSuffix\\"]"",
2478
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
2479
+ "echo '{"id":"$(git describe --tags 2>/dev/null || git rev-parse HEAD)","time":"$CI_JOB_STARTED_AT"}' > api/__build_info.json",
2326
2480
  "echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"",
2327
2481
  "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
2328
2482
  "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
@@ -2339,33 +2493,9 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
2339
2493
  ],
2340
2494
  "stage": "build",
2341
2495
  "variables": {
2342
- "APP_DIR": "api",
2343
- "BUILD_INFO_BUILD_TIME": "01-01-2023 12:13:14",
2344
- "BUILD_INFO_CURRENT_VERSION": "3.2.1",
2345
- "BUILD_INFO_ID": "some-id",
2346
- "CLOUD_RUN_JOB_TRIGGER_URL_migration": "https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/jobs/pan-test-app-stage-api-migration:run",
2347
- "CLOUD_RUN_JOB_TRIGGER_URL_send_reminders": "https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/jobs/pan-test-app-stage-api-send-reminders:run",
2348
- "CLOUD_SQL_INSTANCE_CONNECTION_NAME": "projectId:region:instancename",
2349
- "DATABASE_JDBC_URL": "jdbc:postgresql:///$DB_NAME?cloudSqlInstance=$CLOUD_SQL_INSTANCE_CONNECTION_NAME&socketFactory=com.google.cloud.sql.postgres.SocketFactory&user=$DB_USER&password=$DB_PASSWORD",
2350
- "DATABASE_URL": "postgresql://$DB_USER:$DB_PASSWORD@localhost/$DB_NAME?host=/cloudsql/$CLOUD_SQL_INSTANCE_CONNECTION_NAME",
2351
- "DB_NAME": "pan-test-app-stage-api",
2352
- "DB_PASSWORD": "$CL_stage_api_DB_PASSWORD",
2353
- "DB_USER": "my-user",
2354
- "DEPLOY_CLOUD_RUN_PROJECT_ID": "google-project-id",
2355
- "DEPLOY_CLOUD_RUN_REGION": "europe-west6",
2356
- "ENV_SHORT": "stage",
2357
- "ENV_TYPE": "stage",
2358
- "GCLOUD_DEPLOY_credentialsKey": "$CL_stage_api_GCLOUD_DEPLOY_credentialsKey",
2359
- "GCLOUD_RUN_canonicalHostSuffix": "$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix",
2360
- "HOST": "pan-test-app-stage-api-unknown-host.example.com",
2361
- "HOST_CANONICAL": "pan-test-app-stage-api-unknown-host.example.com",
2362
- "HOST_INTERNAL": "pan-test-app-stage-api-unknown-host.example.com",
2363
2496
  "KUBERNETES_CPU_REQUEST": "0.5",
2364
2497
  "KUBERNETES_MEMORY_LIMIT": "4Gi",
2365
2498
  "KUBERNETES_MEMORY_REQUEST": "2Gi",
2366
- "ROOT_URL": "https://pan-test-app-stage-api-unknown-host.example.com",
2367
- "ROOT_URL_INTERNAL": "https://pan-test-app-stage-api-unknown-host.example.com",
2368
- "_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","CLOUD_SQL_INSTANCE_CONNECTION_NAME","DB_NAME","DB_USER","DB_PASSWORD","DATABASE_URL","DATABASE_JDBC_URL","CLOUD_RUN_JOB_TRIGGER_URL_migration","CLOUD_RUN_JOB_TRIGGER_URL_send_reminders","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]",
2369
2499
  },
2370
2500
  },
2371
2501
  "api 🔨 docker | prod ": {
@@ -2391,6 +2521,21 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
2391
2521
  ],
2392
2522
  },
2393
2523
  "script": [
2524
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
2525
+ "export APP_DIR="api"",
2526
+ "export DOCKER_DIR="."",
2527
+ "export DOCKER_REGISTRY="europe-west6-docker.pkg.dev"",
2528
+ "export DOCKER_IMAGE="europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/prod/api"",
2529
+ "export DOCKER_CACHE_IMAGE="europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/api"",
2530
+ "export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"",
2531
+ "export DOCKER_COPY_AND_INSTALL_APP="COPY --chown=node:node $APP_DIR .
2532
+ RUN yarn plugin import workspace-tools
2533
+ RUN yarn workspaces focus --production && yarn rebuild"",
2534
+ "export DOCKER_COPY_WORKSPACE_FILES="COPY --chown=node:node api/package.json /app/api/package.json
2535
+ COPY --chown=node:node api/yarn.lock /app/api/yarn.lock
2536
+ COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
2537
+ COPY --chown=node:node .yarn /app/.yarn"",
2538
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
2394
2539
  "ensureNodeDockerfile",
2395
2540
  "echo -e "\\e[0Ksection_start:$(date +%s):docker-login[collapsed=true]\\r\\e[0KDocker Login"",
2396
2541
  "gcloud auth activate-service-account --key-file=<(echo "$CL_prod_api_GCLOUD_DEPLOY_credentialsKey")",
@@ -2415,24 +2560,9 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
2415
2560
  ],
2416
2561
  "stage": "build",
2417
2562
  "variables": {
2418
- "APP_DIR": "api",
2419
- "DOCKERFILE_ADDITIONS": undefined,
2420
- "DOCKERFILE_ADDITIONS_END": undefined,
2421
2563
  "DOCKER_BUILDKIT": "1",
2422
- "DOCKER_CACHE_IMAGE": "europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/api",
2423
- "DOCKER_COPY_AND_INSTALL_APP": "COPY --chown=node:node $APP_DIR .
2424
- RUN yarn plugin import workspace-tools
2425
- RUN yarn workspaces focus --production && yarn rebuild",
2426
- "DOCKER_COPY_WORKSPACE_FILES": "COPY --chown=node:node api/package.json /app/api/package.json
2427
- COPY --chown=node:node api/yarn.lock /app/api/yarn.lock
2428
- COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
2429
- COPY --chown=node:node .yarn /app/.yarn",
2430
- "DOCKER_DIR": ".",
2431
2564
  "DOCKER_DRIVER": "overlay2",
2432
2565
  "DOCKER_HOST": "tcp://0.0.0.0:2375",
2433
- "DOCKER_IMAGE": "europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/prod/api",
2434
- "DOCKER_IMAGE_TAG": "$CI_COMMIT_SHA",
2435
- "DOCKER_REGISTRY": "europe-west6-docker.pkg.dev",
2436
2566
  "DOCKER_TLS_CERTDIR": "",
2437
2567
  "KUBERNETES_CPU_REQUEST": "0.5",
2438
2568
  "KUBERNETES_MEMORY_LIMIT": "2Gi",
@@ -2462,6 +2592,21 @@ COPY --chown=node:node .yarn /app/.yarn",
2462
2592
  ],
2463
2593
  },
2464
2594
  "script": [
2595
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
2596
+ "export APP_DIR="api"",
2597
+ "export DOCKER_DIR="."",
2598
+ "export DOCKER_REGISTRY="europe-west6-docker.pkg.dev"",
2599
+ "export DOCKER_IMAGE="europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/stage/api"",
2600
+ "export DOCKER_CACHE_IMAGE="europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/api"",
2601
+ "export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"",
2602
+ "export DOCKER_COPY_AND_INSTALL_APP="COPY --chown=node:node $APP_DIR .
2603
+ RUN yarn plugin import workspace-tools
2604
+ RUN yarn workspaces focus --production && yarn rebuild"",
2605
+ "export DOCKER_COPY_WORKSPACE_FILES="COPY --chown=node:node api/package.json /app/api/package.json
2606
+ COPY --chown=node:node api/yarn.lock /app/api/yarn.lock
2607
+ COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
2608
+ COPY --chown=node:node .yarn /app/.yarn"",
2609
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
2465
2610
  "ensureNodeDockerfile",
2466
2611
  "echo -e "\\e[0Ksection_start:$(date +%s):docker-login[collapsed=true]\\r\\e[0KDocker Login"",
2467
2612
  "gcloud auth activate-service-account --key-file=<(echo "$CL_stage_api_GCLOUD_DEPLOY_credentialsKey")",
@@ -2486,24 +2631,9 @@ COPY --chown=node:node .yarn /app/.yarn",
2486
2631
  ],
2487
2632
  "stage": "build",
2488
2633
  "variables": {
2489
- "APP_DIR": "api",
2490
- "DOCKERFILE_ADDITIONS": undefined,
2491
- "DOCKERFILE_ADDITIONS_END": undefined,
2492
2634
  "DOCKER_BUILDKIT": "1",
2493
- "DOCKER_CACHE_IMAGE": "europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/api",
2494
- "DOCKER_COPY_AND_INSTALL_APP": "COPY --chown=node:node $APP_DIR .
2495
- RUN yarn plugin import workspace-tools
2496
- RUN yarn workspaces focus --production && yarn rebuild",
2497
- "DOCKER_COPY_WORKSPACE_FILES": "COPY --chown=node:node api/package.json /app/api/package.json
2498
- COPY --chown=node:node api/yarn.lock /app/api/yarn.lock
2499
- COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
2500
- COPY --chown=node:node .yarn /app/.yarn",
2501
- "DOCKER_DIR": ".",
2502
2635
  "DOCKER_DRIVER": "overlay2",
2503
2636
  "DOCKER_HOST": "tcp://0.0.0.0:2375",
2504
- "DOCKER_IMAGE": "europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/stage/api",
2505
- "DOCKER_IMAGE_TAG": "$CI_COMMIT_SHA",
2506
- "DOCKER_REGISTRY": "europe-west6-docker.pkg.dev",
2507
2637
  "DOCKER_TLS_CERTDIR": "",
2508
2638
  "KUBERNETES_CPU_REQUEST": "0.5",
2509
2639
  "KUBERNETES_MEMORY_LIMIT": "2Gi",
@@ -2513,15 +2643,15 @@ COPY --chown=node:node .yarn /app/.yarn",
2513
2643
  "api 🚀 Deploy | prod ": {
2514
2644
  "allow_failure": true,
2515
2645
  "artifacts": {
2516
- "paths": [
2517
- "____envvars.yaml",
2518
- ],
2646
+ "reports": {
2647
+ "dotenv": "gitlab_environment.env",
2648
+ },
2519
2649
  },
2520
2650
  "environment": {
2521
2651
  "auto_stop_in": undefined,
2522
2652
  "name": "prod/api",
2523
2653
  "on_stop": "api 🛑 Stop ⚠️ | prod ",
2524
- "url": "https://pan-test-app-prod-api-unknown-host.example.com",
2654
+ "url": "$CL_GITLAB_ENVIRONMENT_URL",
2525
2655
  },
2526
2656
  "image": "path/to/docker/gcloud:the-version",
2527
2657
  "interruptible": true,
@@ -2552,13 +2682,95 @@ COPY --chown=node:node .yarn /app/.yarn",
2552
2682
  },
2553
2683
  ],
2554
2684
  "script": [
2685
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
2686
+ "export ENV_SHORT="prod"",
2687
+ "export APP_DIR="api"",
2688
+ "export ENV_TYPE="prod"",
2689
+ "export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
2690
+ "export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
2691
+ "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")"",
2692
+ "export HOST="$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
2693
+ "export ROOT_URL="https://$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
2694
+ "export HOST_INTERNAL="$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
2695
+ "export HOST_CANONICAL="$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
2696
+ "export ROOT_URL_INTERNAL="https://$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
2697
+ "export CLOUD_SQL_INSTANCE_CONNECTION_NAME="projectId:region:instancename"",
2698
+ "export DB_NAME="pan-test-app-prod-api"",
2699
+ "export DB_USER="my-user"",
2700
+ "export DB_PASSWORD="$CL_prod_api_DB_PASSWORD"",
2701
+ "export DATABASE_URL="postgresql://$DB_USER:$DB_PASSWORD@localhost/$DB_NAME?host=/cloudsql/$CLOUD_SQL_INSTANCE_CONNECTION_NAME"",
2702
+ "export DATABASE_JDBC_URL="jdbc:postgresql:///$DB_NAME?cloudSqlInstance=$CLOUD_SQL_INSTANCE_CONNECTION_NAME&socketFactory=com.google.cloud.sql.postgres.SocketFactory&user=$DB_USER&password=$DB_PASSWORD"",
2703
+ "export CLOUD_RUN_JOB_TRIGGER_URL_migration="https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/jobs/pan-test-app-prod-api-migration:run"",
2704
+ "export CLOUD_RUN_JOB_TRIGGER_URL_send_reminders="https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/jobs/pan-test-app-prod-api-send-reminders:run"",
2705
+ "export DEPLOY_CLOUD_RUN_PROJECT_ID="google-project-id"",
2706
+ "export DEPLOY_CLOUD_RUN_REGION="europe-west6"",
2707
+ "export GCLOUD_DEPLOY_credentialsKey="$CL_prod_api_GCLOUD_DEPLOY_credentialsKey"",
2708
+ "export GCLOUD_RUN_canonicalHostSuffix="$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix"",
2709
+ "export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOST\\",\\"ROOT_URL\\",\\"HOST_INTERNAL\\",\\"HOST_CANONICAL\\",\\"ROOT_URL_INTERNAL\\",\\"CLOUD_SQL_INSTANCE_CONNECTION_NAME\\",\\"DB_NAME\\",\\"DB_USER\\",\\"DB_PASSWORD\\",\\"DATABASE_URL\\",\\"DATABASE_JDBC_URL\\",\\"CLOUD_RUN_JOB_TRIGGER_URL_migration\\",\\"CLOUD_RUN_JOB_TRIGGER_URL_send_reminders\\",\\"DEPLOY_CLOUD_RUN_PROJECT_ID\\",\\"DEPLOY_CLOUD_RUN_REGION\\",\\"GCLOUD_DEPLOY_credentialsKey\\",\\"GCLOUD_RUN_canonicalHostSuffix\\"]"",
2710
+ "export DOCKER_REGISTRY="europe-west6-docker.pkg.dev"",
2711
+ "export DOCKER_IMAGE="europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/prod/api"",
2712
+ "export DOCKER_CACHE_IMAGE="europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/api"",
2713
+ "export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"",
2714
+ "export CLOUDSDK_CORE_DISABLE_PROMPTS="1"",
2715
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
2555
2716
  "echo -e "\\e[0Ksection_start:$(date +%s):prepare[collapsed=true]\\r\\e[0KPrepare..."",
2556
2717
  "gcloud auth activate-service-account --key-file=<(echo "$CL_prod_api_GCLOUD_DEPLOY_credentialsKey")",
2557
2718
  "export GCLOUD_PROJECT_NUMBER=$(gcloud projects describe google-project-id --format="value(projectNumber)")",
2558
2719
  "echo "GCLOUD_PROJECT_NUMBER: $GCLOUD_PROJECT_NUMBER"",
2559
2720
  "echo -e "\\e[0Ksection_end:$(date +%s):prepare\\r\\e[0K"",
2721
+ "echo -e "\\e[0Ksection_start:$(date +%s):writeenvvars[collapsed=true]\\r\\e[0KWrite env vars to file"",
2722
+ "cat > ____envvars.yaml <<EOF
2723
+ ENV_SHORT: |-
2724
+ prod
2725
+ APP_DIR: |-
2726
+ api
2727
+ ENV_TYPE: |-
2728
+ prod
2729
+ BUILD_INFO_BUILD_ID: |-
2730
+ $(printf %s "$(git describe --tags 2>/dev/null || git rev-parse HEAD)" | sed 's/^/ /')
2731
+ BUILD_INFO_BUILD_TIME: |-
2732
+ $(printf %s "$CI_JOB_STARTED_AT" | sed 's/^/ /')
2733
+ BUILD_INFO_CURRENT_VERSION: |-
2734
+ $(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/^/ /')
2735
+ HOST: |-
2736
+ $(printf %s "$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
2737
+ ROOT_URL: |-
2738
+ $(printf %s "https://$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
2739
+ HOST_INTERNAL: |-
2740
+ $(printf %s "$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
2741
+ HOST_CANONICAL: |-
2742
+ $(printf %s "$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
2743
+ ROOT_URL_INTERNAL: |-
2744
+ $(printf %s "https://$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
2745
+ CLOUD_SQL_INSTANCE_CONNECTION_NAME: |-
2746
+ projectId:region:instancename
2747
+ DB_NAME: |-
2748
+ pan-test-app-prod-api
2749
+ DB_USER: |-
2750
+ my-user
2751
+ DB_PASSWORD: |-
2752
+ $(printf %s "$CL_prod_api_DB_PASSWORD" | sed 's/^/ /')
2753
+ DATABASE_URL: |-
2754
+ postgresql://$DB_USER:$DB_PASSWORD@localhost/$DB_NAME?host=/cloudsql/$CLOUD_SQL_INSTANCE_CONNECTION_NAME
2755
+ DATABASE_JDBC_URL: |-
2756
+ jdbc:postgresql:///$DB_NAME?cloudSqlInstance=$CLOUD_SQL_INSTANCE_CONNECTION_NAME&socketFactory=com.google.cloud.sql.postgres.SocketFactory&user=$DB_USER&password=$DB_PASSWORD
2757
+ CLOUD_RUN_JOB_TRIGGER_URL_migration: |-
2758
+ https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/jobs/pan-test-app-prod-api-migration:run
2759
+ CLOUD_RUN_JOB_TRIGGER_URL_send_reminders: |-
2760
+ https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/jobs/pan-test-app-prod-api-send-reminders:run
2761
+ DEPLOY_CLOUD_RUN_PROJECT_ID: |-
2762
+ google-project-id
2763
+ DEPLOY_CLOUD_RUN_REGION: |-
2764
+ europe-west6
2765
+ GCLOUD_RUN_canonicalHostSuffix: |-
2766
+ $(printf %s "$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | sed 's/^/ /')
2767
+ _ALL_ENV_VAR_KEYS: |-
2768
+ ["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","HOST_INTERNAL","HOST_CANONICAL","ROOT_URL_INTERNAL","CLOUD_SQL_INSTANCE_CONNECTION_NAME","DB_NAME","DB_USER","DB_PASSWORD","DATABASE_URL","DATABASE_JDBC_URL","CLOUD_RUN_JOB_TRIGGER_URL_migration","CLOUD_RUN_JOB_TRIGGER_URL_send_reminders","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]
2769
+
2770
+ EOF
2771
+ ",
2772
+ "echo -e "\\e[0Ksection_end:$(date +%s):writeenvvars\\r\\e[0K"",
2560
2773
  "echo -e "\\e[0Ksection_start:$(date +%s):deploy[collapsed=true]\\r\\e[0KDeploy to cloud run"",
2561
- "echo "$ENV_VARS" > ____envvars.yaml",
2562
2774
  "set +e",
2563
2775
  "echo "ensuring Database..."",
2564
2776
  "gcloud sql databases create pan-test-app-prod-api --instance=instancename --project projectId",
@@ -2584,92 +2796,28 @@ COPY --chown=node:node .yarn /app/.yarn",
2584
2796
  "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",
2585
2797
  "echo -e "\\e[0Ksection_end:$(date +%s):cleanup\\r\\e[0K"",
2586
2798
  "echo Uploading SBOM to Dependency Track",
2587
- "/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",
2588
- ],
2589
- "services": [
2590
- {
2591
- "command": [
2592
- "--tls=false",
2593
- ],
2594
- "name": "docker:24.0.6-dind",
2595
- },
2799
+ "/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",
2800
+ "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",
2596
2801
  ],
2597
2802
  "stage": "deploy prod",
2598
2803
  "variables": {
2599
- "APP_DIR": "api",
2600
- "BUILD_INFO_BUILD_TIME": "01-01-2023 12:13:14",
2601
- "BUILD_INFO_CURRENT_VERSION": "3.2.1",
2602
- "BUILD_INFO_ID": "some-id",
2603
- "CLOUDSDK_CORE_DISABLE_PROMPTS": "1",
2604
- "CLOUD_RUN_JOB_TRIGGER_URL_migration": "https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/jobs/pan-test-app-prod-api-migration:run",
2605
- "CLOUD_RUN_JOB_TRIGGER_URL_send_reminders": "https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/jobs/pan-test-app-prod-api-send-reminders:run",
2606
- "CLOUD_SQL_INSTANCE_CONNECTION_NAME": "projectId:region:instancename",
2607
- "DATABASE_JDBC_URL": "jdbc:postgresql:///$DB_NAME?cloudSqlInstance=$CLOUD_SQL_INSTANCE_CONNECTION_NAME&socketFactory=com.google.cloud.sql.postgres.SocketFactory&user=$DB_USER&password=$DB_PASSWORD",
2608
- "DATABASE_URL": "postgresql://$DB_USER:$DB_PASSWORD@localhost/$DB_NAME?host=/cloudsql/$CLOUD_SQL_INSTANCE_CONNECTION_NAME",
2609
- "DB_NAME": "pan-test-app-prod-api",
2610
- "DB_PASSWORD": "$CL_prod_api_DB_PASSWORD",
2611
- "DB_USER": "my-user",
2612
- "DEPLOY_CLOUD_RUN_PROJECT_ID": "google-project-id",
2613
- "DEPLOY_CLOUD_RUN_REGION": "europe-west6",
2614
- "DOCKER_BUILDKIT": "1",
2615
- "DOCKER_CACHE_IMAGE": "europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/api",
2616
- "DOCKER_DRIVER": "overlay2",
2617
- "DOCKER_HOST": "tcp://0.0.0.0:2375",
2618
- "DOCKER_IMAGE": "europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/prod/api",
2619
- "DOCKER_IMAGE_TAG": "$CI_COMMIT_SHA",
2620
- "DOCKER_REGISTRY": "europe-west6-docker.pkg.dev",
2621
- "DOCKER_TLS_CERTDIR": "",
2622
- "ENV_SHORT": "prod",
2623
- "ENV_TYPE": "prod",
2624
- "ENV_VARS": "ENV_SHORT: 'prod'
2625
- APP_DIR: 'api'
2626
- ENV_TYPE: 'prod'
2627
- BUILD_INFO_ID: 'some-id'
2628
- BUILD_INFO_BUILD_TIME: '01-01-2023 12:13:14'
2629
- BUILD_INFO_CURRENT_VERSION: '3.2.1'
2630
- HOST: 'pan-test-app-prod-api-unknown-host.example.com'
2631
- ROOT_URL: 'https://pan-test-app-prod-api-unknown-host.example.com'
2632
- HOST_CANONICAL: 'pan-test-app-prod-api-unknown-host.example.com'
2633
- ROOT_URL_INTERNAL: 'https://pan-test-app-prod-api-unknown-host.example.com'
2634
- HOST_INTERNAL: 'pan-test-app-prod-api-unknown-host.example.com'
2635
- CLOUD_SQL_INSTANCE_CONNECTION_NAME: 'projectId:region:instancename'
2636
- DB_NAME: 'pan-test-app-prod-api'
2637
- DB_USER: 'my-user'
2638
- DB_PASSWORD: '$CL_prod_api_DB_PASSWORD'
2639
- DATABASE_URL: 'postgresql://$DB_USER:$DB_PASSWORD@localhost/$DB_NAME?host=/cloudsql/$CLOUD_SQL_INSTANCE_CONNECTION_NAME'
2640
- DATABASE_JDBC_URL: 'jdbc:postgresql:///$DB_NAME?cloudSqlInstance=$CLOUD_SQL_INSTANCE_CONNECTION_NAME&socketFactory=com.google.cloud.sql.postgres.SocketFactory&user=$DB_USER&password=$DB_PASSWORD'
2641
- CLOUD_RUN_JOB_TRIGGER_URL_migration: 'https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/jobs/pan-test-app-prod-api-migration:run'
2642
- CLOUD_RUN_JOB_TRIGGER_URL_send_reminders: 'https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/jobs/pan-test-app-prod-api-send-reminders:run'
2643
- DEPLOY_CLOUD_RUN_PROJECT_ID: 'google-project-id'
2644
- DEPLOY_CLOUD_RUN_REGION: 'europe-west6'
2645
- GCLOUD_RUN_canonicalHostSuffix: '$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix'
2646
- _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","CLOUD_SQL_INSTANCE_CONNECTION_NAME","DB_NAME","DB_USER","DB_PASSWORD","DATABASE_URL","DATABASE_JDBC_URL","CLOUD_RUN_JOB_TRIGGER_URL_migration","CLOUD_RUN_JOB_TRIGGER_URL_send_reminders","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]'
2647
- ",
2648
- "GCLOUD_DEPLOY_credentialsKey": "$CL_prod_api_GCLOUD_DEPLOY_credentialsKey",
2649
- "GCLOUD_RUN_canonicalHostSuffix": "$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix",
2650
- "HOST": "pan-test-app-prod-api-unknown-host.example.com",
2651
- "HOST_CANONICAL": "pan-test-app-prod-api-unknown-host.example.com",
2652
- "HOST_INTERNAL": "pan-test-app-prod-api-unknown-host.example.com",
2653
2804
  "KUBERNETES_CPU_REQUEST": "0.5",
2654
2805
  "KUBERNETES_MEMORY_LIMIT": "400Mi",
2655
2806
  "KUBERNETES_MEMORY_REQUEST": "200Mi",
2656
- "ROOT_URL": "https://pan-test-app-prod-api-unknown-host.example.com",
2657
- "ROOT_URL_INTERNAL": "https://pan-test-app-prod-api-unknown-host.example.com",
2658
- "_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","CLOUD_SQL_INSTANCE_CONNECTION_NAME","DB_NAME","DB_USER","DB_PASSWORD","DATABASE_URL","DATABASE_JDBC_URL","CLOUD_RUN_JOB_TRIGGER_URL_migration","CLOUD_RUN_JOB_TRIGGER_URL_send_reminders","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]",
2659
2807
  },
2660
2808
  },
2661
2809
  "api 🚀 Deploy | stage ": {
2662
2810
  "allow_failure": false,
2663
2811
  "artifacts": {
2664
- "paths": [
2665
- "____envvars.yaml",
2666
- ],
2812
+ "reports": {
2813
+ "dotenv": "gitlab_environment.env",
2814
+ },
2667
2815
  },
2668
2816
  "environment": {
2669
2817
  "auto_stop_in": undefined,
2670
2818
  "name": "stage/api",
2671
2819
  "on_stop": "api 🛑 Stop ⚠️ | stage ",
2672
- "url": "https://pan-test-app-stage-api-unknown-host.example.com",
2820
+ "url": "$CL_GITLAB_ENVIRONMENT_URL",
2673
2821
  },
2674
2822
  "image": "path/to/docker/gcloud:the-version",
2675
2823
  "interruptible": true,
@@ -2700,13 +2848,95 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
2700
2848
  },
2701
2849
  ],
2702
2850
  "script": [
2851
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
2852
+ "export ENV_SHORT="stage"",
2853
+ "export APP_DIR="api"",
2854
+ "export ENV_TYPE="stage"",
2855
+ "export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
2856
+ "export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
2857
+ "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")"",
2858
+ "export HOST="$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
2859
+ "export ROOT_URL="https://$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
2860
+ "export HOST_INTERNAL="$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
2861
+ "export HOST_CANONICAL="$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
2862
+ "export ROOT_URL_INTERNAL="https://$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
2863
+ "export CLOUD_SQL_INSTANCE_CONNECTION_NAME="projectId:region:instancename"",
2864
+ "export DB_NAME="pan-test-app-stage-api"",
2865
+ "export DB_USER="my-user"",
2866
+ "export DB_PASSWORD="$CL_stage_api_DB_PASSWORD"",
2867
+ "export DATABASE_URL="postgresql://$DB_USER:$DB_PASSWORD@localhost/$DB_NAME?host=/cloudsql/$CLOUD_SQL_INSTANCE_CONNECTION_NAME"",
2868
+ "export DATABASE_JDBC_URL="jdbc:postgresql:///$DB_NAME?cloudSqlInstance=$CLOUD_SQL_INSTANCE_CONNECTION_NAME&socketFactory=com.google.cloud.sql.postgres.SocketFactory&user=$DB_USER&password=$DB_PASSWORD"",
2869
+ "export CLOUD_RUN_JOB_TRIGGER_URL_migration="https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/jobs/pan-test-app-stage-api-migration:run"",
2870
+ "export CLOUD_RUN_JOB_TRIGGER_URL_send_reminders="https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/jobs/pan-test-app-stage-api-send-reminders:run"",
2871
+ "export DEPLOY_CLOUD_RUN_PROJECT_ID="google-project-id"",
2872
+ "export DEPLOY_CLOUD_RUN_REGION="europe-west6"",
2873
+ "export GCLOUD_DEPLOY_credentialsKey="$CL_stage_api_GCLOUD_DEPLOY_credentialsKey"",
2874
+ "export GCLOUD_RUN_canonicalHostSuffix="$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix"",
2875
+ "export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOST\\",\\"ROOT_URL\\",\\"HOST_INTERNAL\\",\\"HOST_CANONICAL\\",\\"ROOT_URL_INTERNAL\\",\\"CLOUD_SQL_INSTANCE_CONNECTION_NAME\\",\\"DB_NAME\\",\\"DB_USER\\",\\"DB_PASSWORD\\",\\"DATABASE_URL\\",\\"DATABASE_JDBC_URL\\",\\"CLOUD_RUN_JOB_TRIGGER_URL_migration\\",\\"CLOUD_RUN_JOB_TRIGGER_URL_send_reminders\\",\\"DEPLOY_CLOUD_RUN_PROJECT_ID\\",\\"DEPLOY_CLOUD_RUN_REGION\\",\\"GCLOUD_DEPLOY_credentialsKey\\",\\"GCLOUD_RUN_canonicalHostSuffix\\"]"",
2876
+ "export DOCKER_REGISTRY="europe-west6-docker.pkg.dev"",
2877
+ "export DOCKER_IMAGE="europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/stage/api"",
2878
+ "export DOCKER_CACHE_IMAGE="europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/api"",
2879
+ "export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"",
2880
+ "export CLOUDSDK_CORE_DISABLE_PROMPTS="1"",
2881
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
2703
2882
  "echo -e "\\e[0Ksection_start:$(date +%s):prepare[collapsed=true]\\r\\e[0KPrepare..."",
2704
2883
  "gcloud auth activate-service-account --key-file=<(echo "$CL_stage_api_GCLOUD_DEPLOY_credentialsKey")",
2705
2884
  "export GCLOUD_PROJECT_NUMBER=$(gcloud projects describe google-project-id --format="value(projectNumber)")",
2706
2885
  "echo "GCLOUD_PROJECT_NUMBER: $GCLOUD_PROJECT_NUMBER"",
2707
2886
  "echo -e "\\e[0Ksection_end:$(date +%s):prepare\\r\\e[0K"",
2887
+ "echo -e "\\e[0Ksection_start:$(date +%s):writeenvvars[collapsed=true]\\r\\e[0KWrite env vars to file"",
2888
+ "cat > ____envvars.yaml <<EOF
2889
+ ENV_SHORT: |-
2890
+ stage
2891
+ APP_DIR: |-
2892
+ api
2893
+ ENV_TYPE: |-
2894
+ stage
2895
+ BUILD_INFO_BUILD_ID: |-
2896
+ $(printf %s "$(git describe --tags 2>/dev/null || git rev-parse HEAD)" | sed 's/^/ /')
2897
+ BUILD_INFO_BUILD_TIME: |-
2898
+ $(printf %s "$CI_JOB_STARTED_AT" | sed 's/^/ /')
2899
+ BUILD_INFO_CURRENT_VERSION: |-
2900
+ $(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/^/ /')
2901
+ HOST: |-
2902
+ $(printf %s "$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
2903
+ ROOT_URL: |-
2904
+ $(printf %s "https://$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
2905
+ HOST_INTERNAL: |-
2906
+ $(printf %s "$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
2907
+ HOST_CANONICAL: |-
2908
+ $(printf %s "$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
2909
+ ROOT_URL_INTERNAL: |-
2910
+ $(printf %s "https://$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
2911
+ CLOUD_SQL_INSTANCE_CONNECTION_NAME: |-
2912
+ projectId:region:instancename
2913
+ DB_NAME: |-
2914
+ pan-test-app-stage-api
2915
+ DB_USER: |-
2916
+ my-user
2917
+ DB_PASSWORD: |-
2918
+ $(printf %s "$CL_stage_api_DB_PASSWORD" | sed 's/^/ /')
2919
+ DATABASE_URL: |-
2920
+ postgresql://$DB_USER:$DB_PASSWORD@localhost/$DB_NAME?host=/cloudsql/$CLOUD_SQL_INSTANCE_CONNECTION_NAME
2921
+ DATABASE_JDBC_URL: |-
2922
+ jdbc:postgresql:///$DB_NAME?cloudSqlInstance=$CLOUD_SQL_INSTANCE_CONNECTION_NAME&socketFactory=com.google.cloud.sql.postgres.SocketFactory&user=$DB_USER&password=$DB_PASSWORD
2923
+ CLOUD_RUN_JOB_TRIGGER_URL_migration: |-
2924
+ https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/jobs/pan-test-app-stage-api-migration:run
2925
+ CLOUD_RUN_JOB_TRIGGER_URL_send_reminders: |-
2926
+ https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/jobs/pan-test-app-stage-api-send-reminders:run
2927
+ DEPLOY_CLOUD_RUN_PROJECT_ID: |-
2928
+ google-project-id
2929
+ DEPLOY_CLOUD_RUN_REGION: |-
2930
+ europe-west6
2931
+ GCLOUD_RUN_canonicalHostSuffix: |-
2932
+ $(printf %s "$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | sed 's/^/ /')
2933
+ _ALL_ENV_VAR_KEYS: |-
2934
+ ["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","HOST_INTERNAL","HOST_CANONICAL","ROOT_URL_INTERNAL","CLOUD_SQL_INSTANCE_CONNECTION_NAME","DB_NAME","DB_USER","DB_PASSWORD","DATABASE_URL","DATABASE_JDBC_URL","CLOUD_RUN_JOB_TRIGGER_URL_migration","CLOUD_RUN_JOB_TRIGGER_URL_send_reminders","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]
2935
+
2936
+ EOF
2937
+ ",
2938
+ "echo -e "\\e[0Ksection_end:$(date +%s):writeenvvars\\r\\e[0K"",
2708
2939
  "echo -e "\\e[0Ksection_start:$(date +%s):deploy[collapsed=true]\\r\\e[0KDeploy to cloud run"",
2709
- "echo "$ENV_VARS" > ____envvars.yaml",
2710
2940
  "set +e",
2711
2941
  "echo "ensuring Database..."",
2712
2942
  "gcloud sql databases create pan-test-app-stage-api --instance=instancename --project projectId",
@@ -2732,85 +2962,27 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
2732
2962
  "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",
2733
2963
  "echo -e "\\e[0Ksection_end:$(date +%s):cleanup\\r\\e[0K"",
2734
2964
  "echo Uploading SBOM to Dependency Track",
2735
- "/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",
2736
- ],
2737
- "services": [
2738
- {
2739
- "command": [
2740
- "--tls=false",
2741
- ],
2742
- "name": "docker:24.0.6-dind",
2743
- },
2965
+ "/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",
2966
+ "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",
2744
2967
  ],
2745
2968
  "stage": "deploy stage",
2746
2969
  "variables": {
2747
- "APP_DIR": "api",
2748
- "BUILD_INFO_BUILD_TIME": "01-01-2023 12:13:14",
2749
- "BUILD_INFO_CURRENT_VERSION": "3.2.1",
2750
- "BUILD_INFO_ID": "some-id",
2751
- "CLOUDSDK_CORE_DISABLE_PROMPTS": "1",
2752
- "CLOUD_RUN_JOB_TRIGGER_URL_migration": "https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/jobs/pan-test-app-stage-api-migration:run",
2753
- "CLOUD_RUN_JOB_TRIGGER_URL_send_reminders": "https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/jobs/pan-test-app-stage-api-send-reminders:run",
2754
- "CLOUD_SQL_INSTANCE_CONNECTION_NAME": "projectId:region:instancename",
2755
- "DATABASE_JDBC_URL": "jdbc:postgresql:///$DB_NAME?cloudSqlInstance=$CLOUD_SQL_INSTANCE_CONNECTION_NAME&socketFactory=com.google.cloud.sql.postgres.SocketFactory&user=$DB_USER&password=$DB_PASSWORD",
2756
- "DATABASE_URL": "postgresql://$DB_USER:$DB_PASSWORD@localhost/$DB_NAME?host=/cloudsql/$CLOUD_SQL_INSTANCE_CONNECTION_NAME",
2757
- "DB_NAME": "pan-test-app-stage-api",
2758
- "DB_PASSWORD": "$CL_stage_api_DB_PASSWORD",
2759
- "DB_USER": "my-user",
2760
- "DEPLOY_CLOUD_RUN_PROJECT_ID": "google-project-id",
2761
- "DEPLOY_CLOUD_RUN_REGION": "europe-west6",
2762
- "DOCKER_BUILDKIT": "1",
2763
- "DOCKER_CACHE_IMAGE": "europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/api",
2764
- "DOCKER_DRIVER": "overlay2",
2765
- "DOCKER_HOST": "tcp://0.0.0.0:2375",
2766
- "DOCKER_IMAGE": "europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/stage/api",
2767
- "DOCKER_IMAGE_TAG": "$CI_COMMIT_SHA",
2768
- "DOCKER_REGISTRY": "europe-west6-docker.pkg.dev",
2769
- "DOCKER_TLS_CERTDIR": "",
2770
- "ENV_SHORT": "stage",
2771
- "ENV_TYPE": "stage",
2772
- "ENV_VARS": "ENV_SHORT: 'stage'
2773
- APP_DIR: 'api'
2774
- ENV_TYPE: 'stage'
2775
- BUILD_INFO_ID: 'some-id'
2776
- BUILD_INFO_BUILD_TIME: '01-01-2023 12:13:14'
2777
- BUILD_INFO_CURRENT_VERSION: '3.2.1'
2778
- HOST: 'pan-test-app-stage-api-unknown-host.example.com'
2779
- ROOT_URL: 'https://pan-test-app-stage-api-unknown-host.example.com'
2780
- HOST_CANONICAL: 'pan-test-app-stage-api-unknown-host.example.com'
2781
- ROOT_URL_INTERNAL: 'https://pan-test-app-stage-api-unknown-host.example.com'
2782
- HOST_INTERNAL: 'pan-test-app-stage-api-unknown-host.example.com'
2783
- CLOUD_SQL_INSTANCE_CONNECTION_NAME: 'projectId:region:instancename'
2784
- DB_NAME: 'pan-test-app-stage-api'
2785
- DB_USER: 'my-user'
2786
- DB_PASSWORD: '$CL_stage_api_DB_PASSWORD'
2787
- DATABASE_URL: 'postgresql://$DB_USER:$DB_PASSWORD@localhost/$DB_NAME?host=/cloudsql/$CLOUD_SQL_INSTANCE_CONNECTION_NAME'
2788
- DATABASE_JDBC_URL: 'jdbc:postgresql:///$DB_NAME?cloudSqlInstance=$CLOUD_SQL_INSTANCE_CONNECTION_NAME&socketFactory=com.google.cloud.sql.postgres.SocketFactory&user=$DB_USER&password=$DB_PASSWORD'
2789
- CLOUD_RUN_JOB_TRIGGER_URL_migration: 'https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/jobs/pan-test-app-stage-api-migration:run'
2790
- CLOUD_RUN_JOB_TRIGGER_URL_send_reminders: 'https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/jobs/pan-test-app-stage-api-send-reminders:run'
2791
- DEPLOY_CLOUD_RUN_PROJECT_ID: 'google-project-id'
2792
- DEPLOY_CLOUD_RUN_REGION: 'europe-west6'
2793
- GCLOUD_RUN_canonicalHostSuffix: '$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix'
2794
- _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","CLOUD_SQL_INSTANCE_CONNECTION_NAME","DB_NAME","DB_USER","DB_PASSWORD","DATABASE_URL","DATABASE_JDBC_URL","CLOUD_RUN_JOB_TRIGGER_URL_migration","CLOUD_RUN_JOB_TRIGGER_URL_send_reminders","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]'
2795
- ",
2796
- "GCLOUD_DEPLOY_credentialsKey": "$CL_stage_api_GCLOUD_DEPLOY_credentialsKey",
2797
- "GCLOUD_RUN_canonicalHostSuffix": "$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix",
2798
- "HOST": "pan-test-app-stage-api-unknown-host.example.com",
2799
- "HOST_CANONICAL": "pan-test-app-stage-api-unknown-host.example.com",
2800
- "HOST_INTERNAL": "pan-test-app-stage-api-unknown-host.example.com",
2801
2970
  "KUBERNETES_CPU_REQUEST": "0.5",
2802
2971
  "KUBERNETES_MEMORY_LIMIT": "400Mi",
2803
2972
  "KUBERNETES_MEMORY_REQUEST": "200Mi",
2804
- "ROOT_URL": "https://pan-test-app-stage-api-unknown-host.example.com",
2805
- "ROOT_URL_INTERNAL": "https://pan-test-app-stage-api-unknown-host.example.com",
2806
- "_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","CLOUD_SQL_INSTANCE_CONNECTION_NAME","DB_NAME","DB_USER","DB_PASSWORD","DATABASE_URL","DATABASE_JDBC_URL","CLOUD_RUN_JOB_TRIGGER_URL_migration","CLOUD_RUN_JOB_TRIGGER_URL_send_reminders","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]",
2807
2973
  },
2808
2974
  },
2809
2975
  "api 🛑 Stop ⚠️ | prod ": {
2976
+ "allow_failure": true,
2977
+ "artifacts": {
2978
+ "reports": {
2979
+ "dotenv": "gitlab_environment.env",
2980
+ },
2981
+ },
2810
2982
  "environment": {
2811
2983
  "action": "stop",
2812
2984
  "name": "prod/api",
2813
- "url": "https://pan-test-app-prod-api-unknown-host.example.com",
2985
+ "url": "$CL_GITLAB_ENVIRONMENT_URL",
2814
2986
  },
2815
2987
  "image": "path/to/docker/gcloud:the-version",
2816
2988
  "interruptible": true,
@@ -2824,16 +2996,17 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
2824
2996
  },
2825
2997
  "rules": [
2826
2998
  {
2827
- "allow_failure": true,
2828
2999
  "if": "$CI_COMMIT_BRANCH =~ /^[0-9]+\\.([0-9]+|x)\\.x$/",
2829
3000
  "when": "on_success",
2830
3001
  },
2831
3002
  {
2832
- "allow_failure": true,
2833
3003
  "when": "manual",
2834
3004
  },
2835
3005
  ],
2836
3006
  "script": [
3007
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
3008
+ "export CLOUDSDK_CORE_DISABLE_PROMPTS="1"",
3009
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
2837
3010
  "set +e",
2838
3011
  "gcloud auth activate-service-account --key-file=<(echo "$CL_prod_api_GCLOUD_DEPLOY_credentialsKey")",
2839
3012
  "gcloud run services delete pan-test-app-prod-api --project=google-project-id --region=europe-west6",
@@ -2845,12 +3018,12 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
2845
3018
  "gcloud artifacts docker images delete europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/prod/api --quiet --delete-tags",
2846
3019
  "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",
2847
3020
  "echo Disabling component in Dependency Track",
2848
- "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" disable "pan-test-app/api" "https://pan-test-app-prod-api-unknown-host.example.com" || true",
3021
+ "/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",
2849
3022
  "set -e",
3023
+ "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",
2850
3024
  ],
2851
3025
  "stage": "stop prod",
2852
3026
  "variables": {
2853
- "CLOUDSDK_CORE_DISABLE_PROMPTS": "1",
2854
3027
  "GIT_STRATEGY": "none",
2855
3028
  "KUBERNETES_CPU_REQUEST": "0.5",
2856
3029
  "KUBERNETES_MEMORY_LIMIT": "400Mi",
@@ -2858,10 +3031,16 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
2858
3031
  },
2859
3032
  },
2860
3033
  "api 🛑 Stop ⚠️ | stage ": {
3034
+ "allow_failure": true,
3035
+ "artifacts": {
3036
+ "reports": {
3037
+ "dotenv": "gitlab_environment.env",
3038
+ },
3039
+ },
2861
3040
  "environment": {
2862
3041
  "action": "stop",
2863
3042
  "name": "stage/api",
2864
- "url": "https://pan-test-app-stage-api-unknown-host.example.com",
3043
+ "url": "$CL_GITLAB_ENVIRONMENT_URL",
2865
3044
  },
2866
3045
  "image": "path/to/docker/gcloud:the-version",
2867
3046
  "interruptible": true,
@@ -2875,16 +3054,17 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
2875
3054
  },
2876
3055
  "rules": [
2877
3056
  {
2878
- "allow_failure": true,
2879
3057
  "if": "$CI_COMMIT_BRANCH =~ /^[0-9]+\\.([0-9]+|x)\\.x$/",
2880
3058
  "when": "on_success",
2881
3059
  },
2882
3060
  {
2883
- "allow_failure": true,
2884
3061
  "when": "manual",
2885
3062
  },
2886
3063
  ],
2887
3064
  "script": [
3065
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
3066
+ "export CLOUDSDK_CORE_DISABLE_PROMPTS="1"",
3067
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
2888
3068
  "set +e",
2889
3069
  "gcloud auth activate-service-account --key-file=<(echo "$CL_stage_api_GCLOUD_DEPLOY_credentialsKey")",
2890
3070
  "gcloud run services delete pan-test-app-stage-api --project=google-project-id --region=europe-west6",
@@ -2896,12 +3076,12 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
2896
3076
  "gcloud artifacts docker images delete europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/stage/api --quiet --delete-tags",
2897
3077
  "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",
2898
3078
  "echo Disabling component in Dependency Track",
2899
- "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" disable "pan-test-app/api" "https://pan-test-app-stage-api-unknown-host.example.com" || true",
3079
+ "/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",
2900
3080
  "set -e",
3081
+ "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",
2901
3082
  ],
2902
3083
  "stage": "stop stage",
2903
3084
  "variables": {
2904
- "CLOUDSDK_CORE_DISABLE_PROMPTS": "1",
2905
3085
  "GIT_STRATEGY": "none",
2906
3086
  "KUBERNETES_CPU_REQUEST": "0.5",
2907
3087
  "KUBERNETES_MEMORY_LIMIT": "400Mi",
@@ -2926,6 +3106,8 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
2926
3106
  ],
2927
3107
  },
2928
3108
  "script": [
3109
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
3110
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
2929
3111
  "trivy fs --quiet --format cyclonedx --output "__sbom.json" api",
2930
3112
  ],
2931
3113
  "stage": "build",
@@ -2949,6 +3131,8 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
2949
3131
  ],
2950
3132
  },
2951
3133
  "script": [
3134
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
3135
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
2952
3136
  "trivy fs --quiet --format cyclonedx --output "__sbom.json" api",
2953
3137
  ],
2954
3138
  "stage": "build",
@@ -3001,7 +3185,26 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
3001
3185
  ],
3002
3186
  },
3003
3187
  "script": [
3004
- "echo '{"id":"some-id","time":"01-01-2023 12:13:14"}' > www/__build_info.json",
3188
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
3189
+ "export ENV_SHORT="prod"",
3190
+ "export APP_DIR="www"",
3191
+ "export ENV_TYPE="prod"",
3192
+ "export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
3193
+ "export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
3194
+ "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")"",
3195
+ "export HOST="$(printf %s "pan-test-app-prod-www-$CL_prod_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
3196
+ "export ROOT_URL="https://$(printf %s "pan-test-app-prod-www-$CL_prod_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
3197
+ "export HOST_INTERNAL="$(printf %s "pan-test-app-prod-www-$CL_prod_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
3198
+ "export HOST_CANONICAL="$(printf %s "pan-test-app-prod-www-$CL_prod_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
3199
+ "export ROOT_URL_INTERNAL="https://$(printf %s "pan-test-app-prod-www-$CL_prod_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
3200
+ "export DEPLOY_CLOUD_RUN_PROJECT_ID="google-project-id"",
3201
+ "export DEPLOY_CLOUD_RUN_REGION="europe-west6"",
3202
+ "export GCLOUD_DEPLOY_credentialsKey="$CL_prod_www_GCLOUD_DEPLOY_credentialsKey"",
3203
+ "export GCLOUD_RUN_canonicalHostSuffix="$CL_prod_www_GCLOUD_RUN_canonicalHostSuffix"",
3204
+ "export API_URL="https://$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')/graphql"",
3205
+ "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\\",\\"API_URL\\"]"",
3206
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
3207
+ "echo '{"id":"$(git describe --tags 2>/dev/null || git rev-parse HEAD)","time":"$CI_JOB_STARTED_AT"}' > www/__build_info.json",
3005
3208
  "echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"",
3006
3209
  "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
3007
3210
  "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
@@ -3018,26 +3221,9 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
3018
3221
  ],
3019
3222
  "stage": "build",
3020
3223
  "variables": {
3021
- "API_URL": "https://pan-test-app-prod-api-unknown-host.example.com/graphql",
3022
- "APP_DIR": "www",
3023
- "BUILD_INFO_BUILD_TIME": "01-01-2023 12:13:14",
3024
- "BUILD_INFO_CURRENT_VERSION": "3.2.1",
3025
- "BUILD_INFO_ID": "some-id",
3026
- "DEPLOY_CLOUD_RUN_PROJECT_ID": "google-project-id",
3027
- "DEPLOY_CLOUD_RUN_REGION": "europe-west6",
3028
- "ENV_SHORT": "prod",
3029
- "ENV_TYPE": "prod",
3030
- "GCLOUD_DEPLOY_credentialsKey": "$CL_prod_www_GCLOUD_DEPLOY_credentialsKey",
3031
- "GCLOUD_RUN_canonicalHostSuffix": "$CL_prod_www_GCLOUD_RUN_canonicalHostSuffix",
3032
- "HOST": "pan-test-app-prod-www-unknown-host.example.com",
3033
- "HOST_CANONICAL": "pan-test-app-prod-www-unknown-host.example.com",
3034
- "HOST_INTERNAL": "pan-test-app-prod-www-unknown-host.example.com",
3035
3224
  "KUBERNETES_CPU_REQUEST": "0.5",
3036
3225
  "KUBERNETES_MEMORY_LIMIT": "4Gi",
3037
3226
  "KUBERNETES_MEMORY_REQUEST": "2Gi",
3038
- "ROOT_URL": "https://pan-test-app-prod-www-unknown-host.example.com",
3039
- "ROOT_URL_INTERNAL": "https://pan-test-app-prod-www-unknown-host.example.com",
3040
- "_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","API_URL"]",
3041
3227
  },
3042
3228
  },
3043
3229
  "www 🔨 app | stage ": {
@@ -3087,7 +3273,26 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
3087
3273
  ],
3088
3274
  },
3089
3275
  "script": [
3090
- "echo '{"id":"some-id","time":"01-01-2023 12:13:14"}' > www/__build_info.json",
3276
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
3277
+ "export ENV_SHORT="stage"",
3278
+ "export APP_DIR="www"",
3279
+ "export ENV_TYPE="stage"",
3280
+ "export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
3281
+ "export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
3282
+ "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")"",
3283
+ "export HOST="$(printf %s "pan-test-app-stage-www-$CL_stage_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
3284
+ "export ROOT_URL="https://$(printf %s "pan-test-app-stage-www-$CL_stage_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
3285
+ "export HOST_INTERNAL="$(printf %s "pan-test-app-stage-www-$CL_stage_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
3286
+ "export HOST_CANONICAL="$(printf %s "pan-test-app-stage-www-$CL_stage_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
3287
+ "export ROOT_URL_INTERNAL="https://$(printf %s "pan-test-app-stage-www-$CL_stage_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
3288
+ "export DEPLOY_CLOUD_RUN_PROJECT_ID="google-project-id"",
3289
+ "export DEPLOY_CLOUD_RUN_REGION="europe-west6"",
3290
+ "export GCLOUD_DEPLOY_credentialsKey="$CL_stage_www_GCLOUD_DEPLOY_credentialsKey"",
3291
+ "export GCLOUD_RUN_canonicalHostSuffix="$CL_stage_www_GCLOUD_RUN_canonicalHostSuffix"",
3292
+ "export API_URL="https://$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')/graphql"",
3293
+ "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\\",\\"API_URL\\"]"",
3294
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
3295
+ "echo '{"id":"$(git describe --tags 2>/dev/null || git rev-parse HEAD)","time":"$CI_JOB_STARTED_AT"}' > www/__build_info.json",
3091
3296
  "echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"",
3092
3297
  "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
3093
3298
  "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
@@ -3104,26 +3309,9 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
3104
3309
  ],
3105
3310
  "stage": "build",
3106
3311
  "variables": {
3107
- "API_URL": "https://pan-test-app-stage-api-unknown-host.example.com/graphql",
3108
- "APP_DIR": "www",
3109
- "BUILD_INFO_BUILD_TIME": "01-01-2023 12:13:14",
3110
- "BUILD_INFO_CURRENT_VERSION": "3.2.1",
3111
- "BUILD_INFO_ID": "some-id",
3112
- "DEPLOY_CLOUD_RUN_PROJECT_ID": "google-project-id",
3113
- "DEPLOY_CLOUD_RUN_REGION": "europe-west6",
3114
- "ENV_SHORT": "stage",
3115
- "ENV_TYPE": "stage",
3116
- "GCLOUD_DEPLOY_credentialsKey": "$CL_stage_www_GCLOUD_DEPLOY_credentialsKey",
3117
- "GCLOUD_RUN_canonicalHostSuffix": "$CL_stage_www_GCLOUD_RUN_canonicalHostSuffix",
3118
- "HOST": "pan-test-app-stage-www-unknown-host.example.com",
3119
- "HOST_CANONICAL": "pan-test-app-stage-www-unknown-host.example.com",
3120
- "HOST_INTERNAL": "pan-test-app-stage-www-unknown-host.example.com",
3121
3312
  "KUBERNETES_CPU_REQUEST": "0.5",
3122
3313
  "KUBERNETES_MEMORY_LIMIT": "4Gi",
3123
3314
  "KUBERNETES_MEMORY_REQUEST": "2Gi",
3124
- "ROOT_URL": "https://pan-test-app-stage-www-unknown-host.example.com",
3125
- "ROOT_URL_INTERNAL": "https://pan-test-app-stage-www-unknown-host.example.com",
3126
- "_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","API_URL"]",
3127
3315
  },
3128
3316
  },
3129
3317
  "www 🔨 docker | prod ": {
@@ -3149,6 +3337,21 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
3149
3337
  ],
3150
3338
  },
3151
3339
  "script": [
3340
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
3341
+ "export APP_DIR="www"",
3342
+ "export DOCKER_DIR="."",
3343
+ "export DOCKER_REGISTRY="europe-west6-docker.pkg.dev"",
3344
+ "export DOCKER_IMAGE="europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/prod/www"",
3345
+ "export DOCKER_CACHE_IMAGE="europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/www"",
3346
+ "export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"",
3347
+ "export DOCKER_COPY_AND_INSTALL_APP="COPY --chown=node:node $APP_DIR .
3348
+ RUN yarn plugin import workspace-tools
3349
+ RUN yarn workspaces focus --production && yarn rebuild"",
3350
+ "export DOCKER_COPY_WORKSPACE_FILES="COPY --chown=node:node www/package.json /app/www/package.json
3351
+ COPY --chown=node:node www/yarn.lock /app/www/yarn.lock
3352
+ COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
3353
+ COPY --chown=node:node .yarn /app/.yarn"",
3354
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
3152
3355
  "ensureNodeDockerfile",
3153
3356
  "echo -e "\\e[0Ksection_start:$(date +%s):docker-login[collapsed=true]\\r\\e[0KDocker Login"",
3154
3357
  "gcloud auth activate-service-account --key-file=<(echo "$CL_prod_www_GCLOUD_DEPLOY_credentialsKey")",
@@ -3173,24 +3376,9 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
3173
3376
  ],
3174
3377
  "stage": "build",
3175
3378
  "variables": {
3176
- "APP_DIR": "www",
3177
- "DOCKERFILE_ADDITIONS": undefined,
3178
- "DOCKERFILE_ADDITIONS_END": undefined,
3179
3379
  "DOCKER_BUILDKIT": "1",
3180
- "DOCKER_CACHE_IMAGE": "europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/www",
3181
- "DOCKER_COPY_AND_INSTALL_APP": "COPY --chown=node:node $APP_DIR .
3182
- RUN yarn plugin import workspace-tools
3183
- RUN yarn workspaces focus --production && yarn rebuild",
3184
- "DOCKER_COPY_WORKSPACE_FILES": "COPY --chown=node:node www/package.json /app/www/package.json
3185
- COPY --chown=node:node www/yarn.lock /app/www/yarn.lock
3186
- COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
3187
- COPY --chown=node:node .yarn /app/.yarn",
3188
- "DOCKER_DIR": ".",
3189
3380
  "DOCKER_DRIVER": "overlay2",
3190
3381
  "DOCKER_HOST": "tcp://0.0.0.0:2375",
3191
- "DOCKER_IMAGE": "europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/prod/www",
3192
- "DOCKER_IMAGE_TAG": "$CI_COMMIT_SHA",
3193
- "DOCKER_REGISTRY": "europe-west6-docker.pkg.dev",
3194
3382
  "DOCKER_TLS_CERTDIR": "",
3195
3383
  "KUBERNETES_CPU_REQUEST": "0.5",
3196
3384
  "KUBERNETES_MEMORY_LIMIT": "2Gi",
@@ -3220,6 +3408,21 @@ COPY --chown=node:node .yarn /app/.yarn",
3220
3408
  ],
3221
3409
  },
3222
3410
  "script": [
3411
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
3412
+ "export APP_DIR="www"",
3413
+ "export DOCKER_DIR="."",
3414
+ "export DOCKER_REGISTRY="europe-west6-docker.pkg.dev"",
3415
+ "export DOCKER_IMAGE="europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/stage/www"",
3416
+ "export DOCKER_CACHE_IMAGE="europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/www"",
3417
+ "export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"",
3418
+ "export DOCKER_COPY_AND_INSTALL_APP="COPY --chown=node:node $APP_DIR .
3419
+ RUN yarn plugin import workspace-tools
3420
+ RUN yarn workspaces focus --production && yarn rebuild"",
3421
+ "export DOCKER_COPY_WORKSPACE_FILES="COPY --chown=node:node www/package.json /app/www/package.json
3422
+ COPY --chown=node:node www/yarn.lock /app/www/yarn.lock
3423
+ COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
3424
+ COPY --chown=node:node .yarn /app/.yarn"",
3425
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
3223
3426
  "ensureNodeDockerfile",
3224
3427
  "echo -e "\\e[0Ksection_start:$(date +%s):docker-login[collapsed=true]\\r\\e[0KDocker Login"",
3225
3428
  "gcloud auth activate-service-account --key-file=<(echo "$CL_stage_www_GCLOUD_DEPLOY_credentialsKey")",
@@ -3244,24 +3447,9 @@ COPY --chown=node:node .yarn /app/.yarn",
3244
3447
  ],
3245
3448
  "stage": "build",
3246
3449
  "variables": {
3247
- "APP_DIR": "www",
3248
- "DOCKERFILE_ADDITIONS": undefined,
3249
- "DOCKERFILE_ADDITIONS_END": undefined,
3250
3450
  "DOCKER_BUILDKIT": "1",
3251
- "DOCKER_CACHE_IMAGE": "europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/www",
3252
- "DOCKER_COPY_AND_INSTALL_APP": "COPY --chown=node:node $APP_DIR .
3253
- RUN yarn plugin import workspace-tools
3254
- RUN yarn workspaces focus --production && yarn rebuild",
3255
- "DOCKER_COPY_WORKSPACE_FILES": "COPY --chown=node:node www/package.json /app/www/package.json
3256
- COPY --chown=node:node www/yarn.lock /app/www/yarn.lock
3257
- COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
3258
- COPY --chown=node:node .yarn /app/.yarn",
3259
- "DOCKER_DIR": ".",
3260
3451
  "DOCKER_DRIVER": "overlay2",
3261
3452
  "DOCKER_HOST": "tcp://0.0.0.0:2375",
3262
- "DOCKER_IMAGE": "europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/stage/www",
3263
- "DOCKER_IMAGE_TAG": "$CI_COMMIT_SHA",
3264
- "DOCKER_REGISTRY": "europe-west6-docker.pkg.dev",
3265
3453
  "DOCKER_TLS_CERTDIR": "",
3266
3454
  "KUBERNETES_CPU_REQUEST": "0.5",
3267
3455
  "KUBERNETES_MEMORY_LIMIT": "2Gi",
@@ -3271,15 +3459,15 @@ COPY --chown=node:node .yarn /app/.yarn",
3271
3459
  "www 🚀 Deploy | prod ": {
3272
3460
  "allow_failure": true,
3273
3461
  "artifacts": {
3274
- "paths": [
3275
- "____envvars.yaml",
3276
- ],
3462
+ "reports": {
3463
+ "dotenv": "gitlab_environment.env",
3464
+ },
3277
3465
  },
3278
3466
  "environment": {
3279
3467
  "auto_stop_in": undefined,
3280
3468
  "name": "prod/www",
3281
3469
  "on_stop": "www 🛑 Stop ⚠️ | prod ",
3282
- "url": "https://pan-test-app-prod-www-unknown-host.example.com",
3470
+ "url": "$CL_GITLAB_ENVIRONMENT_URL",
3283
3471
  },
3284
3472
  "image": "path/to/docker/gcloud:the-version",
3285
3473
  "interruptible": true,
@@ -3310,13 +3498,74 @@ COPY --chown=node:node .yarn /app/.yarn",
3310
3498
  },
3311
3499
  ],
3312
3500
  "script": [
3501
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
3502
+ "export ENV_SHORT="prod"",
3503
+ "export APP_DIR="www"",
3504
+ "export ENV_TYPE="prod"",
3505
+ "export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
3506
+ "export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
3507
+ "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")"",
3508
+ "export HOST="$(printf %s "pan-test-app-prod-www-$CL_prod_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
3509
+ "export ROOT_URL="https://$(printf %s "pan-test-app-prod-www-$CL_prod_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
3510
+ "export HOST_INTERNAL="$(printf %s "pan-test-app-prod-www-$CL_prod_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
3511
+ "export HOST_CANONICAL="$(printf %s "pan-test-app-prod-www-$CL_prod_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
3512
+ "export ROOT_URL_INTERNAL="https://$(printf %s "pan-test-app-prod-www-$CL_prod_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
3513
+ "export DEPLOY_CLOUD_RUN_PROJECT_ID="google-project-id"",
3514
+ "export DEPLOY_CLOUD_RUN_REGION="europe-west6"",
3515
+ "export GCLOUD_DEPLOY_credentialsKey="$CL_prod_www_GCLOUD_DEPLOY_credentialsKey"",
3516
+ "export GCLOUD_RUN_canonicalHostSuffix="$CL_prod_www_GCLOUD_RUN_canonicalHostSuffix"",
3517
+ "export API_URL="https://$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')/graphql"",
3518
+ "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\\",\\"API_URL\\"]"",
3519
+ "export DOCKER_REGISTRY="europe-west6-docker.pkg.dev"",
3520
+ "export DOCKER_IMAGE="europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/prod/www"",
3521
+ "export DOCKER_CACHE_IMAGE="europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/www"",
3522
+ "export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"",
3523
+ "export CLOUDSDK_CORE_DISABLE_PROMPTS="1"",
3524
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
3313
3525
  "echo -e "\\e[0Ksection_start:$(date +%s):prepare[collapsed=true]\\r\\e[0KPrepare..."",
3314
3526
  "gcloud auth activate-service-account --key-file=<(echo "$CL_prod_www_GCLOUD_DEPLOY_credentialsKey")",
3315
3527
  "export GCLOUD_PROJECT_NUMBER=$(gcloud projects describe google-project-id --format="value(projectNumber)")",
3316
3528
  "echo "GCLOUD_PROJECT_NUMBER: $GCLOUD_PROJECT_NUMBER"",
3317
3529
  "echo -e "\\e[0Ksection_end:$(date +%s):prepare\\r\\e[0K"",
3530
+ "echo -e "\\e[0Ksection_start:$(date +%s):writeenvvars[collapsed=true]\\r\\e[0KWrite env vars to file"",
3531
+ "cat > ____envvars.yaml <<EOF
3532
+ ENV_SHORT: |-
3533
+ prod
3534
+ APP_DIR: |-
3535
+ www
3536
+ ENV_TYPE: |-
3537
+ prod
3538
+ BUILD_INFO_BUILD_ID: |-
3539
+ $(printf %s "$(git describe --tags 2>/dev/null || git rev-parse HEAD)" | sed 's/^/ /')
3540
+ BUILD_INFO_BUILD_TIME: |-
3541
+ $(printf %s "$CI_JOB_STARTED_AT" | sed 's/^/ /')
3542
+ BUILD_INFO_CURRENT_VERSION: |-
3543
+ $(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/^/ /')
3544
+ HOST: |-
3545
+ $(printf %s "$(printf %s "pan-test-app-prod-www-$CL_prod_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
3546
+ ROOT_URL: |-
3547
+ $(printf %s "https://$(printf %s "pan-test-app-prod-www-$CL_prod_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
3548
+ HOST_INTERNAL: |-
3549
+ $(printf %s "$(printf %s "pan-test-app-prod-www-$CL_prod_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
3550
+ HOST_CANONICAL: |-
3551
+ $(printf %s "$(printf %s "pan-test-app-prod-www-$CL_prod_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
3552
+ ROOT_URL_INTERNAL: |-
3553
+ $(printf %s "https://$(printf %s "pan-test-app-prod-www-$CL_prod_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
3554
+ DEPLOY_CLOUD_RUN_PROJECT_ID: |-
3555
+ google-project-id
3556
+ DEPLOY_CLOUD_RUN_REGION: |-
3557
+ europe-west6
3558
+ GCLOUD_RUN_canonicalHostSuffix: |-
3559
+ $(printf %s "$CL_prod_www_GCLOUD_RUN_canonicalHostSuffix" | sed 's/^/ /')
3560
+ API_URL: |-
3561
+ $(printf %s "https://$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')/graphql" | sed 's/^/ /')
3562
+ _ALL_ENV_VAR_KEYS: |-
3563
+ ["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","API_URL"]
3564
+
3565
+ EOF
3566
+ ",
3567
+ "echo -e "\\e[0Ksection_end:$(date +%s):writeenvvars\\r\\e[0K"",
3318
3568
  "echo -e "\\e[0Ksection_start:$(date +%s):deploy[collapsed=true]\\r\\e[0KDeploy to cloud run"",
3319
- "echo "$ENV_VARS" > ____envvars.yaml",
3320
3569
  "gcloud run deploy pan-test-app-prod-www --command="yarn,start" --image=europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/prod/www:$DOCKER_IMAGE_TAG --project=google-project-id --region=europe-west6 --labels=customer-name=pan,component-name=www,app-name=test-app,env-type=prod,env-name=prod,build-type=node,cloud-run-service-name=pan-test-app-prod-www --env-vars-file=____envvars.yaml --min-instances=0 --max-instances=100 --cpu-throttling --allow-unauthenticated --ingress=all --cpu-boost",
3321
3570
  "echo -e "\\e[0Ksection_end:$(date +%s):deploy\\r\\e[0K"",
3322
3571
  "echo -e "\\e[0Ksection_start:$(date +%s):cleanup[collapsed=true]\\r\\e[0KCleanup"",
@@ -3325,78 +3574,28 @@ COPY --chown=node:node .yarn /app/.yarn",
3325
3574
  "gcloud artifacts docker images list europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/www --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/www@$version --quiet --delete-tags; done",
3326
3575
  "echo -e "\\e[0Ksection_end:$(date +%s):cleanup\\r\\e[0K"",
3327
3576
  "echo Uploading SBOM to Dependency Track",
3328
- "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/www" "https://pan-test-app-prod-www-unknown-host.example.com" "__sbom.json" vex.json || true",
3329
- ],
3330
- "services": [
3331
- {
3332
- "command": [
3333
- "--tls=false",
3334
- ],
3335
- "name": "docker:24.0.6-dind",
3336
- },
3577
+ "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/www" "https://$(printf %s "pan-test-app-prod-www-$CL_prod_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" "__sbom.json" vex.json || true",
3578
+ "echo "CL_GITLAB_ENVIRONMENT_URL=https://$(printf %s "pan-test-app-prod-www-$CL_prod_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" >> gitlab_environment.env",
3337
3579
  ],
3338
3580
  "stage": "deploy prod",
3339
3581
  "variables": {
3340
- "API_URL": "https://pan-test-app-prod-api-unknown-host.example.com/graphql",
3341
- "APP_DIR": "www",
3342
- "BUILD_INFO_BUILD_TIME": "01-01-2023 12:13:14",
3343
- "BUILD_INFO_CURRENT_VERSION": "3.2.1",
3344
- "BUILD_INFO_ID": "some-id",
3345
- "CLOUDSDK_CORE_DISABLE_PROMPTS": "1",
3346
- "DEPLOY_CLOUD_RUN_PROJECT_ID": "google-project-id",
3347
- "DEPLOY_CLOUD_RUN_REGION": "europe-west6",
3348
- "DOCKER_BUILDKIT": "1",
3349
- "DOCKER_CACHE_IMAGE": "europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/www",
3350
- "DOCKER_DRIVER": "overlay2",
3351
- "DOCKER_HOST": "tcp://0.0.0.0:2375",
3352
- "DOCKER_IMAGE": "europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/prod/www",
3353
- "DOCKER_IMAGE_TAG": "$CI_COMMIT_SHA",
3354
- "DOCKER_REGISTRY": "europe-west6-docker.pkg.dev",
3355
- "DOCKER_TLS_CERTDIR": "",
3356
- "ENV_SHORT": "prod",
3357
- "ENV_TYPE": "prod",
3358
- "ENV_VARS": "ENV_SHORT: 'prod'
3359
- APP_DIR: 'www'
3360
- ENV_TYPE: 'prod'
3361
- BUILD_INFO_ID: 'some-id'
3362
- BUILD_INFO_BUILD_TIME: '01-01-2023 12:13:14'
3363
- BUILD_INFO_CURRENT_VERSION: '3.2.1'
3364
- HOST: 'pan-test-app-prod-www-unknown-host.example.com'
3365
- ROOT_URL: 'https://pan-test-app-prod-www-unknown-host.example.com'
3366
- HOST_CANONICAL: 'pan-test-app-prod-www-unknown-host.example.com'
3367
- ROOT_URL_INTERNAL: 'https://pan-test-app-prod-www-unknown-host.example.com'
3368
- HOST_INTERNAL: 'pan-test-app-prod-www-unknown-host.example.com'
3369
- DEPLOY_CLOUD_RUN_PROJECT_ID: 'google-project-id'
3370
- DEPLOY_CLOUD_RUN_REGION: 'europe-west6'
3371
- GCLOUD_RUN_canonicalHostSuffix: '$CL_prod_www_GCLOUD_RUN_canonicalHostSuffix'
3372
- API_URL: 'https://pan-test-app-prod-api-unknown-host.example.com/graphql'
3373
- _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","API_URL"]'
3374
- ",
3375
- "GCLOUD_DEPLOY_credentialsKey": "$CL_prod_www_GCLOUD_DEPLOY_credentialsKey",
3376
- "GCLOUD_RUN_canonicalHostSuffix": "$CL_prod_www_GCLOUD_RUN_canonicalHostSuffix",
3377
- "HOST": "pan-test-app-prod-www-unknown-host.example.com",
3378
- "HOST_CANONICAL": "pan-test-app-prod-www-unknown-host.example.com",
3379
- "HOST_INTERNAL": "pan-test-app-prod-www-unknown-host.example.com",
3380
3582
  "KUBERNETES_CPU_REQUEST": "0.5",
3381
3583
  "KUBERNETES_MEMORY_LIMIT": "400Mi",
3382
3584
  "KUBERNETES_MEMORY_REQUEST": "200Mi",
3383
- "ROOT_URL": "https://pan-test-app-prod-www-unknown-host.example.com",
3384
- "ROOT_URL_INTERNAL": "https://pan-test-app-prod-www-unknown-host.example.com",
3385
- "_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","API_URL"]",
3386
3585
  },
3387
3586
  },
3388
3587
  "www 🚀 Deploy | stage ": {
3389
3588
  "allow_failure": false,
3390
3589
  "artifacts": {
3391
- "paths": [
3392
- "____envvars.yaml",
3393
- ],
3590
+ "reports": {
3591
+ "dotenv": "gitlab_environment.env",
3592
+ },
3394
3593
  },
3395
3594
  "environment": {
3396
3595
  "auto_stop_in": undefined,
3397
3596
  "name": "stage/www",
3398
3597
  "on_stop": "www 🛑 Stop ⚠️ | stage ",
3399
- "url": "https://pan-test-app-stage-www-unknown-host.example.com",
3598
+ "url": "$CL_GITLAB_ENVIRONMENT_URL",
3400
3599
  },
3401
3600
  "image": "path/to/docker/gcloud:the-version",
3402
3601
  "interruptible": true,
@@ -3427,13 +3626,74 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
3427
3626
  },
3428
3627
  ],
3429
3628
  "script": [
3629
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
3630
+ "export ENV_SHORT="stage"",
3631
+ "export APP_DIR="www"",
3632
+ "export ENV_TYPE="stage"",
3633
+ "export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
3634
+ "export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
3635
+ "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")"",
3636
+ "export HOST="$(printf %s "pan-test-app-stage-www-$CL_stage_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
3637
+ "export ROOT_URL="https://$(printf %s "pan-test-app-stage-www-$CL_stage_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
3638
+ "export HOST_INTERNAL="$(printf %s "pan-test-app-stage-www-$CL_stage_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
3639
+ "export HOST_CANONICAL="$(printf %s "pan-test-app-stage-www-$CL_stage_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
3640
+ "export ROOT_URL_INTERNAL="https://$(printf %s "pan-test-app-stage-www-$CL_stage_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
3641
+ "export DEPLOY_CLOUD_RUN_PROJECT_ID="google-project-id"",
3642
+ "export DEPLOY_CLOUD_RUN_REGION="europe-west6"",
3643
+ "export GCLOUD_DEPLOY_credentialsKey="$CL_stage_www_GCLOUD_DEPLOY_credentialsKey"",
3644
+ "export GCLOUD_RUN_canonicalHostSuffix="$CL_stage_www_GCLOUD_RUN_canonicalHostSuffix"",
3645
+ "export API_URL="https://$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')/graphql"",
3646
+ "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\\",\\"API_URL\\"]"",
3647
+ "export DOCKER_REGISTRY="europe-west6-docker.pkg.dev"",
3648
+ "export DOCKER_IMAGE="europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/stage/www"",
3649
+ "export DOCKER_CACHE_IMAGE="europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/www"",
3650
+ "export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"",
3651
+ "export CLOUDSDK_CORE_DISABLE_PROMPTS="1"",
3652
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
3430
3653
  "echo -e "\\e[0Ksection_start:$(date +%s):prepare[collapsed=true]\\r\\e[0KPrepare..."",
3431
3654
  "gcloud auth activate-service-account --key-file=<(echo "$CL_stage_www_GCLOUD_DEPLOY_credentialsKey")",
3432
3655
  "export GCLOUD_PROJECT_NUMBER=$(gcloud projects describe google-project-id --format="value(projectNumber)")",
3433
3656
  "echo "GCLOUD_PROJECT_NUMBER: $GCLOUD_PROJECT_NUMBER"",
3434
3657
  "echo -e "\\e[0Ksection_end:$(date +%s):prepare\\r\\e[0K"",
3658
+ "echo -e "\\e[0Ksection_start:$(date +%s):writeenvvars[collapsed=true]\\r\\e[0KWrite env vars to file"",
3659
+ "cat > ____envvars.yaml <<EOF
3660
+ ENV_SHORT: |-
3661
+ stage
3662
+ APP_DIR: |-
3663
+ www
3664
+ ENV_TYPE: |-
3665
+ stage
3666
+ BUILD_INFO_BUILD_ID: |-
3667
+ $(printf %s "$(git describe --tags 2>/dev/null || git rev-parse HEAD)" | sed 's/^/ /')
3668
+ BUILD_INFO_BUILD_TIME: |-
3669
+ $(printf %s "$CI_JOB_STARTED_AT" | sed 's/^/ /')
3670
+ BUILD_INFO_CURRENT_VERSION: |-
3671
+ $(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/^/ /')
3672
+ HOST: |-
3673
+ $(printf %s "$(printf %s "pan-test-app-stage-www-$CL_stage_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
3674
+ ROOT_URL: |-
3675
+ $(printf %s "https://$(printf %s "pan-test-app-stage-www-$CL_stage_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
3676
+ HOST_INTERNAL: |-
3677
+ $(printf %s "$(printf %s "pan-test-app-stage-www-$CL_stage_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
3678
+ HOST_CANONICAL: |-
3679
+ $(printf %s "$(printf %s "pan-test-app-stage-www-$CL_stage_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
3680
+ ROOT_URL_INTERNAL: |-
3681
+ $(printf %s "https://$(printf %s "pan-test-app-stage-www-$CL_stage_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
3682
+ DEPLOY_CLOUD_RUN_PROJECT_ID: |-
3683
+ google-project-id
3684
+ DEPLOY_CLOUD_RUN_REGION: |-
3685
+ europe-west6
3686
+ GCLOUD_RUN_canonicalHostSuffix: |-
3687
+ $(printf %s "$CL_stage_www_GCLOUD_RUN_canonicalHostSuffix" | sed 's/^/ /')
3688
+ API_URL: |-
3689
+ $(printf %s "https://$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')/graphql" | sed 's/^/ /')
3690
+ _ALL_ENV_VAR_KEYS: |-
3691
+ ["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","API_URL"]
3692
+
3693
+ EOF
3694
+ ",
3695
+ "echo -e "\\e[0Ksection_end:$(date +%s):writeenvvars\\r\\e[0K"",
3435
3696
  "echo -e "\\e[0Ksection_start:$(date +%s):deploy[collapsed=true]\\r\\e[0KDeploy to cloud run"",
3436
- "echo "$ENV_VARS" > ____envvars.yaml",
3437
3697
  "gcloud run deploy pan-test-app-stage-www --command="yarn,start" --image=europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/stage/www:$DOCKER_IMAGE_TAG --project=google-project-id --region=europe-west6 --labels=customer-name=pan,component-name=www,app-name=test-app,env-type=stage,env-name=stage,build-type=node,cloud-run-service-name=pan-test-app-stage-www --env-vars-file=____envvars.yaml --min-instances=0 --max-instances=100 --cpu-throttling --allow-unauthenticated --ingress=all --cpu-boost",
3438
3698
  "echo -e "\\e[0Ksection_end:$(date +%s):deploy\\r\\e[0K"",
3439
3699
  "echo -e "\\e[0Ksection_start:$(date +%s):cleanup[collapsed=true]\\r\\e[0KCleanup"",
@@ -3442,71 +3702,27 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
3442
3702
  "gcloud artifacts docker images list europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/www --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/www@$version --quiet --delete-tags; done",
3443
3703
  "echo -e "\\e[0Ksection_end:$(date +%s):cleanup\\r\\e[0K"",
3444
3704
  "echo Uploading SBOM to Dependency Track",
3445
- "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/www" "https://pan-test-app-stage-www-unknown-host.example.com" "__sbom.json" vex.json || true",
3446
- ],
3447
- "services": [
3448
- {
3449
- "command": [
3450
- "--tls=false",
3451
- ],
3452
- "name": "docker:24.0.6-dind",
3453
- },
3705
+ "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/www" "https://$(printf %s "pan-test-app-stage-www-$CL_stage_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" "__sbom.json" vex.json || true",
3706
+ "echo "CL_GITLAB_ENVIRONMENT_URL=https://$(printf %s "pan-test-app-stage-www-$CL_stage_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" >> gitlab_environment.env",
3454
3707
  ],
3455
3708
  "stage": "deploy stage",
3456
3709
  "variables": {
3457
- "API_URL": "https://pan-test-app-stage-api-unknown-host.example.com/graphql",
3458
- "APP_DIR": "www",
3459
- "BUILD_INFO_BUILD_TIME": "01-01-2023 12:13:14",
3460
- "BUILD_INFO_CURRENT_VERSION": "3.2.1",
3461
- "BUILD_INFO_ID": "some-id",
3462
- "CLOUDSDK_CORE_DISABLE_PROMPTS": "1",
3463
- "DEPLOY_CLOUD_RUN_PROJECT_ID": "google-project-id",
3464
- "DEPLOY_CLOUD_RUN_REGION": "europe-west6",
3465
- "DOCKER_BUILDKIT": "1",
3466
- "DOCKER_CACHE_IMAGE": "europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/www",
3467
- "DOCKER_DRIVER": "overlay2",
3468
- "DOCKER_HOST": "tcp://0.0.0.0:2375",
3469
- "DOCKER_IMAGE": "europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/stage/www",
3470
- "DOCKER_IMAGE_TAG": "$CI_COMMIT_SHA",
3471
- "DOCKER_REGISTRY": "europe-west6-docker.pkg.dev",
3472
- "DOCKER_TLS_CERTDIR": "",
3473
- "ENV_SHORT": "stage",
3474
- "ENV_TYPE": "stage",
3475
- "ENV_VARS": "ENV_SHORT: 'stage'
3476
- APP_DIR: 'www'
3477
- ENV_TYPE: 'stage'
3478
- BUILD_INFO_ID: 'some-id'
3479
- BUILD_INFO_BUILD_TIME: '01-01-2023 12:13:14'
3480
- BUILD_INFO_CURRENT_VERSION: '3.2.1'
3481
- HOST: 'pan-test-app-stage-www-unknown-host.example.com'
3482
- ROOT_URL: 'https://pan-test-app-stage-www-unknown-host.example.com'
3483
- HOST_CANONICAL: 'pan-test-app-stage-www-unknown-host.example.com'
3484
- ROOT_URL_INTERNAL: 'https://pan-test-app-stage-www-unknown-host.example.com'
3485
- HOST_INTERNAL: 'pan-test-app-stage-www-unknown-host.example.com'
3486
- DEPLOY_CLOUD_RUN_PROJECT_ID: 'google-project-id'
3487
- DEPLOY_CLOUD_RUN_REGION: 'europe-west6'
3488
- GCLOUD_RUN_canonicalHostSuffix: '$CL_stage_www_GCLOUD_RUN_canonicalHostSuffix'
3489
- API_URL: 'https://pan-test-app-stage-api-unknown-host.example.com/graphql'
3490
- _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","API_URL"]'
3491
- ",
3492
- "GCLOUD_DEPLOY_credentialsKey": "$CL_stage_www_GCLOUD_DEPLOY_credentialsKey",
3493
- "GCLOUD_RUN_canonicalHostSuffix": "$CL_stage_www_GCLOUD_RUN_canonicalHostSuffix",
3494
- "HOST": "pan-test-app-stage-www-unknown-host.example.com",
3495
- "HOST_CANONICAL": "pan-test-app-stage-www-unknown-host.example.com",
3496
- "HOST_INTERNAL": "pan-test-app-stage-www-unknown-host.example.com",
3497
3710
  "KUBERNETES_CPU_REQUEST": "0.5",
3498
3711
  "KUBERNETES_MEMORY_LIMIT": "400Mi",
3499
3712
  "KUBERNETES_MEMORY_REQUEST": "200Mi",
3500
- "ROOT_URL": "https://pan-test-app-stage-www-unknown-host.example.com",
3501
- "ROOT_URL_INTERNAL": "https://pan-test-app-stage-www-unknown-host.example.com",
3502
- "_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","API_URL"]",
3503
3713
  },
3504
3714
  },
3505
3715
  "www 🛑 Stop ⚠️ | prod ": {
3716
+ "allow_failure": true,
3717
+ "artifacts": {
3718
+ "reports": {
3719
+ "dotenv": "gitlab_environment.env",
3720
+ },
3721
+ },
3506
3722
  "environment": {
3507
3723
  "action": "stop",
3508
3724
  "name": "prod/www",
3509
- "url": "https://pan-test-app-prod-www-unknown-host.example.com",
3725
+ "url": "$CL_GITLAB_ENVIRONMENT_URL",
3510
3726
  },
3511
3727
  "image": "path/to/docker/gcloud:the-version",
3512
3728
  "interruptible": true,
@@ -3520,28 +3736,29 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
3520
3736
  },
3521
3737
  "rules": [
3522
3738
  {
3523
- "allow_failure": true,
3524
3739
  "if": "$CI_COMMIT_BRANCH =~ /^[0-9]+\\.([0-9]+|x)\\.x$/",
3525
3740
  "when": "on_success",
3526
3741
  },
3527
3742
  {
3528
- "allow_failure": true,
3529
3743
  "when": "manual",
3530
3744
  },
3531
3745
  ],
3532
3746
  "script": [
3747
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
3748
+ "export CLOUDSDK_CORE_DISABLE_PROMPTS="1"",
3749
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
3533
3750
  "set +e",
3534
3751
  "gcloud auth activate-service-account --key-file=<(echo "$CL_prod_www_GCLOUD_DEPLOY_credentialsKey")",
3535
3752
  "gcloud run services delete pan-test-app-prod-www --project=google-project-id --region=europe-west6",
3536
3753
  "gcloud artifacts docker images delete europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/prod/www --quiet --delete-tags",
3537
3754
  "gcloud artifacts docker images list europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/www --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/www@$version --quiet --delete-tags; done",
3538
3755
  "echo Disabling component in Dependency Track",
3539
- "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" disable "pan-test-app/www" "https://pan-test-app-prod-www-unknown-host.example.com" || true",
3756
+ "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" disable "pan-test-app/www" "https://$(printf %s "pan-test-app-prod-www-$CL_prod_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" || true",
3540
3757
  "set -e",
3758
+ "echo "CL_GITLAB_ENVIRONMENT_URL=https://$(printf %s "pan-test-app-prod-www-$CL_prod_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" >> gitlab_environment.env",
3541
3759
  ],
3542
3760
  "stage": "stop prod",
3543
3761
  "variables": {
3544
- "CLOUDSDK_CORE_DISABLE_PROMPTS": "1",
3545
3762
  "GIT_STRATEGY": "none",
3546
3763
  "KUBERNETES_CPU_REQUEST": "0.5",
3547
3764
  "KUBERNETES_MEMORY_LIMIT": "400Mi",
@@ -3549,10 +3766,16 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
3549
3766
  },
3550
3767
  },
3551
3768
  "www 🛑 Stop ⚠️ | stage ": {
3769
+ "allow_failure": true,
3770
+ "artifacts": {
3771
+ "reports": {
3772
+ "dotenv": "gitlab_environment.env",
3773
+ },
3774
+ },
3552
3775
  "environment": {
3553
3776
  "action": "stop",
3554
3777
  "name": "stage/www",
3555
- "url": "https://pan-test-app-stage-www-unknown-host.example.com",
3778
+ "url": "$CL_GITLAB_ENVIRONMENT_URL",
3556
3779
  },
3557
3780
  "image": "path/to/docker/gcloud:the-version",
3558
3781
  "interruptible": true,
@@ -3566,28 +3789,29 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
3566
3789
  },
3567
3790
  "rules": [
3568
3791
  {
3569
- "allow_failure": true,
3570
3792
  "if": "$CI_COMMIT_BRANCH =~ /^[0-9]+\\.([0-9]+|x)\\.x$/",
3571
3793
  "when": "on_success",
3572
3794
  },
3573
3795
  {
3574
- "allow_failure": true,
3575
3796
  "when": "manual",
3576
3797
  },
3577
3798
  ],
3578
3799
  "script": [
3800
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
3801
+ "export CLOUDSDK_CORE_DISABLE_PROMPTS="1"",
3802
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
3579
3803
  "set +e",
3580
3804
  "gcloud auth activate-service-account --key-file=<(echo "$CL_stage_www_GCLOUD_DEPLOY_credentialsKey")",
3581
3805
  "gcloud run services delete pan-test-app-stage-www --project=google-project-id --region=europe-west6",
3582
3806
  "gcloud artifacts docker images delete europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/stage/www --quiet --delete-tags",
3583
3807
  "gcloud artifacts docker images list europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/www --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/www@$version --quiet --delete-tags; done",
3584
3808
  "echo Disabling component in Dependency Track",
3585
- "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" disable "pan-test-app/www" "https://pan-test-app-stage-www-unknown-host.example.com" || true",
3809
+ "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" disable "pan-test-app/www" "https://$(printf %s "pan-test-app-stage-www-$CL_stage_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" || true",
3586
3810
  "set -e",
3811
+ "echo "CL_GITLAB_ENVIRONMENT_URL=https://$(printf %s "pan-test-app-stage-www-$CL_stage_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" >> gitlab_environment.env",
3587
3812
  ],
3588
3813
  "stage": "stop stage",
3589
3814
  "variables": {
3590
- "CLOUDSDK_CORE_DISABLE_PROMPTS": "1",
3591
3815
  "GIT_STRATEGY": "none",
3592
3816
  "KUBERNETES_CPU_REQUEST": "0.5",
3593
3817
  "KUBERNETES_MEMORY_LIMIT": "400Mi",
@@ -3612,6 +3836,8 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
3612
3836
  ],
3613
3837
  },
3614
3838
  "script": [
3839
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
3840
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
3615
3841
  "trivy fs --quiet --format cyclonedx --output "__sbom.json" www",
3616
3842
  ],
3617
3843
  "stage": "build",
@@ -3635,6 +3861,8 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
3635
3861
  ],
3636
3862
  },
3637
3863
  "script": [
3864
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
3865
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
3638
3866
  "trivy fs --quiet --format cyclonedx --output "__sbom.json" www",
3639
3867
  ],
3640
3868
  "stage": "build",
@@ -3687,7 +3915,7 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
3687
3915
  ],
3688
3916
  "variables": {
3689
3917
  "FF_USE_FASTZIP": "true",
3690
- "GIT_DEPTH": 1,
3918
+ "GIT_DEPTH": "1",
3691
3919
  },
3692
3920
  "workflow": {
3693
3921
  "rules": [