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