@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
@@ -6,10 +6,16 @@ exports[`matches snapshot 1`] = `
6
6
  "image": "path/to/docker/jobs-default:the-version",
7
7
  "jobs": {
8
8
  "api โ†ฉ๏ธ Rollback โš ๏ธ | dev ": {
9
+ "allow_failure": true,
10
+ "artifacts": {
11
+ "reports": {
12
+ "dotenv": "gitlab_environment.env",
13
+ },
14
+ },
9
15
  "environment": {
10
16
  "action": "access",
11
17
  "name": "dev/api",
12
- "url": "https://api.dev.test-app.pan.panter.cloud",
18
+ "url": "$CL_GITLAB_ENVIRONMENT_URL",
13
19
  },
14
20
  "image": "path/to/docker/kubernetes:the-version",
15
21
  "interruptible": true,
@@ -23,103 +29,49 @@ exports[`matches snapshot 1`] = `
23
29
  },
24
30
  "rules": [
25
31
  {
26
- "allow_failure": true,
27
32
  "when": "manual",
28
33
  },
29
34
  ],
30
35
  "script": [
36
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
37
+ "export ENV_SHORT="dev"",
38
+ "export APP_DIR="api"",
39
+ "export ENV_TYPE="dev"",
40
+ "export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
41
+ "export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
42
+ "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")"",
43
+ "export HOST="api.dev.test-app.pan.panter.cloud"",
44
+ "export ROOT_URL="https://api.dev.test-app.pan.panter.cloud"",
45
+ "export HOST_INTERNAL="api.dev.test-app.pan.panter.cloud"",
46
+ "export HOST_CANONICAL="api.dev.test-app.pan.panter.cloud"",
47
+ "export ROOT_URL_INTERNAL="https://api.dev.test-app.pan.panter.cloud"",
48
+ "export KUBE_NAMESPACE="pan-test-app-dev"",
49
+ "export KUBE_APP_NAME="api"",
50
+ "export KUBE_APP_NAME_PREFIX=""",
51
+ "export MONGODB_ROOT_PASSWORD="$CL_dev_api_MONGODB_ROOT_PASSWORD"",
52
+ "export MONGODB_REPLICASET_KEY="$CL_dev_api_MONGODB_REPLICASET_KEY"",
53
+ "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\\",\\"KUBE_NAMESPACE\\",\\"KUBE_APP_NAME\\",\\"KUBE_APP_NAME_PREFIX\\",\\"MONGODB_ROOT_PASSWORD\\",\\"MONGODB_REPLICASET_KEY\\"]"",
54
+ "export RELEASE_NAME="pan-test-app-dev-api"",
55
+ "export HELM_EXPERIMENTAL_OCI="1"",
56
+ "export KUBE_DOCKER_IMAGE_PULL_SECRET="gitlab-registry-api"",
57
+ "export HELM_GITLAB_CHART_NAME="/helm-charts/the-panter-chart"",
58
+ "export HELM_ARGS=""",
59
+ "export COMPONENT_NAME="api"",
60
+ "export BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
61
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
31
62
  "kubectl config set-cluster "kube-pan-test-app-dev-api" --server="$CL_dev_api_KUBE_URL" --certificate-authority <(echo $CL_dev_api_KUBE_CA_PEM | base64 -d) --embed-certs=true",
32
63
  "kubectl config set-credentials "kube-pan-test-app-dev-api" --token="$CL_dev_api_KUBE_TOKEN"",
33
64
  "kubectl config set-context "kube-pan-test-app-dev-api" --cluster="kube-pan-test-app-dev-api" --user="kube-pan-test-app-dev-api" --namespace="pan-test-app-dev"",
34
65
  "kubectl config use-context "kube-pan-test-app-dev-api"",
35
66
  "kubernetesRollback",
67
+ "echo "CL_GITLAB_ENVIRONMENT_URL=https://api.dev.test-app.pan.panter.cloud" >> gitlab_environment.env",
36
68
  ],
37
69
  "stage": "rollback dev",
38
70
  "variables": {
39
- "APP_DIR": "api",
40
- "BUILD_ID": "some-id",
41
- "BUILD_INFO_BUILD_TIME": "01-01-2023 12:13:14",
42
- "BUILD_INFO_CURRENT_VERSION": "3.2.1",
43
- "BUILD_INFO_ID": "some-id",
44
- "COMPONENT_NAME": "api",
45
- "ENV_SHORT": "dev",
46
- "ENV_TYPE": "dev",
47
71
  "GIT_STRATEGY": "none",
48
- "HELM_ARGS": "",
49
- "HELM_EXPERIMENTAL_OCI": "1",
50
- "HELM_GITLAB_CHART_NAME": "/helm-charts/the-panter-chart",
51
- "HOST": "api.dev.test-app.pan.panter.cloud",
52
- "HOST_CANONICAL": "api.dev.test-app.pan.panter.cloud",
53
- "HOST_INTERNAL": "api.dev.test-app.pan.panter.cloud",
54
72
  "KUBERNETES_CPU_REQUEST": "0.5",
55
73
  "KUBERNETES_MEMORY_LIMIT": "400Mi",
56
74
  "KUBERNETES_MEMORY_REQUEST": "200Mi",
57
- "KUBE_APP_NAME": "api",
58
- "KUBE_APP_NAME_PREFIX": "",
59
- "KUBE_DOCKER_IMAGE_PULL_SECRET": "gitlab-registry-api",
60
- "KUBE_NAMESPACE": "pan-test-app-dev",
61
- "KUBE_VALUES": "env:
62
- secret:
63
- MONGODB_ROOT_PASSWORD: '$CL_dev_api_MONGODB_ROOT_PASSWORD'
64
- MONGODB_REPLICASET_KEY: '$CL_dev_api_MONGODB_REPLICASET_KEY'
65
- MONGO_URL: 'mongodb://root:$CL_dev_api_MONGODB_ROOT_PASSWORD@api-mongodb-0.api-mongodb-headless.pan-test-app-dev.svc.cluster.local:27017,api-mongodb-1.api-mongodb-headless.pan-test-app-dev.svc.cluster.local:27017/app?replicaSet=rs0&authSource=admin'
66
- MONGO_OPLOG_URL: 'mongodb://root:$CL_dev_api_MONGODB_ROOT_PASSWORD@api-mongodb-0.api-mongodb-headless.pan-test-app-dev.svc.cluster.local:27017,api-mongodb-1.api-mongodb-headless.pan-test-app-dev.svc.cluster.local:27017/local?replicaSet=rs0&authSource=admin'
67
- public:
68
- ENV_SHORT: 'dev'
69
- APP_DIR: 'api'
70
- ENV_TYPE: 'dev'
71
- BUILD_INFO_ID: 'some-id'
72
- BUILD_INFO_BUILD_TIME: '01-01-2023 12:13:14'
73
- BUILD_INFO_CURRENT_VERSION: '3.2.1'
74
- HOST: 'api.dev.test-app.pan.panter.cloud'
75
- ROOT_URL: 'https://api.dev.test-app.pan.panter.cloud'
76
- HOST_CANONICAL: 'api.dev.test-app.pan.panter.cloud'
77
- ROOT_URL_INTERNAL: 'https://api.dev.test-app.pan.panter.cloud'
78
- KUBE_NAMESPACE: 'pan-test-app-dev'
79
- KUBE_APP_NAME: 'api'
80
- KUBE_APP_NAME_PREFIX: ''
81
- HOST_INTERNAL: 'api.dev.test-app.pan.panter.cloud'
82
- _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","KUBE_NAMESPACE","KUBE_APP_NAME","KUBE_APP_NAME_PREFIX","HOST_INTERNAL","MONGODB_ROOT_PASSWORD","MONGODB_REPLICASET_KEY"]'
83
- application:
84
- host: 'api.dev.test-app.pan.panter.cloud'
85
- command: 'node main.js'
86
- livenessProbe:
87
- httpGet:
88
- path: '__health'
89
- readinessProbe:
90
- httpGet:
91
- path: '__health'
92
- startupProbe:
93
- httpGet:
94
- path: '__health'
95
- mongodb:
96
- enabled: true
97
- auth:
98
- enabled: true
99
- rootPassword: '$CL_dev_api_MONGODB_ROOT_PASSWORD'
100
- replicaSetKey: '$CL_dev_api_MONGODB_REPLICASET_KEY'
101
- persistence:
102
- storageClass: 'premium-rwo'
103
- backup:
104
- enabled: false
105
- hostToBackup: 'api-mongodb-0.api-mongodb-headless.pan-test-app-dev.svc.cluster.local:27017'
106
- pvcToBackup: 'datadir-api-mongodb-0'
107
- image: 'mrelite/kubectlmongoshell:v1.0'
108
- schedule: '0 4 * * *'
109
- volumeSnapshotClass: 'snapshotclass'
110
- architecture: 'replicaset'
111
- tolerations:
112
- - key: 'mongodb'
113
- operator: 'Equal'
114
- value: 'true'
115
- effect: 'NoSchedule'
116
- ",
117
- "MONGODB_REPLICASET_KEY": "$CL_dev_api_MONGODB_REPLICASET_KEY",
118
- "MONGODB_ROOT_PASSWORD": "$CL_dev_api_MONGODB_ROOT_PASSWORD",
119
- "RELEASE_NAME": "pan-test-app-dev-api",
120
- "ROOT_URL": "https://api.dev.test-app.pan.panter.cloud",
121
- "ROOT_URL_INTERNAL": "https://api.dev.test-app.pan.panter.cloud",
122
- "_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","KUBE_NAMESPACE","KUBE_APP_NAME","KUBE_APP_NAME_PREFIX","HOST_INTERNAL","MONGODB_ROOT_PASSWORD","MONGODB_REPLICASET_KEY"]",
123
75
  },
124
76
  },
125
77
  "api ๐Ÿ‘ฎ lint": {
@@ -150,6 +102,9 @@ mongodb:
150
102
  ],
151
103
  },
152
104
  "script": [
105
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
106
+ "export APP_PATH="api"",
107
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
153
108
  "echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"",
154
109
  "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
155
110
  "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
@@ -166,7 +121,6 @@ mongodb:
166
121
  ],
167
122
  "stage": "test",
168
123
  "variables": {
169
- "APP_PATH": "api",
170
124
  "KUBERNETES_CPU_REQUEST": "0.5",
171
125
  "KUBERNETES_MEMORY_LIMIT": "4Gi",
172
126
  "KUBERNETES_MEMORY_REQUEST": "2Gi",
@@ -219,7 +173,26 @@ mongodb:
219
173
  ],
220
174
  },
221
175
  "script": [
222
- "echo '{"id":"some-id","time":"01-01-2023 12:13:14"}' > api/__build_info.json",
176
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
177
+ "export ENV_SHORT="dev"",
178
+ "export APP_DIR="api"",
179
+ "export ENV_TYPE="dev"",
180
+ "export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
181
+ "export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
182
+ "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")"",
183
+ "export HOST="api.dev.test-app.pan.panter.cloud"",
184
+ "export ROOT_URL="https://api.dev.test-app.pan.panter.cloud"",
185
+ "export HOST_INTERNAL="api.dev.test-app.pan.panter.cloud"",
186
+ "export HOST_CANONICAL="api.dev.test-app.pan.panter.cloud"",
187
+ "export ROOT_URL_INTERNAL="https://api.dev.test-app.pan.panter.cloud"",
188
+ "export KUBE_NAMESPACE="pan-test-app-dev"",
189
+ "export KUBE_APP_NAME="api"",
190
+ "export KUBE_APP_NAME_PREFIX=""",
191
+ "export MONGODB_ROOT_PASSWORD="$CL_dev_api_MONGODB_ROOT_PASSWORD"",
192
+ "export MONGODB_REPLICASET_KEY="$CL_dev_api_MONGODB_REPLICASET_KEY"",
193
+ "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\\",\\"KUBE_NAMESPACE\\",\\"KUBE_APP_NAME\\",\\"KUBE_APP_NAME_PREFIX\\",\\"MONGODB_ROOT_PASSWORD\\",\\"MONGODB_REPLICASET_KEY\\"]"",
194
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
195
+ "echo '{"id":"$(git describe --tags 2>/dev/null || git rev-parse HEAD)","time":"$CI_JOB_STARTED_AT"}' > api/__build_info.json",
223
196
  "echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"",
224
197
  "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
225
198
  "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
@@ -236,26 +209,9 @@ mongodb:
236
209
  ],
237
210
  "stage": "build",
238
211
  "variables": {
239
- "APP_DIR": "api",
240
- "BUILD_INFO_BUILD_TIME": "01-01-2023 12:13:14",
241
- "BUILD_INFO_CURRENT_VERSION": "3.2.1",
242
- "BUILD_INFO_ID": "some-id",
243
- "ENV_SHORT": "dev",
244
- "ENV_TYPE": "dev",
245
- "HOST": "api.dev.test-app.pan.panter.cloud",
246
- "HOST_CANONICAL": "api.dev.test-app.pan.panter.cloud",
247
- "HOST_INTERNAL": "api.dev.test-app.pan.panter.cloud",
248
212
  "KUBERNETES_CPU_REQUEST": "0.5",
249
213
  "KUBERNETES_MEMORY_LIMIT": "4Gi",
250
214
  "KUBERNETES_MEMORY_REQUEST": "2Gi",
251
- "KUBE_APP_NAME": "api",
252
- "KUBE_APP_NAME_PREFIX": "",
253
- "KUBE_NAMESPACE": "pan-test-app-dev",
254
- "MONGODB_REPLICASET_KEY": "$CL_dev_api_MONGODB_REPLICASET_KEY",
255
- "MONGODB_ROOT_PASSWORD": "$CL_dev_api_MONGODB_ROOT_PASSWORD",
256
- "ROOT_URL": "https://api.dev.test-app.pan.panter.cloud",
257
- "ROOT_URL_INTERNAL": "https://api.dev.test-app.pan.panter.cloud",
258
- "_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","KUBE_NAMESPACE","KUBE_APP_NAME","KUBE_APP_NAME_PREFIX","HOST_INTERNAL","MONGODB_ROOT_PASSWORD","MONGODB_REPLICASET_KEY"]",
259
215
  },
260
216
  },
261
217
  "api ๐Ÿ”จ docker | dev ": {
@@ -281,6 +237,22 @@ mongodb:
281
237
  ],
282
238
  },
283
239
  "script": [
240
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
241
+ "export APP_DIR="api"",
242
+ "export DOCKER_DIR="."",
243
+ "export DOCKER_REGISTRY="$CI_REGISTRY"",
244
+ "export DOCKER_CACHE_IMAGE="$CI_REGISTRY_IMAGE/caches/api"",
245
+ "export DOCKER_IMAGE_NAME="dev/api"",
246
+ "export DOCKER_IMAGE="$CI_REGISTRY_IMAGE/$DOCKER_IMAGE_NAME"",
247
+ "export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"",
248
+ "export DOCKER_COPY_AND_INSTALL_APP="COPY --chown=node:node $APP_DIR .
249
+ RUN yarn plugin import workspace-tools
250
+ RUN yarn workspaces focus --production && yarn rebuild"",
251
+ "export DOCKER_COPY_WORKSPACE_FILES="COPY --chown=node:node api/package.json /app/api/package.json
252
+ COPY --chown=node:node api/yarn.lock /app/api/yarn.lock
253
+ COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
254
+ COPY --chown=node:node .yarn /app/.yarn"",
255
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
284
256
  "ensureNodeDockerfile",
285
257
  "echo -e "\\e[0Ksection_start:$(date +%s):docker-login[collapsed=true]\\r\\e[0KDocker Login"",
286
258
  "docker login --username gitlab-ci-token --password $CI_JOB_TOKEN $CI_REGISTRY",
@@ -304,25 +276,9 @@ mongodb:
304
276
  ],
305
277
  "stage": "build",
306
278
  "variables": {
307
- "APP_DIR": "api",
308
- "DOCKERFILE_ADDITIONS": undefined,
309
- "DOCKERFILE_ADDITIONS_END": undefined,
310
279
  "DOCKER_BUILDKIT": "1",
311
- "DOCKER_CACHE_IMAGE": "$CI_REGISTRY_IMAGE/caches/api",
312
- "DOCKER_COPY_AND_INSTALL_APP": "COPY --chown=node:node $APP_DIR .
313
- RUN yarn plugin import workspace-tools
314
- RUN yarn workspaces focus --production && yarn rebuild",
315
- "DOCKER_COPY_WORKSPACE_FILES": "COPY --chown=node:node api/package.json /app/api/package.json
316
- COPY --chown=node:node api/yarn.lock /app/api/yarn.lock
317
- COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
318
- COPY --chown=node:node .yarn /app/.yarn",
319
- "DOCKER_DIR": ".",
320
280
  "DOCKER_DRIVER": "overlay2",
321
281
  "DOCKER_HOST": "tcp://0.0.0.0:2375",
322
- "DOCKER_IMAGE": "$CI_REGISTRY_IMAGE/$DOCKER_IMAGE_NAME",
323
- "DOCKER_IMAGE_NAME": "dev/api",
324
- "DOCKER_IMAGE_TAG": "$CI_COMMIT_SHA",
325
- "DOCKER_REGISTRY": "$CI_REGISTRY",
326
282
  "DOCKER_TLS_CERTDIR": "",
327
283
  "KUBERNETES_CPU_REQUEST": "0.5",
328
284
  "KUBERNETES_MEMORY_LIMIT": "2Gi",
@@ -331,11 +287,16 @@ COPY --chown=node:node .yarn /app/.yarn",
331
287
  },
332
288
  "api ๐Ÿš€ Deploy | dev ": {
333
289
  "allow_failure": false,
290
+ "artifacts": {
291
+ "reports": {
292
+ "dotenv": "gitlab_environment.env",
293
+ },
294
+ },
334
295
  "environment": {
335
296
  "auto_stop_in": "4 weeks",
336
297
  "name": "dev/api",
337
298
  "on_stop": "api ๐Ÿ›‘ Stop โš ๏ธ | dev ",
338
- "url": "https://api.dev.test-app.pan.panter.cloud",
299
+ "url": "$CL_GITLAB_ENVIRONMENT_URL",
339
300
  },
340
301
  "image": "path/to/docker/kubernetes:the-version",
341
302
  "interruptible": true,
@@ -378,113 +339,163 @@ COPY --chown=node:node .yarn /app/.yarn",
378
339
  },
379
340
  ],
380
341
  "script": [
342
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
343
+ "export ENV_SHORT="dev"",
344
+ "export APP_DIR="api"",
345
+ "export ENV_TYPE="dev"",
346
+ "export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
347
+ "export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
348
+ "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")"",
349
+ "export HOST="api.dev.test-app.pan.panter.cloud"",
350
+ "export ROOT_URL="https://api.dev.test-app.pan.panter.cloud"",
351
+ "export HOST_INTERNAL="api.dev.test-app.pan.panter.cloud"",
352
+ "export HOST_CANONICAL="api.dev.test-app.pan.panter.cloud"",
353
+ "export ROOT_URL_INTERNAL="https://api.dev.test-app.pan.panter.cloud"",
354
+ "export KUBE_NAMESPACE="pan-test-app-dev"",
355
+ "export KUBE_APP_NAME="api"",
356
+ "export KUBE_APP_NAME_PREFIX=""",
357
+ "export MONGODB_ROOT_PASSWORD="$CL_dev_api_MONGODB_ROOT_PASSWORD"",
358
+ "export MONGODB_REPLICASET_KEY="$CL_dev_api_MONGODB_REPLICASET_KEY"",
359
+ "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\\",\\"KUBE_NAMESPACE\\",\\"KUBE_APP_NAME\\",\\"KUBE_APP_NAME_PREFIX\\",\\"MONGODB_ROOT_PASSWORD\\",\\"MONGODB_REPLICASET_KEY\\"]"",
360
+ "export DOCKER_REGISTRY="$CI_REGISTRY"",
361
+ "export DOCKER_CACHE_IMAGE="$CI_REGISTRY_IMAGE/caches/api"",
362
+ "export DOCKER_IMAGE_NAME="dev/api"",
363
+ "export DOCKER_IMAGE="$CI_REGISTRY_IMAGE/$DOCKER_IMAGE_NAME"",
364
+ "export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"",
365
+ "export RELEASE_NAME="pan-test-app-dev-api"",
366
+ "export HELM_EXPERIMENTAL_OCI="1"",
367
+ "export KUBE_DOCKER_IMAGE_PULL_SECRET="gitlab-registry-api"",
368
+ "export HELM_GITLAB_CHART_NAME="/helm-charts/the-panter-chart"",
369
+ "export HELM_ARGS=""",
370
+ "export COMPONENT_NAME="api"",
371
+ "export BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
372
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
381
373
  "kubectl config set-cluster "kube-pan-test-app-dev-api" --server="$CL_dev_api_KUBE_URL" --certificate-authority <(echo $CL_dev_api_KUBE_CA_PEM | base64 -d) --embed-certs=true",
382
374
  "kubectl config set-credentials "kube-pan-test-app-dev-api" --token="$CL_dev_api_KUBE_TOKEN"",
383
375
  "kubectl config set-context "kube-pan-test-app-dev-api" --cluster="kube-pan-test-app-dev-api" --user="kube-pan-test-app-dev-api" --namespace="pan-test-app-dev"",
384
376
  "kubectl config use-context "kube-pan-test-app-dev-api"",
385
- "kubernetesCreateSecret",
386
- "kubernetesDeploy",
387
- "echo Uploading SBOM to Dependency Track",
388
- "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/api" "https://api.dev.test-app.pan.panter.cloud" "__sbom.json" vex.json || true",
389
- "echo deployment successful ๐Ÿ˜ป",
390
- ],
391
- "stage": "deploy dev",
392
- "variables": {
393
- "APP_DIR": "api",
394
- "BUILD_ID": "some-id",
395
- "BUILD_INFO_BUILD_TIME": "01-01-2023 12:13:14",
396
- "BUILD_INFO_CURRENT_VERSION": "3.2.1",
397
- "BUILD_INFO_ID": "some-id",
398
- "COMPONENT_NAME": "api",
399
- "DOCKER_CACHE_IMAGE": "$CI_REGISTRY_IMAGE/caches/api",
400
- "DOCKER_IMAGE": "$CI_REGISTRY_IMAGE/$DOCKER_IMAGE_NAME",
401
- "DOCKER_IMAGE_NAME": "dev/api",
402
- "DOCKER_IMAGE_TAG": "$CI_COMMIT_SHA",
403
- "DOCKER_REGISTRY": "$CI_REGISTRY",
404
- "ENV_SHORT": "dev",
405
- "ENV_TYPE": "dev",
406
- "HELM_ARGS": "",
407
- "HELM_EXPERIMENTAL_OCI": "1",
408
- "HELM_GITLAB_CHART_NAME": "/helm-charts/the-panter-chart",
409
- "HOST": "api.dev.test-app.pan.panter.cloud",
410
- "HOST_CANONICAL": "api.dev.test-app.pan.panter.cloud",
411
- "HOST_INTERNAL": "api.dev.test-app.pan.panter.cloud",
412
- "KUBERNETES_CPU_REQUEST": "0.5",
413
- "KUBERNETES_MEMORY_LIMIT": "400Mi",
414
- "KUBERNETES_MEMORY_REQUEST": "200Mi",
415
- "KUBE_APP_NAME": "api",
416
- "KUBE_APP_NAME_PREFIX": "",
417
- "KUBE_DOCKER_IMAGE_PULL_SECRET": "gitlab-registry-api",
418
- "KUBE_NAMESPACE": "pan-test-app-dev",
419
- "KUBE_VALUES": "env:
377
+ "echo -e "\\e[0Ksection_start:$(date +%s):writeallvalues[collapsed=true]\\r\\e[0KWrite __all_values.yml for helm deployment"",
378
+ "cat > __all_values.yml <<EOF
379
+ env:
420
380
  secret:
421
- MONGODB_ROOT_PASSWORD: '$CL_dev_api_MONGODB_ROOT_PASSWORD'
422
- MONGODB_REPLICASET_KEY: '$CL_dev_api_MONGODB_REPLICASET_KEY'
423
- MONGO_URL: 'mongodb://root:$CL_dev_api_MONGODB_ROOT_PASSWORD@api-mongodb-0.api-mongodb-headless.pan-test-app-dev.svc.cluster.local:27017,api-mongodb-1.api-mongodb-headless.pan-test-app-dev.svc.cluster.local:27017/app?replicaSet=rs0&authSource=admin'
424
- MONGO_OPLOG_URL: 'mongodb://root:$CL_dev_api_MONGODB_ROOT_PASSWORD@api-mongodb-0.api-mongodb-headless.pan-test-app-dev.svc.cluster.local:27017,api-mongodb-1.api-mongodb-headless.pan-test-app-dev.svc.cluster.local:27017/local?replicaSet=rs0&authSource=admin'
381
+ MONGODB_ROOT_PASSWORD: |-
382
+ $(printf %s "$CL_dev_api_MONGODB_ROOT_PASSWORD" | sed 's/^/ /')
383
+ MONGODB_REPLICASET_KEY: |-
384
+ $(printf %s "$CL_dev_api_MONGODB_REPLICASET_KEY" | sed 's/^/ /')
385
+ MONGO_URL: |-
386
+ mongodb://root:$CL_dev_api_MONGODB_ROOT_PASSWORD@api-mongodb-0.api-mongodb-headless.pan-test-app-dev.svc.cluster.local:27017,api-mongodb-1.api-mongodb-headless.pan-test-app-dev.svc.cluster.local:27017/app?replicaSet=rs0&authSource=admin
387
+ MONGO_OPLOG_URL: |-
388
+ mongodb://root:$CL_dev_api_MONGODB_ROOT_PASSWORD@api-mongodb-0.api-mongodb-headless.pan-test-app-dev.svc.cluster.local:27017,api-mongodb-1.api-mongodb-headless.pan-test-app-dev.svc.cluster.local:27017/local?replicaSet=rs0&authSource=admin
425
389
  public:
426
- ENV_SHORT: 'dev'
427
- APP_DIR: 'api'
428
- ENV_TYPE: 'dev'
429
- BUILD_INFO_ID: 'some-id'
430
- BUILD_INFO_BUILD_TIME: '01-01-2023 12:13:14'
431
- BUILD_INFO_CURRENT_VERSION: '3.2.1'
432
- HOST: 'api.dev.test-app.pan.panter.cloud'
433
- ROOT_URL: 'https://api.dev.test-app.pan.panter.cloud'
434
- HOST_CANONICAL: 'api.dev.test-app.pan.panter.cloud'
435
- ROOT_URL_INTERNAL: 'https://api.dev.test-app.pan.panter.cloud'
436
- KUBE_NAMESPACE: 'pan-test-app-dev'
437
- KUBE_APP_NAME: 'api'
438
- KUBE_APP_NAME_PREFIX: ''
439
- HOST_INTERNAL: 'api.dev.test-app.pan.panter.cloud'
440
- _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","KUBE_NAMESPACE","KUBE_APP_NAME","KUBE_APP_NAME_PREFIX","HOST_INTERNAL","MONGODB_ROOT_PASSWORD","MONGODB_REPLICASET_KEY"]'
390
+ ENV_SHORT: |-
391
+ dev
392
+ APP_DIR: |-
393
+ api
394
+ ENV_TYPE: |-
395
+ dev
396
+ BUILD_INFO_BUILD_ID: |-
397
+ $(printf %s "$(git describe --tags 2>/dev/null || git rev-parse HEAD)" | sed 's/^/ /')
398
+ BUILD_INFO_BUILD_TIME: |-
399
+ $(printf %s "$CI_JOB_STARTED_AT" | sed 's/^/ /')
400
+ BUILD_INFO_CURRENT_VERSION: |-
401
+ $(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/^/ /')
402
+ HOST: |-
403
+ api.dev.test-app.pan.panter.cloud
404
+ ROOT_URL: |-
405
+ https://api.dev.test-app.pan.panter.cloud
406
+ HOST_INTERNAL: |-
407
+ api.dev.test-app.pan.panter.cloud
408
+ HOST_CANONICAL: |-
409
+ api.dev.test-app.pan.panter.cloud
410
+ ROOT_URL_INTERNAL: |-
411
+ https://api.dev.test-app.pan.panter.cloud
412
+ KUBE_NAMESPACE: |-
413
+ pan-test-app-dev
414
+ KUBE_APP_NAME: |-
415
+ api
416
+ KUBE_APP_NAME_PREFIX: ""
417
+ _ALL_ENV_VAR_KEYS: |-
418
+ ["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","KUBE_NAMESPACE","KUBE_APP_NAME","KUBE_APP_NAME_PREFIX","MONGODB_ROOT_PASSWORD","MONGODB_REPLICASET_KEY"]
441
419
  application:
442
- host: 'api.dev.test-app.pan.panter.cloud'
443
- command: 'node main.js'
420
+ host: |-
421
+ api.dev.test-app.pan.panter.cloud
422
+ command: |-
423
+ node main.js
444
424
  livenessProbe:
445
425
  httpGet:
446
- path: '__health'
426
+ path: |-
427
+ __health
447
428
  readinessProbe:
448
429
  httpGet:
449
- path: '__health'
430
+ path: |-
431
+ __health
450
432
  startupProbe:
451
433
  httpGet:
452
- path: '__health'
434
+ path: |-
435
+ __health
453
436
  mongodb:
454
437
  enabled: true
455
438
  auth:
456
439
  enabled: true
457
- rootPassword: '$CL_dev_api_MONGODB_ROOT_PASSWORD'
458
- replicaSetKey: '$CL_dev_api_MONGODB_REPLICASET_KEY'
440
+ rootPassword: |-
441
+ $CL_dev_api_MONGODB_ROOT_PASSWORD
442
+ replicaSetKey: |-
443
+ $CL_dev_api_MONGODB_REPLICASET_KEY
459
444
  persistence:
460
- storageClass: 'premium-rwo'
445
+ storageClass: |-
446
+ premium-rwo
461
447
  backup:
462
448
  enabled: false
463
- hostToBackup: 'api-mongodb-0.api-mongodb-headless.pan-test-app-dev.svc.cluster.local:27017'
464
- pvcToBackup: 'datadir-api-mongodb-0'
465
- image: 'mrelite/kubectlmongoshell:v1.0'
466
- schedule: '0 4 * * *'
467
- volumeSnapshotClass: 'snapshotclass'
468
- architecture: 'replicaset'
449
+ hostToBackup: |-
450
+ api-mongodb-0.api-mongodb-headless.pan-test-app-dev.svc.cluster.local:27017
451
+ pvcToBackup: |-
452
+ datadir-api-mongodb-0
453
+ image: |-
454
+ mrelite/kubectlmongoshell:v1.0
455
+ schedule: |-
456
+ 0 4 * * *
457
+ volumeSnapshotClass: |-
458
+ snapshotclass
459
+ architecture: |-
460
+ replicaset
469
461
  tolerations:
470
- - key: 'mongodb'
471
- operator: 'Equal'
472
- value: 'true'
473
- effect: 'NoSchedule'
462
+ - key: |-
463
+ mongodb
464
+ operator: |-
465
+ Equal
466
+ value: |-
467
+ true
468
+ effect: |-
469
+ NoSchedule
470
+
471
+ EOF
474
472
  ",
475
- "MONGODB_REPLICASET_KEY": "$CL_dev_api_MONGODB_REPLICASET_KEY",
476
- "MONGODB_ROOT_PASSWORD": "$CL_dev_api_MONGODB_ROOT_PASSWORD",
477
- "RELEASE_NAME": "pan-test-app-dev-api",
478
- "ROOT_URL": "https://api.dev.test-app.pan.panter.cloud",
479
- "ROOT_URL_INTERNAL": "https://api.dev.test-app.pan.panter.cloud",
480
- "_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","KUBE_NAMESPACE","KUBE_APP_NAME","KUBE_APP_NAME_PREFIX","HOST_INTERNAL","MONGODB_ROOT_PASSWORD","MONGODB_REPLICASET_KEY"]",
473
+ "echo -e "\\e[0Ksection_end:$(date +%s):writeallvalues\\r\\e[0K"",
474
+ "kubernetesCreateSecret",
475
+ "kubernetesDeploy",
476
+ "echo Uploading SBOM to Dependency Track",
477
+ "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/api" "https://api.dev.test-app.pan.panter.cloud" "__sbom.json" vex.json || true",
478
+ "echo deployment successful ๐Ÿ˜ป",
479
+ "echo "CL_GITLAB_ENVIRONMENT_URL=https://api.dev.test-app.pan.panter.cloud" >> gitlab_environment.env",
480
+ ],
481
+ "stage": "deploy dev",
482
+ "variables": {
483
+ "KUBERNETES_CPU_REQUEST": "0.5",
484
+ "KUBERNETES_MEMORY_LIMIT": "400Mi",
485
+ "KUBERNETES_MEMORY_REQUEST": "200Mi",
481
486
  },
482
487
  },
483
488
  "api ๐Ÿ›‘ Stop โš ๏ธ | dev ": {
489
+ "allow_failure": true,
490
+ "artifacts": {
491
+ "reports": {
492
+ "dotenv": "gitlab_environment.env",
493
+ },
494
+ },
484
495
  "environment": {
485
496
  "action": "stop",
486
497
  "name": "dev/api",
487
- "url": "https://api.dev.test-app.pan.panter.cloud",
498
+ "url": "$CL_GITLAB_ENVIRONMENT_URL",
488
499
  },
489
500
  "image": "path/to/docker/kubernetes:the-version",
490
501
  "interruptible": true,
@@ -498,16 +509,40 @@ mongodb:
498
509
  },
499
510
  "rules": [
500
511
  {
501
- "allow_failure": true,
502
512
  "if": "$CI_COMMIT_BRANCH =~ /^[0-9]+\\.([0-9]+|x)\\.x$/",
503
513
  "when": "on_success",
504
514
  },
505
515
  {
506
- "allow_failure": true,
507
516
  "when": "manual",
508
517
  },
509
518
  ],
510
519
  "script": [
520
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
521
+ "export ENV_SHORT="dev"",
522
+ "export APP_DIR="api"",
523
+ "export ENV_TYPE="dev"",
524
+ "export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
525
+ "export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
526
+ "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")"",
527
+ "export HOST="api.dev.test-app.pan.panter.cloud"",
528
+ "export ROOT_URL="https://api.dev.test-app.pan.panter.cloud"",
529
+ "export HOST_INTERNAL="api.dev.test-app.pan.panter.cloud"",
530
+ "export HOST_CANONICAL="api.dev.test-app.pan.panter.cloud"",
531
+ "export ROOT_URL_INTERNAL="https://api.dev.test-app.pan.panter.cloud"",
532
+ "export KUBE_NAMESPACE="pan-test-app-dev"",
533
+ "export KUBE_APP_NAME="api"",
534
+ "export KUBE_APP_NAME_PREFIX=""",
535
+ "export MONGODB_ROOT_PASSWORD="$CL_dev_api_MONGODB_ROOT_PASSWORD"",
536
+ "export MONGODB_REPLICASET_KEY="$CL_dev_api_MONGODB_REPLICASET_KEY"",
537
+ "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\\",\\"KUBE_NAMESPACE\\",\\"KUBE_APP_NAME\\",\\"KUBE_APP_NAME_PREFIX\\",\\"MONGODB_ROOT_PASSWORD\\",\\"MONGODB_REPLICASET_KEY\\"]"",
538
+ "export RELEASE_NAME="pan-test-app-dev-api"",
539
+ "export HELM_EXPERIMENTAL_OCI="1"",
540
+ "export KUBE_DOCKER_IMAGE_PULL_SECRET="gitlab-registry-api"",
541
+ "export HELM_GITLAB_CHART_NAME="/helm-charts/the-panter-chart"",
542
+ "export HELM_ARGS=""",
543
+ "export COMPONENT_NAME="api"",
544
+ "export BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
545
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
511
546
  "kubectl config set-cluster "kube-pan-test-app-dev-api" --server="$CL_dev_api_KUBE_URL" --certificate-authority <(echo $CL_dev_api_KUBE_CA_PEM | base64 -d) --embed-certs=true",
512
547
  "kubectl config set-credentials "kube-pan-test-app-dev-api" --token="$CL_dev_api_KUBE_TOKEN"",
513
548
  "kubectl config set-context "kube-pan-test-app-dev-api" --cluster="kube-pan-test-app-dev-api" --user="kube-pan-test-app-dev-api" --namespace="pan-test-app-dev"",
@@ -515,93 +550,14 @@ mongodb:
515
550
  "kubernetesDelete",
516
551
  "echo Disabling component in Dependency Track",
517
552
  "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" disable "pan-test-app/api" "https://api.dev.test-app.pan.panter.cloud" || true",
553
+ "echo "CL_GITLAB_ENVIRONMENT_URL=https://api.dev.test-app.pan.panter.cloud" >> gitlab_environment.env",
518
554
  ],
519
555
  "stage": "stop dev",
520
556
  "variables": {
521
- "APP_DIR": "api",
522
- "BUILD_ID": "some-id",
523
- "BUILD_INFO_BUILD_TIME": "01-01-2023 12:13:14",
524
- "BUILD_INFO_CURRENT_VERSION": "3.2.1",
525
- "BUILD_INFO_ID": "some-id",
526
- "COMPONENT_NAME": "api",
527
- "ENV_SHORT": "dev",
528
- "ENV_TYPE": "dev",
529
557
  "GIT_STRATEGY": "none",
530
- "HELM_ARGS": "",
531
- "HELM_EXPERIMENTAL_OCI": "1",
532
- "HELM_GITLAB_CHART_NAME": "/helm-charts/the-panter-chart",
533
- "HOST": "api.dev.test-app.pan.panter.cloud",
534
- "HOST_CANONICAL": "api.dev.test-app.pan.panter.cloud",
535
- "HOST_INTERNAL": "api.dev.test-app.pan.panter.cloud",
536
558
  "KUBERNETES_CPU_REQUEST": "0.5",
537
559
  "KUBERNETES_MEMORY_LIMIT": "400Mi",
538
560
  "KUBERNETES_MEMORY_REQUEST": "200Mi",
539
- "KUBE_APP_NAME": "api",
540
- "KUBE_APP_NAME_PREFIX": "",
541
- "KUBE_DOCKER_IMAGE_PULL_SECRET": "gitlab-registry-api",
542
- "KUBE_NAMESPACE": "pan-test-app-dev",
543
- "KUBE_VALUES": "env:
544
- secret:
545
- MONGODB_ROOT_PASSWORD: '$CL_dev_api_MONGODB_ROOT_PASSWORD'
546
- MONGODB_REPLICASET_KEY: '$CL_dev_api_MONGODB_REPLICASET_KEY'
547
- MONGO_URL: 'mongodb://root:$CL_dev_api_MONGODB_ROOT_PASSWORD@api-mongodb-0.api-mongodb-headless.pan-test-app-dev.svc.cluster.local:27017,api-mongodb-1.api-mongodb-headless.pan-test-app-dev.svc.cluster.local:27017/app?replicaSet=rs0&authSource=admin'
548
- MONGO_OPLOG_URL: 'mongodb://root:$CL_dev_api_MONGODB_ROOT_PASSWORD@api-mongodb-0.api-mongodb-headless.pan-test-app-dev.svc.cluster.local:27017,api-mongodb-1.api-mongodb-headless.pan-test-app-dev.svc.cluster.local:27017/local?replicaSet=rs0&authSource=admin'
549
- public:
550
- ENV_SHORT: 'dev'
551
- APP_DIR: 'api'
552
- ENV_TYPE: 'dev'
553
- BUILD_INFO_ID: 'some-id'
554
- BUILD_INFO_BUILD_TIME: '01-01-2023 12:13:14'
555
- BUILD_INFO_CURRENT_VERSION: '3.2.1'
556
- HOST: 'api.dev.test-app.pan.panter.cloud'
557
- ROOT_URL: 'https://api.dev.test-app.pan.panter.cloud'
558
- HOST_CANONICAL: 'api.dev.test-app.pan.panter.cloud'
559
- ROOT_URL_INTERNAL: 'https://api.dev.test-app.pan.panter.cloud'
560
- KUBE_NAMESPACE: 'pan-test-app-dev'
561
- KUBE_APP_NAME: 'api'
562
- KUBE_APP_NAME_PREFIX: ''
563
- HOST_INTERNAL: 'api.dev.test-app.pan.panter.cloud'
564
- _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","KUBE_NAMESPACE","KUBE_APP_NAME","KUBE_APP_NAME_PREFIX","HOST_INTERNAL","MONGODB_ROOT_PASSWORD","MONGODB_REPLICASET_KEY"]'
565
- application:
566
- host: 'api.dev.test-app.pan.panter.cloud'
567
- command: 'node main.js'
568
- livenessProbe:
569
- httpGet:
570
- path: '__health'
571
- readinessProbe:
572
- httpGet:
573
- path: '__health'
574
- startupProbe:
575
- httpGet:
576
- path: '__health'
577
- mongodb:
578
- enabled: true
579
- auth:
580
- enabled: true
581
- rootPassword: '$CL_dev_api_MONGODB_ROOT_PASSWORD'
582
- replicaSetKey: '$CL_dev_api_MONGODB_REPLICASET_KEY'
583
- persistence:
584
- storageClass: 'premium-rwo'
585
- backup:
586
- enabled: false
587
- hostToBackup: 'api-mongodb-0.api-mongodb-headless.pan-test-app-dev.svc.cluster.local:27017'
588
- pvcToBackup: 'datadir-api-mongodb-0'
589
- image: 'mrelite/kubectlmongoshell:v1.0'
590
- schedule: '0 4 * * *'
591
- volumeSnapshotClass: 'snapshotclass'
592
- architecture: 'replicaset'
593
- tolerations:
594
- - key: 'mongodb'
595
- operator: 'Equal'
596
- value: 'true'
597
- effect: 'NoSchedule'
598
- ",
599
- "MONGODB_REPLICASET_KEY": "$CL_dev_api_MONGODB_REPLICASET_KEY",
600
- "MONGODB_ROOT_PASSWORD": "$CL_dev_api_MONGODB_ROOT_PASSWORD",
601
- "RELEASE_NAME": "pan-test-app-dev-api",
602
- "ROOT_URL": "https://api.dev.test-app.pan.panter.cloud",
603
- "ROOT_URL_INTERNAL": "https://api.dev.test-app.pan.panter.cloud",
604
- "_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","KUBE_NAMESPACE","KUBE_APP_NAME","KUBE_APP_NAME_PREFIX","HOST_INTERNAL","MONGODB_ROOT_PASSWORD","MONGODB_REPLICASET_KEY"]",
605
561
  },
606
562
  },
607
563
  "api ๐Ÿ›ก audit": {
@@ -617,12 +573,14 @@ mongodb:
617
573
  ],
618
574
  },
619
575
  "script": [
576
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
577
+ "export APP_PATH="api"",
578
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
620
579
  "cd api",
621
580
  "yarn npm audit --environment production",
622
581
  ],
623
582
  "stage": "test",
624
583
  "variables": {
625
- "APP_PATH": "api",
626
584
  "KUBERNETES_CPU_REQUEST": "0.5",
627
585
  "KUBERNETES_MEMORY_LIMIT": "4Gi",
628
586
  "KUBERNETES_MEMORY_REQUEST": "2Gi",
@@ -656,6 +614,9 @@ mongodb:
656
614
  ],
657
615
  },
658
616
  "script": [
617
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
618
+ "export APP_PATH="api"",
619
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
659
620
  "echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"",
660
621
  "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
661
622
  "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
@@ -672,7 +633,6 @@ mongodb:
672
633
  ],
673
634
  "stage": "test",
674
635
  "variables": {
675
- "APP_PATH": "api",
676
636
  "KUBERNETES_CPU_REQUEST": "0.5",
677
637
  "KUBERNETES_MEMORY_LIMIT": "4Gi",
678
638
  "KUBERNETES_MEMORY_REQUEST": "2Gi",
@@ -696,6 +656,8 @@ mongodb:
696
656
  ],
697
657
  },
698
658
  "script": [
659
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
660
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
699
661
  "trivy fs --quiet --format cyclonedx --output "__sbom.json" api",
700
662
  ],
701
663
  "stage": "build",
@@ -748,7 +710,7 @@ mongodb:
748
710
  ],
749
711
  "variables": {
750
712
  "FF_USE_FASTZIP": "true",
751
- "GIT_DEPTH": 1,
713
+ "GIT_DEPTH": "1",
752
714
  },
753
715
  "workflow": {
754
716
  "rules": [
@@ -779,10 +741,16 @@ mongodb:
779
741
  "image": "path/to/docker/jobs-default:the-version",
780
742
  "jobs": {
781
743
  "api โ†ฉ๏ธ Rollback โš ๏ธ | review ": {
744
+ "allow_failure": true,
745
+ "artifacts": {
746
+ "reports": {
747
+ "dotenv": "gitlab_environment.env",
748
+ },
749
+ },
782
750
  "environment": {
783
751
  "action": "access",
784
- "name": "review/some-commit/api",
785
- "url": "https://api.mr1234.review.test-app.pan.panter.cloud",
752
+ "name": "review/$CI_COMMIT_REF_NAME/api",
753
+ "url": "$CL_GITLAB_ENVIRONMENT_URL",
786
754
  },
787
755
  "image": "path/to/docker/kubernetes:the-version",
788
756
  "interruptible": true,
@@ -796,103 +764,49 @@ mongodb:
796
764
  },
797
765
  "rules": [
798
766
  {
799
- "allow_failure": true,
800
767
  "when": "manual",
801
768
  },
802
769
  ],
803
770
  "script": [
804
- "kubectl config set-cluster "kube-pan-test-app-review-mr1234-api" --server="$CL_review_api_KUBE_URL" --certificate-authority <(echo $CL_review_api_KUBE_CA_PEM | base64 -d) --embed-certs=true",
805
- "kubectl config set-credentials "kube-pan-test-app-review-mr1234-api" --token="$CL_review_api_KUBE_TOKEN"",
806
- "kubectl config set-context "kube-pan-test-app-review-mr1234-api" --cluster="kube-pan-test-app-review-mr1234-api" --user="kube-pan-test-app-review-mr1234-api" --namespace="pan-test-app-review"",
807
- "kubectl config use-context "kube-pan-test-app-review-mr1234-api"",
771
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
772
+ "export ENV_SHORT="review"",
773
+ "export APP_DIR="api"",
774
+ "export ENV_TYPE="review"",
775
+ "export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
776
+ "export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
777
+ "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")"",
778
+ "export HOST="api.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud"",
779
+ "export ROOT_URL="https://api.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud"",
780
+ "export HOST_INTERNAL="api.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud"",
781
+ "export HOST_CANONICAL="api.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud"",
782
+ "export ROOT_URL_INTERNAL="https://api.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud"",
783
+ "export KUBE_NAMESPACE="pan-test-app-review"",
784
+ "export KUBE_APP_NAME="$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api"",
785
+ "export KUBE_APP_NAME_PREFIX="$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-"",
786
+ "export MONGODB_ROOT_PASSWORD="$CL_review_api_MONGODB_ROOT_PASSWORD"",
787
+ "export MONGODB_REPLICASET_KEY="$CL_review_api_MONGODB_REPLICASET_KEY"",
788
+ "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\\",\\"KUBE_NAMESPACE\\",\\"KUBE_APP_NAME\\",\\"KUBE_APP_NAME_PREFIX\\",\\"MONGODB_ROOT_PASSWORD\\",\\"MONGODB_REPLICASET_KEY\\"]"",
789
+ "export RELEASE_NAME="pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api"",
790
+ "export HELM_EXPERIMENTAL_OCI="1"",
791
+ "export KUBE_DOCKER_IMAGE_PULL_SECRET="gitlab-registry-api"",
792
+ "export HELM_GITLAB_CHART_NAME="/helm-charts/the-panter-chart"",
793
+ "export HELM_ARGS=""",
794
+ "export COMPONENT_NAME="api"",
795
+ "export BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
796
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
797
+ "kubectl config set-cluster "kube-pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api" --server="$CL_review_api_KUBE_URL" --certificate-authority <(echo $CL_review_api_KUBE_CA_PEM | base64 -d) --embed-certs=true",
798
+ "kubectl config set-credentials "kube-pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api" --token="$CL_review_api_KUBE_TOKEN"",
799
+ "kubectl config set-context "kube-pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api" --cluster="kube-pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api" --user="kube-pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api" --namespace="pan-test-app-review"",
800
+ "kubectl config use-context "kube-pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api"",
808
801
  "kubernetesRollback",
802
+ "echo "CL_GITLAB_ENVIRONMENT_URL=https://api.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud" >> gitlab_environment.env",
809
803
  ],
810
804
  "stage": "rollback review",
811
805
  "variables": {
812
- "APP_DIR": "api",
813
- "BUILD_ID": "some-id",
814
- "BUILD_INFO_BUILD_TIME": "01-01-2023 12:13:14",
815
- "BUILD_INFO_CURRENT_VERSION": "3.2.1",
816
- "BUILD_INFO_ID": "some-id",
817
- "COMPONENT_NAME": "api",
818
- "ENV_SHORT": "review",
819
- "ENV_TYPE": "review",
820
806
  "GIT_STRATEGY": "none",
821
- "HELM_ARGS": "",
822
- "HELM_EXPERIMENTAL_OCI": "1",
823
- "HELM_GITLAB_CHART_NAME": "/helm-charts/the-panter-chart",
824
- "HOST": "api.mr1234.review.test-app.pan.panter.cloud",
825
- "HOST_CANONICAL": "api.mr1234.review.test-app.pan.panter.cloud",
826
- "HOST_INTERNAL": "api.mr1234.review.test-app.pan.panter.cloud",
827
807
  "KUBERNETES_CPU_REQUEST": "0.5",
828
808
  "KUBERNETES_MEMORY_LIMIT": "400Mi",
829
809
  "KUBERNETES_MEMORY_REQUEST": "200Mi",
830
- "KUBE_APP_NAME": "mr1234-api",
831
- "KUBE_APP_NAME_PREFIX": "mr1234-",
832
- "KUBE_DOCKER_IMAGE_PULL_SECRET": "gitlab-registry-api",
833
- "KUBE_NAMESPACE": "pan-test-app-review",
834
- "KUBE_VALUES": "env:
835
- secret:
836
- MONGODB_ROOT_PASSWORD: '$CL_review_api_MONGODB_ROOT_PASSWORD'
837
- MONGODB_REPLICASET_KEY: '$CL_review_api_MONGODB_REPLICASET_KEY'
838
- MONGO_URL: 'mongodb://root:$CL_review_api_MONGODB_ROOT_PASSWORD@mr1234-api-mongodb-0.mr1234-api-mongodb-headless.pan-test-app-review.svc.cluster.local:27017,mr1234-api-mongodb-1.mr1234-api-mongodb-headless.pan-test-app-review.svc.cluster.local:27017/app?replicaSet=rs0&authSource=admin'
839
- MONGO_OPLOG_URL: 'mongodb://root:$CL_review_api_MONGODB_ROOT_PASSWORD@mr1234-api-mongodb-0.mr1234-api-mongodb-headless.pan-test-app-review.svc.cluster.local:27017,mr1234-api-mongodb-1.mr1234-api-mongodb-headless.pan-test-app-review.svc.cluster.local:27017/local?replicaSet=rs0&authSource=admin'
840
- public:
841
- ENV_SHORT: 'review'
842
- APP_DIR: 'api'
843
- ENV_TYPE: 'review'
844
- BUILD_INFO_ID: 'some-id'
845
- BUILD_INFO_BUILD_TIME: '01-01-2023 12:13:14'
846
- BUILD_INFO_CURRENT_VERSION: '3.2.1'
847
- HOST: 'api.mr1234.review.test-app.pan.panter.cloud'
848
- ROOT_URL: 'https://api.mr1234.review.test-app.pan.panter.cloud'
849
- HOST_CANONICAL: 'api.mr1234.review.test-app.pan.panter.cloud'
850
- ROOT_URL_INTERNAL: 'https://api.mr1234.review.test-app.pan.panter.cloud'
851
- KUBE_NAMESPACE: 'pan-test-app-review'
852
- KUBE_APP_NAME: 'mr1234-api'
853
- KUBE_APP_NAME_PREFIX: 'mr1234-'
854
- HOST_INTERNAL: 'api.mr1234.review.test-app.pan.panter.cloud'
855
- _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","KUBE_NAMESPACE","KUBE_APP_NAME","KUBE_APP_NAME_PREFIX","HOST_INTERNAL","MONGODB_ROOT_PASSWORD","MONGODB_REPLICASET_KEY"]'
856
- application:
857
- host: 'api.mr1234.review.test-app.pan.panter.cloud'
858
- command: 'node main.js'
859
- livenessProbe:
860
- httpGet:
861
- path: '__health'
862
- readinessProbe:
863
- httpGet:
864
- path: '__health'
865
- startupProbe:
866
- httpGet:
867
- path: '__health'
868
- mongodb:
869
- enabled: true
870
- auth:
871
- enabled: true
872
- rootPassword: '$CL_review_api_MONGODB_ROOT_PASSWORD'
873
- replicaSetKey: '$CL_review_api_MONGODB_REPLICASET_KEY'
874
- persistence:
875
- storageClass: 'premium-rwo'
876
- backup:
877
- enabled: false
878
- hostToBackup: 'mr1234-api-mongodb-0.mr1234-api-mongodb-headless.pan-test-app-review.svc.cluster.local:27017'
879
- pvcToBackup: 'datadir-mr1234-api-mongodb-0'
880
- image: 'mrelite/kubectlmongoshell:v1.0'
881
- schedule: '0 4 * * *'
882
- volumeSnapshotClass: 'snapshotclass'
883
- architecture: 'replicaset'
884
- tolerations:
885
- - key: 'mongodb'
886
- operator: 'Equal'
887
- value: 'true'
888
- effect: 'NoSchedule'
889
- ",
890
- "MONGODB_REPLICASET_KEY": "$CL_review_api_MONGODB_REPLICASET_KEY",
891
- "MONGODB_ROOT_PASSWORD": "$CL_review_api_MONGODB_ROOT_PASSWORD",
892
- "RELEASE_NAME": "pan-test-app-review-mr1234-api",
893
- "ROOT_URL": "https://api.mr1234.review.test-app.pan.panter.cloud",
894
- "ROOT_URL_INTERNAL": "https://api.mr1234.review.test-app.pan.panter.cloud",
895
- "_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","KUBE_NAMESPACE","KUBE_APP_NAME","KUBE_APP_NAME_PREFIX","HOST_INTERNAL","MONGODB_ROOT_PASSWORD","MONGODB_REPLICASET_KEY"]",
896
810
  },
897
811
  },
898
812
  "api ๐Ÿ‘ฎ lint": {
@@ -923,6 +837,9 @@ mongodb:
923
837
  ],
924
838
  },
925
839
  "script": [
840
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
841
+ "export APP_PATH="api"",
842
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
926
843
  "echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"",
927
844
  "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
928
845
  "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
@@ -939,7 +856,6 @@ mongodb:
939
856
  ],
940
857
  "stage": "test",
941
858
  "variables": {
942
- "APP_PATH": "api",
943
859
  "KUBERNETES_CPU_REQUEST": "0.5",
944
860
  "KUBERNETES_MEMORY_LIMIT": "4Gi",
945
861
  "KUBERNETES_MEMORY_REQUEST": "2Gi",
@@ -992,7 +908,26 @@ mongodb:
992
908
  ],
993
909
  },
994
910
  "script": [
995
- "echo '{"id":"some-id","time":"01-01-2023 12:13:14"}' > api/__build_info.json",
911
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
912
+ "export ENV_SHORT="review"",
913
+ "export APP_DIR="api"",
914
+ "export ENV_TYPE="review"",
915
+ "export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
916
+ "export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
917
+ "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")"",
918
+ "export HOST="api.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud"",
919
+ "export ROOT_URL="https://api.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud"",
920
+ "export HOST_INTERNAL="api.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud"",
921
+ "export HOST_CANONICAL="api.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud"",
922
+ "export ROOT_URL_INTERNAL="https://api.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud"",
923
+ "export KUBE_NAMESPACE="pan-test-app-review"",
924
+ "export KUBE_APP_NAME="$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api"",
925
+ "export KUBE_APP_NAME_PREFIX="$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-"",
926
+ "export MONGODB_ROOT_PASSWORD="$CL_review_api_MONGODB_ROOT_PASSWORD"",
927
+ "export MONGODB_REPLICASET_KEY="$CL_review_api_MONGODB_REPLICASET_KEY"",
928
+ "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\\",\\"KUBE_NAMESPACE\\",\\"KUBE_APP_NAME\\",\\"KUBE_APP_NAME_PREFIX\\",\\"MONGODB_ROOT_PASSWORD\\",\\"MONGODB_REPLICASET_KEY\\"]"",
929
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
930
+ "echo '{"id":"$(git describe --tags 2>/dev/null || git rev-parse HEAD)","time":"$CI_JOB_STARTED_AT"}' > api/__build_info.json",
996
931
  "echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"",
997
932
  "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
998
933
  "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
@@ -1009,26 +944,9 @@ mongodb:
1009
944
  ],
1010
945
  "stage": "build",
1011
946
  "variables": {
1012
- "APP_DIR": "api",
1013
- "BUILD_INFO_BUILD_TIME": "01-01-2023 12:13:14",
1014
- "BUILD_INFO_CURRENT_VERSION": "3.2.1",
1015
- "BUILD_INFO_ID": "some-id",
1016
- "ENV_SHORT": "review",
1017
- "ENV_TYPE": "review",
1018
- "HOST": "api.mr1234.review.test-app.pan.panter.cloud",
1019
- "HOST_CANONICAL": "api.mr1234.review.test-app.pan.panter.cloud",
1020
- "HOST_INTERNAL": "api.mr1234.review.test-app.pan.panter.cloud",
1021
947
  "KUBERNETES_CPU_REQUEST": "0.5",
1022
948
  "KUBERNETES_MEMORY_LIMIT": "4Gi",
1023
949
  "KUBERNETES_MEMORY_REQUEST": "2Gi",
1024
- "KUBE_APP_NAME": "mr1234-api",
1025
- "KUBE_APP_NAME_PREFIX": "mr1234-",
1026
- "KUBE_NAMESPACE": "pan-test-app-review",
1027
- "MONGODB_REPLICASET_KEY": "$CL_review_api_MONGODB_REPLICASET_KEY",
1028
- "MONGODB_ROOT_PASSWORD": "$CL_review_api_MONGODB_ROOT_PASSWORD",
1029
- "ROOT_URL": "https://api.mr1234.review.test-app.pan.panter.cloud",
1030
- "ROOT_URL_INTERNAL": "https://api.mr1234.review.test-app.pan.panter.cloud",
1031
- "_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","KUBE_NAMESPACE","KUBE_APP_NAME","KUBE_APP_NAME_PREFIX","HOST_INTERNAL","MONGODB_ROOT_PASSWORD","MONGODB_REPLICASET_KEY"]",
1032
950
  },
1033
951
  },
1034
952
  "api ๐Ÿ”จ docker | review ": {
@@ -1054,6 +972,22 @@ mongodb:
1054
972
  ],
1055
973
  },
1056
974
  "script": [
975
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
976
+ "export APP_DIR="api"",
977
+ "export DOCKER_DIR="."",
978
+ "export DOCKER_REGISTRY="$CI_REGISTRY"",
979
+ "export DOCKER_CACHE_IMAGE="$CI_REGISTRY_IMAGE/caches/api"",
980
+ "export DOCKER_IMAGE_NAME="review/api"",
981
+ "export DOCKER_IMAGE="$CI_REGISTRY_IMAGE/$DOCKER_IMAGE_NAME"",
982
+ "export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"",
983
+ "export DOCKER_COPY_AND_INSTALL_APP="COPY --chown=node:node $APP_DIR .
984
+ RUN yarn plugin import workspace-tools
985
+ RUN yarn workspaces focus --production && yarn rebuild"",
986
+ "export DOCKER_COPY_WORKSPACE_FILES="COPY --chown=node:node api/package.json /app/api/package.json
987
+ COPY --chown=node:node api/yarn.lock /app/api/yarn.lock
988
+ COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
989
+ COPY --chown=node:node .yarn /app/.yarn"",
990
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
1057
991
  "ensureNodeDockerfile",
1058
992
  "echo -e "\\e[0Ksection_start:$(date +%s):docker-login[collapsed=true]\\r\\e[0KDocker Login"",
1059
993
  "docker login --username gitlab-ci-token --password $CI_JOB_TOKEN $CI_REGISTRY",
@@ -1077,25 +1011,9 @@ mongodb:
1077
1011
  ],
1078
1012
  "stage": "build",
1079
1013
  "variables": {
1080
- "APP_DIR": "api",
1081
- "DOCKERFILE_ADDITIONS": undefined,
1082
- "DOCKERFILE_ADDITIONS_END": undefined,
1083
1014
  "DOCKER_BUILDKIT": "1",
1084
- "DOCKER_CACHE_IMAGE": "$CI_REGISTRY_IMAGE/caches/api",
1085
- "DOCKER_COPY_AND_INSTALL_APP": "COPY --chown=node:node $APP_DIR .
1086
- RUN yarn plugin import workspace-tools
1087
- RUN yarn workspaces focus --production && yarn rebuild",
1088
- "DOCKER_COPY_WORKSPACE_FILES": "COPY --chown=node:node api/package.json /app/api/package.json
1089
- COPY --chown=node:node api/yarn.lock /app/api/yarn.lock
1090
- COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
1091
- COPY --chown=node:node .yarn /app/.yarn",
1092
- "DOCKER_DIR": ".",
1093
1015
  "DOCKER_DRIVER": "overlay2",
1094
1016
  "DOCKER_HOST": "tcp://0.0.0.0:2375",
1095
- "DOCKER_IMAGE": "$CI_REGISTRY_IMAGE/$DOCKER_IMAGE_NAME",
1096
- "DOCKER_IMAGE_NAME": "review/api",
1097
- "DOCKER_IMAGE_TAG": "$CI_COMMIT_SHA",
1098
- "DOCKER_REGISTRY": "$CI_REGISTRY",
1099
1017
  "DOCKER_TLS_CERTDIR": "",
1100
1018
  "KUBERNETES_CPU_REQUEST": "0.5",
1101
1019
  "KUBERNETES_MEMORY_LIMIT": "2Gi",
@@ -1104,11 +1022,16 @@ COPY --chown=node:node .yarn /app/.yarn",
1104
1022
  },
1105
1023
  "api ๐Ÿš€ Deploy | review ": {
1106
1024
  "allow_failure": false,
1025
+ "artifacts": {
1026
+ "reports": {
1027
+ "dotenv": "gitlab_environment.env",
1028
+ },
1029
+ },
1107
1030
  "environment": {
1108
1031
  "auto_stop_in": "1 week",
1109
- "name": "review/some-commit/api",
1032
+ "name": "review/$CI_COMMIT_REF_NAME/api",
1110
1033
  "on_stop": "api ๐Ÿ›‘ Stop โš ๏ธ | review ",
1111
- "url": "https://api.mr1234.review.test-app.pan.panter.cloud",
1034
+ "url": "$CL_GITLAB_ENVIRONMENT_URL",
1112
1035
  },
1113
1036
  "image": "path/to/docker/kubernetes:the-version",
1114
1037
  "interruptible": true,
@@ -1151,113 +1074,164 @@ COPY --chown=node:node .yarn /app/.yarn",
1151
1074
  },
1152
1075
  ],
1153
1076
  "script": [
1154
- "kubectl config set-cluster "kube-pan-test-app-review-mr1234-api" --server="$CL_review_api_KUBE_URL" --certificate-authority <(echo $CL_review_api_KUBE_CA_PEM | base64 -d) --embed-certs=true",
1155
- "kubectl config set-credentials "kube-pan-test-app-review-mr1234-api" --token="$CL_review_api_KUBE_TOKEN"",
1156
- "kubectl config set-context "kube-pan-test-app-review-mr1234-api" --cluster="kube-pan-test-app-review-mr1234-api" --user="kube-pan-test-app-review-mr1234-api" --namespace="pan-test-app-review"",
1157
- "kubectl config use-context "kube-pan-test-app-review-mr1234-api"",
1158
- "kubernetesCreateSecret",
1159
- "kubernetesDeploy",
1160
- "echo Uploading SBOM to Dependency Track",
1161
- "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/api" "https://api.mr1234.review.test-app.pan.panter.cloud" "__sbom.json" vex.json || true",
1162
- "echo deployment successful ๐Ÿ˜ป",
1163
- ],
1164
- "stage": "deploy review",
1165
- "variables": {
1166
- "APP_DIR": "api",
1167
- "BUILD_ID": "some-id",
1168
- "BUILD_INFO_BUILD_TIME": "01-01-2023 12:13:14",
1169
- "BUILD_INFO_CURRENT_VERSION": "3.2.1",
1170
- "BUILD_INFO_ID": "some-id",
1171
- "COMPONENT_NAME": "api",
1172
- "DOCKER_CACHE_IMAGE": "$CI_REGISTRY_IMAGE/caches/api",
1173
- "DOCKER_IMAGE": "$CI_REGISTRY_IMAGE/$DOCKER_IMAGE_NAME",
1174
- "DOCKER_IMAGE_NAME": "review/api",
1175
- "DOCKER_IMAGE_TAG": "$CI_COMMIT_SHA",
1176
- "DOCKER_REGISTRY": "$CI_REGISTRY",
1177
- "ENV_SHORT": "review",
1178
- "ENV_TYPE": "review",
1179
- "HELM_ARGS": "",
1180
- "HELM_EXPERIMENTAL_OCI": "1",
1181
- "HELM_GITLAB_CHART_NAME": "/helm-charts/the-panter-chart",
1182
- "HOST": "api.mr1234.review.test-app.pan.panter.cloud",
1183
- "HOST_CANONICAL": "api.mr1234.review.test-app.pan.panter.cloud",
1184
- "HOST_INTERNAL": "api.mr1234.review.test-app.pan.panter.cloud",
1185
- "KUBERNETES_CPU_REQUEST": "0.5",
1186
- "KUBERNETES_MEMORY_LIMIT": "400Mi",
1187
- "KUBERNETES_MEMORY_REQUEST": "200Mi",
1188
- "KUBE_APP_NAME": "mr1234-api",
1189
- "KUBE_APP_NAME_PREFIX": "mr1234-",
1190
- "KUBE_DOCKER_IMAGE_PULL_SECRET": "gitlab-registry-api",
1191
- "KUBE_NAMESPACE": "pan-test-app-review",
1192
- "KUBE_VALUES": "env:
1077
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
1078
+ "export ENV_SHORT="review"",
1079
+ "export APP_DIR="api"",
1080
+ "export ENV_TYPE="review"",
1081
+ "export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
1082
+ "export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
1083
+ "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")"",
1084
+ "export HOST="api.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud"",
1085
+ "export ROOT_URL="https://api.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud"",
1086
+ "export HOST_INTERNAL="api.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud"",
1087
+ "export HOST_CANONICAL="api.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud"",
1088
+ "export ROOT_URL_INTERNAL="https://api.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud"",
1089
+ "export KUBE_NAMESPACE="pan-test-app-review"",
1090
+ "export KUBE_APP_NAME="$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api"",
1091
+ "export KUBE_APP_NAME_PREFIX="$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-"",
1092
+ "export MONGODB_ROOT_PASSWORD="$CL_review_api_MONGODB_ROOT_PASSWORD"",
1093
+ "export MONGODB_REPLICASET_KEY="$CL_review_api_MONGODB_REPLICASET_KEY"",
1094
+ "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\\",\\"KUBE_NAMESPACE\\",\\"KUBE_APP_NAME\\",\\"KUBE_APP_NAME_PREFIX\\",\\"MONGODB_ROOT_PASSWORD\\",\\"MONGODB_REPLICASET_KEY\\"]"",
1095
+ "export DOCKER_REGISTRY="$CI_REGISTRY"",
1096
+ "export DOCKER_CACHE_IMAGE="$CI_REGISTRY_IMAGE/caches/api"",
1097
+ "export DOCKER_IMAGE_NAME="review/api"",
1098
+ "export DOCKER_IMAGE="$CI_REGISTRY_IMAGE/$DOCKER_IMAGE_NAME"",
1099
+ "export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"",
1100
+ "export RELEASE_NAME="pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api"",
1101
+ "export HELM_EXPERIMENTAL_OCI="1"",
1102
+ "export KUBE_DOCKER_IMAGE_PULL_SECRET="gitlab-registry-api"",
1103
+ "export HELM_GITLAB_CHART_NAME="/helm-charts/the-panter-chart"",
1104
+ "export HELM_ARGS=""",
1105
+ "export COMPONENT_NAME="api"",
1106
+ "export BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
1107
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
1108
+ "kubectl config set-cluster "kube-pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api" --server="$CL_review_api_KUBE_URL" --certificate-authority <(echo $CL_review_api_KUBE_CA_PEM | base64 -d) --embed-certs=true",
1109
+ "kubectl config set-credentials "kube-pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api" --token="$CL_review_api_KUBE_TOKEN"",
1110
+ "kubectl config set-context "kube-pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api" --cluster="kube-pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api" --user="kube-pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api" --namespace="pan-test-app-review"",
1111
+ "kubectl config use-context "kube-pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api"",
1112
+ "echo -e "\\e[0Ksection_start:$(date +%s):writeallvalues[collapsed=true]\\r\\e[0KWrite __all_values.yml for helm deployment"",
1113
+ "cat > __all_values.yml <<EOF
1114
+ env:
1193
1115
  secret:
1194
- MONGODB_ROOT_PASSWORD: '$CL_review_api_MONGODB_ROOT_PASSWORD'
1195
- MONGODB_REPLICASET_KEY: '$CL_review_api_MONGODB_REPLICASET_KEY'
1196
- MONGO_URL: 'mongodb://root:$CL_review_api_MONGODB_ROOT_PASSWORD@mr1234-api-mongodb-0.mr1234-api-mongodb-headless.pan-test-app-review.svc.cluster.local:27017,mr1234-api-mongodb-1.mr1234-api-mongodb-headless.pan-test-app-review.svc.cluster.local:27017/app?replicaSet=rs0&authSource=admin'
1197
- MONGO_OPLOG_URL: 'mongodb://root:$CL_review_api_MONGODB_ROOT_PASSWORD@mr1234-api-mongodb-0.mr1234-api-mongodb-headless.pan-test-app-review.svc.cluster.local:27017,mr1234-api-mongodb-1.mr1234-api-mongodb-headless.pan-test-app-review.svc.cluster.local:27017/local?replicaSet=rs0&authSource=admin'
1116
+ MONGODB_ROOT_PASSWORD: |-
1117
+ $(printf %s "$CL_review_api_MONGODB_ROOT_PASSWORD" | sed 's/^/ /')
1118
+ MONGODB_REPLICASET_KEY: |-
1119
+ $(printf %s "$CL_review_api_MONGODB_REPLICASET_KEY" | sed 's/^/ /')
1120
+ MONGO_URL: |-
1121
+ mongodb://root:$CL_review_api_MONGODB_ROOT_PASSWORD@$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api-mongodb-0.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api-mongodb-headless.pan-test-app-review.svc.cluster.local:27017,$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api-mongodb-1.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api-mongodb-headless.pan-test-app-review.svc.cluster.local:27017/app?replicaSet=rs0&authSource=admin
1122
+ MONGO_OPLOG_URL: |-
1123
+ mongodb://root:$CL_review_api_MONGODB_ROOT_PASSWORD@$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api-mongodb-0.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api-mongodb-headless.pan-test-app-review.svc.cluster.local:27017,$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api-mongodb-1.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api-mongodb-headless.pan-test-app-review.svc.cluster.local:27017/local?replicaSet=rs0&authSource=admin
1198
1124
  public:
1199
- ENV_SHORT: 'review'
1200
- APP_DIR: 'api'
1201
- ENV_TYPE: 'review'
1202
- BUILD_INFO_ID: 'some-id'
1203
- BUILD_INFO_BUILD_TIME: '01-01-2023 12:13:14'
1204
- BUILD_INFO_CURRENT_VERSION: '3.2.1'
1205
- HOST: 'api.mr1234.review.test-app.pan.panter.cloud'
1206
- ROOT_URL: 'https://api.mr1234.review.test-app.pan.panter.cloud'
1207
- HOST_CANONICAL: 'api.mr1234.review.test-app.pan.panter.cloud'
1208
- ROOT_URL_INTERNAL: 'https://api.mr1234.review.test-app.pan.panter.cloud'
1209
- KUBE_NAMESPACE: 'pan-test-app-review'
1210
- KUBE_APP_NAME: 'mr1234-api'
1211
- KUBE_APP_NAME_PREFIX: 'mr1234-'
1212
- HOST_INTERNAL: 'api.mr1234.review.test-app.pan.panter.cloud'
1213
- _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","KUBE_NAMESPACE","KUBE_APP_NAME","KUBE_APP_NAME_PREFIX","HOST_INTERNAL","MONGODB_ROOT_PASSWORD","MONGODB_REPLICASET_KEY"]'
1125
+ ENV_SHORT: |-
1126
+ review
1127
+ APP_DIR: |-
1128
+ api
1129
+ ENV_TYPE: |-
1130
+ review
1131
+ BUILD_INFO_BUILD_ID: |-
1132
+ $(printf %s "$(git describe --tags 2>/dev/null || git rev-parse HEAD)" | sed 's/^/ /')
1133
+ BUILD_INFO_BUILD_TIME: |-
1134
+ $(printf %s "$CI_JOB_STARTED_AT" | sed 's/^/ /')
1135
+ BUILD_INFO_CURRENT_VERSION: |-
1136
+ $(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/^/ /')
1137
+ HOST: |-
1138
+ $(printf %s "api.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud" | sed 's/^/ /')
1139
+ ROOT_URL: |-
1140
+ $(printf %s "https://api.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud" | sed 's/^/ /')
1141
+ HOST_INTERNAL: |-
1142
+ $(printf %s "api.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud" | sed 's/^/ /')
1143
+ HOST_CANONICAL: |-
1144
+ $(printf %s "api.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud" | sed 's/^/ /')
1145
+ ROOT_URL_INTERNAL: |-
1146
+ $(printf %s "https://api.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud" | sed 's/^/ /')
1147
+ KUBE_NAMESPACE: |-
1148
+ pan-test-app-review
1149
+ KUBE_APP_NAME: |-
1150
+ $(printf %s "$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api" | sed 's/^/ /')
1151
+ KUBE_APP_NAME_PREFIX: |-
1152
+ $(printf %s "$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-" | sed 's/^/ /')
1153
+ _ALL_ENV_VAR_KEYS: |-
1154
+ ["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","KUBE_NAMESPACE","KUBE_APP_NAME","KUBE_APP_NAME_PREFIX","MONGODB_ROOT_PASSWORD","MONGODB_REPLICASET_KEY"]
1214
1155
  application:
1215
- host: 'api.mr1234.review.test-app.pan.panter.cloud'
1216
- command: 'node main.js'
1156
+ host: |-
1157
+ $(printf %s "api.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud" | sed 's/^/ /')
1158
+ command: |-
1159
+ node main.js
1217
1160
  livenessProbe:
1218
1161
  httpGet:
1219
- path: '__health'
1162
+ path: |-
1163
+ __health
1220
1164
  readinessProbe:
1221
1165
  httpGet:
1222
- path: '__health'
1166
+ path: |-
1167
+ __health
1223
1168
  startupProbe:
1224
1169
  httpGet:
1225
- path: '__health'
1170
+ path: |-
1171
+ __health
1226
1172
  mongodb:
1227
1173
  enabled: true
1228
1174
  auth:
1229
1175
  enabled: true
1230
- rootPassword: '$CL_review_api_MONGODB_ROOT_PASSWORD'
1231
- replicaSetKey: '$CL_review_api_MONGODB_REPLICASET_KEY'
1176
+ rootPassword: |-
1177
+ $CL_review_api_MONGODB_ROOT_PASSWORD
1178
+ replicaSetKey: |-
1179
+ $CL_review_api_MONGODB_REPLICASET_KEY
1232
1180
  persistence:
1233
- storageClass: 'premium-rwo'
1181
+ storageClass: |-
1182
+ premium-rwo
1234
1183
  backup:
1235
1184
  enabled: false
1236
- hostToBackup: 'mr1234-api-mongodb-0.mr1234-api-mongodb-headless.pan-test-app-review.svc.cluster.local:27017'
1237
- pvcToBackup: 'datadir-mr1234-api-mongodb-0'
1238
- image: 'mrelite/kubectlmongoshell:v1.0'
1239
- schedule: '0 4 * * *'
1240
- volumeSnapshotClass: 'snapshotclass'
1241
- architecture: 'replicaset'
1185
+ hostToBackup: |-
1186
+ $([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api-mongodb-0.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api-mongodb-headless.pan-test-app-review.svc.cluster.local:27017
1187
+ pvcToBackup: |-
1188
+ datadir-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api-mongodb-0
1189
+ image: |-
1190
+ mrelite/kubectlmongoshell:v1.0
1191
+ schedule: |-
1192
+ 0 4 * * *
1193
+ volumeSnapshotClass: |-
1194
+ snapshotclass
1195
+ architecture: |-
1196
+ replicaset
1242
1197
  tolerations:
1243
- - key: 'mongodb'
1244
- operator: 'Equal'
1245
- value: 'true'
1246
- effect: 'NoSchedule'
1198
+ - key: |-
1199
+ mongodb
1200
+ operator: |-
1201
+ Equal
1202
+ value: |-
1203
+ true
1204
+ effect: |-
1205
+ NoSchedule
1206
+
1207
+ EOF
1247
1208
  ",
1248
- "MONGODB_REPLICASET_KEY": "$CL_review_api_MONGODB_REPLICASET_KEY",
1249
- "MONGODB_ROOT_PASSWORD": "$CL_review_api_MONGODB_ROOT_PASSWORD",
1250
- "RELEASE_NAME": "pan-test-app-review-mr1234-api",
1251
- "ROOT_URL": "https://api.mr1234.review.test-app.pan.panter.cloud",
1252
- "ROOT_URL_INTERNAL": "https://api.mr1234.review.test-app.pan.panter.cloud",
1253
- "_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","KUBE_NAMESPACE","KUBE_APP_NAME","KUBE_APP_NAME_PREFIX","HOST_INTERNAL","MONGODB_ROOT_PASSWORD","MONGODB_REPLICASET_KEY"]",
1209
+ "echo -e "\\e[0Ksection_end:$(date +%s):writeallvalues\\r\\e[0K"",
1210
+ "kubernetesCreateSecret",
1211
+ "kubernetesDeploy",
1212
+ "echo Uploading SBOM to Dependency Track",
1213
+ "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/api" "https://api.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud" "__sbom.json" vex.json || true",
1214
+ "echo deployment successful ๐Ÿ˜ป",
1215
+ "echo "CL_GITLAB_ENVIRONMENT_URL=https://api.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud" >> gitlab_environment.env",
1216
+ ],
1217
+ "stage": "deploy review",
1218
+ "variables": {
1219
+ "KUBERNETES_CPU_REQUEST": "0.5",
1220
+ "KUBERNETES_MEMORY_LIMIT": "400Mi",
1221
+ "KUBERNETES_MEMORY_REQUEST": "200Mi",
1254
1222
  },
1255
1223
  },
1256
1224
  "api ๐Ÿ›‘ Stop โš ๏ธ | review ": {
1225
+ "allow_failure": true,
1226
+ "artifacts": {
1227
+ "reports": {
1228
+ "dotenv": "gitlab_environment.env",
1229
+ },
1230
+ },
1257
1231
  "environment": {
1258
1232
  "action": "stop",
1259
- "name": "review/some-commit/api",
1260
- "url": "https://api.mr1234.review.test-app.pan.panter.cloud",
1233
+ "name": "review/$CI_COMMIT_REF_NAME/api",
1234
+ "url": "$CL_GITLAB_ENVIRONMENT_URL",
1261
1235
  },
1262
1236
  "image": "path/to/docker/kubernetes:the-version",
1263
1237
  "interruptible": true,
@@ -1271,110 +1245,55 @@ mongodb:
1271
1245
  },
1272
1246
  "rules": [
1273
1247
  {
1274
- "allow_failure": true,
1275
1248
  "if": "$CI_COMMIT_BRANCH =~ /^[0-9]+\\.([0-9]+|x)\\.x$/",
1276
1249
  "when": "on_success",
1277
1250
  },
1278
1251
  {
1279
- "allow_failure": true,
1280
1252
  "when": "manual",
1281
1253
  },
1282
1254
  ],
1283
1255
  "script": [
1284
- "kubectl config set-cluster "kube-pan-test-app-review-mr1234-api" --server="$CL_review_api_KUBE_URL" --certificate-authority <(echo $CL_review_api_KUBE_CA_PEM | base64 -d) --embed-certs=true",
1285
- "kubectl config set-credentials "kube-pan-test-app-review-mr1234-api" --token="$CL_review_api_KUBE_TOKEN"",
1286
- "kubectl config set-context "kube-pan-test-app-review-mr1234-api" --cluster="kube-pan-test-app-review-mr1234-api" --user="kube-pan-test-app-review-mr1234-api" --namespace="pan-test-app-review"",
1287
- "kubectl config use-context "kube-pan-test-app-review-mr1234-api"",
1256
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
1257
+ "export ENV_SHORT="review"",
1258
+ "export APP_DIR="api"",
1259
+ "export ENV_TYPE="review"",
1260
+ "export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
1261
+ "export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
1262
+ "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")"",
1263
+ "export HOST="api.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud"",
1264
+ "export ROOT_URL="https://api.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud"",
1265
+ "export HOST_INTERNAL="api.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud"",
1266
+ "export HOST_CANONICAL="api.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud"",
1267
+ "export ROOT_URL_INTERNAL="https://api.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud"",
1268
+ "export KUBE_NAMESPACE="pan-test-app-review"",
1269
+ "export KUBE_APP_NAME="$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api"",
1270
+ "export KUBE_APP_NAME_PREFIX="$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-"",
1271
+ "export MONGODB_ROOT_PASSWORD="$CL_review_api_MONGODB_ROOT_PASSWORD"",
1272
+ "export MONGODB_REPLICASET_KEY="$CL_review_api_MONGODB_REPLICASET_KEY"",
1273
+ "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\\",\\"KUBE_NAMESPACE\\",\\"KUBE_APP_NAME\\",\\"KUBE_APP_NAME_PREFIX\\",\\"MONGODB_ROOT_PASSWORD\\",\\"MONGODB_REPLICASET_KEY\\"]"",
1274
+ "export RELEASE_NAME="pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api"",
1275
+ "export HELM_EXPERIMENTAL_OCI="1"",
1276
+ "export KUBE_DOCKER_IMAGE_PULL_SECRET="gitlab-registry-api"",
1277
+ "export HELM_GITLAB_CHART_NAME="/helm-charts/the-panter-chart"",
1278
+ "export HELM_ARGS=""",
1279
+ "export COMPONENT_NAME="api"",
1280
+ "export BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
1281
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
1282
+ "kubectl config set-cluster "kube-pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api" --server="$CL_review_api_KUBE_URL" --certificate-authority <(echo $CL_review_api_KUBE_CA_PEM | base64 -d) --embed-certs=true",
1283
+ "kubectl config set-credentials "kube-pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api" --token="$CL_review_api_KUBE_TOKEN"",
1284
+ "kubectl config set-context "kube-pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api" --cluster="kube-pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api" --user="kube-pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api" --namespace="pan-test-app-review"",
1285
+ "kubectl config use-context "kube-pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api"",
1288
1286
  "kubernetesDelete",
1289
1287
  "echo Disabling component in Dependency Track",
1290
- "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" disable "pan-test-app/api" "https://api.mr1234.review.test-app.pan.panter.cloud" || true",
1288
+ "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" disable "pan-test-app/api" "https://api.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud" || true",
1289
+ "echo "CL_GITLAB_ENVIRONMENT_URL=https://api.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud" >> gitlab_environment.env",
1291
1290
  ],
1292
1291
  "stage": "stop review",
1293
1292
  "variables": {
1294
- "APP_DIR": "api",
1295
- "BUILD_ID": "some-id",
1296
- "BUILD_INFO_BUILD_TIME": "01-01-2023 12:13:14",
1297
- "BUILD_INFO_CURRENT_VERSION": "3.2.1",
1298
- "BUILD_INFO_ID": "some-id",
1299
- "COMPONENT_NAME": "api",
1300
- "ENV_SHORT": "review",
1301
- "ENV_TYPE": "review",
1302
1293
  "GIT_STRATEGY": "none",
1303
- "HELM_ARGS": "",
1304
- "HELM_EXPERIMENTAL_OCI": "1",
1305
- "HELM_GITLAB_CHART_NAME": "/helm-charts/the-panter-chart",
1306
- "HOST": "api.mr1234.review.test-app.pan.panter.cloud",
1307
- "HOST_CANONICAL": "api.mr1234.review.test-app.pan.panter.cloud",
1308
- "HOST_INTERNAL": "api.mr1234.review.test-app.pan.panter.cloud",
1309
1294
  "KUBERNETES_CPU_REQUEST": "0.5",
1310
1295
  "KUBERNETES_MEMORY_LIMIT": "400Mi",
1311
1296
  "KUBERNETES_MEMORY_REQUEST": "200Mi",
1312
- "KUBE_APP_NAME": "mr1234-api",
1313
- "KUBE_APP_NAME_PREFIX": "mr1234-",
1314
- "KUBE_DOCKER_IMAGE_PULL_SECRET": "gitlab-registry-api",
1315
- "KUBE_NAMESPACE": "pan-test-app-review",
1316
- "KUBE_VALUES": "env:
1317
- secret:
1318
- MONGODB_ROOT_PASSWORD: '$CL_review_api_MONGODB_ROOT_PASSWORD'
1319
- MONGODB_REPLICASET_KEY: '$CL_review_api_MONGODB_REPLICASET_KEY'
1320
- MONGO_URL: 'mongodb://root:$CL_review_api_MONGODB_ROOT_PASSWORD@mr1234-api-mongodb-0.mr1234-api-mongodb-headless.pan-test-app-review.svc.cluster.local:27017,mr1234-api-mongodb-1.mr1234-api-mongodb-headless.pan-test-app-review.svc.cluster.local:27017/app?replicaSet=rs0&authSource=admin'
1321
- MONGO_OPLOG_URL: 'mongodb://root:$CL_review_api_MONGODB_ROOT_PASSWORD@mr1234-api-mongodb-0.mr1234-api-mongodb-headless.pan-test-app-review.svc.cluster.local:27017,mr1234-api-mongodb-1.mr1234-api-mongodb-headless.pan-test-app-review.svc.cluster.local:27017/local?replicaSet=rs0&authSource=admin'
1322
- public:
1323
- ENV_SHORT: 'review'
1324
- APP_DIR: 'api'
1325
- ENV_TYPE: 'review'
1326
- BUILD_INFO_ID: 'some-id'
1327
- BUILD_INFO_BUILD_TIME: '01-01-2023 12:13:14'
1328
- BUILD_INFO_CURRENT_VERSION: '3.2.1'
1329
- HOST: 'api.mr1234.review.test-app.pan.panter.cloud'
1330
- ROOT_URL: 'https://api.mr1234.review.test-app.pan.panter.cloud'
1331
- HOST_CANONICAL: 'api.mr1234.review.test-app.pan.panter.cloud'
1332
- ROOT_URL_INTERNAL: 'https://api.mr1234.review.test-app.pan.panter.cloud'
1333
- KUBE_NAMESPACE: 'pan-test-app-review'
1334
- KUBE_APP_NAME: 'mr1234-api'
1335
- KUBE_APP_NAME_PREFIX: 'mr1234-'
1336
- HOST_INTERNAL: 'api.mr1234.review.test-app.pan.panter.cloud'
1337
- _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","KUBE_NAMESPACE","KUBE_APP_NAME","KUBE_APP_NAME_PREFIX","HOST_INTERNAL","MONGODB_ROOT_PASSWORD","MONGODB_REPLICASET_KEY"]'
1338
- application:
1339
- host: 'api.mr1234.review.test-app.pan.panter.cloud'
1340
- command: 'node main.js'
1341
- livenessProbe:
1342
- httpGet:
1343
- path: '__health'
1344
- readinessProbe:
1345
- httpGet:
1346
- path: '__health'
1347
- startupProbe:
1348
- httpGet:
1349
- path: '__health'
1350
- mongodb:
1351
- enabled: true
1352
- auth:
1353
- enabled: true
1354
- rootPassword: '$CL_review_api_MONGODB_ROOT_PASSWORD'
1355
- replicaSetKey: '$CL_review_api_MONGODB_REPLICASET_KEY'
1356
- persistence:
1357
- storageClass: 'premium-rwo'
1358
- backup:
1359
- enabled: false
1360
- hostToBackup: 'mr1234-api-mongodb-0.mr1234-api-mongodb-headless.pan-test-app-review.svc.cluster.local:27017'
1361
- pvcToBackup: 'datadir-mr1234-api-mongodb-0'
1362
- image: 'mrelite/kubectlmongoshell:v1.0'
1363
- schedule: '0 4 * * *'
1364
- volumeSnapshotClass: 'snapshotclass'
1365
- architecture: 'replicaset'
1366
- tolerations:
1367
- - key: 'mongodb'
1368
- operator: 'Equal'
1369
- value: 'true'
1370
- effect: 'NoSchedule'
1371
- ",
1372
- "MONGODB_REPLICASET_KEY": "$CL_review_api_MONGODB_REPLICASET_KEY",
1373
- "MONGODB_ROOT_PASSWORD": "$CL_review_api_MONGODB_ROOT_PASSWORD",
1374
- "RELEASE_NAME": "pan-test-app-review-mr1234-api",
1375
- "ROOT_URL": "https://api.mr1234.review.test-app.pan.panter.cloud",
1376
- "ROOT_URL_INTERNAL": "https://api.mr1234.review.test-app.pan.panter.cloud",
1377
- "_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","KUBE_NAMESPACE","KUBE_APP_NAME","KUBE_APP_NAME_PREFIX","HOST_INTERNAL","MONGODB_ROOT_PASSWORD","MONGODB_REPLICASET_KEY"]",
1378
1297
  },
1379
1298
  },
1380
1299
  "api ๐Ÿ›ก audit": {
@@ -1390,12 +1309,14 @@ mongodb:
1390
1309
  ],
1391
1310
  },
1392
1311
  "script": [
1312
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
1313
+ "export APP_PATH="api"",
1314
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
1393
1315
  "cd api",
1394
1316
  "yarn npm audit --environment production",
1395
1317
  ],
1396
1318
  "stage": "test",
1397
1319
  "variables": {
1398
- "APP_PATH": "api",
1399
1320
  "KUBERNETES_CPU_REQUEST": "0.5",
1400
1321
  "KUBERNETES_MEMORY_LIMIT": "4Gi",
1401
1322
  "KUBERNETES_MEMORY_REQUEST": "2Gi",
@@ -1429,6 +1350,9 @@ mongodb:
1429
1350
  ],
1430
1351
  },
1431
1352
  "script": [
1353
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
1354
+ "export APP_PATH="api"",
1355
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
1432
1356
  "echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"",
1433
1357
  "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
1434
1358
  "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
@@ -1445,7 +1369,6 @@ mongodb:
1445
1369
  ],
1446
1370
  "stage": "test",
1447
1371
  "variables": {
1448
- "APP_PATH": "api",
1449
1372
  "KUBERNETES_CPU_REQUEST": "0.5",
1450
1373
  "KUBERNETES_MEMORY_LIMIT": "4Gi",
1451
1374
  "KUBERNETES_MEMORY_REQUEST": "2Gi",
@@ -1469,6 +1392,8 @@ mongodb:
1469
1392
  ],
1470
1393
  },
1471
1394
  "script": [
1395
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
1396
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
1472
1397
  "trivy fs --quiet --format cyclonedx --output "__sbom.json" api",
1473
1398
  ],
1474
1399
  "stage": "build",
@@ -1521,7 +1446,7 @@ mongodb:
1521
1446
  ],
1522
1447
  "variables": {
1523
1448
  "FF_USE_FASTZIP": "true",
1524
- "GIT_DEPTH": 1,
1449
+ "GIT_DEPTH": "1",
1525
1450
  },
1526
1451
  "workflow": {
1527
1452
  "rules": [
@@ -1552,10 +1477,16 @@ mongodb:
1552
1477
  "image": "path/to/docker/jobs-default:the-version",
1553
1478
  "jobs": {
1554
1479
  "api โ†ฉ๏ธ Rollback โš ๏ธ | prod ": {
1480
+ "allow_failure": true,
1481
+ "artifacts": {
1482
+ "reports": {
1483
+ "dotenv": "gitlab_environment.env",
1484
+ },
1485
+ },
1555
1486
  "environment": {
1556
1487
  "action": "access",
1557
1488
  "name": "prod/api",
1558
- "url": "https://api.prod.test-app.pan.panter.cloud",
1489
+ "url": "$CL_GITLAB_ENVIRONMENT_URL",
1559
1490
  },
1560
1491
  "image": "path/to/docker/kubernetes:the-version",
1561
1492
  "interruptible": true,
@@ -1569,110 +1500,62 @@ mongodb:
1569
1500
  },
1570
1501
  "rules": [
1571
1502
  {
1572
- "allow_failure": true,
1573
1503
  "when": "manual",
1574
1504
  },
1575
1505
  ],
1576
1506
  "script": [
1507
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
1508
+ "export ENV_SHORT="prod"",
1509
+ "export APP_DIR="api"",
1510
+ "export ENV_TYPE="prod"",
1511
+ "export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
1512
+ "export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
1513
+ "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")"",
1514
+ "export HOST="api.prod.test-app.pan.panter.cloud"",
1515
+ "export ROOT_URL="https://api.prod.test-app.pan.panter.cloud"",
1516
+ "export HOST_INTERNAL="api.prod.test-app.pan.panter.cloud"",
1517
+ "export HOST_CANONICAL="api.prod.test-app.pan.panter.cloud"",
1518
+ "export ROOT_URL_INTERNAL="https://api.prod.test-app.pan.panter.cloud"",
1519
+ "export KUBE_NAMESPACE="pan-test-app-prod"",
1520
+ "export KUBE_APP_NAME="api"",
1521
+ "export KUBE_APP_NAME_PREFIX=""",
1522
+ "export MONGODB_ROOT_PASSWORD="$CL_prod_api_MONGODB_ROOT_PASSWORD"",
1523
+ "export MONGODB_REPLICASET_KEY="$CL_prod_api_MONGODB_REPLICASET_KEY"",
1524
+ "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\\",\\"KUBE_NAMESPACE\\",\\"KUBE_APP_NAME\\",\\"KUBE_APP_NAME_PREFIX\\",\\"MONGODB_ROOT_PASSWORD\\",\\"MONGODB_REPLICASET_KEY\\"]"",
1525
+ "export RELEASE_NAME="pan-test-app-prod-api"",
1526
+ "export HELM_EXPERIMENTAL_OCI="1"",
1527
+ "export KUBE_DOCKER_IMAGE_PULL_SECRET="gitlab-registry-api"",
1528
+ "export HELM_GITLAB_CHART_NAME="/helm-charts/the-panter-chart"",
1529
+ "export HELM_ARGS=""",
1530
+ "export COMPONENT_NAME="api"",
1531
+ "export BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
1532
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
1577
1533
  "kubectl config set-cluster "kube-pan-test-app-prod-api" --server="$CL_prod_api_KUBE_URL" --certificate-authority <(echo $CL_prod_api_KUBE_CA_PEM | base64 -d) --embed-certs=true",
1578
1534
  "kubectl config set-credentials "kube-pan-test-app-prod-api" --token="$CL_prod_api_KUBE_TOKEN"",
1579
1535
  "kubectl config set-context "kube-pan-test-app-prod-api" --cluster="kube-pan-test-app-prod-api" --user="kube-pan-test-app-prod-api" --namespace="pan-test-app-prod"",
1580
1536
  "kubectl config use-context "kube-pan-test-app-prod-api"",
1581
1537
  "kubernetesRollback",
1538
+ "echo "CL_GITLAB_ENVIRONMENT_URL=https://api.prod.test-app.pan.panter.cloud" >> gitlab_environment.env",
1582
1539
  ],
1583
1540
  "stage": "rollback prod",
1584
1541
  "variables": {
1585
- "APP_DIR": "api",
1586
- "BUILD_ID": "some-id",
1587
- "BUILD_INFO_BUILD_TIME": "01-01-2023 12:13:14",
1588
- "BUILD_INFO_CURRENT_VERSION": "3.2.1",
1589
- "BUILD_INFO_ID": "some-id",
1590
- "COMPONENT_NAME": "api",
1591
- "ENV_SHORT": "prod",
1592
- "ENV_TYPE": "prod",
1593
1542
  "GIT_STRATEGY": "none",
1594
- "HELM_ARGS": "",
1595
- "HELM_EXPERIMENTAL_OCI": "1",
1596
- "HELM_GITLAB_CHART_NAME": "/helm-charts/the-panter-chart",
1597
- "HOST": "api.prod.test-app.pan.panter.cloud",
1598
- "HOST_CANONICAL": "api.prod.test-app.pan.panter.cloud",
1599
- "HOST_INTERNAL": "api.prod.test-app.pan.panter.cloud",
1600
1543
  "KUBERNETES_CPU_REQUEST": "0.5",
1601
1544
  "KUBERNETES_MEMORY_LIMIT": "400Mi",
1602
1545
  "KUBERNETES_MEMORY_REQUEST": "200Mi",
1603
- "KUBE_APP_NAME": "api",
1604
- "KUBE_APP_NAME_PREFIX": "",
1605
- "KUBE_DOCKER_IMAGE_PULL_SECRET": "gitlab-registry-api",
1606
- "KUBE_NAMESPACE": "pan-test-app-prod",
1607
- "KUBE_VALUES": "env:
1608
- secret:
1609
- MONGODB_ROOT_PASSWORD: '$CL_prod_api_MONGODB_ROOT_PASSWORD'
1610
- MONGODB_REPLICASET_KEY: '$CL_prod_api_MONGODB_REPLICASET_KEY'
1611
- MONGO_URL: 'mongodb://root:$CL_prod_api_MONGODB_ROOT_PASSWORD@api-mongodb-0.api-mongodb-headless.pan-test-app-prod.svc.cluster.local:27017,api-mongodb-1.api-mongodb-headless.pan-test-app-prod.svc.cluster.local:27017/app?replicaSet=rs0&authSource=admin'
1612
- MONGO_OPLOG_URL: 'mongodb://root:$CL_prod_api_MONGODB_ROOT_PASSWORD@api-mongodb-0.api-mongodb-headless.pan-test-app-prod.svc.cluster.local:27017,api-mongodb-1.api-mongodb-headless.pan-test-app-prod.svc.cluster.local:27017/local?replicaSet=rs0&authSource=admin'
1613
- public:
1614
- ENV_SHORT: 'prod'
1615
- APP_DIR: 'api'
1616
- ENV_TYPE: 'prod'
1617
- BUILD_INFO_ID: 'some-id'
1618
- BUILD_INFO_BUILD_TIME: '01-01-2023 12:13:14'
1619
- BUILD_INFO_CURRENT_VERSION: '3.2.1'
1620
- HOST: 'api.prod.test-app.pan.panter.cloud'
1621
- ROOT_URL: 'https://api.prod.test-app.pan.panter.cloud'
1622
- HOST_CANONICAL: 'api.prod.test-app.pan.panter.cloud'
1623
- ROOT_URL_INTERNAL: 'https://api.prod.test-app.pan.panter.cloud'
1624
- KUBE_NAMESPACE: 'pan-test-app-prod'
1625
- KUBE_APP_NAME: 'api'
1626
- KUBE_APP_NAME_PREFIX: ''
1627
- HOST_INTERNAL: 'api.prod.test-app.pan.panter.cloud'
1628
- _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","KUBE_NAMESPACE","KUBE_APP_NAME","KUBE_APP_NAME_PREFIX","HOST_INTERNAL","MONGODB_ROOT_PASSWORD","MONGODB_REPLICASET_KEY"]'
1629
- application:
1630
- host: 'api.prod.test-app.pan.panter.cloud'
1631
- command: 'node main.js'
1632
- livenessProbe:
1633
- httpGet:
1634
- path: '__health'
1635
- readinessProbe:
1636
- httpGet:
1637
- path: '__health'
1638
- startupProbe:
1639
- httpGet:
1640
- path: '__health'
1641
- mongodb:
1642
- enabled: true
1643
- auth:
1644
- enabled: true
1645
- rootPassword: '$CL_prod_api_MONGODB_ROOT_PASSWORD'
1646
- replicaSetKey: '$CL_prod_api_MONGODB_REPLICASET_KEY'
1647
- persistence:
1648
- storageClass: 'premium-rwo'
1649
- backup:
1650
- enabled: true
1651
- hostToBackup: 'api-mongodb-0.api-mongodb-headless.pan-test-app-prod.svc.cluster.local:27017'
1652
- pvcToBackup: 'datadir-api-mongodb-0'
1653
- image: 'mrelite/kubectlmongoshell:v1.0'
1654
- schedule: '0 4 * * *'
1655
- volumeSnapshotClass: 'snapshotclass'
1656
- architecture: 'replicaset'
1657
- tolerations:
1658
- - key: 'mongodb'
1659
- operator: 'Equal'
1660
- value: 'true'
1661
- effect: 'NoSchedule'
1662
- ",
1663
- "MONGODB_REPLICASET_KEY": "$CL_prod_api_MONGODB_REPLICASET_KEY",
1664
- "MONGODB_ROOT_PASSWORD": "$CL_prod_api_MONGODB_ROOT_PASSWORD",
1665
- "RELEASE_NAME": "pan-test-app-prod-api",
1666
- "ROOT_URL": "https://api.prod.test-app.pan.panter.cloud",
1667
- "ROOT_URL_INTERNAL": "https://api.prod.test-app.pan.panter.cloud",
1668
- "_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","KUBE_NAMESPACE","KUBE_APP_NAME","KUBE_APP_NAME_PREFIX","HOST_INTERNAL","MONGODB_ROOT_PASSWORD","MONGODB_REPLICASET_KEY"]",
1669
1546
  },
1670
1547
  },
1671
1548
  "api โ†ฉ๏ธ Rollback โš ๏ธ | stage ": {
1549
+ "allow_failure": true,
1550
+ "artifacts": {
1551
+ "reports": {
1552
+ "dotenv": "gitlab_environment.env",
1553
+ },
1554
+ },
1672
1555
  "environment": {
1673
1556
  "action": "access",
1674
1557
  "name": "stage/api",
1675
- "url": "https://api.stage.test-app.pan.panter.cloud",
1558
+ "url": "$CL_GITLAB_ENVIRONMENT_URL",
1676
1559
  },
1677
1560
  "image": "path/to/docker/kubernetes:the-version",
1678
1561
  "interruptible": true,
@@ -1686,103 +1569,49 @@ mongodb:
1686
1569
  },
1687
1570
  "rules": [
1688
1571
  {
1689
- "allow_failure": true,
1690
1572
  "when": "manual",
1691
1573
  },
1692
1574
  ],
1693
1575
  "script": [
1576
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
1577
+ "export ENV_SHORT="stage"",
1578
+ "export APP_DIR="api"",
1579
+ "export ENV_TYPE="stage"",
1580
+ "export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
1581
+ "export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
1582
+ "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")"",
1583
+ "export HOST="api.stage.test-app.pan.panter.cloud"",
1584
+ "export ROOT_URL="https://api.stage.test-app.pan.panter.cloud"",
1585
+ "export HOST_INTERNAL="api.stage.test-app.pan.panter.cloud"",
1586
+ "export HOST_CANONICAL="api.stage.test-app.pan.panter.cloud"",
1587
+ "export ROOT_URL_INTERNAL="https://api.stage.test-app.pan.panter.cloud"",
1588
+ "export KUBE_NAMESPACE="pan-test-app-stage"",
1589
+ "export KUBE_APP_NAME="api"",
1590
+ "export KUBE_APP_NAME_PREFIX=""",
1591
+ "export MONGODB_ROOT_PASSWORD="$CL_stage_api_MONGODB_ROOT_PASSWORD"",
1592
+ "export MONGODB_REPLICASET_KEY="$CL_stage_api_MONGODB_REPLICASET_KEY"",
1593
+ "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\\",\\"KUBE_NAMESPACE\\",\\"KUBE_APP_NAME\\",\\"KUBE_APP_NAME_PREFIX\\",\\"MONGODB_ROOT_PASSWORD\\",\\"MONGODB_REPLICASET_KEY\\"]"",
1594
+ "export RELEASE_NAME="pan-test-app-stage-api"",
1595
+ "export HELM_EXPERIMENTAL_OCI="1"",
1596
+ "export KUBE_DOCKER_IMAGE_PULL_SECRET="gitlab-registry-api"",
1597
+ "export HELM_GITLAB_CHART_NAME="/helm-charts/the-panter-chart"",
1598
+ "export HELM_ARGS=""",
1599
+ "export COMPONENT_NAME="api"",
1600
+ "export BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
1601
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
1694
1602
  "kubectl config set-cluster "kube-pan-test-app-stage-api" --server="$CL_stage_api_KUBE_URL" --certificate-authority <(echo $CL_stage_api_KUBE_CA_PEM | base64 -d) --embed-certs=true",
1695
1603
  "kubectl config set-credentials "kube-pan-test-app-stage-api" --token="$CL_stage_api_KUBE_TOKEN"",
1696
1604
  "kubectl config set-context "kube-pan-test-app-stage-api" --cluster="kube-pan-test-app-stage-api" --user="kube-pan-test-app-stage-api" --namespace="pan-test-app-stage"",
1697
1605
  "kubectl config use-context "kube-pan-test-app-stage-api"",
1698
1606
  "kubernetesRollback",
1607
+ "echo "CL_GITLAB_ENVIRONMENT_URL=https://api.stage.test-app.pan.panter.cloud" >> gitlab_environment.env",
1699
1608
  ],
1700
1609
  "stage": "rollback stage",
1701
1610
  "variables": {
1702
- "APP_DIR": "api",
1703
- "BUILD_ID": "some-id",
1704
- "BUILD_INFO_BUILD_TIME": "01-01-2023 12:13:14",
1705
- "BUILD_INFO_CURRENT_VERSION": "3.2.1",
1706
- "BUILD_INFO_ID": "some-id",
1707
- "COMPONENT_NAME": "api",
1708
- "ENV_SHORT": "stage",
1709
- "ENV_TYPE": "stage",
1710
1611
  "GIT_STRATEGY": "none",
1711
- "HELM_ARGS": "",
1712
- "HELM_EXPERIMENTAL_OCI": "1",
1713
- "HELM_GITLAB_CHART_NAME": "/helm-charts/the-panter-chart",
1714
- "HOST": "api.stage.test-app.pan.panter.cloud",
1715
- "HOST_CANONICAL": "api.stage.test-app.pan.panter.cloud",
1716
- "HOST_INTERNAL": "api.stage.test-app.pan.panter.cloud",
1717
1612
  "KUBERNETES_CPU_REQUEST": "0.5",
1718
1613
  "KUBERNETES_MEMORY_LIMIT": "400Mi",
1719
1614
  "KUBERNETES_MEMORY_REQUEST": "200Mi",
1720
- "KUBE_APP_NAME": "api",
1721
- "KUBE_APP_NAME_PREFIX": "",
1722
- "KUBE_DOCKER_IMAGE_PULL_SECRET": "gitlab-registry-api",
1723
- "KUBE_NAMESPACE": "pan-test-app-stage",
1724
- "KUBE_VALUES": "env:
1725
- secret:
1726
- MONGODB_ROOT_PASSWORD: '$CL_stage_api_MONGODB_ROOT_PASSWORD'
1727
- MONGODB_REPLICASET_KEY: '$CL_stage_api_MONGODB_REPLICASET_KEY'
1728
- MONGO_URL: 'mongodb://root:$CL_stage_api_MONGODB_ROOT_PASSWORD@api-mongodb-0.api-mongodb-headless.pan-test-app-stage.svc.cluster.local:27017,api-mongodb-1.api-mongodb-headless.pan-test-app-stage.svc.cluster.local:27017/app?replicaSet=rs0&authSource=admin'
1729
- MONGO_OPLOG_URL: 'mongodb://root:$CL_stage_api_MONGODB_ROOT_PASSWORD@api-mongodb-0.api-mongodb-headless.pan-test-app-stage.svc.cluster.local:27017,api-mongodb-1.api-mongodb-headless.pan-test-app-stage.svc.cluster.local:27017/local?replicaSet=rs0&authSource=admin'
1730
- public:
1731
- ENV_SHORT: 'stage'
1732
- APP_DIR: 'api'
1733
- ENV_TYPE: 'stage'
1734
- BUILD_INFO_ID: 'some-id'
1735
- BUILD_INFO_BUILD_TIME: '01-01-2023 12:13:14'
1736
- BUILD_INFO_CURRENT_VERSION: '3.2.1'
1737
- HOST: 'api.stage.test-app.pan.panter.cloud'
1738
- ROOT_URL: 'https://api.stage.test-app.pan.panter.cloud'
1739
- HOST_CANONICAL: 'api.stage.test-app.pan.panter.cloud'
1740
- ROOT_URL_INTERNAL: 'https://api.stage.test-app.pan.panter.cloud'
1741
- KUBE_NAMESPACE: 'pan-test-app-stage'
1742
- KUBE_APP_NAME: 'api'
1743
- KUBE_APP_NAME_PREFIX: ''
1744
- HOST_INTERNAL: 'api.stage.test-app.pan.panter.cloud'
1745
- _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","KUBE_NAMESPACE","KUBE_APP_NAME","KUBE_APP_NAME_PREFIX","HOST_INTERNAL","MONGODB_ROOT_PASSWORD","MONGODB_REPLICASET_KEY"]'
1746
- application:
1747
- host: 'api.stage.test-app.pan.panter.cloud'
1748
- command: 'node main.js'
1749
- livenessProbe:
1750
- httpGet:
1751
- path: '__health'
1752
- readinessProbe:
1753
- httpGet:
1754
- path: '__health'
1755
- startupProbe:
1756
- httpGet:
1757
- path: '__health'
1758
- mongodb:
1759
- enabled: true
1760
- auth:
1761
- enabled: true
1762
- rootPassword: '$CL_stage_api_MONGODB_ROOT_PASSWORD'
1763
- replicaSetKey: '$CL_stage_api_MONGODB_REPLICASET_KEY'
1764
- persistence:
1765
- storageClass: 'premium-rwo'
1766
- backup:
1767
- enabled: true
1768
- hostToBackup: 'api-mongodb-0.api-mongodb-headless.pan-test-app-stage.svc.cluster.local:27017'
1769
- pvcToBackup: 'datadir-api-mongodb-0'
1770
- image: 'mrelite/kubectlmongoshell:v1.0'
1771
- schedule: '0 4 * * *'
1772
- volumeSnapshotClass: 'snapshotclass'
1773
- architecture: 'replicaset'
1774
- tolerations:
1775
- - key: 'mongodb'
1776
- operator: 'Equal'
1777
- value: 'true'
1778
- effect: 'NoSchedule'
1779
- ",
1780
- "MONGODB_REPLICASET_KEY": "$CL_stage_api_MONGODB_REPLICASET_KEY",
1781
- "MONGODB_ROOT_PASSWORD": "$CL_stage_api_MONGODB_ROOT_PASSWORD",
1782
- "RELEASE_NAME": "pan-test-app-stage-api",
1783
- "ROOT_URL": "https://api.stage.test-app.pan.panter.cloud",
1784
- "ROOT_URL_INTERNAL": "https://api.stage.test-app.pan.panter.cloud",
1785
- "_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","KUBE_NAMESPACE","KUBE_APP_NAME","KUBE_APP_NAME_PREFIX","HOST_INTERNAL","MONGODB_ROOT_PASSWORD","MONGODB_REPLICASET_KEY"]",
1786
1615
  },
1787
1616
  },
1788
1617
  "api ๐Ÿ”จ app | prod ": {
@@ -1832,7 +1661,26 @@ mongodb:
1832
1661
  ],
1833
1662
  },
1834
1663
  "script": [
1835
- "echo '{"id":"some-id","time":"01-01-2023 12:13:14"}' > api/__build_info.json",
1664
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
1665
+ "export ENV_SHORT="prod"",
1666
+ "export APP_DIR="api"",
1667
+ "export ENV_TYPE="prod"",
1668
+ "export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
1669
+ "export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
1670
+ "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")"",
1671
+ "export HOST="api.prod.test-app.pan.panter.cloud"",
1672
+ "export ROOT_URL="https://api.prod.test-app.pan.panter.cloud"",
1673
+ "export HOST_INTERNAL="api.prod.test-app.pan.panter.cloud"",
1674
+ "export HOST_CANONICAL="api.prod.test-app.pan.panter.cloud"",
1675
+ "export ROOT_URL_INTERNAL="https://api.prod.test-app.pan.panter.cloud"",
1676
+ "export KUBE_NAMESPACE="pan-test-app-prod"",
1677
+ "export KUBE_APP_NAME="api"",
1678
+ "export KUBE_APP_NAME_PREFIX=""",
1679
+ "export MONGODB_ROOT_PASSWORD="$CL_prod_api_MONGODB_ROOT_PASSWORD"",
1680
+ "export MONGODB_REPLICASET_KEY="$CL_prod_api_MONGODB_REPLICASET_KEY"",
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\\",\\"KUBE_NAMESPACE\\",\\"KUBE_APP_NAME\\",\\"KUBE_APP_NAME_PREFIX\\",\\"MONGODB_ROOT_PASSWORD\\",\\"MONGODB_REPLICASET_KEY\\"]"",
1682
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
1683
+ "echo '{"id":"$(git describe --tags 2>/dev/null || git rev-parse HEAD)","time":"$CI_JOB_STARTED_AT"}' > api/__build_info.json",
1836
1684
  "echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"",
1837
1685
  "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
1838
1686
  "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
@@ -1849,26 +1697,9 @@ mongodb:
1849
1697
  ],
1850
1698
  "stage": "build",
1851
1699
  "variables": {
1852
- "APP_DIR": "api",
1853
- "BUILD_INFO_BUILD_TIME": "01-01-2023 12:13:14",
1854
- "BUILD_INFO_CURRENT_VERSION": "3.2.1",
1855
- "BUILD_INFO_ID": "some-id",
1856
- "ENV_SHORT": "prod",
1857
- "ENV_TYPE": "prod",
1858
- "HOST": "api.prod.test-app.pan.panter.cloud",
1859
- "HOST_CANONICAL": "api.prod.test-app.pan.panter.cloud",
1860
- "HOST_INTERNAL": "api.prod.test-app.pan.panter.cloud",
1861
1700
  "KUBERNETES_CPU_REQUEST": "0.5",
1862
1701
  "KUBERNETES_MEMORY_LIMIT": "4Gi",
1863
1702
  "KUBERNETES_MEMORY_REQUEST": "2Gi",
1864
- "KUBE_APP_NAME": "api",
1865
- "KUBE_APP_NAME_PREFIX": "",
1866
- "KUBE_NAMESPACE": "pan-test-app-prod",
1867
- "MONGODB_REPLICASET_KEY": "$CL_prod_api_MONGODB_REPLICASET_KEY",
1868
- "MONGODB_ROOT_PASSWORD": "$CL_prod_api_MONGODB_ROOT_PASSWORD",
1869
- "ROOT_URL": "https://api.prod.test-app.pan.panter.cloud",
1870
- "ROOT_URL_INTERNAL": "https://api.prod.test-app.pan.panter.cloud",
1871
- "_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","KUBE_NAMESPACE","KUBE_APP_NAME","KUBE_APP_NAME_PREFIX","HOST_INTERNAL","MONGODB_ROOT_PASSWORD","MONGODB_REPLICASET_KEY"]",
1872
1703
  },
1873
1704
  },
1874
1705
  "api ๐Ÿ”จ app | stage ": {
@@ -1918,7 +1749,26 @@ mongodb:
1918
1749
  ],
1919
1750
  },
1920
1751
  "script": [
1921
- "echo '{"id":"some-id","time":"01-01-2023 12:13:14"}' > api/__build_info.json",
1752
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
1753
+ "export ENV_SHORT="stage"",
1754
+ "export APP_DIR="api"",
1755
+ "export ENV_TYPE="stage"",
1756
+ "export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
1757
+ "export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
1758
+ "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")"",
1759
+ "export HOST="api.stage.test-app.pan.panter.cloud"",
1760
+ "export ROOT_URL="https://api.stage.test-app.pan.panter.cloud"",
1761
+ "export HOST_INTERNAL="api.stage.test-app.pan.panter.cloud"",
1762
+ "export HOST_CANONICAL="api.stage.test-app.pan.panter.cloud"",
1763
+ "export ROOT_URL_INTERNAL="https://api.stage.test-app.pan.panter.cloud"",
1764
+ "export KUBE_NAMESPACE="pan-test-app-stage"",
1765
+ "export KUBE_APP_NAME="api"",
1766
+ "export KUBE_APP_NAME_PREFIX=""",
1767
+ "export MONGODB_ROOT_PASSWORD="$CL_stage_api_MONGODB_ROOT_PASSWORD"",
1768
+ "export MONGODB_REPLICASET_KEY="$CL_stage_api_MONGODB_REPLICASET_KEY"",
1769
+ "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\\",\\"KUBE_NAMESPACE\\",\\"KUBE_APP_NAME\\",\\"KUBE_APP_NAME_PREFIX\\",\\"MONGODB_ROOT_PASSWORD\\",\\"MONGODB_REPLICASET_KEY\\"]"",
1770
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
1771
+ "echo '{"id":"$(git describe --tags 2>/dev/null || git rev-parse HEAD)","time":"$CI_JOB_STARTED_AT"}' > api/__build_info.json",
1922
1772
  "echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"",
1923
1773
  "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
1924
1774
  "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
@@ -1935,26 +1785,9 @@ mongodb:
1935
1785
  ],
1936
1786
  "stage": "build",
1937
1787
  "variables": {
1938
- "APP_DIR": "api",
1939
- "BUILD_INFO_BUILD_TIME": "01-01-2023 12:13:14",
1940
- "BUILD_INFO_CURRENT_VERSION": "3.2.1",
1941
- "BUILD_INFO_ID": "some-id",
1942
- "ENV_SHORT": "stage",
1943
- "ENV_TYPE": "stage",
1944
- "HOST": "api.stage.test-app.pan.panter.cloud",
1945
- "HOST_CANONICAL": "api.stage.test-app.pan.panter.cloud",
1946
- "HOST_INTERNAL": "api.stage.test-app.pan.panter.cloud",
1947
1788
  "KUBERNETES_CPU_REQUEST": "0.5",
1948
1789
  "KUBERNETES_MEMORY_LIMIT": "4Gi",
1949
1790
  "KUBERNETES_MEMORY_REQUEST": "2Gi",
1950
- "KUBE_APP_NAME": "api",
1951
- "KUBE_APP_NAME_PREFIX": "",
1952
- "KUBE_NAMESPACE": "pan-test-app-stage",
1953
- "MONGODB_REPLICASET_KEY": "$CL_stage_api_MONGODB_REPLICASET_KEY",
1954
- "MONGODB_ROOT_PASSWORD": "$CL_stage_api_MONGODB_ROOT_PASSWORD",
1955
- "ROOT_URL": "https://api.stage.test-app.pan.panter.cloud",
1956
- "ROOT_URL_INTERNAL": "https://api.stage.test-app.pan.panter.cloud",
1957
- "_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","KUBE_NAMESPACE","KUBE_APP_NAME","KUBE_APP_NAME_PREFIX","HOST_INTERNAL","MONGODB_ROOT_PASSWORD","MONGODB_REPLICASET_KEY"]",
1958
1791
  },
1959
1792
  },
1960
1793
  "api ๐Ÿ”จ docker | prod ": {
@@ -1980,6 +1813,22 @@ mongodb:
1980
1813
  ],
1981
1814
  },
1982
1815
  "script": [
1816
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
1817
+ "export APP_DIR="api"",
1818
+ "export DOCKER_DIR="."",
1819
+ "export DOCKER_REGISTRY="$CI_REGISTRY"",
1820
+ "export DOCKER_CACHE_IMAGE="$CI_REGISTRY_IMAGE/caches/api"",
1821
+ "export DOCKER_IMAGE_NAME="prod/api"",
1822
+ "export DOCKER_IMAGE="$CI_REGISTRY_IMAGE/$DOCKER_IMAGE_NAME"",
1823
+ "export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"",
1824
+ "export DOCKER_COPY_AND_INSTALL_APP="COPY --chown=node:node $APP_DIR .
1825
+ RUN yarn plugin import workspace-tools
1826
+ RUN yarn workspaces focus --production && yarn rebuild"",
1827
+ "export DOCKER_COPY_WORKSPACE_FILES="COPY --chown=node:node api/package.json /app/api/package.json
1828
+ COPY --chown=node:node api/yarn.lock /app/api/yarn.lock
1829
+ COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
1830
+ COPY --chown=node:node .yarn /app/.yarn"",
1831
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
1983
1832
  "ensureNodeDockerfile",
1984
1833
  "echo -e "\\e[0Ksection_start:$(date +%s):docker-login[collapsed=true]\\r\\e[0KDocker Login"",
1985
1834
  "docker login --username gitlab-ci-token --password $CI_JOB_TOKEN $CI_REGISTRY",
@@ -2003,25 +1852,9 @@ mongodb:
2003
1852
  ],
2004
1853
  "stage": "build",
2005
1854
  "variables": {
2006
- "APP_DIR": "api",
2007
- "DOCKERFILE_ADDITIONS": undefined,
2008
- "DOCKERFILE_ADDITIONS_END": undefined,
2009
1855
  "DOCKER_BUILDKIT": "1",
2010
- "DOCKER_CACHE_IMAGE": "$CI_REGISTRY_IMAGE/caches/api",
2011
- "DOCKER_COPY_AND_INSTALL_APP": "COPY --chown=node:node $APP_DIR .
2012
- RUN yarn plugin import workspace-tools
2013
- RUN yarn workspaces focus --production && yarn rebuild",
2014
- "DOCKER_COPY_WORKSPACE_FILES": "COPY --chown=node:node api/package.json /app/api/package.json
2015
- COPY --chown=node:node api/yarn.lock /app/api/yarn.lock
2016
- COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
2017
- COPY --chown=node:node .yarn /app/.yarn",
2018
- "DOCKER_DIR": ".",
2019
1856
  "DOCKER_DRIVER": "overlay2",
2020
1857
  "DOCKER_HOST": "tcp://0.0.0.0:2375",
2021
- "DOCKER_IMAGE": "$CI_REGISTRY_IMAGE/$DOCKER_IMAGE_NAME",
2022
- "DOCKER_IMAGE_NAME": "prod/api",
2023
- "DOCKER_IMAGE_TAG": "$CI_COMMIT_SHA",
2024
- "DOCKER_REGISTRY": "$CI_REGISTRY",
2025
1858
  "DOCKER_TLS_CERTDIR": "",
2026
1859
  "KUBERNETES_CPU_REQUEST": "0.5",
2027
1860
  "KUBERNETES_MEMORY_LIMIT": "2Gi",
@@ -2051,6 +1884,22 @@ COPY --chown=node:node .yarn /app/.yarn",
2051
1884
  ],
2052
1885
  },
2053
1886
  "script": [
1887
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
1888
+ "export APP_DIR="api"",
1889
+ "export DOCKER_DIR="."",
1890
+ "export DOCKER_REGISTRY="$CI_REGISTRY"",
1891
+ "export DOCKER_CACHE_IMAGE="$CI_REGISTRY_IMAGE/caches/api"",
1892
+ "export DOCKER_IMAGE_NAME="stage/api"",
1893
+ "export DOCKER_IMAGE="$CI_REGISTRY_IMAGE/$DOCKER_IMAGE_NAME"",
1894
+ "export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"",
1895
+ "export DOCKER_COPY_AND_INSTALL_APP="COPY --chown=node:node $APP_DIR .
1896
+ RUN yarn plugin import workspace-tools
1897
+ RUN yarn workspaces focus --production && yarn rebuild"",
1898
+ "export DOCKER_COPY_WORKSPACE_FILES="COPY --chown=node:node api/package.json /app/api/package.json
1899
+ COPY --chown=node:node api/yarn.lock /app/api/yarn.lock
1900
+ COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
1901
+ COPY --chown=node:node .yarn /app/.yarn"",
1902
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
2054
1903
  "ensureNodeDockerfile",
2055
1904
  "echo -e "\\e[0Ksection_start:$(date +%s):docker-login[collapsed=true]\\r\\e[0KDocker Login"",
2056
1905
  "docker login --username gitlab-ci-token --password $CI_JOB_TOKEN $CI_REGISTRY",
@@ -2074,25 +1923,9 @@ COPY --chown=node:node .yarn /app/.yarn",
2074
1923
  ],
2075
1924
  "stage": "build",
2076
1925
  "variables": {
2077
- "APP_DIR": "api",
2078
- "DOCKERFILE_ADDITIONS": undefined,
2079
- "DOCKERFILE_ADDITIONS_END": undefined,
2080
1926
  "DOCKER_BUILDKIT": "1",
2081
- "DOCKER_CACHE_IMAGE": "$CI_REGISTRY_IMAGE/caches/api",
2082
- "DOCKER_COPY_AND_INSTALL_APP": "COPY --chown=node:node $APP_DIR .
2083
- RUN yarn plugin import workspace-tools
2084
- RUN yarn workspaces focus --production && yarn rebuild",
2085
- "DOCKER_COPY_WORKSPACE_FILES": "COPY --chown=node:node api/package.json /app/api/package.json
2086
- COPY --chown=node:node api/yarn.lock /app/api/yarn.lock
2087
- COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
2088
- COPY --chown=node:node .yarn /app/.yarn",
2089
- "DOCKER_DIR": ".",
2090
1927
  "DOCKER_DRIVER": "overlay2",
2091
1928
  "DOCKER_HOST": "tcp://0.0.0.0:2375",
2092
- "DOCKER_IMAGE": "$CI_REGISTRY_IMAGE/$DOCKER_IMAGE_NAME",
2093
- "DOCKER_IMAGE_NAME": "stage/api",
2094
- "DOCKER_IMAGE_TAG": "$CI_COMMIT_SHA",
2095
- "DOCKER_REGISTRY": "$CI_REGISTRY",
2096
1929
  "DOCKER_TLS_CERTDIR": "",
2097
1930
  "KUBERNETES_CPU_REQUEST": "0.5",
2098
1931
  "KUBERNETES_MEMORY_LIMIT": "2Gi",
@@ -2101,11 +1934,16 @@ COPY --chown=node:node .yarn /app/.yarn",
2101
1934
  },
2102
1935
  "api ๐Ÿš€ Deploy | prod ": {
2103
1936
  "allow_failure": true,
1937
+ "artifacts": {
1938
+ "reports": {
1939
+ "dotenv": "gitlab_environment.env",
1940
+ },
1941
+ },
2104
1942
  "environment": {
2105
1943
  "auto_stop_in": undefined,
2106
1944
  "name": "prod/api",
2107
1945
  "on_stop": "api ๐Ÿ›‘ Stop โš ๏ธ | prod ",
2108
- "url": "https://api.prod.test-app.pan.panter.cloud",
1946
+ "url": "$CL_GITLAB_ENVIRONMENT_URL",
2109
1947
  },
2110
1948
  "image": "path/to/docker/kubernetes:the-version",
2111
1949
  "interruptible": true,
@@ -2136,115 +1974,164 @@ COPY --chown=node:node .yarn /app/.yarn",
2136
1974
  },
2137
1975
  ],
2138
1976
  "script": [
1977
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
1978
+ "export ENV_SHORT="prod"",
1979
+ "export APP_DIR="api"",
1980
+ "export ENV_TYPE="prod"",
1981
+ "export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
1982
+ "export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
1983
+ "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")"",
1984
+ "export HOST="api.prod.test-app.pan.panter.cloud"",
1985
+ "export ROOT_URL="https://api.prod.test-app.pan.panter.cloud"",
1986
+ "export HOST_INTERNAL="api.prod.test-app.pan.panter.cloud"",
1987
+ "export HOST_CANONICAL="api.prod.test-app.pan.panter.cloud"",
1988
+ "export ROOT_URL_INTERNAL="https://api.prod.test-app.pan.panter.cloud"",
1989
+ "export KUBE_NAMESPACE="pan-test-app-prod"",
1990
+ "export KUBE_APP_NAME="api"",
1991
+ "export KUBE_APP_NAME_PREFIX=""",
1992
+ "export MONGODB_ROOT_PASSWORD="$CL_prod_api_MONGODB_ROOT_PASSWORD"",
1993
+ "export MONGODB_REPLICASET_KEY="$CL_prod_api_MONGODB_REPLICASET_KEY"",
1994
+ "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\\",\\"KUBE_NAMESPACE\\",\\"KUBE_APP_NAME\\",\\"KUBE_APP_NAME_PREFIX\\",\\"MONGODB_ROOT_PASSWORD\\",\\"MONGODB_REPLICASET_KEY\\"]"",
1995
+ "export DOCKER_REGISTRY="$CI_REGISTRY"",
1996
+ "export DOCKER_CACHE_IMAGE="$CI_REGISTRY_IMAGE/caches/api"",
1997
+ "export DOCKER_IMAGE_NAME="prod/api"",
1998
+ "export DOCKER_IMAGE="$CI_REGISTRY_IMAGE/$DOCKER_IMAGE_NAME"",
1999
+ "export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"",
2000
+ "export RELEASE_NAME="pan-test-app-prod-api"",
2001
+ "export HELM_EXPERIMENTAL_OCI="1"",
2002
+ "export KUBE_DOCKER_IMAGE_PULL_SECRET="gitlab-registry-api"",
2003
+ "export HELM_GITLAB_CHART_NAME="/helm-charts/the-panter-chart"",
2004
+ "export HELM_ARGS=""",
2005
+ "export COMPONENT_NAME="api"",
2006
+ "export BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
2007
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
2139
2008
  "kubectl config set-cluster "kube-pan-test-app-prod-api" --server="$CL_prod_api_KUBE_URL" --certificate-authority <(echo $CL_prod_api_KUBE_CA_PEM | base64 -d) --embed-certs=true",
2140
2009
  "kubectl config set-credentials "kube-pan-test-app-prod-api" --token="$CL_prod_api_KUBE_TOKEN"",
2141
2010
  "kubectl config set-context "kube-pan-test-app-prod-api" --cluster="kube-pan-test-app-prod-api" --user="kube-pan-test-app-prod-api" --namespace="pan-test-app-prod"",
2142
2011
  "kubectl config use-context "kube-pan-test-app-prod-api"",
2143
- "kubernetesCreateSecret",
2144
- "kubernetesDeploy",
2145
- "echo Uploading SBOM to Dependency Track",
2146
- "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/api" "https://api.prod.test-app.pan.panter.cloud" "__sbom.json" vex.json || true",
2147
- "echo deployment successful ๐Ÿ˜ป",
2148
- ],
2149
- "stage": "deploy prod",
2150
- "variables": {
2151
- "APP_DIR": "api",
2152
- "BUILD_ID": "some-id",
2153
- "BUILD_INFO_BUILD_TIME": "01-01-2023 12:13:14",
2154
- "BUILD_INFO_CURRENT_VERSION": "3.2.1",
2155
- "BUILD_INFO_ID": "some-id",
2156
- "COMPONENT_NAME": "api",
2157
- "DOCKER_CACHE_IMAGE": "$CI_REGISTRY_IMAGE/caches/api",
2158
- "DOCKER_IMAGE": "$CI_REGISTRY_IMAGE/$DOCKER_IMAGE_NAME",
2159
- "DOCKER_IMAGE_NAME": "prod/api",
2160
- "DOCKER_IMAGE_TAG": "$CI_COMMIT_SHA",
2161
- "DOCKER_REGISTRY": "$CI_REGISTRY",
2162
- "ENV_SHORT": "prod",
2163
- "ENV_TYPE": "prod",
2164
- "HELM_ARGS": "",
2165
- "HELM_EXPERIMENTAL_OCI": "1",
2166
- "HELM_GITLAB_CHART_NAME": "/helm-charts/the-panter-chart",
2167
- "HOST": "api.prod.test-app.pan.panter.cloud",
2168
- "HOST_CANONICAL": "api.prod.test-app.pan.panter.cloud",
2169
- "HOST_INTERNAL": "api.prod.test-app.pan.panter.cloud",
2170
- "KUBERNETES_CPU_REQUEST": "0.5",
2171
- "KUBERNETES_MEMORY_LIMIT": "400Mi",
2172
- "KUBERNETES_MEMORY_REQUEST": "200Mi",
2173
- "KUBE_APP_NAME": "api",
2174
- "KUBE_APP_NAME_PREFIX": "",
2175
- "KUBE_DOCKER_IMAGE_PULL_SECRET": "gitlab-registry-api",
2176
- "KUBE_NAMESPACE": "pan-test-app-prod",
2177
- "KUBE_VALUES": "env:
2012
+ "echo -e "\\e[0Ksection_start:$(date +%s):writeallvalues[collapsed=true]\\r\\e[0KWrite __all_values.yml for helm deployment"",
2013
+ "cat > __all_values.yml <<EOF
2014
+ env:
2178
2015
  secret:
2179
- MONGODB_ROOT_PASSWORD: '$CL_prod_api_MONGODB_ROOT_PASSWORD'
2180
- MONGODB_REPLICASET_KEY: '$CL_prod_api_MONGODB_REPLICASET_KEY'
2181
- MONGO_URL: 'mongodb://root:$CL_prod_api_MONGODB_ROOT_PASSWORD@api-mongodb-0.api-mongodb-headless.pan-test-app-prod.svc.cluster.local:27017,api-mongodb-1.api-mongodb-headless.pan-test-app-prod.svc.cluster.local:27017/app?replicaSet=rs0&authSource=admin'
2182
- MONGO_OPLOG_URL: 'mongodb://root:$CL_prod_api_MONGODB_ROOT_PASSWORD@api-mongodb-0.api-mongodb-headless.pan-test-app-prod.svc.cluster.local:27017,api-mongodb-1.api-mongodb-headless.pan-test-app-prod.svc.cluster.local:27017/local?replicaSet=rs0&authSource=admin'
2016
+ MONGODB_ROOT_PASSWORD: |-
2017
+ $(printf %s "$CL_prod_api_MONGODB_ROOT_PASSWORD" | sed 's/^/ /')
2018
+ MONGODB_REPLICASET_KEY: |-
2019
+ $(printf %s "$CL_prod_api_MONGODB_REPLICASET_KEY" | sed 's/^/ /')
2020
+ MONGO_URL: |-
2021
+ mongodb://root:$CL_prod_api_MONGODB_ROOT_PASSWORD@api-mongodb-0.api-mongodb-headless.pan-test-app-prod.svc.cluster.local:27017,api-mongodb-1.api-mongodb-headless.pan-test-app-prod.svc.cluster.local:27017/app?replicaSet=rs0&authSource=admin
2022
+ MONGO_OPLOG_URL: |-
2023
+ mongodb://root:$CL_prod_api_MONGODB_ROOT_PASSWORD@api-mongodb-0.api-mongodb-headless.pan-test-app-prod.svc.cluster.local:27017,api-mongodb-1.api-mongodb-headless.pan-test-app-prod.svc.cluster.local:27017/local?replicaSet=rs0&authSource=admin
2183
2024
  public:
2184
- ENV_SHORT: 'prod'
2185
- APP_DIR: 'api'
2186
- ENV_TYPE: 'prod'
2187
- BUILD_INFO_ID: 'some-id'
2188
- BUILD_INFO_BUILD_TIME: '01-01-2023 12:13:14'
2189
- BUILD_INFO_CURRENT_VERSION: '3.2.1'
2190
- HOST: 'api.prod.test-app.pan.panter.cloud'
2191
- ROOT_URL: 'https://api.prod.test-app.pan.panter.cloud'
2192
- HOST_CANONICAL: 'api.prod.test-app.pan.panter.cloud'
2193
- ROOT_URL_INTERNAL: 'https://api.prod.test-app.pan.panter.cloud'
2194
- KUBE_NAMESPACE: 'pan-test-app-prod'
2195
- KUBE_APP_NAME: 'api'
2196
- KUBE_APP_NAME_PREFIX: ''
2197
- HOST_INTERNAL: 'api.prod.test-app.pan.panter.cloud'
2198
- _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","KUBE_NAMESPACE","KUBE_APP_NAME","KUBE_APP_NAME_PREFIX","HOST_INTERNAL","MONGODB_ROOT_PASSWORD","MONGODB_REPLICASET_KEY"]'
2025
+ ENV_SHORT: |-
2026
+ prod
2027
+ APP_DIR: |-
2028
+ api
2029
+ ENV_TYPE: |-
2030
+ prod
2031
+ BUILD_INFO_BUILD_ID: |-
2032
+ $(printf %s "$(git describe --tags 2>/dev/null || git rev-parse HEAD)" | sed 's/^/ /')
2033
+ BUILD_INFO_BUILD_TIME: |-
2034
+ $(printf %s "$CI_JOB_STARTED_AT" | sed 's/^/ /')
2035
+ BUILD_INFO_CURRENT_VERSION: |-
2036
+ $(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/^/ /')
2037
+ HOST: |-
2038
+ api.prod.test-app.pan.panter.cloud
2039
+ ROOT_URL: |-
2040
+ https://api.prod.test-app.pan.panter.cloud
2041
+ HOST_INTERNAL: |-
2042
+ api.prod.test-app.pan.panter.cloud
2043
+ HOST_CANONICAL: |-
2044
+ api.prod.test-app.pan.panter.cloud
2045
+ ROOT_URL_INTERNAL: |-
2046
+ https://api.prod.test-app.pan.panter.cloud
2047
+ KUBE_NAMESPACE: |-
2048
+ pan-test-app-prod
2049
+ KUBE_APP_NAME: |-
2050
+ api
2051
+ KUBE_APP_NAME_PREFIX: ""
2052
+ _ALL_ENV_VAR_KEYS: |-
2053
+ ["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","KUBE_NAMESPACE","KUBE_APP_NAME","KUBE_APP_NAME_PREFIX","MONGODB_ROOT_PASSWORD","MONGODB_REPLICASET_KEY"]
2199
2054
  application:
2200
- host: 'api.prod.test-app.pan.panter.cloud'
2201
- command: 'node main.js'
2055
+ host: |-
2056
+ api.prod.test-app.pan.panter.cloud
2057
+ command: |-
2058
+ node main.js
2202
2059
  livenessProbe:
2203
2060
  httpGet:
2204
- path: '__health'
2061
+ path: |-
2062
+ __health
2205
2063
  readinessProbe:
2206
2064
  httpGet:
2207
- path: '__health'
2065
+ path: |-
2066
+ __health
2208
2067
  startupProbe:
2209
2068
  httpGet:
2210
- path: '__health'
2069
+ path: |-
2070
+ __health
2211
2071
  mongodb:
2212
2072
  enabled: true
2213
2073
  auth:
2214
2074
  enabled: true
2215
- rootPassword: '$CL_prod_api_MONGODB_ROOT_PASSWORD'
2216
- replicaSetKey: '$CL_prod_api_MONGODB_REPLICASET_KEY'
2075
+ rootPassword: |-
2076
+ $CL_prod_api_MONGODB_ROOT_PASSWORD
2077
+ replicaSetKey: |-
2078
+ $CL_prod_api_MONGODB_REPLICASET_KEY
2217
2079
  persistence:
2218
- storageClass: 'premium-rwo'
2080
+ storageClass: |-
2081
+ premium-rwo
2219
2082
  backup:
2220
2083
  enabled: true
2221
- hostToBackup: 'api-mongodb-0.api-mongodb-headless.pan-test-app-prod.svc.cluster.local:27017'
2222
- pvcToBackup: 'datadir-api-mongodb-0'
2223
- image: 'mrelite/kubectlmongoshell:v1.0'
2224
- schedule: '0 4 * * *'
2225
- volumeSnapshotClass: 'snapshotclass'
2226
- architecture: 'replicaset'
2084
+ hostToBackup: |-
2085
+ api-mongodb-0.api-mongodb-headless.pan-test-app-prod.svc.cluster.local:27017
2086
+ pvcToBackup: |-
2087
+ datadir-api-mongodb-0
2088
+ image: |-
2089
+ mrelite/kubectlmongoshell:v1.0
2090
+ schedule: |-
2091
+ 0 4 * * *
2092
+ volumeSnapshotClass: |-
2093
+ snapshotclass
2094
+ architecture: |-
2095
+ replicaset
2227
2096
  tolerations:
2228
- - key: 'mongodb'
2229
- operator: 'Equal'
2230
- value: 'true'
2231
- effect: 'NoSchedule'
2097
+ - key: |-
2098
+ mongodb
2099
+ operator: |-
2100
+ Equal
2101
+ value: |-
2102
+ true
2103
+ effect: |-
2104
+ NoSchedule
2105
+
2106
+ EOF
2232
2107
  ",
2233
- "MONGODB_REPLICASET_KEY": "$CL_prod_api_MONGODB_REPLICASET_KEY",
2234
- "MONGODB_ROOT_PASSWORD": "$CL_prod_api_MONGODB_ROOT_PASSWORD",
2235
- "RELEASE_NAME": "pan-test-app-prod-api",
2236
- "ROOT_URL": "https://api.prod.test-app.pan.panter.cloud",
2237
- "ROOT_URL_INTERNAL": "https://api.prod.test-app.pan.panter.cloud",
2238
- "_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","KUBE_NAMESPACE","KUBE_APP_NAME","KUBE_APP_NAME_PREFIX","HOST_INTERNAL","MONGODB_ROOT_PASSWORD","MONGODB_REPLICASET_KEY"]",
2108
+ "echo -e "\\e[0Ksection_end:$(date +%s):writeallvalues\\r\\e[0K"",
2109
+ "kubernetesCreateSecret",
2110
+ "kubernetesDeploy",
2111
+ "echo Uploading SBOM to Dependency Track",
2112
+ "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/api" "https://api.prod.test-app.pan.panter.cloud" "__sbom.json" vex.json || true",
2113
+ "echo deployment successful ๐Ÿ˜ป",
2114
+ "echo "CL_GITLAB_ENVIRONMENT_URL=https://api.prod.test-app.pan.panter.cloud" >> gitlab_environment.env",
2115
+ ],
2116
+ "stage": "deploy prod",
2117
+ "variables": {
2118
+ "KUBERNETES_CPU_REQUEST": "0.5",
2119
+ "KUBERNETES_MEMORY_LIMIT": "400Mi",
2120
+ "KUBERNETES_MEMORY_REQUEST": "200Mi",
2239
2121
  },
2240
2122
  },
2241
2123
  "api ๐Ÿš€ Deploy | stage ": {
2242
2124
  "allow_failure": false,
2125
+ "artifacts": {
2126
+ "reports": {
2127
+ "dotenv": "gitlab_environment.env",
2128
+ },
2129
+ },
2243
2130
  "environment": {
2244
2131
  "auto_stop_in": undefined,
2245
2132
  "name": "stage/api",
2246
2133
  "on_stop": "api ๐Ÿ›‘ Stop โš ๏ธ | stage ",
2247
- "url": "https://api.stage.test-app.pan.panter.cloud",
2134
+ "url": "$CL_GITLAB_ENVIRONMENT_URL",
2248
2135
  },
2249
2136
  "image": "path/to/docker/kubernetes:the-version",
2250
2137
  "interruptible": true,
@@ -2275,113 +2162,163 @@ mongodb:
2275
2162
  },
2276
2163
  ],
2277
2164
  "script": [
2165
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
2166
+ "export ENV_SHORT="stage"",
2167
+ "export APP_DIR="api"",
2168
+ "export ENV_TYPE="stage"",
2169
+ "export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
2170
+ "export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
2171
+ "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")"",
2172
+ "export HOST="api.stage.test-app.pan.panter.cloud"",
2173
+ "export ROOT_URL="https://api.stage.test-app.pan.panter.cloud"",
2174
+ "export HOST_INTERNAL="api.stage.test-app.pan.panter.cloud"",
2175
+ "export HOST_CANONICAL="api.stage.test-app.pan.panter.cloud"",
2176
+ "export ROOT_URL_INTERNAL="https://api.stage.test-app.pan.panter.cloud"",
2177
+ "export KUBE_NAMESPACE="pan-test-app-stage"",
2178
+ "export KUBE_APP_NAME="api"",
2179
+ "export KUBE_APP_NAME_PREFIX=""",
2180
+ "export MONGODB_ROOT_PASSWORD="$CL_stage_api_MONGODB_ROOT_PASSWORD"",
2181
+ "export MONGODB_REPLICASET_KEY="$CL_stage_api_MONGODB_REPLICASET_KEY"",
2182
+ "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\\",\\"KUBE_NAMESPACE\\",\\"KUBE_APP_NAME\\",\\"KUBE_APP_NAME_PREFIX\\",\\"MONGODB_ROOT_PASSWORD\\",\\"MONGODB_REPLICASET_KEY\\"]"",
2183
+ "export DOCKER_REGISTRY="$CI_REGISTRY"",
2184
+ "export DOCKER_CACHE_IMAGE="$CI_REGISTRY_IMAGE/caches/api"",
2185
+ "export DOCKER_IMAGE_NAME="stage/api"",
2186
+ "export DOCKER_IMAGE="$CI_REGISTRY_IMAGE/$DOCKER_IMAGE_NAME"",
2187
+ "export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"",
2188
+ "export RELEASE_NAME="pan-test-app-stage-api"",
2189
+ "export HELM_EXPERIMENTAL_OCI="1"",
2190
+ "export KUBE_DOCKER_IMAGE_PULL_SECRET="gitlab-registry-api"",
2191
+ "export HELM_GITLAB_CHART_NAME="/helm-charts/the-panter-chart"",
2192
+ "export HELM_ARGS=""",
2193
+ "export COMPONENT_NAME="api"",
2194
+ "export BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
2195
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
2278
2196
  "kubectl config set-cluster "kube-pan-test-app-stage-api" --server="$CL_stage_api_KUBE_URL" --certificate-authority <(echo $CL_stage_api_KUBE_CA_PEM | base64 -d) --embed-certs=true",
2279
2197
  "kubectl config set-credentials "kube-pan-test-app-stage-api" --token="$CL_stage_api_KUBE_TOKEN"",
2280
2198
  "kubectl config set-context "kube-pan-test-app-stage-api" --cluster="kube-pan-test-app-stage-api" --user="kube-pan-test-app-stage-api" --namespace="pan-test-app-stage"",
2281
2199
  "kubectl config use-context "kube-pan-test-app-stage-api"",
2282
- "kubernetesCreateSecret",
2283
- "kubernetesDeploy",
2284
- "echo Uploading SBOM to Dependency Track",
2285
- "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/api" "https://api.stage.test-app.pan.panter.cloud" "__sbom.json" vex.json || true",
2286
- "echo deployment successful ๐Ÿ˜ป",
2287
- ],
2288
- "stage": "deploy stage",
2289
- "variables": {
2290
- "APP_DIR": "api",
2291
- "BUILD_ID": "some-id",
2292
- "BUILD_INFO_BUILD_TIME": "01-01-2023 12:13:14",
2293
- "BUILD_INFO_CURRENT_VERSION": "3.2.1",
2294
- "BUILD_INFO_ID": "some-id",
2295
- "COMPONENT_NAME": "api",
2296
- "DOCKER_CACHE_IMAGE": "$CI_REGISTRY_IMAGE/caches/api",
2297
- "DOCKER_IMAGE": "$CI_REGISTRY_IMAGE/$DOCKER_IMAGE_NAME",
2298
- "DOCKER_IMAGE_NAME": "stage/api",
2299
- "DOCKER_IMAGE_TAG": "$CI_COMMIT_SHA",
2300
- "DOCKER_REGISTRY": "$CI_REGISTRY",
2301
- "ENV_SHORT": "stage",
2302
- "ENV_TYPE": "stage",
2303
- "HELM_ARGS": "",
2304
- "HELM_EXPERIMENTAL_OCI": "1",
2305
- "HELM_GITLAB_CHART_NAME": "/helm-charts/the-panter-chart",
2306
- "HOST": "api.stage.test-app.pan.panter.cloud",
2307
- "HOST_CANONICAL": "api.stage.test-app.pan.panter.cloud",
2308
- "HOST_INTERNAL": "api.stage.test-app.pan.panter.cloud",
2309
- "KUBERNETES_CPU_REQUEST": "0.5",
2310
- "KUBERNETES_MEMORY_LIMIT": "400Mi",
2311
- "KUBERNETES_MEMORY_REQUEST": "200Mi",
2312
- "KUBE_APP_NAME": "api",
2313
- "KUBE_APP_NAME_PREFIX": "",
2314
- "KUBE_DOCKER_IMAGE_PULL_SECRET": "gitlab-registry-api",
2315
- "KUBE_NAMESPACE": "pan-test-app-stage",
2316
- "KUBE_VALUES": "env:
2200
+ "echo -e "\\e[0Ksection_start:$(date +%s):writeallvalues[collapsed=true]\\r\\e[0KWrite __all_values.yml for helm deployment"",
2201
+ "cat > __all_values.yml <<EOF
2202
+ env:
2317
2203
  secret:
2318
- MONGODB_ROOT_PASSWORD: '$CL_stage_api_MONGODB_ROOT_PASSWORD'
2319
- MONGODB_REPLICASET_KEY: '$CL_stage_api_MONGODB_REPLICASET_KEY'
2320
- MONGO_URL: 'mongodb://root:$CL_stage_api_MONGODB_ROOT_PASSWORD@api-mongodb-0.api-mongodb-headless.pan-test-app-stage.svc.cluster.local:27017,api-mongodb-1.api-mongodb-headless.pan-test-app-stage.svc.cluster.local:27017/app?replicaSet=rs0&authSource=admin'
2321
- MONGO_OPLOG_URL: 'mongodb://root:$CL_stage_api_MONGODB_ROOT_PASSWORD@api-mongodb-0.api-mongodb-headless.pan-test-app-stage.svc.cluster.local:27017,api-mongodb-1.api-mongodb-headless.pan-test-app-stage.svc.cluster.local:27017/local?replicaSet=rs0&authSource=admin'
2204
+ MONGODB_ROOT_PASSWORD: |-
2205
+ $(printf %s "$CL_stage_api_MONGODB_ROOT_PASSWORD" | sed 's/^/ /')
2206
+ MONGODB_REPLICASET_KEY: |-
2207
+ $(printf %s "$CL_stage_api_MONGODB_REPLICASET_KEY" | sed 's/^/ /')
2208
+ MONGO_URL: |-
2209
+ mongodb://root:$CL_stage_api_MONGODB_ROOT_PASSWORD@api-mongodb-0.api-mongodb-headless.pan-test-app-stage.svc.cluster.local:27017,api-mongodb-1.api-mongodb-headless.pan-test-app-stage.svc.cluster.local:27017/app?replicaSet=rs0&authSource=admin
2210
+ MONGO_OPLOG_URL: |-
2211
+ mongodb://root:$CL_stage_api_MONGODB_ROOT_PASSWORD@api-mongodb-0.api-mongodb-headless.pan-test-app-stage.svc.cluster.local:27017,api-mongodb-1.api-mongodb-headless.pan-test-app-stage.svc.cluster.local:27017/local?replicaSet=rs0&authSource=admin
2322
2212
  public:
2323
- ENV_SHORT: 'stage'
2324
- APP_DIR: 'api'
2325
- ENV_TYPE: 'stage'
2326
- BUILD_INFO_ID: 'some-id'
2327
- BUILD_INFO_BUILD_TIME: '01-01-2023 12:13:14'
2328
- BUILD_INFO_CURRENT_VERSION: '3.2.1'
2329
- HOST: 'api.stage.test-app.pan.panter.cloud'
2330
- ROOT_URL: 'https://api.stage.test-app.pan.panter.cloud'
2331
- HOST_CANONICAL: 'api.stage.test-app.pan.panter.cloud'
2332
- ROOT_URL_INTERNAL: 'https://api.stage.test-app.pan.panter.cloud'
2333
- KUBE_NAMESPACE: 'pan-test-app-stage'
2334
- KUBE_APP_NAME: 'api'
2335
- KUBE_APP_NAME_PREFIX: ''
2336
- HOST_INTERNAL: 'api.stage.test-app.pan.panter.cloud'
2337
- _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","KUBE_NAMESPACE","KUBE_APP_NAME","KUBE_APP_NAME_PREFIX","HOST_INTERNAL","MONGODB_ROOT_PASSWORD","MONGODB_REPLICASET_KEY"]'
2213
+ ENV_SHORT: |-
2214
+ stage
2215
+ APP_DIR: |-
2216
+ api
2217
+ ENV_TYPE: |-
2218
+ stage
2219
+ BUILD_INFO_BUILD_ID: |-
2220
+ $(printf %s "$(git describe --tags 2>/dev/null || git rev-parse HEAD)" | sed 's/^/ /')
2221
+ BUILD_INFO_BUILD_TIME: |-
2222
+ $(printf %s "$CI_JOB_STARTED_AT" | sed 's/^/ /')
2223
+ BUILD_INFO_CURRENT_VERSION: |-
2224
+ $(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/^/ /')
2225
+ HOST: |-
2226
+ api.stage.test-app.pan.panter.cloud
2227
+ ROOT_URL: |-
2228
+ https://api.stage.test-app.pan.panter.cloud
2229
+ HOST_INTERNAL: |-
2230
+ api.stage.test-app.pan.panter.cloud
2231
+ HOST_CANONICAL: |-
2232
+ api.stage.test-app.pan.panter.cloud
2233
+ ROOT_URL_INTERNAL: |-
2234
+ https://api.stage.test-app.pan.panter.cloud
2235
+ KUBE_NAMESPACE: |-
2236
+ pan-test-app-stage
2237
+ KUBE_APP_NAME: |-
2238
+ api
2239
+ KUBE_APP_NAME_PREFIX: ""
2240
+ _ALL_ENV_VAR_KEYS: |-
2241
+ ["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","KUBE_NAMESPACE","KUBE_APP_NAME","KUBE_APP_NAME_PREFIX","MONGODB_ROOT_PASSWORD","MONGODB_REPLICASET_KEY"]
2338
2242
  application:
2339
- host: 'api.stage.test-app.pan.panter.cloud'
2340
- command: 'node main.js'
2243
+ host: |-
2244
+ api.stage.test-app.pan.panter.cloud
2245
+ command: |-
2246
+ node main.js
2341
2247
  livenessProbe:
2342
2248
  httpGet:
2343
- path: '__health'
2249
+ path: |-
2250
+ __health
2344
2251
  readinessProbe:
2345
2252
  httpGet:
2346
- path: '__health'
2253
+ path: |-
2254
+ __health
2347
2255
  startupProbe:
2348
2256
  httpGet:
2349
- path: '__health'
2257
+ path: |-
2258
+ __health
2350
2259
  mongodb:
2351
2260
  enabled: true
2352
2261
  auth:
2353
2262
  enabled: true
2354
- rootPassword: '$CL_stage_api_MONGODB_ROOT_PASSWORD'
2355
- replicaSetKey: '$CL_stage_api_MONGODB_REPLICASET_KEY'
2263
+ rootPassword: |-
2264
+ $CL_stage_api_MONGODB_ROOT_PASSWORD
2265
+ replicaSetKey: |-
2266
+ $CL_stage_api_MONGODB_REPLICASET_KEY
2356
2267
  persistence:
2357
- storageClass: 'premium-rwo'
2268
+ storageClass: |-
2269
+ premium-rwo
2358
2270
  backup:
2359
2271
  enabled: true
2360
- hostToBackup: 'api-mongodb-0.api-mongodb-headless.pan-test-app-stage.svc.cluster.local:27017'
2361
- pvcToBackup: 'datadir-api-mongodb-0'
2362
- image: 'mrelite/kubectlmongoshell:v1.0'
2363
- schedule: '0 4 * * *'
2364
- volumeSnapshotClass: 'snapshotclass'
2365
- architecture: 'replicaset'
2272
+ hostToBackup: |-
2273
+ api-mongodb-0.api-mongodb-headless.pan-test-app-stage.svc.cluster.local:27017
2274
+ pvcToBackup: |-
2275
+ datadir-api-mongodb-0
2276
+ image: |-
2277
+ mrelite/kubectlmongoshell:v1.0
2278
+ schedule: |-
2279
+ 0 4 * * *
2280
+ volumeSnapshotClass: |-
2281
+ snapshotclass
2282
+ architecture: |-
2283
+ replicaset
2366
2284
  tolerations:
2367
- - key: 'mongodb'
2368
- operator: 'Equal'
2369
- value: 'true'
2370
- effect: 'NoSchedule'
2285
+ - key: |-
2286
+ mongodb
2287
+ operator: |-
2288
+ Equal
2289
+ value: |-
2290
+ true
2291
+ effect: |-
2292
+ NoSchedule
2293
+
2294
+ EOF
2371
2295
  ",
2372
- "MONGODB_REPLICASET_KEY": "$CL_stage_api_MONGODB_REPLICASET_KEY",
2373
- "MONGODB_ROOT_PASSWORD": "$CL_stage_api_MONGODB_ROOT_PASSWORD",
2374
- "RELEASE_NAME": "pan-test-app-stage-api",
2375
- "ROOT_URL": "https://api.stage.test-app.pan.panter.cloud",
2376
- "ROOT_URL_INTERNAL": "https://api.stage.test-app.pan.panter.cloud",
2377
- "_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","KUBE_NAMESPACE","KUBE_APP_NAME","KUBE_APP_NAME_PREFIX","HOST_INTERNAL","MONGODB_ROOT_PASSWORD","MONGODB_REPLICASET_KEY"]",
2296
+ "echo -e "\\e[0Ksection_end:$(date +%s):writeallvalues\\r\\e[0K"",
2297
+ "kubernetesCreateSecret",
2298
+ "kubernetesDeploy",
2299
+ "echo Uploading SBOM to Dependency Track",
2300
+ "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/api" "https://api.stage.test-app.pan.panter.cloud" "__sbom.json" vex.json || true",
2301
+ "echo deployment successful ๐Ÿ˜ป",
2302
+ "echo "CL_GITLAB_ENVIRONMENT_URL=https://api.stage.test-app.pan.panter.cloud" >> gitlab_environment.env",
2303
+ ],
2304
+ "stage": "deploy stage",
2305
+ "variables": {
2306
+ "KUBERNETES_CPU_REQUEST": "0.5",
2307
+ "KUBERNETES_MEMORY_LIMIT": "400Mi",
2308
+ "KUBERNETES_MEMORY_REQUEST": "200Mi",
2378
2309
  },
2379
2310
  },
2380
2311
  "api ๐Ÿ›‘ Stop โš ๏ธ | prod ": {
2312
+ "allow_failure": true,
2313
+ "artifacts": {
2314
+ "reports": {
2315
+ "dotenv": "gitlab_environment.env",
2316
+ },
2317
+ },
2381
2318
  "environment": {
2382
2319
  "action": "stop",
2383
2320
  "name": "prod/api",
2384
- "url": "https://api.prod.test-app.pan.panter.cloud",
2321
+ "url": "$CL_GITLAB_ENVIRONMENT_URL",
2385
2322
  },
2386
2323
  "image": "path/to/docker/kubernetes:the-version",
2387
2324
  "interruptible": true,
@@ -2395,16 +2332,40 @@ mongodb:
2395
2332
  },
2396
2333
  "rules": [
2397
2334
  {
2398
- "allow_failure": true,
2399
2335
  "if": "$CI_COMMIT_BRANCH =~ /^[0-9]+\\.([0-9]+|x)\\.x$/",
2400
2336
  "when": "on_success",
2401
2337
  },
2402
2338
  {
2403
- "allow_failure": true,
2404
2339
  "when": "manual",
2405
2340
  },
2406
2341
  ],
2407
2342
  "script": [
2343
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
2344
+ "export ENV_SHORT="prod"",
2345
+ "export APP_DIR="api"",
2346
+ "export ENV_TYPE="prod"",
2347
+ "export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
2348
+ "export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
2349
+ "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")"",
2350
+ "export HOST="api.prod.test-app.pan.panter.cloud"",
2351
+ "export ROOT_URL="https://api.prod.test-app.pan.panter.cloud"",
2352
+ "export HOST_INTERNAL="api.prod.test-app.pan.panter.cloud"",
2353
+ "export HOST_CANONICAL="api.prod.test-app.pan.panter.cloud"",
2354
+ "export ROOT_URL_INTERNAL="https://api.prod.test-app.pan.panter.cloud"",
2355
+ "export KUBE_NAMESPACE="pan-test-app-prod"",
2356
+ "export KUBE_APP_NAME="api"",
2357
+ "export KUBE_APP_NAME_PREFIX=""",
2358
+ "export MONGODB_ROOT_PASSWORD="$CL_prod_api_MONGODB_ROOT_PASSWORD"",
2359
+ "export MONGODB_REPLICASET_KEY="$CL_prod_api_MONGODB_REPLICASET_KEY"",
2360
+ "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\\",\\"KUBE_NAMESPACE\\",\\"KUBE_APP_NAME\\",\\"KUBE_APP_NAME_PREFIX\\",\\"MONGODB_ROOT_PASSWORD\\",\\"MONGODB_REPLICASET_KEY\\"]"",
2361
+ "export RELEASE_NAME="pan-test-app-prod-api"",
2362
+ "export HELM_EXPERIMENTAL_OCI="1"",
2363
+ "export KUBE_DOCKER_IMAGE_PULL_SECRET="gitlab-registry-api"",
2364
+ "export HELM_GITLAB_CHART_NAME="/helm-charts/the-panter-chart"",
2365
+ "export HELM_ARGS=""",
2366
+ "export COMPONENT_NAME="api"",
2367
+ "export BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
2368
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
2408
2369
  "kubectl config set-cluster "kube-pan-test-app-prod-api" --server="$CL_prod_api_KUBE_URL" --certificate-authority <(echo $CL_prod_api_KUBE_CA_PEM | base64 -d) --embed-certs=true",
2409
2370
  "kubectl config set-credentials "kube-pan-test-app-prod-api" --token="$CL_prod_api_KUBE_TOKEN"",
2410
2371
  "kubectl config set-context "kube-pan-test-app-prod-api" --cluster="kube-pan-test-app-prod-api" --user="kube-pan-test-app-prod-api" --namespace="pan-test-app-prod"",
@@ -2412,100 +2373,27 @@ mongodb:
2412
2373
  "kubernetesDelete",
2413
2374
  "echo Disabling component in Dependency Track",
2414
2375
  "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" disable "pan-test-app/api" "https://api.prod.test-app.pan.panter.cloud" || true",
2376
+ "echo "CL_GITLAB_ENVIRONMENT_URL=https://api.prod.test-app.pan.panter.cloud" >> gitlab_environment.env",
2415
2377
  ],
2416
2378
  "stage": "stop prod",
2417
2379
  "variables": {
2418
- "APP_DIR": "api",
2419
- "BUILD_ID": "some-id",
2420
- "BUILD_INFO_BUILD_TIME": "01-01-2023 12:13:14",
2421
- "BUILD_INFO_CURRENT_VERSION": "3.2.1",
2422
- "BUILD_INFO_ID": "some-id",
2423
- "COMPONENT_NAME": "api",
2424
- "ENV_SHORT": "prod",
2425
- "ENV_TYPE": "prod",
2426
2380
  "GIT_STRATEGY": "none",
2427
- "HELM_ARGS": "",
2428
- "HELM_EXPERIMENTAL_OCI": "1",
2429
- "HELM_GITLAB_CHART_NAME": "/helm-charts/the-panter-chart",
2430
- "HOST": "api.prod.test-app.pan.panter.cloud",
2431
- "HOST_CANONICAL": "api.prod.test-app.pan.panter.cloud",
2432
- "HOST_INTERNAL": "api.prod.test-app.pan.panter.cloud",
2433
2381
  "KUBERNETES_CPU_REQUEST": "0.5",
2434
2382
  "KUBERNETES_MEMORY_LIMIT": "400Mi",
2435
2383
  "KUBERNETES_MEMORY_REQUEST": "200Mi",
2436
- "KUBE_APP_NAME": "api",
2437
- "KUBE_APP_NAME_PREFIX": "",
2438
- "KUBE_DOCKER_IMAGE_PULL_SECRET": "gitlab-registry-api",
2439
- "KUBE_NAMESPACE": "pan-test-app-prod",
2440
- "KUBE_VALUES": "env:
2441
- secret:
2442
- MONGODB_ROOT_PASSWORD: '$CL_prod_api_MONGODB_ROOT_PASSWORD'
2443
- MONGODB_REPLICASET_KEY: '$CL_prod_api_MONGODB_REPLICASET_KEY'
2444
- MONGO_URL: 'mongodb://root:$CL_prod_api_MONGODB_ROOT_PASSWORD@api-mongodb-0.api-mongodb-headless.pan-test-app-prod.svc.cluster.local:27017,api-mongodb-1.api-mongodb-headless.pan-test-app-prod.svc.cluster.local:27017/app?replicaSet=rs0&authSource=admin'
2445
- MONGO_OPLOG_URL: 'mongodb://root:$CL_prod_api_MONGODB_ROOT_PASSWORD@api-mongodb-0.api-mongodb-headless.pan-test-app-prod.svc.cluster.local:27017,api-mongodb-1.api-mongodb-headless.pan-test-app-prod.svc.cluster.local:27017/local?replicaSet=rs0&authSource=admin'
2446
- public:
2447
- ENV_SHORT: 'prod'
2448
- APP_DIR: 'api'
2449
- ENV_TYPE: 'prod'
2450
- BUILD_INFO_ID: 'some-id'
2451
- BUILD_INFO_BUILD_TIME: '01-01-2023 12:13:14'
2452
- BUILD_INFO_CURRENT_VERSION: '3.2.1'
2453
- HOST: 'api.prod.test-app.pan.panter.cloud'
2454
- ROOT_URL: 'https://api.prod.test-app.pan.panter.cloud'
2455
- HOST_CANONICAL: 'api.prod.test-app.pan.panter.cloud'
2456
- ROOT_URL_INTERNAL: 'https://api.prod.test-app.pan.panter.cloud'
2457
- KUBE_NAMESPACE: 'pan-test-app-prod'
2458
- KUBE_APP_NAME: 'api'
2459
- KUBE_APP_NAME_PREFIX: ''
2460
- HOST_INTERNAL: 'api.prod.test-app.pan.panter.cloud'
2461
- _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","KUBE_NAMESPACE","KUBE_APP_NAME","KUBE_APP_NAME_PREFIX","HOST_INTERNAL","MONGODB_ROOT_PASSWORD","MONGODB_REPLICASET_KEY"]'
2462
- application:
2463
- host: 'api.prod.test-app.pan.panter.cloud'
2464
- command: 'node main.js'
2465
- livenessProbe:
2466
- httpGet:
2467
- path: '__health'
2468
- readinessProbe:
2469
- httpGet:
2470
- path: '__health'
2471
- startupProbe:
2472
- httpGet:
2473
- path: '__health'
2474
- mongodb:
2475
- enabled: true
2476
- auth:
2477
- enabled: true
2478
- rootPassword: '$CL_prod_api_MONGODB_ROOT_PASSWORD'
2479
- replicaSetKey: '$CL_prod_api_MONGODB_REPLICASET_KEY'
2480
- persistence:
2481
- storageClass: 'premium-rwo'
2482
- backup:
2483
- enabled: true
2484
- hostToBackup: 'api-mongodb-0.api-mongodb-headless.pan-test-app-prod.svc.cluster.local:27017'
2485
- pvcToBackup: 'datadir-api-mongodb-0'
2486
- image: 'mrelite/kubectlmongoshell:v1.0'
2487
- schedule: '0 4 * * *'
2488
- volumeSnapshotClass: 'snapshotclass'
2489
- architecture: 'replicaset'
2490
- tolerations:
2491
- - key: 'mongodb'
2492
- operator: 'Equal'
2493
- value: 'true'
2494
- effect: 'NoSchedule'
2495
- ",
2496
- "MONGODB_REPLICASET_KEY": "$CL_prod_api_MONGODB_REPLICASET_KEY",
2497
- "MONGODB_ROOT_PASSWORD": "$CL_prod_api_MONGODB_ROOT_PASSWORD",
2498
- "RELEASE_NAME": "pan-test-app-prod-api",
2499
- "ROOT_URL": "https://api.prod.test-app.pan.panter.cloud",
2500
- "ROOT_URL_INTERNAL": "https://api.prod.test-app.pan.panter.cloud",
2501
- "_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","KUBE_NAMESPACE","KUBE_APP_NAME","KUBE_APP_NAME_PREFIX","HOST_INTERNAL","MONGODB_ROOT_PASSWORD","MONGODB_REPLICASET_KEY"]",
2502
2384
  },
2503
2385
  },
2504
2386
  "api ๐Ÿ›‘ Stop โš ๏ธ | stage ": {
2387
+ "allow_failure": true,
2388
+ "artifacts": {
2389
+ "reports": {
2390
+ "dotenv": "gitlab_environment.env",
2391
+ },
2392
+ },
2505
2393
  "environment": {
2506
2394
  "action": "stop",
2507
2395
  "name": "stage/api",
2508
- "url": "https://api.stage.test-app.pan.panter.cloud",
2396
+ "url": "$CL_GITLAB_ENVIRONMENT_URL",
2509
2397
  },
2510
2398
  "image": "path/to/docker/kubernetes:the-version",
2511
2399
  "interruptible": true,
@@ -2519,16 +2407,40 @@ mongodb:
2519
2407
  },
2520
2408
  "rules": [
2521
2409
  {
2522
- "allow_failure": true,
2523
2410
  "if": "$CI_COMMIT_BRANCH =~ /^[0-9]+\\.([0-9]+|x)\\.x$/",
2524
2411
  "when": "on_success",
2525
2412
  },
2526
2413
  {
2527
- "allow_failure": true,
2528
2414
  "when": "manual",
2529
2415
  },
2530
2416
  ],
2531
2417
  "script": [
2418
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
2419
+ "export ENV_SHORT="stage"",
2420
+ "export APP_DIR="api"",
2421
+ "export ENV_TYPE="stage"",
2422
+ "export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
2423
+ "export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
2424
+ "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")"",
2425
+ "export HOST="api.stage.test-app.pan.panter.cloud"",
2426
+ "export ROOT_URL="https://api.stage.test-app.pan.panter.cloud"",
2427
+ "export HOST_INTERNAL="api.stage.test-app.pan.panter.cloud"",
2428
+ "export HOST_CANONICAL="api.stage.test-app.pan.panter.cloud"",
2429
+ "export ROOT_URL_INTERNAL="https://api.stage.test-app.pan.panter.cloud"",
2430
+ "export KUBE_NAMESPACE="pan-test-app-stage"",
2431
+ "export KUBE_APP_NAME="api"",
2432
+ "export KUBE_APP_NAME_PREFIX=""",
2433
+ "export MONGODB_ROOT_PASSWORD="$CL_stage_api_MONGODB_ROOT_PASSWORD"",
2434
+ "export MONGODB_REPLICASET_KEY="$CL_stage_api_MONGODB_REPLICASET_KEY"",
2435
+ "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\\",\\"KUBE_NAMESPACE\\",\\"KUBE_APP_NAME\\",\\"KUBE_APP_NAME_PREFIX\\",\\"MONGODB_ROOT_PASSWORD\\",\\"MONGODB_REPLICASET_KEY\\"]"",
2436
+ "export RELEASE_NAME="pan-test-app-stage-api"",
2437
+ "export HELM_EXPERIMENTAL_OCI="1"",
2438
+ "export KUBE_DOCKER_IMAGE_PULL_SECRET="gitlab-registry-api"",
2439
+ "export HELM_GITLAB_CHART_NAME="/helm-charts/the-panter-chart"",
2440
+ "export HELM_ARGS=""",
2441
+ "export COMPONENT_NAME="api"",
2442
+ "export BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
2443
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
2532
2444
  "kubectl config set-cluster "kube-pan-test-app-stage-api" --server="$CL_stage_api_KUBE_URL" --certificate-authority <(echo $CL_stage_api_KUBE_CA_PEM | base64 -d) --embed-certs=true",
2533
2445
  "kubectl config set-credentials "kube-pan-test-app-stage-api" --token="$CL_stage_api_KUBE_TOKEN"",
2534
2446
  "kubectl config set-context "kube-pan-test-app-stage-api" --cluster="kube-pan-test-app-stage-api" --user="kube-pan-test-app-stage-api" --namespace="pan-test-app-stage"",
@@ -2536,93 +2448,14 @@ mongodb:
2536
2448
  "kubernetesDelete",
2537
2449
  "echo Disabling component in Dependency Track",
2538
2450
  "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" disable "pan-test-app/api" "https://api.stage.test-app.pan.panter.cloud" || true",
2451
+ "echo "CL_GITLAB_ENVIRONMENT_URL=https://api.stage.test-app.pan.panter.cloud" >> gitlab_environment.env",
2539
2452
  ],
2540
2453
  "stage": "stop stage",
2541
2454
  "variables": {
2542
- "APP_DIR": "api",
2543
- "BUILD_ID": "some-id",
2544
- "BUILD_INFO_BUILD_TIME": "01-01-2023 12:13:14",
2545
- "BUILD_INFO_CURRENT_VERSION": "3.2.1",
2546
- "BUILD_INFO_ID": "some-id",
2547
- "COMPONENT_NAME": "api",
2548
- "ENV_SHORT": "stage",
2549
- "ENV_TYPE": "stage",
2550
2455
  "GIT_STRATEGY": "none",
2551
- "HELM_ARGS": "",
2552
- "HELM_EXPERIMENTAL_OCI": "1",
2553
- "HELM_GITLAB_CHART_NAME": "/helm-charts/the-panter-chart",
2554
- "HOST": "api.stage.test-app.pan.panter.cloud",
2555
- "HOST_CANONICAL": "api.stage.test-app.pan.panter.cloud",
2556
- "HOST_INTERNAL": "api.stage.test-app.pan.panter.cloud",
2557
2456
  "KUBERNETES_CPU_REQUEST": "0.5",
2558
2457
  "KUBERNETES_MEMORY_LIMIT": "400Mi",
2559
2458
  "KUBERNETES_MEMORY_REQUEST": "200Mi",
2560
- "KUBE_APP_NAME": "api",
2561
- "KUBE_APP_NAME_PREFIX": "",
2562
- "KUBE_DOCKER_IMAGE_PULL_SECRET": "gitlab-registry-api",
2563
- "KUBE_NAMESPACE": "pan-test-app-stage",
2564
- "KUBE_VALUES": "env:
2565
- secret:
2566
- MONGODB_ROOT_PASSWORD: '$CL_stage_api_MONGODB_ROOT_PASSWORD'
2567
- MONGODB_REPLICASET_KEY: '$CL_stage_api_MONGODB_REPLICASET_KEY'
2568
- MONGO_URL: 'mongodb://root:$CL_stage_api_MONGODB_ROOT_PASSWORD@api-mongodb-0.api-mongodb-headless.pan-test-app-stage.svc.cluster.local:27017,api-mongodb-1.api-mongodb-headless.pan-test-app-stage.svc.cluster.local:27017/app?replicaSet=rs0&authSource=admin'
2569
- MONGO_OPLOG_URL: 'mongodb://root:$CL_stage_api_MONGODB_ROOT_PASSWORD@api-mongodb-0.api-mongodb-headless.pan-test-app-stage.svc.cluster.local:27017,api-mongodb-1.api-mongodb-headless.pan-test-app-stage.svc.cluster.local:27017/local?replicaSet=rs0&authSource=admin'
2570
- public:
2571
- ENV_SHORT: 'stage'
2572
- APP_DIR: 'api'
2573
- ENV_TYPE: 'stage'
2574
- BUILD_INFO_ID: 'some-id'
2575
- BUILD_INFO_BUILD_TIME: '01-01-2023 12:13:14'
2576
- BUILD_INFO_CURRENT_VERSION: '3.2.1'
2577
- HOST: 'api.stage.test-app.pan.panter.cloud'
2578
- ROOT_URL: 'https://api.stage.test-app.pan.panter.cloud'
2579
- HOST_CANONICAL: 'api.stage.test-app.pan.panter.cloud'
2580
- ROOT_URL_INTERNAL: 'https://api.stage.test-app.pan.panter.cloud'
2581
- KUBE_NAMESPACE: 'pan-test-app-stage'
2582
- KUBE_APP_NAME: 'api'
2583
- KUBE_APP_NAME_PREFIX: ''
2584
- HOST_INTERNAL: 'api.stage.test-app.pan.panter.cloud'
2585
- _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","KUBE_NAMESPACE","KUBE_APP_NAME","KUBE_APP_NAME_PREFIX","HOST_INTERNAL","MONGODB_ROOT_PASSWORD","MONGODB_REPLICASET_KEY"]'
2586
- application:
2587
- host: 'api.stage.test-app.pan.panter.cloud'
2588
- command: 'node main.js'
2589
- livenessProbe:
2590
- httpGet:
2591
- path: '__health'
2592
- readinessProbe:
2593
- httpGet:
2594
- path: '__health'
2595
- startupProbe:
2596
- httpGet:
2597
- path: '__health'
2598
- mongodb:
2599
- enabled: true
2600
- auth:
2601
- enabled: true
2602
- rootPassword: '$CL_stage_api_MONGODB_ROOT_PASSWORD'
2603
- replicaSetKey: '$CL_stage_api_MONGODB_REPLICASET_KEY'
2604
- persistence:
2605
- storageClass: 'premium-rwo'
2606
- backup:
2607
- enabled: true
2608
- hostToBackup: 'api-mongodb-0.api-mongodb-headless.pan-test-app-stage.svc.cluster.local:27017'
2609
- pvcToBackup: 'datadir-api-mongodb-0'
2610
- image: 'mrelite/kubectlmongoshell:v1.0'
2611
- schedule: '0 4 * * *'
2612
- volumeSnapshotClass: 'snapshotclass'
2613
- architecture: 'replicaset'
2614
- tolerations:
2615
- - key: 'mongodb'
2616
- operator: 'Equal'
2617
- value: 'true'
2618
- effect: 'NoSchedule'
2619
- ",
2620
- "MONGODB_REPLICASET_KEY": "$CL_stage_api_MONGODB_REPLICASET_KEY",
2621
- "MONGODB_ROOT_PASSWORD": "$CL_stage_api_MONGODB_ROOT_PASSWORD",
2622
- "RELEASE_NAME": "pan-test-app-stage-api",
2623
- "ROOT_URL": "https://api.stage.test-app.pan.panter.cloud",
2624
- "ROOT_URL_INTERNAL": "https://api.stage.test-app.pan.panter.cloud",
2625
- "_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","KUBE_NAMESPACE","KUBE_APP_NAME","KUBE_APP_NAME_PREFIX","HOST_INTERNAL","MONGODB_ROOT_PASSWORD","MONGODB_REPLICASET_KEY"]",
2626
2459
  },
2627
2460
  },
2628
2461
  "api ๐Ÿงพ sbom | prod ": {
@@ -2643,6 +2476,8 @@ mongodb:
2643
2476
  ],
2644
2477
  },
2645
2478
  "script": [
2479
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
2480
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
2646
2481
  "trivy fs --quiet --format cyclonedx --output "__sbom.json" api",
2647
2482
  ],
2648
2483
  "stage": "build",
@@ -2666,6 +2501,8 @@ mongodb:
2666
2501
  ],
2667
2502
  },
2668
2503
  "script": [
2504
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
2505
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
2669
2506
  "trivy fs --quiet --format cyclonedx --output "__sbom.json" api",
2670
2507
  ],
2671
2508
  "stage": "build",
@@ -2718,7 +2555,7 @@ mongodb:
2718
2555
  ],
2719
2556
  "variables": {
2720
2557
  "FF_USE_FASTZIP": "true",
2721
- "GIT_DEPTH": 1,
2558
+ "GIT_DEPTH": "1",
2722
2559
  },
2723
2560
  "workflow": {
2724
2561
  "rules": [