@catladder/pipeline 1.144.1 โ†’ 1.145.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (307) hide show
  1. package/dist/bash/BashExpression.d.ts +40 -0
  2. package/dist/bash/BashExpression.js +124 -0
  3. package/dist/bash/bashExpressionPerPipelineType.d.ts +6 -0
  4. package/dist/bash/bashExpressionPerPipelineType.js +11 -0
  5. package/dist/bash/bashYaml.d.ts +10 -0
  6. package/dist/bash/bashYaml.js +46 -0
  7. package/dist/bash/getInjectVarsScript.d.ts +2 -0
  8. package/dist/bash/getInjectVarsScript.js +45 -0
  9. package/dist/bash/replaceAsync.d.ts +2 -0
  10. package/dist/{pipeline/commitInfo/getCommitInfo.js โ†’ bash/replaceAsync.js} +49 -21
  11. package/dist/build/base/__tests__/createArtifactsConfig.test.js +3 -1
  12. package/dist/build/base/constants.js +3 -1
  13. package/dist/build/base/createAppBuildJob.d.ts +2 -1
  14. package/dist/build/base/createAppBuildJob.js +10 -6
  15. package/dist/build/base/createArtifactsConfig.d.ts +1 -1
  16. package/dist/build/base/createArtifactsConfig.js +3 -1
  17. package/dist/build/base/index.js +3 -1
  18. package/dist/build/base/writeBuildInfo.js +4 -3
  19. package/dist/build/base/writeDotEnv.js +12 -3
  20. package/dist/build/custom/__tests__/testJob.test.js +3 -1
  21. package/dist/build/custom/buildJob.js +4 -12
  22. package/dist/build/custom/index.js +3 -1
  23. package/dist/build/custom/testJob.d.ts +1 -1
  24. package/dist/build/custom/testJob.js +18 -14
  25. package/dist/build/docker.d.ts +5 -31
  26. package/dist/build/docker.js +16 -9
  27. package/dist/build/index.d.ts +1 -1
  28. package/dist/build/index.js +13 -7
  29. package/dist/build/node/buildJob.js +4 -12
  30. package/dist/build/node/cache.js +6 -3
  31. package/dist/build/node/constants.js +3 -1
  32. package/dist/build/node/index.js +3 -1
  33. package/dist/build/node/meteor.js +5 -2
  34. package/dist/build/node/testJob.js +18 -14
  35. package/dist/build/node/yarn.d.ts +3 -2
  36. package/dist/build/node/yarn.js +6 -3
  37. package/dist/build/rails/build.js +3 -1
  38. package/dist/build/rails/index.js +3 -1
  39. package/dist/build/rails/test.js +15 -11
  40. package/dist/build/sbom.js +3 -1
  41. package/dist/build/types.d.ts +24 -18
  42. package/dist/build/types.js +3 -1
  43. package/dist/bundles/catladder-gitlab/index.js +3 -3
  44. package/dist/catladder-gitlab.js +10 -54
  45. package/dist/config/__tests__/configruedEnvs.test.js +3 -1
  46. package/dist/config/configruedEnvs.js +3 -1
  47. package/dist/config/index.js +13 -7
  48. package/dist/config/readConfig.js +6 -5
  49. package/dist/constants.js +5 -3
  50. package/dist/context/__tests__/resolveReferences.test.js +40 -8
  51. package/dist/context/getBuildInfoVariables.d.ts +7 -0
  52. package/dist/context/getBuildInfoVariables.js +29 -0
  53. package/dist/context/getEnvConfig.js +3 -1
  54. package/dist/context/getEnvType.js +3 -1
  55. package/dist/context/getEnvironment.d.ts +3 -3
  56. package/dist/context/getEnvironment.js +10 -14
  57. package/dist/context/getEnvironmentContext.d.ts +7 -3
  58. package/dist/context/getEnvironmentContext.js +21 -11
  59. package/dist/context/getEnvironmentVariables.d.ts +26 -5
  60. package/dist/context/getEnvironmentVariables.js +41 -25
  61. package/dist/context/getLabels.js +4 -2
  62. package/dist/context/getReviewSlug.d.ts +4 -0
  63. package/dist/context/getReviewSlug.js +22 -0
  64. package/dist/context/index.d.ts +12 -3
  65. package/dist/context/index.js +21 -15
  66. package/dist/context/resolveReferences.d.ts +3 -1
  67. package/dist/context/resolveReferences.js +53 -21
  68. package/dist/context/transformJobOnlyVars.d.ts +5 -2
  69. package/dist/context/transformJobOnlyVars.js +4 -2
  70. package/dist/context/utils/envVars.d.ts +1 -1
  71. package/dist/context/utils/envVars.js +5 -2
  72. package/dist/defaults/index.js +3 -1
  73. package/dist/deploy/base/deploy.d.ts +1 -1
  74. package/dist/deploy/base/deploy.js +12 -11
  75. package/dist/deploy/base/index.js +3 -1
  76. package/dist/deploy/base/rollback.d.ts +1 -1
  77. package/dist/deploy/base/rollback.js +13 -9
  78. package/dist/deploy/base/stop.d.ts +1 -1
  79. package/dist/deploy/base/stop.js +16 -11
  80. package/dist/deploy/base/types.d.ts +1 -1
  81. package/dist/deploy/base/types.js +3 -1
  82. package/dist/deploy/base/variables.js +3 -1
  83. package/dist/deploy/cloudRun/artifactsRegistry.d.ts +2 -1
  84. package/dist/deploy/cloudRun/artifactsRegistry.js +6 -4
  85. package/dist/deploy/cloudRun/cleanup.js +3 -1
  86. package/dist/deploy/cloudRun/cloudRunRevisions.js +3 -1
  87. package/dist/deploy/cloudRun/createJobs/cloudRunJobs.js +8 -5
  88. package/dist/deploy/cloudRun/createJobs/cloudRunServices.d.ts +2 -2
  89. package/dist/deploy/cloudRun/createJobs/cloudRunServices.js +6 -3
  90. package/dist/deploy/cloudRun/createJobs/common.d.ts +3 -3
  91. package/dist/deploy/cloudRun/createJobs/common.js +3 -1
  92. package/dist/deploy/cloudRun/createJobs/constants.d.ts +1 -0
  93. package/dist/deploy/cloudRun/createJobs/constants.js +7 -0
  94. package/dist/deploy/cloudRun/createJobs/getCloudRunDeployScripts.js +9 -2
  95. package/dist/deploy/cloudRun/createJobs/getCloudRunStopScripts.js +3 -1
  96. package/dist/deploy/cloudRun/createJobs/index.js +25 -8
  97. package/dist/deploy/cloudRun/createJobs/volumes.js +3 -1
  98. package/dist/deploy/cloudRun/index.js +5 -3
  99. package/dist/deploy/cloudRun/utils/createArgsString.d.ts +2 -1
  100. package/dist/deploy/cloudRun/utils/createArgsString.js +3 -1
  101. package/dist/deploy/cloudRun/utils/database.js +13 -13
  102. package/dist/deploy/cloudRun/utils/gcloudServiceAccountLoginCommands.js +3 -1
  103. package/dist/deploy/cloudRun/utils/getServiceName.d.ts +1 -1
  104. package/dist/deploy/cloudRun/utils/getServiceName.js +3 -1
  105. package/dist/deploy/cloudRun/utils/jobName.d.ts +2 -1
  106. package/dist/deploy/cloudRun/utils/jobName.js +4 -2
  107. package/dist/deploy/cloudRun/utils/removeFirstLinesFromCommandOutput.js +3 -1
  108. package/dist/deploy/cloudSql/utils.d.ts +2 -1
  109. package/dist/deploy/cloudSql/utils.js +7 -2
  110. package/dist/deploy/custom/deployJob.js +3 -1
  111. package/dist/deploy/custom/index.js +3 -1
  112. package/dist/deploy/dockerTag/deployJob.js +3 -1
  113. package/dist/deploy/dockerTag/index.js +3 -1
  114. package/dist/deploy/index.d.ts +4 -3
  115. package/dist/deploy/index.js +13 -7
  116. package/dist/deploy/kubernetes/additionalSecretKeys.js +3 -1
  117. package/dist/deploy/kubernetes/cloudSql/index.d.ts +3 -2
  118. package/dist/deploy/kubernetes/cloudSql/index.js +6 -4
  119. package/dist/deploy/kubernetes/deployJob.js +22 -15
  120. package/dist/deploy/kubernetes/index.js +51 -14
  121. package/dist/deploy/kubernetes/kubeEnv.d.ts +3 -2
  122. package/dist/deploy/kubernetes/kubeEnv.js +7 -4
  123. package/dist/deploy/kubernetes/kubeValues.d.ts +2 -2
  124. package/dist/deploy/kubernetes/kubeValues.js +3 -2
  125. package/dist/deploy/kubernetes/mongodb.js +3 -1
  126. package/dist/deploy/kubernetes/processSecretsAsFiles.d.ts +2 -1
  127. package/dist/deploy/kubernetes/processSecretsAsFiles.js +3 -1
  128. package/dist/deploy/sbom.js +3 -1
  129. package/dist/deploy/types/base.d.ts +8 -2
  130. package/dist/deploy/types/base.js +3 -1
  131. package/dist/deploy/types/custom.d.ts +1 -1
  132. package/dist/deploy/types/custom.js +3 -1
  133. package/dist/deploy/types/dockerTag.d.ts +1 -1
  134. package/dist/deploy/types/dockerTag.js +3 -1
  135. package/dist/deploy/types/googleCloudRun.d.ts +19 -18
  136. package/dist/deploy/types/googleCloudRun.js +3 -1
  137. package/dist/deploy/types/index.d.ts +6 -6
  138. package/dist/deploy/types/index.js +13 -7
  139. package/dist/deploy/types/kubernetes.d.ts +22 -22
  140. package/dist/deploy/types/kubernetes.js +3 -1
  141. package/dist/deploy/utils.js +3 -1
  142. package/dist/index.d.ts +3 -2
  143. package/dist/index.js +16 -9
  144. package/dist/packageInfos.d.ts +2 -0
  145. package/dist/packageInfos.js +14 -0
  146. package/dist/pipeline/createAllJobs.d.ts +13 -5
  147. package/dist/pipeline/createAllJobs.js +21 -10
  148. package/dist/pipeline/createChildPipeline.d.ts +1 -1
  149. package/dist/pipeline/createChildPipeline.js +24 -7
  150. package/dist/pipeline/createJobsForComponent.d.ts +3 -3
  151. package/dist/pipeline/createJobsForComponent.js +19 -18
  152. package/dist/pipeline/createMainPipeline.d.ts +3 -0
  153. package/dist/pipeline/createMainPipeline.js +248 -0
  154. package/dist/pipeline/generatePipelineFiles.d.ts +2 -0
  155. package/dist/pipeline/generatePipelineFiles.js +178 -0
  156. package/dist/pipeline/getPipelineStages.js +3 -1
  157. package/dist/pipeline/gitlab/createGitlabJobs.d.ts +15 -5
  158. package/dist/pipeline/gitlab/createGitlabJobs.js +98 -25
  159. package/dist/pipeline/gitlab/createGitlabPipeline.d.ts +7 -2
  160. package/dist/pipeline/gitlab/createGitlabPipeline.js +34 -17
  161. package/dist/pipeline/gitlab/getPipelineTriggerForGitlabChildPipeline.d.ts +1 -0
  162. package/dist/pipeline/gitlab/getPipelineTriggerForGitlabChildPipeline.js +29 -0
  163. package/dist/pipeline/gitlab/gitlabReleaseJobs.d.ts +33 -0
  164. package/dist/pipeline/gitlab/gitlabReleaseJobs.js +24 -0
  165. package/dist/pipeline/index.d.ts +3 -1
  166. package/dist/pipeline/index.js +16 -8
  167. package/dist/pipeline/packageManager.js +4 -2
  168. package/dist/pipeline/yarn/yarnUtils.js +6 -4
  169. package/dist/rules/index.d.ts +4 -1
  170. package/dist/rules/index.js +25 -18
  171. package/dist/runner/index.d.ts +1 -1
  172. package/dist/runner/index.js +3 -1
  173. package/dist/tsconfig.tsbuildinfo +1 -1
  174. package/dist/types/config.d.ts +18 -15
  175. package/dist/types/config.js +5 -2
  176. package/dist/types/context.d.ts +37 -32
  177. package/dist/types/context.js +3 -1
  178. package/dist/types/environmentContext.d.ts +11 -7
  179. package/dist/types/environmentContext.js +3 -1
  180. package/dist/types/gitlab-ci-yml.d.ts +30 -30
  181. package/dist/types/gitlab-ci-yml.js +3 -2
  182. package/dist/types/gitlab-types.d.ts +4 -6
  183. package/dist/types/gitlab-types.js +3 -1
  184. package/dist/types/index.js +13 -7
  185. package/dist/types/jobs.d.ts +23 -6
  186. package/dist/types/jobs.js +3 -1
  187. package/dist/types/pipeline.d.ts +4 -3
  188. package/dist/types/pipeline.js +3 -1
  189. package/dist/types/utils.d.ts +1 -1
  190. package/dist/types/utils.js +3 -1
  191. package/dist/utils/gitlab.js +3 -1
  192. package/dist/utils/index.d.ts +1 -1
  193. package/dist/utils/index.js +3 -1
  194. package/dist/utils/writeFiles.d.ts +7 -0
  195. package/dist/{pipeline/commitInfo/getBuildId.js โ†’ utils/writeFiles.js} +39 -22
  196. package/examples/__snapshots__/cloud-run-memory-limit.ts.snap +480 -384
  197. package/examples/__snapshots__/cloud-run-meteor-with-worker.ts.snap +462 -366
  198. package/examples/__snapshots__/cloud-run-no-cpu-throttling.ts.snap +480 -384
  199. package/examples/__snapshots__/cloud-run-no-service.ts.snap +501 -393
  200. package/examples/__snapshots__/cloud-run-non-public.ts.snap +480 -384
  201. package/examples/__snapshots__/cloud-run-post-stop-job.ts.snap +489 -392
  202. package/examples/__snapshots__/cloud-run-service-gen2.ts.snap +480 -384
  203. package/examples/__snapshots__/cloud-run-service-with-volumes.ts.snap +501 -401
  204. package/examples/__snapshots__/cloud-run-with-sql-reuse-db.ts.snap +1155 -915
  205. package/examples/__snapshots__/cloud-run-with-sql.ts.snap +1116 -888
  206. package/examples/__snapshots__/cloud-run-with-worker.ts.snap +482 -386
  207. package/examples/__snapshots__/custom-build-job-with-tests.ts.snap +452 -356
  208. package/examples/__snapshots__/custom-build-job.ts.snap +434 -350
  209. package/examples/__snapshots__/custom-deploy.ts.snap +319 -223
  210. package/examples/__snapshots__/custom-envs.ts.snap +123 -81
  211. package/examples/__snapshots__/custom-sbom-java.ts.snap +434 -350
  212. package/examples/__snapshots__/kubernetes-application-customization.ts.snap +846 -969
  213. package/examples/__snapshots__/kubernetes-with-cloud-sql-legacy.ts.snap +886 -957
  214. package/examples/__snapshots__/kubernetes-with-cloud-sql.ts.snap +894 -969
  215. package/examples/__snapshots__/kubernetes-with-jobs.ts.snap +1626 -1728
  216. package/examples/__snapshots__/kubernetes-with-mongodb.ts.snap +974 -1137
  217. package/examples/__snapshots__/local-dot-env.ts.snap +480 -384
  218. package/examples/__snapshots__/meteor-kubernetes.ts.snap +906 -1069
  219. package/examples/__snapshots__/multiline-var.ts.snap +4500 -0
  220. package/examples/__snapshots__/native-app.ts.snap +706 -578
  221. package/examples/__snapshots__/node-build-with-custom-image.ts.snap +480 -384
  222. package/examples/__snapshots__/node-build-with-docker-additions.ts.snap +488 -384
  223. package/examples/__snapshots__/rails-k8s-with-worker.ts.snap +1656 -1942
  224. package/examples/__snapshots__/wait-for-other-deploy.ts.snap +287 -231
  225. package/examples/custom-deploy.ts +7 -7
  226. package/examples/multiline-var.ts +64 -0
  227. package/package.json +5 -8
  228. package/src/bash/BashExpression.ts +81 -0
  229. package/src/bash/bashExpressionPerPipelineType.ts +16 -0
  230. package/src/bash/bashYaml.ts +46 -0
  231. package/src/bash/getInjectVarsScript.ts +12 -0
  232. package/src/bash/replaceAsync.ts +50 -0
  233. package/src/build/base/createAppBuildJob.ts +6 -2
  234. package/src/build/base/writeBuildInfo.ts +1 -1
  235. package/src/build/base/writeDotEnv.ts +6 -1
  236. package/src/build/custom/buildJob.ts +2 -4
  237. package/src/build/custom/testJob.ts +3 -2
  238. package/src/build/docker.ts +15 -7
  239. package/src/build/node/buildJob.ts +1 -3
  240. package/src/build/node/testJob.ts +3 -2
  241. package/src/build/node/yarn.ts +9 -4
  242. package/src/build/rails/test.ts +2 -1
  243. package/src/build/types.ts +8 -1
  244. package/src/catladder-gitlab.ts +8 -55
  245. package/src/config/readConfig.ts +2 -3
  246. package/src/constants.ts +5 -2
  247. package/src/context/__tests__/resolveReferences.test.ts +11 -6
  248. package/src/context/getBuildInfoVariables.ts +40 -0
  249. package/src/context/getEnvironment.ts +7 -30
  250. package/src/context/getEnvironmentContext.ts +25 -29
  251. package/src/context/getEnvironmentVariables.ts +61 -36
  252. package/src/context/getReviewSlug.ts +27 -0
  253. package/src/context/index.ts +24 -23
  254. package/src/context/resolveReferences.ts +28 -8
  255. package/src/context/transformJobOnlyVars.ts +5 -2
  256. package/src/context/utils/envVars.ts +2 -1
  257. package/src/deploy/base/deploy.ts +20 -18
  258. package/src/deploy/base/rollback.ts +8 -10
  259. package/src/deploy/base/stop.ts +8 -9
  260. package/src/deploy/cloudRun/artifactsRegistry.ts +9 -4
  261. package/src/deploy/cloudRun/createJobs/cloudRunJobs.ts +12 -7
  262. package/src/deploy/cloudRun/createJobs/cloudRunServices.ts +3 -2
  263. package/src/deploy/cloudRun/createJobs/constants.ts +1 -0
  264. package/src/deploy/cloudRun/createJobs/getCloudRunDeployScripts.ts +20 -2
  265. package/src/deploy/cloudRun/createJobs/index.ts +17 -8
  266. package/src/deploy/cloudRun/index.ts +14 -6
  267. package/src/deploy/cloudRun/utils/createArgsString.ts +2 -1
  268. package/src/deploy/cloudRun/utils/database.ts +2 -2
  269. package/src/deploy/cloudRun/utils/jobName.ts +7 -2
  270. package/src/deploy/cloudSql/utils.ts +12 -9
  271. package/src/deploy/index.ts +2 -1
  272. package/src/deploy/kubernetes/cloudSql/index.ts +3 -2
  273. package/src/deploy/kubernetes/deployJob.ts +24 -10
  274. package/src/deploy/kubernetes/index.ts +15 -8
  275. package/src/deploy/kubernetes/kubeEnv.ts +8 -6
  276. package/src/deploy/kubernetes/kubeValues.ts +0 -1
  277. package/src/deploy/kubernetes/processSecretsAsFiles.ts +2 -1
  278. package/src/deploy/types/base.ts +6 -0
  279. package/src/deploy/types/googleCloudRun.ts +2 -0
  280. package/src/index.ts +2 -1
  281. package/src/packageInfos.ts +10 -0
  282. package/src/pipeline/createAllJobs.ts +24 -10
  283. package/src/pipeline/createChildPipeline.ts +19 -8
  284. package/src/pipeline/createJobsForComponent.ts +14 -22
  285. package/src/pipeline/createMainPipeline.ts +88 -0
  286. package/src/pipeline/generatePipelineFiles.ts +29 -0
  287. package/src/pipeline/gitlab/createGitlabJobs.ts +174 -51
  288. package/src/pipeline/gitlab/createGitlabPipeline.ts +16 -14
  289. package/src/pipeline/gitlab/getPipelineTriggerForGitlabChildPipeline.ts +46 -0
  290. package/src/pipeline/gitlab/gitlabReleaseJobs.ts +20 -0
  291. package/src/pipeline/index.ts +2 -0
  292. package/src/rules/index.ts +15 -9
  293. package/src/types/config.ts +11 -2
  294. package/src/types/context.ts +39 -26
  295. package/src/types/environmentContext.ts +12 -6
  296. package/src/types/gitlab-ci-yml.ts +0 -1
  297. package/src/types/gitlab-types.ts +5 -4
  298. package/src/types/jobs.ts +28 -3
  299. package/src/types/pipeline.ts +4 -0
  300. package/src/utils/writeFiles.ts +40 -0
  301. package/dist/deploy/cloudRun/createJobs/variables.d.ts +0 -5
  302. package/dist/deploy/cloudRun/createJobs/variables.js +0 -19
  303. package/dist/pipeline/commitInfo/getBuildId.d.ts +0 -6
  304. package/dist/pipeline/commitInfo/getCommitInfo.d.ts +0 -2
  305. package/src/deploy/cloudRun/createJobs/variables.ts +0 -21
  306. package/src/pipeline/commitInfo/getBuildId.ts +0 -17
  307. package/src/pipeline/commitInfo/getCommitInfo.ts +0 -15
@@ -33,6 +33,9 @@ exports[`matches snapshot 1`] = `
33
33
  ],
34
34
  },
35
35
  "script": [
36
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
37
+ "export APP_PATH="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,21 @@ 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="unknown-host.example.com"",
115
+ "export ROOT_URL="https://unknown-host.example.com"",
116
+ "export HOST_INTERNAL="unknown-host.example.com"",
117
+ "export HOST_CANONICAL="unknown-host.example.com"",
118
+ "export ROOT_URL_INTERNAL="https://unknown-host.example.com"",
119
+ "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\\"]"",
120
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
121
+ "echo '{"id":"$(git describe --tags 2>/dev/null || git rev-parse HEAD)","time":"$CI_JOB_STARTED_AT"}' > www/__build_info.json",
106
122
  "echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"",
107
123
  "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
108
124
  "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
@@ -119,20 +135,9 @@ exports[`matches snapshot 1`] = `
119
135
  ],
120
136
  "stage": "build",
121
137
  "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
- "ENV_SHORT": "dev",
127
- "ENV_TYPE": "dev",
128
- "HOST": "unknown-host.example.com",
129
- "HOST_CANONICAL": "unknown-host.example.com",
130
138
  "KUBERNETES_CPU_REQUEST": "0.5",
131
139
  "KUBERNETES_MEMORY_LIMIT": "4Gi",
132
140
  "KUBERNETES_MEMORY_REQUEST": "2Gi",
133
- "ROOT_URL": "https://unknown-host.example.com",
134
- "ROOT_URL_INTERNAL": "https://unknown-host.example.com",
135
- "_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"]",
136
141
  },
137
142
  },
138
143
  "www ๐Ÿ”จ docker | dev ": {
@@ -158,6 +163,22 @@ exports[`matches snapshot 1`] = `
158
163
  ],
159
164
  },
160
165
  "script": [
166
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
167
+ "export APP_DIR="www"",
168
+ "export DOCKER_DIR="."",
169
+ "export DOCKER_REGISTRY="$CI_REGISTRY"",
170
+ "export DOCKER_CACHE_IMAGE="$CI_REGISTRY_IMAGE/caches/www"",
171
+ "export DOCKER_IMAGE_NAME="dev/www"",
172
+ "export DOCKER_IMAGE="$CI_REGISTRY_IMAGE/$DOCKER_IMAGE_NAME"",
173
+ "export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"",
174
+ "export DOCKER_COPY_AND_INSTALL_APP="COPY --chown=node:node $APP_DIR .
175
+ RUN yarn plugin import workspace-tools
176
+ RUN yarn workspaces focus --production && yarn rebuild"",
177
+ "export DOCKER_COPY_WORKSPACE_FILES="COPY --chown=node:node www/package.json /app/www/package.json
178
+ COPY --chown=node:node www/yarn.lock /app/www/yarn.lock
179
+ COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
180
+ COPY --chown=node:node .yarn /app/.yarn"",
181
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
161
182
  "ensureNodeDockerfile",
162
183
  "echo -e "\\e[0Ksection_start:$(date +%s):docker-login[collapsed=true]\\r\\e[0KDocker Login"",
163
184
  "docker login --username gitlab-ci-token --password $CI_JOB_TOKEN $CI_REGISTRY",
@@ -181,25 +202,9 @@ exports[`matches snapshot 1`] = `
181
202
  ],
182
203
  "stage": "build",
183
204
  "variables": {
184
- "APP_DIR": "www",
185
- "DOCKERFILE_ADDITIONS": undefined,
186
- "DOCKERFILE_ADDITIONS_END": undefined,
187
205
  "DOCKER_BUILDKIT": "1",
188
- "DOCKER_CACHE_IMAGE": "$CI_REGISTRY_IMAGE/caches/www",
189
- "DOCKER_COPY_AND_INSTALL_APP": "COPY --chown=node:node $APP_DIR .
190
- RUN yarn plugin import workspace-tools
191
- RUN yarn workspaces focus --production && yarn rebuild",
192
- "DOCKER_COPY_WORKSPACE_FILES": "COPY --chown=node:node www/package.json /app/www/package.json
193
- COPY --chown=node:node www/yarn.lock /app/www/yarn.lock
194
- COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
195
- COPY --chown=node:node .yarn /app/.yarn",
196
- "DOCKER_DIR": ".",
197
206
  "DOCKER_DRIVER": "overlay2",
198
207
  "DOCKER_HOST": "tcp://0.0.0.0:2375",
199
- "DOCKER_IMAGE": "$CI_REGISTRY_IMAGE/$DOCKER_IMAGE_NAME",
200
- "DOCKER_IMAGE_NAME": "dev/www",
201
- "DOCKER_IMAGE_TAG": "$CI_COMMIT_SHA",
202
- "DOCKER_REGISTRY": "$CI_REGISTRY",
203
208
  "DOCKER_TLS_CERTDIR": "",
204
209
  "KUBERNETES_CPU_REQUEST": "0.5",
205
210
  "KUBERNETES_MEMORY_LIMIT": "2Gi",
@@ -208,12 +213,17 @@ COPY --chown=node:node .yarn /app/.yarn",
208
213
  },
209
214
  "www ๐Ÿš€ Deploy | dev ": {
210
215
  "allow_failure": false,
216
+ "artifacts": {
217
+ "reports": {
218
+ "dotenv": "gitlab_environment.env",
219
+ },
220
+ },
211
221
  "cache": [],
212
222
  "environment": {
213
223
  "auto_stop_in": "4 weeks",
214
224
  "name": "dev/www",
215
225
  "on_stop": "www ๐Ÿ›‘ Stop โš ๏ธ | dev ",
216
- "url": "https://unknown-host.example.com",
226
+ "url": "$CL_GITLAB_ENVIRONMENT_URL",
217
227
  },
218
228
  "image": "path/to/docker/jobs-default:the-version",
219
229
  "interruptible": true,
@@ -256,40 +266,50 @@ COPY --chown=node:node .yarn /app/.yarn",
256
266
  },
257
267
  ],
258
268
  "script": [
269
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
270
+ "export ENV_SHORT="dev"",
271
+ "export APP_DIR="www"",
272
+ "export ENV_TYPE="dev"",
273
+ "export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
274
+ "export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
275
+ "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")"",
276
+ "export HOST="unknown-host.example.com"",
277
+ "export ROOT_URL="https://unknown-host.example.com"",
278
+ "export HOST_INTERNAL="unknown-host.example.com"",
279
+ "export HOST_CANONICAL="unknown-host.example.com"",
280
+ "export ROOT_URL_INTERNAL="https://unknown-host.example.com"",
281
+ "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\\"]"",
282
+ "export DOCKER_REGISTRY="$CI_REGISTRY"",
283
+ "export DOCKER_CACHE_IMAGE="$CI_REGISTRY_IMAGE/caches/www"",
284
+ "export DOCKER_IMAGE_NAME="dev/www"",
285
+ "export DOCKER_IMAGE="$CI_REGISTRY_IMAGE/$DOCKER_IMAGE_NAME"",
286
+ "export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"",
287
+ "export DEPLOY_API_KEY="$CL_dev_www_DEPLOY_API_KEY"",
288
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
259
289
  "cd www",
260
290
  "echo 'would deploy'",
261
291
  "echo Uploading SBOM to Dependency Track",
262
292
  "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/www" "https://unknown-host.example.com" "__sbom.json" vex.json || true",
293
+ "echo "CL_GITLAB_ENVIRONMENT_URL=https://unknown-host.example.com" >> gitlab_environment.env",
263
294
  ],
264
295
  "stage": "deploy dev",
265
296
  "variables": {
266
- "APP_DIR": "www",
267
- "BUILD_INFO_BUILD_TIME": "01-01-2023 12:13:14",
268
- "BUILD_INFO_CURRENT_VERSION": "3.2.1",
269
- "BUILD_INFO_ID": "some-id",
270
- "DEPLOY_API_KEY": "$CL_dev_www_DEPLOY_API_KEY",
271
- "DOCKER_CACHE_IMAGE": "$CI_REGISTRY_IMAGE/caches/www",
272
- "DOCKER_IMAGE": "$CI_REGISTRY_IMAGE/$DOCKER_IMAGE_NAME",
273
- "DOCKER_IMAGE_NAME": "dev/www",
274
- "DOCKER_IMAGE_TAG": "$CI_COMMIT_SHA",
275
- "DOCKER_REGISTRY": "$CI_REGISTRY",
276
- "ENV_SHORT": "dev",
277
- "ENV_TYPE": "dev",
278
- "HOST": "unknown-host.example.com",
279
- "HOST_CANONICAL": "unknown-host.example.com",
280
297
  "KUBERNETES_CPU_REQUEST": "1",
281
298
  "KUBERNETES_MEMORY_LIMIT": "2048Mi",
282
299
  "KUBERNETES_MEMORY_REQUEST": "1024Mi",
283
- "ROOT_URL": "https://unknown-host.example.com",
284
- "ROOT_URL_INTERNAL": "https://unknown-host.example.com",
285
- "_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"]",
286
300
  },
287
301
  },
288
302
  "www ๐Ÿ›‘ Stop โš ๏ธ | dev ": {
303
+ "allow_failure": true,
304
+ "artifacts": {
305
+ "reports": {
306
+ "dotenv": "gitlab_environment.env",
307
+ },
308
+ },
289
309
  "environment": {
290
310
  "action": "stop",
291
311
  "name": "dev/www",
292
- "url": "https://unknown-host.example.com",
312
+ "url": "$CL_GITLAB_ENVIRONMENT_URL",
293
313
  },
294
314
  "image": "path/to/docker/jobs-default:the-version",
295
315
  "interruptible": true,
@@ -303,27 +323,28 @@ COPY --chown=node:node .yarn /app/.yarn",
303
323
  },
304
324
  "rules": [
305
325
  {
306
- "allow_failure": true,
307
326
  "if": "$CI_COMMIT_BRANCH =~ /^[0-9]+\\.([0-9]+|x)\\.x$/",
308
327
  "when": "on_success",
309
328
  },
310
329
  {
311
- "allow_failure": true,
312
330
  "when": "manual",
313
331
  },
314
332
  ],
315
333
  "script": [
334
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
335
+ "export DEPLOY_API_KEY="$CL_dev_www_DEPLOY_API_KEY"",
336
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
316
337
  "echo 'would stop'",
317
338
  "echo Disabling component in Dependency Track",
318
339
  "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" disable "pan-test-app/www" "https://unknown-host.example.com" || true",
340
+ "echo "CL_GITLAB_ENVIRONMENT_URL=https://unknown-host.example.com" >> gitlab_environment.env",
319
341
  ],
320
342
  "stage": "stop dev",
321
343
  "variables": {
322
- "DEPLOY_API_KEY": "$CL_dev_www_DEPLOY_API_KEY",
323
344
  "GIT_STRATEGY": "none",
324
- "KUBERNETES_CPU_REQUEST": "1",
325
- "KUBERNETES_MEMORY_LIMIT": "2048Mi",
326
- "KUBERNETES_MEMORY_REQUEST": "1024Mi",
345
+ "KUBERNETES_CPU_REQUEST": "0.5",
346
+ "KUBERNETES_MEMORY_LIMIT": "400Mi",
347
+ "KUBERNETES_MEMORY_REQUEST": "200Mi",
327
348
  },
328
349
  },
329
350
  "www ๐Ÿ›ก audit": {
@@ -339,12 +360,14 @@ COPY --chown=node:node .yarn /app/.yarn",
339
360
  ],
340
361
  },
341
362
  "script": [
363
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
364
+ "export APP_PATH="www"",
365
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
342
366
  "cd www",
343
367
  "yarn npm audit --environment production",
344
368
  ],
345
369
  "stage": "test",
346
370
  "variables": {
347
- "APP_PATH": "www",
348
371
  "KUBERNETES_CPU_REQUEST": "0.5",
349
372
  "KUBERNETES_MEMORY_LIMIT": "4Gi",
350
373
  "KUBERNETES_MEMORY_REQUEST": "2Gi",
@@ -378,6 +401,9 @@ COPY --chown=node:node .yarn /app/.yarn",
378
401
  ],
379
402
  },
380
403
  "script": [
404
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
405
+ "export APP_PATH="www"",
406
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
381
407
  "echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"",
382
408
  "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
383
409
  "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
@@ -394,7 +420,6 @@ COPY --chown=node:node .yarn /app/.yarn",
394
420
  ],
395
421
  "stage": "test",
396
422
  "variables": {
397
- "APP_PATH": "www",
398
423
  "KUBERNETES_CPU_REQUEST": "0.5",
399
424
  "KUBERNETES_MEMORY_LIMIT": "4Gi",
400
425
  "KUBERNETES_MEMORY_REQUEST": "2Gi",
@@ -418,6 +443,8 @@ COPY --chown=node:node .yarn /app/.yarn",
418
443
  ],
419
444
  },
420
445
  "script": [
446
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
447
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
421
448
  "trivy fs --quiet --format cyclonedx --output "__sbom.json" www",
422
449
  ],
423
450
  "stage": "build",
@@ -470,7 +497,7 @@ COPY --chown=node:node .yarn /app/.yarn",
470
497
  ],
471
498
  "variables": {
472
499
  "FF_USE_FASTZIP": "true",
473
- "GIT_DEPTH": 1,
500
+ "GIT_DEPTH": "1",
474
501
  },
475
502
  "workflow": {
476
503
  "rules": [
@@ -528,6 +555,9 @@ COPY --chown=node:node .yarn /app/.yarn",
528
555
  ],
529
556
  },
530
557
  "script": [
558
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
559
+ "export APP_PATH="www"",
560
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
531
561
  "echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"",
532
562
  "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
533
563
  "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
@@ -544,7 +574,6 @@ COPY --chown=node:node .yarn /app/.yarn",
544
574
  ],
545
575
  "stage": "test",
546
576
  "variables": {
547
- "APP_PATH": "www",
548
577
  "KUBERNETES_CPU_REQUEST": "0.5",
549
578
  "KUBERNETES_MEMORY_LIMIT": "4Gi",
550
579
  "KUBERNETES_MEMORY_REQUEST": "2Gi",
@@ -597,7 +626,21 @@ COPY --chown=node:node .yarn /app/.yarn",
597
626
  ],
598
627
  },
599
628
  "script": [
600
- "echo '{"id":"some-id","time":"01-01-2023 12:13:14"}' > www/__build_info.json",
629
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
630
+ "export ENV_SHORT="review"",
631
+ "export APP_DIR="www"",
632
+ "export ENV_TYPE="review"",
633
+ "export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
634
+ "export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
635
+ "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")"",
636
+ "export HOST="unknown-host.example.com"",
637
+ "export ROOT_URL="https://unknown-host.example.com"",
638
+ "export HOST_INTERNAL="unknown-host.example.com"",
639
+ "export HOST_CANONICAL="unknown-host.example.com"",
640
+ "export ROOT_URL_INTERNAL="https://unknown-host.example.com"",
641
+ "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\\"]"",
642
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
643
+ "echo '{"id":"$(git describe --tags 2>/dev/null || git rev-parse HEAD)","time":"$CI_JOB_STARTED_AT"}' > www/__build_info.json",
601
644
  "echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"",
602
645
  "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
603
646
  "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
@@ -614,20 +657,9 @@ COPY --chown=node:node .yarn /app/.yarn",
614
657
  ],
615
658
  "stage": "build",
616
659
  "variables": {
617
- "APP_DIR": "www",
618
- "BUILD_INFO_BUILD_TIME": "01-01-2023 12:13:14",
619
- "BUILD_INFO_CURRENT_VERSION": "3.2.1",
620
- "BUILD_INFO_ID": "some-id",
621
- "ENV_SHORT": "review",
622
- "ENV_TYPE": "review",
623
- "HOST": "unknown-host.example.com",
624
- "HOST_CANONICAL": "unknown-host.example.com",
625
660
  "KUBERNETES_CPU_REQUEST": "0.5",
626
661
  "KUBERNETES_MEMORY_LIMIT": "4Gi",
627
662
  "KUBERNETES_MEMORY_REQUEST": "2Gi",
628
- "ROOT_URL": "https://unknown-host.example.com",
629
- "ROOT_URL_INTERNAL": "https://unknown-host.example.com",
630
- "_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"]",
631
663
  },
632
664
  },
633
665
  "www ๐Ÿ”จ docker | review ": {
@@ -653,6 +685,22 @@ COPY --chown=node:node .yarn /app/.yarn",
653
685
  ],
654
686
  },
655
687
  "script": [
688
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
689
+ "export APP_DIR="www"",
690
+ "export DOCKER_DIR="."",
691
+ "export DOCKER_REGISTRY="$CI_REGISTRY"",
692
+ "export DOCKER_CACHE_IMAGE="$CI_REGISTRY_IMAGE/caches/www"",
693
+ "export DOCKER_IMAGE_NAME="review/www"",
694
+ "export DOCKER_IMAGE="$CI_REGISTRY_IMAGE/$DOCKER_IMAGE_NAME"",
695
+ "export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"",
696
+ "export DOCKER_COPY_AND_INSTALL_APP="COPY --chown=node:node $APP_DIR .
697
+ RUN yarn plugin import workspace-tools
698
+ RUN yarn workspaces focus --production && yarn rebuild"",
699
+ "export DOCKER_COPY_WORKSPACE_FILES="COPY --chown=node:node www/package.json /app/www/package.json
700
+ COPY --chown=node:node www/yarn.lock /app/www/yarn.lock
701
+ COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
702
+ COPY --chown=node:node .yarn /app/.yarn"",
703
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
656
704
  "ensureNodeDockerfile",
657
705
  "echo -e "\\e[0Ksection_start:$(date +%s):docker-login[collapsed=true]\\r\\e[0KDocker Login"",
658
706
  "docker login --username gitlab-ci-token --password $CI_JOB_TOKEN $CI_REGISTRY",
@@ -676,25 +724,9 @@ COPY --chown=node:node .yarn /app/.yarn",
676
724
  ],
677
725
  "stage": "build",
678
726
  "variables": {
679
- "APP_DIR": "www",
680
- "DOCKERFILE_ADDITIONS": undefined,
681
- "DOCKERFILE_ADDITIONS_END": undefined,
682
727
  "DOCKER_BUILDKIT": "1",
683
- "DOCKER_CACHE_IMAGE": "$CI_REGISTRY_IMAGE/caches/www",
684
- "DOCKER_COPY_AND_INSTALL_APP": "COPY --chown=node:node $APP_DIR .
685
- RUN yarn plugin import workspace-tools
686
- RUN yarn workspaces focus --production && yarn rebuild",
687
- "DOCKER_COPY_WORKSPACE_FILES": "COPY --chown=node:node www/package.json /app/www/package.json
688
- COPY --chown=node:node www/yarn.lock /app/www/yarn.lock
689
- COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
690
- COPY --chown=node:node .yarn /app/.yarn",
691
- "DOCKER_DIR": ".",
692
728
  "DOCKER_DRIVER": "overlay2",
693
729
  "DOCKER_HOST": "tcp://0.0.0.0:2375",
694
- "DOCKER_IMAGE": "$CI_REGISTRY_IMAGE/$DOCKER_IMAGE_NAME",
695
- "DOCKER_IMAGE_NAME": "review/www",
696
- "DOCKER_IMAGE_TAG": "$CI_COMMIT_SHA",
697
- "DOCKER_REGISTRY": "$CI_REGISTRY",
698
730
  "DOCKER_TLS_CERTDIR": "",
699
731
  "KUBERNETES_CPU_REQUEST": "0.5",
700
732
  "KUBERNETES_MEMORY_LIMIT": "2Gi",
@@ -703,12 +735,17 @@ COPY --chown=node:node .yarn /app/.yarn",
703
735
  },
704
736
  "www ๐Ÿš€ Deploy | review ": {
705
737
  "allow_failure": false,
738
+ "artifacts": {
739
+ "reports": {
740
+ "dotenv": "gitlab_environment.env",
741
+ },
742
+ },
706
743
  "cache": [],
707
744
  "environment": {
708
745
  "auto_stop_in": "1 week",
709
- "name": "review/some-commit/www",
746
+ "name": "review/$CI_COMMIT_REF_NAME/www",
710
747
  "on_stop": "www ๐Ÿ›‘ Stop โš ๏ธ | review ",
711
- "url": "https://unknown-host.example.com",
748
+ "url": "$CL_GITLAB_ENVIRONMENT_URL",
712
749
  },
713
750
  "image": "path/to/docker/jobs-default:the-version",
714
751
  "interruptible": true,
@@ -751,40 +788,50 @@ COPY --chown=node:node .yarn /app/.yarn",
751
788
  },
752
789
  ],
753
790
  "script": [
791
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
792
+ "export ENV_SHORT="review"",
793
+ "export APP_DIR="www"",
794
+ "export ENV_TYPE="review"",
795
+ "export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
796
+ "export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
797
+ "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")"",
798
+ "export HOST="unknown-host.example.com"",
799
+ "export ROOT_URL="https://unknown-host.example.com"",
800
+ "export HOST_INTERNAL="unknown-host.example.com"",
801
+ "export HOST_CANONICAL="unknown-host.example.com"",
802
+ "export ROOT_URL_INTERNAL="https://unknown-host.example.com"",
803
+ "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\\"]"",
804
+ "export DOCKER_REGISTRY="$CI_REGISTRY"",
805
+ "export DOCKER_CACHE_IMAGE="$CI_REGISTRY_IMAGE/caches/www"",
806
+ "export DOCKER_IMAGE_NAME="review/www"",
807
+ "export DOCKER_IMAGE="$CI_REGISTRY_IMAGE/$DOCKER_IMAGE_NAME"",
808
+ "export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"",
809
+ "export DEPLOY_API_KEY="$CL_review_www_DEPLOY_API_KEY"",
810
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
754
811
  "cd www",
755
812
  "echo 'would deploy'",
756
813
  "echo Uploading SBOM to Dependency Track",
757
814
  "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/www" "https://unknown-host.example.com" "__sbom.json" vex.json || true",
815
+ "echo "CL_GITLAB_ENVIRONMENT_URL=https://unknown-host.example.com" >> gitlab_environment.env",
758
816
  ],
759
817
  "stage": "deploy review",
760
818
  "variables": {
761
- "APP_DIR": "www",
762
- "BUILD_INFO_BUILD_TIME": "01-01-2023 12:13:14",
763
- "BUILD_INFO_CURRENT_VERSION": "3.2.1",
764
- "BUILD_INFO_ID": "some-id",
765
- "DEPLOY_API_KEY": "$CL_review_www_DEPLOY_API_KEY",
766
- "DOCKER_CACHE_IMAGE": "$CI_REGISTRY_IMAGE/caches/www",
767
- "DOCKER_IMAGE": "$CI_REGISTRY_IMAGE/$DOCKER_IMAGE_NAME",
768
- "DOCKER_IMAGE_NAME": "review/www",
769
- "DOCKER_IMAGE_TAG": "$CI_COMMIT_SHA",
770
- "DOCKER_REGISTRY": "$CI_REGISTRY",
771
- "ENV_SHORT": "review",
772
- "ENV_TYPE": "review",
773
- "HOST": "unknown-host.example.com",
774
- "HOST_CANONICAL": "unknown-host.example.com",
775
819
  "KUBERNETES_CPU_REQUEST": "1",
776
820
  "KUBERNETES_MEMORY_LIMIT": "2048Mi",
777
821
  "KUBERNETES_MEMORY_REQUEST": "1024Mi",
778
- "ROOT_URL": "https://unknown-host.example.com",
779
- "ROOT_URL_INTERNAL": "https://unknown-host.example.com",
780
- "_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"]",
781
822
  },
782
823
  },
783
824
  "www ๐Ÿ›‘ Stop โš ๏ธ | review ": {
825
+ "allow_failure": true,
826
+ "artifacts": {
827
+ "reports": {
828
+ "dotenv": "gitlab_environment.env",
829
+ },
830
+ },
784
831
  "environment": {
785
832
  "action": "stop",
786
- "name": "review/some-commit/www",
787
- "url": "https://unknown-host.example.com",
833
+ "name": "review/$CI_COMMIT_REF_NAME/www",
834
+ "url": "$CL_GITLAB_ENVIRONMENT_URL",
788
835
  },
789
836
  "image": "path/to/docker/jobs-default:the-version",
790
837
  "interruptible": true,
@@ -798,27 +845,28 @@ COPY --chown=node:node .yarn /app/.yarn",
798
845
  },
799
846
  "rules": [
800
847
  {
801
- "allow_failure": true,
802
848
  "if": "$CI_COMMIT_BRANCH =~ /^[0-9]+\\.([0-9]+|x)\\.x$/",
803
849
  "when": "on_success",
804
850
  },
805
851
  {
806
- "allow_failure": true,
807
852
  "when": "manual",
808
853
  },
809
854
  ],
810
855
  "script": [
856
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
857
+ "export DEPLOY_API_KEY="$CL_review_www_DEPLOY_API_KEY"",
858
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
811
859
  "echo 'would stop'",
812
860
  "echo Disabling component in Dependency Track",
813
861
  "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" disable "pan-test-app/www" "https://unknown-host.example.com" || true",
862
+ "echo "CL_GITLAB_ENVIRONMENT_URL=https://unknown-host.example.com" >> gitlab_environment.env",
814
863
  ],
815
864
  "stage": "stop review",
816
865
  "variables": {
817
- "DEPLOY_API_KEY": "$CL_review_www_DEPLOY_API_KEY",
818
866
  "GIT_STRATEGY": "none",
819
- "KUBERNETES_CPU_REQUEST": "1",
820
- "KUBERNETES_MEMORY_LIMIT": "2048Mi",
821
- "KUBERNETES_MEMORY_REQUEST": "1024Mi",
867
+ "KUBERNETES_CPU_REQUEST": "0.5",
868
+ "KUBERNETES_MEMORY_LIMIT": "400Mi",
869
+ "KUBERNETES_MEMORY_REQUEST": "200Mi",
822
870
  },
823
871
  },
824
872
  "www ๐Ÿ›ก audit": {
@@ -834,12 +882,14 @@ COPY --chown=node:node .yarn /app/.yarn",
834
882
  ],
835
883
  },
836
884
  "script": [
885
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
886
+ "export APP_PATH="www"",
887
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
837
888
  "cd www",
838
889
  "yarn npm audit --environment production",
839
890
  ],
840
891
  "stage": "test",
841
892
  "variables": {
842
- "APP_PATH": "www",
843
893
  "KUBERNETES_CPU_REQUEST": "0.5",
844
894
  "KUBERNETES_MEMORY_LIMIT": "4Gi",
845
895
  "KUBERNETES_MEMORY_REQUEST": "2Gi",
@@ -873,6 +923,9 @@ COPY --chown=node:node .yarn /app/.yarn",
873
923
  ],
874
924
  },
875
925
  "script": [
926
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
927
+ "export APP_PATH="www"",
928
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
876
929
  "echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"",
877
930
  "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
878
931
  "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
@@ -889,7 +942,6 @@ COPY --chown=node:node .yarn /app/.yarn",
889
942
  ],
890
943
  "stage": "test",
891
944
  "variables": {
892
- "APP_PATH": "www",
893
945
  "KUBERNETES_CPU_REQUEST": "0.5",
894
946
  "KUBERNETES_MEMORY_LIMIT": "4Gi",
895
947
  "KUBERNETES_MEMORY_REQUEST": "2Gi",
@@ -913,6 +965,8 @@ COPY --chown=node:node .yarn /app/.yarn",
913
965
  ],
914
966
  },
915
967
  "script": [
968
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
969
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
916
970
  "trivy fs --quiet --format cyclonedx --output "__sbom.json" www",
917
971
  ],
918
972
  "stage": "build",
@@ -965,7 +1019,7 @@ COPY --chown=node:node .yarn /app/.yarn",
965
1019
  ],
966
1020
  "variables": {
967
1021
  "FF_USE_FASTZIP": "true",
968
- "GIT_DEPTH": 1,
1022
+ "GIT_DEPTH": "1",
969
1023
  },
970
1024
  "workflow": {
971
1025
  "rules": [
@@ -1042,7 +1096,21 @@ COPY --chown=node:node .yarn /app/.yarn",
1042
1096
  ],
1043
1097
  },
1044
1098
  "script": [
1045
- "echo '{"id":"some-id","time":"01-01-2023 12:13:14"}' > www/__build_info.json",
1099
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
1100
+ "export ENV_SHORT="prod"",
1101
+ "export APP_DIR="www"",
1102
+ "export ENV_TYPE="prod"",
1103
+ "export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
1104
+ "export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
1105
+ "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")"",
1106
+ "export HOST="unknown-host.example.com"",
1107
+ "export ROOT_URL="https://unknown-host.example.com"",
1108
+ "export HOST_INTERNAL="unknown-host.example.com"",
1109
+ "export HOST_CANONICAL="unknown-host.example.com"",
1110
+ "export ROOT_URL_INTERNAL="https://unknown-host.example.com"",
1111
+ "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\\"]"",
1112
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
1113
+ "echo '{"id":"$(git describe --tags 2>/dev/null || git rev-parse HEAD)","time":"$CI_JOB_STARTED_AT"}' > www/__build_info.json",
1046
1114
  "echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"",
1047
1115
  "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
1048
1116
  "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
@@ -1059,20 +1127,9 @@ COPY --chown=node:node .yarn /app/.yarn",
1059
1127
  ],
1060
1128
  "stage": "build",
1061
1129
  "variables": {
1062
- "APP_DIR": "www",
1063
- "BUILD_INFO_BUILD_TIME": "01-01-2023 12:13:14",
1064
- "BUILD_INFO_CURRENT_VERSION": "3.2.1",
1065
- "BUILD_INFO_ID": "some-id",
1066
- "ENV_SHORT": "prod",
1067
- "ENV_TYPE": "prod",
1068
- "HOST": "unknown-host.example.com",
1069
- "HOST_CANONICAL": "unknown-host.example.com",
1070
1130
  "KUBERNETES_CPU_REQUEST": "0.5",
1071
1131
  "KUBERNETES_MEMORY_LIMIT": "4Gi",
1072
1132
  "KUBERNETES_MEMORY_REQUEST": "2Gi",
1073
- "ROOT_URL": "https://unknown-host.example.com",
1074
- "ROOT_URL_INTERNAL": "https://unknown-host.example.com",
1075
- "_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"]",
1076
1133
  },
1077
1134
  },
1078
1135
  "www ๐Ÿ”จ app | stage ": {
@@ -1122,7 +1179,21 @@ COPY --chown=node:node .yarn /app/.yarn",
1122
1179
  ],
1123
1180
  },
1124
1181
  "script": [
1125
- "echo '{"id":"some-id","time":"01-01-2023 12:13:14"}' > www/__build_info.json",
1182
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
1183
+ "export ENV_SHORT="stage"",
1184
+ "export APP_DIR="www"",
1185
+ "export ENV_TYPE="stage"",
1186
+ "export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
1187
+ "export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
1188
+ "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")"",
1189
+ "export HOST="unknown-host.example.com"",
1190
+ "export ROOT_URL="https://unknown-host.example.com"",
1191
+ "export HOST_INTERNAL="unknown-host.example.com"",
1192
+ "export HOST_CANONICAL="unknown-host.example.com"",
1193
+ "export ROOT_URL_INTERNAL="https://unknown-host.example.com"",
1194
+ "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\\"]"",
1195
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
1196
+ "echo '{"id":"$(git describe --tags 2>/dev/null || git rev-parse HEAD)","time":"$CI_JOB_STARTED_AT"}' > www/__build_info.json",
1126
1197
  "echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"",
1127
1198
  "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
1128
1199
  "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
@@ -1139,20 +1210,9 @@ COPY --chown=node:node .yarn /app/.yarn",
1139
1210
  ],
1140
1211
  "stage": "build",
1141
1212
  "variables": {
1142
- "APP_DIR": "www",
1143
- "BUILD_INFO_BUILD_TIME": "01-01-2023 12:13:14",
1144
- "BUILD_INFO_CURRENT_VERSION": "3.2.1",
1145
- "BUILD_INFO_ID": "some-id",
1146
- "ENV_SHORT": "stage",
1147
- "ENV_TYPE": "stage",
1148
- "HOST": "unknown-host.example.com",
1149
- "HOST_CANONICAL": "unknown-host.example.com",
1150
1213
  "KUBERNETES_CPU_REQUEST": "0.5",
1151
1214
  "KUBERNETES_MEMORY_LIMIT": "4Gi",
1152
1215
  "KUBERNETES_MEMORY_REQUEST": "2Gi",
1153
- "ROOT_URL": "https://unknown-host.example.com",
1154
- "ROOT_URL_INTERNAL": "https://unknown-host.example.com",
1155
- "_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"]",
1156
1216
  },
1157
1217
  },
1158
1218
  "www ๐Ÿ”จ docker | prod ": {
@@ -1178,6 +1238,22 @@ COPY --chown=node:node .yarn /app/.yarn",
1178
1238
  ],
1179
1239
  },
1180
1240
  "script": [
1241
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
1242
+ "export APP_DIR="www"",
1243
+ "export DOCKER_DIR="."",
1244
+ "export DOCKER_REGISTRY="$CI_REGISTRY"",
1245
+ "export DOCKER_CACHE_IMAGE="$CI_REGISTRY_IMAGE/caches/www"",
1246
+ "export DOCKER_IMAGE_NAME="prod/www"",
1247
+ "export DOCKER_IMAGE="$CI_REGISTRY_IMAGE/$DOCKER_IMAGE_NAME"",
1248
+ "export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"",
1249
+ "export DOCKER_COPY_AND_INSTALL_APP="COPY --chown=node:node $APP_DIR .
1250
+ RUN yarn plugin import workspace-tools
1251
+ RUN yarn workspaces focus --production && yarn rebuild"",
1252
+ "export DOCKER_COPY_WORKSPACE_FILES="COPY --chown=node:node www/package.json /app/www/package.json
1253
+ COPY --chown=node:node www/yarn.lock /app/www/yarn.lock
1254
+ COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
1255
+ COPY --chown=node:node .yarn /app/.yarn"",
1256
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
1181
1257
  "ensureNodeDockerfile",
1182
1258
  "echo -e "\\e[0Ksection_start:$(date +%s):docker-login[collapsed=true]\\r\\e[0KDocker Login"",
1183
1259
  "docker login --username gitlab-ci-token --password $CI_JOB_TOKEN $CI_REGISTRY",
@@ -1201,25 +1277,9 @@ COPY --chown=node:node .yarn /app/.yarn",
1201
1277
  ],
1202
1278
  "stage": "build",
1203
1279
  "variables": {
1204
- "APP_DIR": "www",
1205
- "DOCKERFILE_ADDITIONS": undefined,
1206
- "DOCKERFILE_ADDITIONS_END": undefined,
1207
1280
  "DOCKER_BUILDKIT": "1",
1208
- "DOCKER_CACHE_IMAGE": "$CI_REGISTRY_IMAGE/caches/www",
1209
- "DOCKER_COPY_AND_INSTALL_APP": "COPY --chown=node:node $APP_DIR .
1210
- RUN yarn plugin import workspace-tools
1211
- RUN yarn workspaces focus --production && yarn rebuild",
1212
- "DOCKER_COPY_WORKSPACE_FILES": "COPY --chown=node:node www/package.json /app/www/package.json
1213
- COPY --chown=node:node www/yarn.lock /app/www/yarn.lock
1214
- COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
1215
- COPY --chown=node:node .yarn /app/.yarn",
1216
- "DOCKER_DIR": ".",
1217
1281
  "DOCKER_DRIVER": "overlay2",
1218
1282
  "DOCKER_HOST": "tcp://0.0.0.0:2375",
1219
- "DOCKER_IMAGE": "$CI_REGISTRY_IMAGE/$DOCKER_IMAGE_NAME",
1220
- "DOCKER_IMAGE_NAME": "prod/www",
1221
- "DOCKER_IMAGE_TAG": "$CI_COMMIT_SHA",
1222
- "DOCKER_REGISTRY": "$CI_REGISTRY",
1223
1283
  "DOCKER_TLS_CERTDIR": "",
1224
1284
  "KUBERNETES_CPU_REQUEST": "0.5",
1225
1285
  "KUBERNETES_MEMORY_LIMIT": "2Gi",
@@ -1249,6 +1309,22 @@ COPY --chown=node:node .yarn /app/.yarn",
1249
1309
  ],
1250
1310
  },
1251
1311
  "script": [
1312
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
1313
+ "export APP_DIR="www"",
1314
+ "export DOCKER_DIR="."",
1315
+ "export DOCKER_REGISTRY="$CI_REGISTRY"",
1316
+ "export DOCKER_CACHE_IMAGE="$CI_REGISTRY_IMAGE/caches/www"",
1317
+ "export DOCKER_IMAGE_NAME="stage/www"",
1318
+ "export DOCKER_IMAGE="$CI_REGISTRY_IMAGE/$DOCKER_IMAGE_NAME"",
1319
+ "export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"",
1320
+ "export DOCKER_COPY_AND_INSTALL_APP="COPY --chown=node:node $APP_DIR .
1321
+ RUN yarn plugin import workspace-tools
1322
+ RUN yarn workspaces focus --production && yarn rebuild"",
1323
+ "export DOCKER_COPY_WORKSPACE_FILES="COPY --chown=node:node www/package.json /app/www/package.json
1324
+ COPY --chown=node:node www/yarn.lock /app/www/yarn.lock
1325
+ COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
1326
+ COPY --chown=node:node .yarn /app/.yarn"",
1327
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
1252
1328
  "ensureNodeDockerfile",
1253
1329
  "echo -e "\\e[0Ksection_start:$(date +%s):docker-login[collapsed=true]\\r\\e[0KDocker Login"",
1254
1330
  "docker login --username gitlab-ci-token --password $CI_JOB_TOKEN $CI_REGISTRY",
@@ -1272,25 +1348,9 @@ COPY --chown=node:node .yarn /app/.yarn",
1272
1348
  ],
1273
1349
  "stage": "build",
1274
1350
  "variables": {
1275
- "APP_DIR": "www",
1276
- "DOCKERFILE_ADDITIONS": undefined,
1277
- "DOCKERFILE_ADDITIONS_END": undefined,
1278
1351
  "DOCKER_BUILDKIT": "1",
1279
- "DOCKER_CACHE_IMAGE": "$CI_REGISTRY_IMAGE/caches/www",
1280
- "DOCKER_COPY_AND_INSTALL_APP": "COPY --chown=node:node $APP_DIR .
1281
- RUN yarn plugin import workspace-tools
1282
- RUN yarn workspaces focus --production && yarn rebuild",
1283
- "DOCKER_COPY_WORKSPACE_FILES": "COPY --chown=node:node www/package.json /app/www/package.json
1284
- COPY --chown=node:node www/yarn.lock /app/www/yarn.lock
1285
- COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
1286
- COPY --chown=node:node .yarn /app/.yarn",
1287
- "DOCKER_DIR": ".",
1288
1352
  "DOCKER_DRIVER": "overlay2",
1289
1353
  "DOCKER_HOST": "tcp://0.0.0.0:2375",
1290
- "DOCKER_IMAGE": "$CI_REGISTRY_IMAGE/$DOCKER_IMAGE_NAME",
1291
- "DOCKER_IMAGE_NAME": "stage/www",
1292
- "DOCKER_IMAGE_TAG": "$CI_COMMIT_SHA",
1293
- "DOCKER_REGISTRY": "$CI_REGISTRY",
1294
1354
  "DOCKER_TLS_CERTDIR": "",
1295
1355
  "KUBERNETES_CPU_REQUEST": "0.5",
1296
1356
  "KUBERNETES_MEMORY_LIMIT": "2Gi",
@@ -1299,12 +1359,17 @@ COPY --chown=node:node .yarn /app/.yarn",
1299
1359
  },
1300
1360
  "www ๐Ÿš€ Deploy | prod ": {
1301
1361
  "allow_failure": true,
1362
+ "artifacts": {
1363
+ "reports": {
1364
+ "dotenv": "gitlab_environment.env",
1365
+ },
1366
+ },
1302
1367
  "cache": [],
1303
1368
  "environment": {
1304
1369
  "auto_stop_in": undefined,
1305
1370
  "name": "prod/www",
1306
1371
  "on_stop": "www ๐Ÿ›‘ Stop โš ๏ธ | prod ",
1307
- "url": "https://unknown-host.example.com",
1372
+ "url": "$CL_GITLAB_ENVIRONMENT_URL",
1308
1373
  },
1309
1374
  "image": "path/to/docker/jobs-default:the-version",
1310
1375
  "interruptible": true,
@@ -1335,43 +1400,52 @@ COPY --chown=node:node .yarn /app/.yarn",
1335
1400
  },
1336
1401
  ],
1337
1402
  "script": [
1403
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
1404
+ "export ENV_SHORT="prod"",
1405
+ "export APP_DIR="www"",
1406
+ "export ENV_TYPE="prod"",
1407
+ "export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
1408
+ "export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
1409
+ "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")"",
1410
+ "export HOST="unknown-host.example.com"",
1411
+ "export ROOT_URL="https://unknown-host.example.com"",
1412
+ "export HOST_INTERNAL="unknown-host.example.com"",
1413
+ "export HOST_CANONICAL="unknown-host.example.com"",
1414
+ "export ROOT_URL_INTERNAL="https://unknown-host.example.com"",
1415
+ "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\\"]"",
1416
+ "export DOCKER_REGISTRY="$CI_REGISTRY"",
1417
+ "export DOCKER_CACHE_IMAGE="$CI_REGISTRY_IMAGE/caches/www"",
1418
+ "export DOCKER_IMAGE_NAME="prod/www"",
1419
+ "export DOCKER_IMAGE="$CI_REGISTRY_IMAGE/$DOCKER_IMAGE_NAME"",
1420
+ "export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"",
1421
+ "export DEPLOY_API_KEY="$CL_prod_www_DEPLOY_API_KEY"",
1422
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
1338
1423
  "cd www",
1339
1424
  "echo 'would deploy'",
1340
1425
  "echo Uploading SBOM to Dependency Track",
1341
1426
  "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/www" "https://unknown-host.example.com" "__sbom.json" vex.json || true",
1427
+ "echo "CL_GITLAB_ENVIRONMENT_URL=https://unknown-host.example.com" >> gitlab_environment.env",
1342
1428
  ],
1343
1429
  "stage": "deploy prod",
1344
1430
  "variables": {
1345
- "APP_DIR": "www",
1346
- "BUILD_INFO_BUILD_TIME": "01-01-2023 12:13:14",
1347
- "BUILD_INFO_CURRENT_VERSION": "3.2.1",
1348
- "BUILD_INFO_ID": "some-id",
1349
- "DEPLOY_API_KEY": "$CL_prod_www_DEPLOY_API_KEY",
1350
- "DOCKER_CACHE_IMAGE": "$CI_REGISTRY_IMAGE/caches/www",
1351
- "DOCKER_IMAGE": "$CI_REGISTRY_IMAGE/$DOCKER_IMAGE_NAME",
1352
- "DOCKER_IMAGE_NAME": "prod/www",
1353
- "DOCKER_IMAGE_TAG": "$CI_COMMIT_SHA",
1354
- "DOCKER_REGISTRY": "$CI_REGISTRY",
1355
- "ENV_SHORT": "prod",
1356
- "ENV_TYPE": "prod",
1357
- "HOST": "unknown-host.example.com",
1358
- "HOST_CANONICAL": "unknown-host.example.com",
1359
1431
  "KUBERNETES_CPU_REQUEST": "1",
1360
1432
  "KUBERNETES_MEMORY_LIMIT": "2048Mi",
1361
1433
  "KUBERNETES_MEMORY_REQUEST": "1024Mi",
1362
- "ROOT_URL": "https://unknown-host.example.com",
1363
- "ROOT_URL_INTERNAL": "https://unknown-host.example.com",
1364
- "_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"]",
1365
1434
  },
1366
1435
  },
1367
1436
  "www ๐Ÿš€ Deploy | stage ": {
1368
1437
  "allow_failure": false,
1438
+ "artifacts": {
1439
+ "reports": {
1440
+ "dotenv": "gitlab_environment.env",
1441
+ },
1442
+ },
1369
1443
  "cache": [],
1370
1444
  "environment": {
1371
1445
  "auto_stop_in": undefined,
1372
1446
  "name": "stage/www",
1373
1447
  "on_stop": "www ๐Ÿ›‘ Stop โš ๏ธ | stage ",
1374
- "url": "https://unknown-host.example.com",
1448
+ "url": "$CL_GITLAB_ENVIRONMENT_URL",
1375
1449
  },
1376
1450
  "image": "path/to/docker/jobs-default:the-version",
1377
1451
  "interruptible": true,
@@ -1402,40 +1476,50 @@ COPY --chown=node:node .yarn /app/.yarn",
1402
1476
  },
1403
1477
  ],
1404
1478
  "script": [
1479
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
1480
+ "export ENV_SHORT="stage"",
1481
+ "export APP_DIR="www"",
1482
+ "export ENV_TYPE="stage"",
1483
+ "export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
1484
+ "export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
1485
+ "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")"",
1486
+ "export HOST="unknown-host.example.com"",
1487
+ "export ROOT_URL="https://unknown-host.example.com"",
1488
+ "export HOST_INTERNAL="unknown-host.example.com"",
1489
+ "export HOST_CANONICAL="unknown-host.example.com"",
1490
+ "export ROOT_URL_INTERNAL="https://unknown-host.example.com"",
1491
+ "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\\"]"",
1492
+ "export DOCKER_REGISTRY="$CI_REGISTRY"",
1493
+ "export DOCKER_CACHE_IMAGE="$CI_REGISTRY_IMAGE/caches/www"",
1494
+ "export DOCKER_IMAGE_NAME="stage/www"",
1495
+ "export DOCKER_IMAGE="$CI_REGISTRY_IMAGE/$DOCKER_IMAGE_NAME"",
1496
+ "export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"",
1497
+ "export DEPLOY_API_KEY="$CL_stage_www_DEPLOY_API_KEY"",
1498
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
1405
1499
  "cd www",
1406
1500
  "echo 'would deploy'",
1407
1501
  "echo Uploading SBOM to Dependency Track",
1408
1502
  "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/www" "https://unknown-host.example.com" "__sbom.json" vex.json || true",
1503
+ "echo "CL_GITLAB_ENVIRONMENT_URL=https://unknown-host.example.com" >> gitlab_environment.env",
1409
1504
  ],
1410
1505
  "stage": "deploy stage",
1411
1506
  "variables": {
1412
- "APP_DIR": "www",
1413
- "BUILD_INFO_BUILD_TIME": "01-01-2023 12:13:14",
1414
- "BUILD_INFO_CURRENT_VERSION": "3.2.1",
1415
- "BUILD_INFO_ID": "some-id",
1416
- "DEPLOY_API_KEY": "$CL_stage_www_DEPLOY_API_KEY",
1417
- "DOCKER_CACHE_IMAGE": "$CI_REGISTRY_IMAGE/caches/www",
1418
- "DOCKER_IMAGE": "$CI_REGISTRY_IMAGE/$DOCKER_IMAGE_NAME",
1419
- "DOCKER_IMAGE_NAME": "stage/www",
1420
- "DOCKER_IMAGE_TAG": "$CI_COMMIT_SHA",
1421
- "DOCKER_REGISTRY": "$CI_REGISTRY",
1422
- "ENV_SHORT": "stage",
1423
- "ENV_TYPE": "stage",
1424
- "HOST": "unknown-host.example.com",
1425
- "HOST_CANONICAL": "unknown-host.example.com",
1426
1507
  "KUBERNETES_CPU_REQUEST": "1",
1427
1508
  "KUBERNETES_MEMORY_LIMIT": "2048Mi",
1428
1509
  "KUBERNETES_MEMORY_REQUEST": "1024Mi",
1429
- "ROOT_URL": "https://unknown-host.example.com",
1430
- "ROOT_URL_INTERNAL": "https://unknown-host.example.com",
1431
- "_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"]",
1432
1510
  },
1433
1511
  },
1434
1512
  "www ๐Ÿ›‘ Stop โš ๏ธ | prod ": {
1513
+ "allow_failure": true,
1514
+ "artifacts": {
1515
+ "reports": {
1516
+ "dotenv": "gitlab_environment.env",
1517
+ },
1518
+ },
1435
1519
  "environment": {
1436
1520
  "action": "stop",
1437
1521
  "name": "prod/www",
1438
- "url": "https://unknown-host.example.com",
1522
+ "url": "$CL_GITLAB_ENVIRONMENT_URL",
1439
1523
  },
1440
1524
  "image": "path/to/docker/jobs-default:the-version",
1441
1525
  "interruptible": true,
@@ -1449,34 +1533,41 @@ COPY --chown=node:node .yarn /app/.yarn",
1449
1533
  },
1450
1534
  "rules": [
1451
1535
  {
1452
- "allow_failure": true,
1453
1536
  "if": "$CI_COMMIT_BRANCH =~ /^[0-9]+\\.([0-9]+|x)\\.x$/",
1454
1537
  "when": "on_success",
1455
1538
  },
1456
1539
  {
1457
- "allow_failure": true,
1458
1540
  "when": "manual",
1459
1541
  },
1460
1542
  ],
1461
1543
  "script": [
1544
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
1545
+ "export DEPLOY_API_KEY="$CL_prod_www_DEPLOY_API_KEY"",
1546
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
1462
1547
  "echo 'would stop'",
1463
1548
  "echo Disabling component in Dependency Track",
1464
1549
  "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" disable "pan-test-app/www" "https://unknown-host.example.com" || true",
1550
+ "echo "CL_GITLAB_ENVIRONMENT_URL=https://unknown-host.example.com" >> gitlab_environment.env",
1465
1551
  ],
1466
1552
  "stage": "stop prod",
1467
1553
  "variables": {
1468
- "DEPLOY_API_KEY": "$CL_prod_www_DEPLOY_API_KEY",
1469
1554
  "GIT_STRATEGY": "none",
1470
- "KUBERNETES_CPU_REQUEST": "1",
1471
- "KUBERNETES_MEMORY_LIMIT": "2048Mi",
1472
- "KUBERNETES_MEMORY_REQUEST": "1024Mi",
1555
+ "KUBERNETES_CPU_REQUEST": "0.5",
1556
+ "KUBERNETES_MEMORY_LIMIT": "400Mi",
1557
+ "KUBERNETES_MEMORY_REQUEST": "200Mi",
1473
1558
  },
1474
1559
  },
1475
1560
  "www ๐Ÿ›‘ Stop โš ๏ธ | stage ": {
1561
+ "allow_failure": true,
1562
+ "artifacts": {
1563
+ "reports": {
1564
+ "dotenv": "gitlab_environment.env",
1565
+ },
1566
+ },
1476
1567
  "environment": {
1477
1568
  "action": "stop",
1478
1569
  "name": "stage/www",
1479
- "url": "https://unknown-host.example.com",
1570
+ "url": "$CL_GITLAB_ENVIRONMENT_URL",
1480
1571
  },
1481
1572
  "image": "path/to/docker/jobs-default:the-version",
1482
1573
  "interruptible": true,
@@ -1490,27 +1581,28 @@ COPY --chown=node:node .yarn /app/.yarn",
1490
1581
  },
1491
1582
  "rules": [
1492
1583
  {
1493
- "allow_failure": true,
1494
1584
  "if": "$CI_COMMIT_BRANCH =~ /^[0-9]+\\.([0-9]+|x)\\.x$/",
1495
1585
  "when": "on_success",
1496
1586
  },
1497
1587
  {
1498
- "allow_failure": true,
1499
1588
  "when": "manual",
1500
1589
  },
1501
1590
  ],
1502
1591
  "script": [
1592
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
1593
+ "export DEPLOY_API_KEY="$CL_stage_www_DEPLOY_API_KEY"",
1594
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
1503
1595
  "echo 'would stop'",
1504
1596
  "echo Disabling component in Dependency Track",
1505
1597
  "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" disable "pan-test-app/www" "https://unknown-host.example.com" || true",
1598
+ "echo "CL_GITLAB_ENVIRONMENT_URL=https://unknown-host.example.com" >> gitlab_environment.env",
1506
1599
  ],
1507
1600
  "stage": "stop stage",
1508
1601
  "variables": {
1509
- "DEPLOY_API_KEY": "$CL_stage_www_DEPLOY_API_KEY",
1510
1602
  "GIT_STRATEGY": "none",
1511
- "KUBERNETES_CPU_REQUEST": "1",
1512
- "KUBERNETES_MEMORY_LIMIT": "2048Mi",
1513
- "KUBERNETES_MEMORY_REQUEST": "1024Mi",
1603
+ "KUBERNETES_CPU_REQUEST": "0.5",
1604
+ "KUBERNETES_MEMORY_LIMIT": "400Mi",
1605
+ "KUBERNETES_MEMORY_REQUEST": "200Mi",
1514
1606
  },
1515
1607
  },
1516
1608
  "www ๐Ÿงพ sbom | prod ": {
@@ -1531,6 +1623,8 @@ COPY --chown=node:node .yarn /app/.yarn",
1531
1623
  ],
1532
1624
  },
1533
1625
  "script": [
1626
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
1627
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
1534
1628
  "trivy fs --quiet --format cyclonedx --output "__sbom.json" www",
1535
1629
  ],
1536
1630
  "stage": "build",
@@ -1554,6 +1648,8 @@ COPY --chown=node:node .yarn /app/.yarn",
1554
1648
  ],
1555
1649
  },
1556
1650
  "script": [
1651
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
1652
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
1557
1653
  "trivy fs --quiet --format cyclonedx --output "__sbom.json" www",
1558
1654
  ],
1559
1655
  "stage": "build",
@@ -1606,7 +1702,7 @@ COPY --chown=node:node .yarn /app/.yarn",
1606
1702
  ],
1607
1703
  "variables": {
1608
1704
  "FF_USE_FASTZIP": "true",
1609
- "GIT_DEPTH": 1,
1705
+ "GIT_DEPTH": "1",
1610
1706
  },
1611
1707
  "workflow": {
1612
1708
  "rules": [