@catladder/pipeline 0.0.0-more-collapse-deeb54d7 → 0.0.0-multiple-gitlab-includes-3df5566d

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 (597) hide show
  1. package/README.md +17 -0
  2. package/dist/bash/BashExpression.d.ts +36 -0
  3. package/dist/bash/BashExpression.js +114 -0
  4. package/dist/bash/bashEscape.d.ts +34 -0
  5. package/dist/bash/bashEscape.js +114 -0
  6. package/dist/bash/bashExpressionPerPipelineType.d.ts +6 -0
  7. package/dist/bash/bashExpressionPerPipelineType.js +11 -0
  8. package/dist/bash/bashYaml.d.ts +10 -0
  9. package/dist/bash/bashYaml.js +69 -0
  10. package/dist/bash/getInjectVarsScript.d.ts +2 -0
  11. package/dist/bash/getInjectVarsScript.js +47 -0
  12. package/dist/bash/index.d.ts +2 -0
  13. package/dist/bash/index.js +26 -0
  14. package/dist/build/artifacts/createBuildJobArtifact.d.ts +3 -0
  15. package/dist/build/artifacts/createBuildJobArtifact.js +97 -0
  16. package/dist/build/base/__tests__/createArtifactsConfig.test.js +3 -1
  17. package/dist/build/base/constants.d.ts +0 -1
  18. package/dist/build/base/constants.js +4 -3
  19. package/dist/build/base/createAppBuildJob.d.ts +5 -3
  20. package/dist/build/base/createAppBuildJob.js +18 -15
  21. package/dist/build/base/createArtifactsConfig.d.ts +1 -1
  22. package/dist/build/base/createArtifactsConfig.js +3 -1
  23. package/dist/build/base/createBuildJobDefinition.d.ts +6 -0
  24. package/dist/build/base/createBuildJobDefinition.js +58 -0
  25. package/dist/build/base/index.d.ts +7 -4
  26. package/dist/build/base/index.js +17 -6
  27. package/dist/build/base/writeBuildInfo.d.ts +2 -2
  28. package/dist/build/base/writeBuildInfo.js +4 -3
  29. package/dist/build/base/writeDotEnv.d.ts +3 -2
  30. package/dist/build/base/writeDotEnv.js +30 -6
  31. package/dist/build/cache/createJobCache.d.ts +7 -0
  32. package/dist/build/cache/createJobCache.js +115 -0
  33. package/dist/build/cache/getAllCacheConfigsFromConfig.d.ts +3 -0
  34. package/dist/build/cache/getAllCacheConfigsFromConfig.js +64 -0
  35. package/dist/build/cache/transformLegacyJobCache.d.ts +3 -0
  36. package/dist/build/cache/transformLegacyJobCache.js +29 -0
  37. package/dist/build/custom/__tests__/testJob.test.js +15 -16
  38. package/dist/build/custom/buildJob.d.ts +2 -2
  39. package/dist/build/custom/buildJob.js +8 -67
  40. package/dist/build/custom/index.d.ts +2 -2
  41. package/dist/build/custom/index.js +3 -1
  42. package/dist/build/custom/testJob.d.ts +4 -4
  43. package/dist/build/custom/testJob.js +25 -21
  44. package/dist/build/docker.d.ts +48 -39
  45. package/dist/build/docker.js +112 -37
  46. package/dist/build/index.d.ts +14 -7
  47. package/dist/build/index.js +44 -16
  48. package/dist/build/node/buildJob.d.ts +6 -2
  49. package/dist/build/node/buildJob.js +39 -48
  50. package/dist/build/node/cache.d.ts +4 -5
  51. package/dist/build/node/cache.js +18 -23
  52. package/dist/build/node/constants.d.ts +0 -1
  53. package/dist/build/node/constants.js +5 -4
  54. package/dist/build/node/index.d.ts +4 -4
  55. package/dist/build/node/index.js +3 -1
  56. package/dist/build/node/meteor.d.ts +2 -2
  57. package/dist/build/node/meteor.js +10 -12
  58. package/dist/build/node/testJob.d.ts +3 -2
  59. package/dist/build/node/testJob.js +29 -19
  60. package/dist/build/node/yarn.d.ts +3 -2
  61. package/dist/build/node/yarn.js +13 -13
  62. package/dist/build/rails/build.d.ts +2 -2
  63. package/dist/build/rails/build.js +24 -8
  64. package/dist/build/rails/index.d.ts +2 -2
  65. package/dist/build/rails/index.js +3 -1
  66. package/dist/build/rails/test.d.ts +2 -2
  67. package/dist/build/rails/test.js +20 -12
  68. package/dist/build/sbom.d.ts +2 -2
  69. package/dist/build/sbom.js +9 -6
  70. package/dist/build/types.d.ts +152 -47
  71. package/dist/build/types.js +10 -2
  72. package/dist/catladder-gitlab.js +129 -49
  73. package/dist/config/__tests__/configruedEnvs.test.js +3 -1
  74. package/dist/config/__tests__/getAllEnvs.test.js +79 -0
  75. package/dist/config/__tests__/getAllEnvsInAllComponents.test.d.ts +1 -0
  76. package/dist/config/__tests__/getAllEnvsInAllComponents.test.js +73 -0
  77. package/dist/config/configruedEnvs.js +3 -1
  78. package/dist/config/index.js +13 -7
  79. package/dist/config/readConfig.d.ts +2 -2
  80. package/dist/config/readConfig.js +191 -40
  81. package/dist/constants.js +5 -3
  82. package/dist/context/createAllComponentsContext.d.ts +12 -0
  83. package/dist/{pipeline/commitInfo/getCommitInfo.js → context/createAllComponentsContext.js} +35 -19
  84. package/dist/context/createComponentContext.d.ts +11 -0
  85. package/dist/context/createComponentContext.js +255 -0
  86. package/dist/context/createWorkspaceContext.d.ts +16 -0
  87. package/dist/context/createWorkspaceContext.js +173 -0
  88. package/dist/context/getBuildInfoVariables.d.ts +6 -0
  89. package/dist/context/getBuildInfoVariables.js +55 -0
  90. package/dist/context/getEnvConfig.js +5 -2
  91. package/dist/context/getEnvType.js +3 -1
  92. package/dist/context/getEnvironment.d.ts +3 -3
  93. package/dist/context/getEnvironment.js +11 -12
  94. package/dist/context/getEnvironmentContext.d.ts +7 -3
  95. package/dist/context/getEnvironmentContext.js +21 -11
  96. package/dist/context/getEnvironmentVariables.d.ts +22 -5
  97. package/dist/context/getEnvironmentVariables.js +81 -49
  98. package/dist/context/getLabels.d.ts +2 -2
  99. package/dist/context/getLabels.js +9 -7
  100. package/dist/context/getReviewSlug.d.ts +4 -0
  101. package/dist/context/getReviewSlug.js +21 -0
  102. package/dist/context/index.d.ts +2 -4
  103. package/dist/context/index.js +15 -162
  104. package/dist/context/transformJobOnlyVars.d.ts +5 -2
  105. package/dist/context/transformJobOnlyVars.js +4 -2
  106. package/dist/context/utils/envVars.d.ts +1 -1
  107. package/dist/context/utils/envVars.js +5 -2
  108. package/dist/defaults/index.js +3 -1
  109. package/dist/deploy/base/deploy.d.ts +3 -3
  110. package/dist/deploy/base/deploy.js +38 -22
  111. package/dist/deploy/base/index.d.ts +3 -5
  112. package/dist/deploy/base/index.js +3 -1
  113. package/dist/deploy/base/rollback.d.ts +3 -3
  114. package/dist/deploy/base/rollback.js +13 -9
  115. package/dist/deploy/base/stop.d.ts +3 -3
  116. package/dist/deploy/base/stop.js +16 -11
  117. package/dist/deploy/base/types.d.ts +1 -1
  118. package/dist/deploy/base/types.js +3 -1
  119. package/dist/deploy/base/variables.d.ts +0 -1
  120. package/dist/deploy/base/variables.js +4 -3
  121. package/dist/deploy/cloudRun/artifactsRegistry.d.ts +19 -0
  122. package/dist/deploy/cloudRun/artifactsRegistry.js +125 -0
  123. package/dist/deploy/cloudRun/cleanup.d.ts +2 -0
  124. package/dist/deploy/cloudRun/cleanup.js +53 -0
  125. package/dist/deploy/cloudRun/cloudRunRevisions.d.ts +2 -0
  126. package/dist/deploy/cloudRun/cloudRunRevisions.js +62 -0
  127. package/dist/deploy/cloudRun/createJobs/cloudRunJobs.d.ts +7 -0
  128. package/dist/deploy/cloudRun/createJobs/cloudRunJobs.js +207 -0
  129. package/dist/deploy/cloudRun/createJobs/cloudRunServices.d.ts +4 -0
  130. package/dist/deploy/cloudRun/createJobs/cloudRunServices.js +96 -0
  131. package/dist/deploy/cloudRun/createJobs/common.d.ts +18 -0
  132. package/dist/deploy/cloudRun/createJobs/common.js +93 -0
  133. package/dist/deploy/cloudRun/createJobs/constants.d.ts +1 -0
  134. package/dist/deploy/cloudRun/createJobs/constants.js +7 -0
  135. package/dist/deploy/cloudRun/createJobs/getCloudRunDeployScripts.d.ts +2 -0
  136. package/dist/deploy/cloudRun/createJobs/getCloudRunDeployScripts.js +62 -0
  137. package/dist/deploy/cloudRun/createJobs/getCloudRunStopScripts.d.ts +2 -0
  138. package/dist/deploy/cloudRun/createJobs/getCloudRunStopScripts.js +54 -0
  139. package/dist/deploy/cloudRun/createJobs/index.d.ts +3 -0
  140. package/dist/deploy/cloudRun/createJobs/index.js +57 -0
  141. package/dist/deploy/cloudRun/createJobs/volumes.d.ts +3 -0
  142. package/dist/deploy/cloudRun/createJobs/volumes.js +58 -0
  143. package/dist/deploy/cloudRun/index.d.ts +2 -2
  144. package/dist/deploy/cloudRun/index.js +17 -10
  145. package/dist/deploy/cloudRun/utils/createArgsString.d.ts +3 -1
  146. package/dist/deploy/cloudRun/utils/createArgsString.js +25 -17
  147. package/dist/deploy/cloudRun/utils/database.d.ts +6 -4
  148. package/dist/deploy/cloudRun/utils/database.js +28 -15
  149. package/dist/deploy/cloudRun/utils/gcloudServiceAccountLoginCommands.d.ts +2 -2
  150. package/dist/deploy/cloudRun/utils/gcloudServiceAccountLoginCommands.js +4 -2
  151. package/dist/deploy/cloudRun/utils/getServiceName.d.ts +2 -0
  152. package/dist/deploy/cloudRun/utils/getServiceName.js +10 -0
  153. package/dist/deploy/cloudRun/utils/jobName.d.ts +2 -1
  154. package/dist/deploy/cloudRun/utils/jobName.js +4 -2
  155. package/dist/deploy/cloudRun/utils/removeFirstLinesFromCommandOutput.d.ts +9 -0
  156. package/dist/deploy/cloudRun/utils/removeFirstLinesFromCommandOutput.js +18 -0
  157. package/dist/deploy/cloudSql/utils.d.ts +2 -1
  158. package/dist/deploy/cloudSql/utils.js +7 -2
  159. package/dist/deploy/custom/deployJob.d.ts +2 -2
  160. package/dist/deploy/custom/deployJob.js +10 -9
  161. package/dist/deploy/custom/index.d.ts +2 -2
  162. package/dist/deploy/custom/index.js +3 -1
  163. package/dist/deploy/dockerTag/deployJob.d.ts +2 -2
  164. package/dist/deploy/dockerTag/deployJob.js +38 -7
  165. package/dist/deploy/dockerTag/index.d.ts +2 -2
  166. package/dist/deploy/dockerTag/index.js +3 -1
  167. package/dist/deploy/index.d.ts +10 -9
  168. package/dist/deploy/index.js +13 -7
  169. package/dist/deploy/kubernetes/additionalSecretKeys.d.ts +3 -1
  170. package/dist/deploy/kubernetes/additionalSecretKeys.js +3 -1
  171. package/dist/deploy/kubernetes/cloudSql/index.d.ts +6 -5
  172. package/dist/deploy/kubernetes/cloudSql/index.js +14 -21
  173. package/dist/deploy/kubernetes/deployJob.d.ts +2 -2
  174. package/dist/deploy/kubernetes/deployJob.js +23 -22
  175. package/dist/deploy/kubernetes/index.d.ts +2 -2
  176. package/dist/deploy/kubernetes/index.js +52 -15
  177. package/dist/deploy/kubernetes/kubeEnv.d.ts +5 -4
  178. package/dist/deploy/kubernetes/kubeEnv.js +9 -5
  179. package/dist/deploy/kubernetes/kubeValues.d.ts +5 -6
  180. package/dist/deploy/kubernetes/kubeValues.js +16 -18
  181. package/dist/deploy/kubernetes/mongodb.d.ts +2 -2
  182. package/dist/deploy/kubernetes/mongodb.js +14 -12
  183. package/dist/deploy/sbom.d.ts +4 -4
  184. package/dist/deploy/sbom.js +7 -4
  185. package/dist/deploy/types/base.d.ts +5 -5
  186. package/dist/deploy/types/base.js +3 -1
  187. package/dist/deploy/types/custom.d.ts +3 -7
  188. package/dist/deploy/types/custom.js +3 -1
  189. package/dist/deploy/types/dockerTag.d.ts +3 -1
  190. package/dist/deploy/types/dockerTag.js +3 -1
  191. package/dist/deploy/types/googleCloudRun.d.ts +127 -24
  192. package/dist/deploy/types/googleCloudRun.js +3 -1
  193. package/dist/deploy/types/index.d.ts +6 -6
  194. package/dist/deploy/types/index.js +14 -8
  195. package/dist/deploy/types/kubernetes.d.ts +25 -54
  196. package/dist/deploy/types/kubernetes.js +3 -1
  197. package/dist/deploy/utils.d.ts +2 -2
  198. package/dist/deploy/utils.js +5 -2
  199. package/dist/globalScriptFunctions/index.d.ts +14 -0
  200. package/dist/globalScriptFunctions/index.js +37 -0
  201. package/dist/index.d.ts +5 -2
  202. package/dist/index.js +18 -9
  203. package/dist/packageInfos.d.ts +4 -0
  204. package/dist/packageInfos.js +20 -0
  205. package/dist/pipeline/__tests__/getPipelineStages.test.d.ts +1 -0
  206. package/dist/pipeline/__tests__/getPipelineStages.test.js +73 -0
  207. package/dist/pipeline/createAllJobs.d.ts +16 -6
  208. package/dist/pipeline/createAllJobs.js +99 -27
  209. package/dist/pipeline/createJobsForComponent.d.ts +2 -2
  210. package/dist/pipeline/createJobsForComponent.js +9 -149
  211. package/dist/pipeline/createJobsForWorkspace.d.ts +3 -0
  212. package/dist/pipeline/createJobsForWorkspace.js +12 -0
  213. package/dist/pipeline/createMainPipeline.d.ts +3 -0
  214. package/dist/pipeline/createMainPipeline.js +283 -0
  215. package/dist/pipeline/generatePipelineFiles.d.ts +7 -0
  216. package/dist/pipeline/generatePipelineFiles.js +304 -0
  217. package/dist/pipeline/getPipelineStages.d.ts +7 -0
  218. package/dist/pipeline/getPipelineStages.js +56 -0
  219. package/dist/pipeline/gitlab/createGitlabJobs.d.ts +11 -14
  220. package/dist/pipeline/gitlab/createGitlabJobs.js +258 -74
  221. package/dist/pipeline/gitlab/createGitlabPipeline.d.ts +9 -0
  222. package/dist/pipeline/gitlab/createGitlabPipeline.js +77 -0
  223. package/dist/pipeline/gitlab/gitlabReleaseJobs.d.ts +33 -0
  224. package/dist/pipeline/gitlab/gitlabReleaseJobs.js +25 -0
  225. package/dist/pipeline/gitlab/sortGitLabJobDefProps.d.ts +7 -0
  226. package/dist/pipeline/gitlab/sortGitLabJobDefProps.js +27 -0
  227. package/dist/pipeline/index.d.ts +3 -2
  228. package/dist/pipeline/index.js +16 -9
  229. package/dist/pipeline/packageManager.d.ts +3 -2
  230. package/dist/pipeline/packageManager.js +50 -24
  231. package/dist/pipeline/yarn/yarnUtils.d.ts +3 -2
  232. package/dist/pipeline/yarn/yarnUtils.js +65 -17
  233. package/dist/rules/index.d.ts +7 -2
  234. package/dist/rules/index.js +34 -16
  235. package/dist/runner/index.d.ts +1 -1
  236. package/dist/runner/index.js +3 -1
  237. package/dist/tsconfig.tsbuildinfo +1 -1
  238. package/dist/types/config.d.ts +44 -29
  239. package/dist/types/config.js +5 -2
  240. package/dist/types/context.d.ts +124 -40
  241. package/dist/types/context.js +12 -1
  242. package/dist/types/environmentContext.d.ts +15 -12
  243. package/dist/types/environmentContext.js +3 -1
  244. package/dist/types/gitlab-ci-yml.d.ts +30 -30
  245. package/dist/types/gitlab-ci-yml.js +3 -2
  246. package/dist/types/gitlab-types.d.ts +8 -8
  247. package/dist/types/gitlab-types.js +3 -1
  248. package/dist/types/index.d.ts +1 -0
  249. package/dist/types/index.js +14 -7
  250. package/dist/types/jobDefinition.d.ts +11 -0
  251. package/dist/types/jobDefinition.js +5 -0
  252. package/dist/types/jobs.d.ts +30 -15
  253. package/dist/types/jobs.js +3 -1
  254. package/dist/types/pipeline.d.ts +3 -3
  255. package/dist/types/pipeline.js +3 -1
  256. package/dist/types/utils.d.ts +1 -1
  257. package/dist/types/utils.js +3 -1
  258. package/dist/utils/gitlab.js +7 -2
  259. package/dist/utils/index.d.ts +2 -1
  260. package/dist/utils/index.js +10 -3
  261. package/dist/utils/jsonParse.d.ts +1 -0
  262. package/dist/utils/jsonParse.js +14 -0
  263. package/dist/utils/removeUndefined.d.ts +1 -0
  264. package/dist/utils/removeUndefined.js +36 -0
  265. package/dist/utils/writeFiles.d.ts +11 -0
  266. package/dist/{pipeline/commitInfo/getBuildId.js → utils/writeFiles.js} +39 -22
  267. package/dist/variables/VariableValue.d.ts +3 -0
  268. package/dist/variables/VariableValue.js +5 -0
  269. package/dist/variables/VariableValueContainingReferences.d.ts +24 -0
  270. package/dist/variables/VariableValueContainingReferences.js +97 -0
  271. package/dist/variables/__tests__/resolveAllReferences.test.d.ts +1 -0
  272. package/dist/variables/__tests__/resolveAllReferences.test.js +218 -0
  273. package/dist/variables/__tests__/resolveAllReferencesOnce.test.d.ts +1 -0
  274. package/dist/variables/__tests__/resolveAllReferencesOnce.test.js +171 -0
  275. package/dist/variables/__tests__/resolveReferencesOnce.test.d.ts +1 -0
  276. package/dist/variables/__tests__/resolveReferencesOnce.test.js +199 -0
  277. package/dist/variables/__tests__/variableValue.test.d.ts +1 -0
  278. package/dist/variables/__tests__/variableValue.test.js +36 -0
  279. package/dist/variables/resolveAllReferences.d.ts +3 -0
  280. package/dist/{pipeline/createChildPipeline.js → variables/resolveAllReferences.js} +44 -47
  281. package/dist/variables/resolveAllReferencesOnce.d.ts +5 -0
  282. package/dist/variables/resolveAllReferencesOnce.js +191 -0
  283. package/dist/variables/resolveReferencesOnce.d.ts +8 -0
  284. package/dist/variables/resolveReferencesOnce.js +22 -0
  285. package/examples/.test-gen-ignore +1 -0
  286. package/examples/__snapshots__/cloud-run-http2.test.ts.snap +1418 -0
  287. package/examples/__snapshots__/cloud-run-memory-limit.test.ts.snap +1418 -0
  288. package/examples/__snapshots__/cloud-run-meteor-with-worker.test.ts.snap +1418 -0
  289. package/examples/__snapshots__/cloud-run-nextjs.test.ts.snap +1434 -0
  290. package/examples/__snapshots__/cloud-run-no-cpu-throttling.test.ts.snap +1418 -0
  291. package/examples/__snapshots__/cloud-run-no-service.test.ts.snap +1526 -0
  292. package/examples/__snapshots__/cloud-run-non-public.test.ts.snap +1418 -0
  293. package/examples/__snapshots__/cloud-run-post-stop-job.test.ts.snap +1436 -0
  294. package/examples/__snapshots__/cloud-run-service-custom-vpc-connector.test.ts.snap +1418 -0
  295. package/examples/__snapshots__/cloud-run-service-custom-vpc.test.ts.snap +1418 -0
  296. package/examples/__snapshots__/cloud-run-service-gen2.test.ts.snap +1418 -0
  297. package/examples/__snapshots__/cloud-run-service-increase-timout.test.ts.snap +1418 -0
  298. package/examples/__snapshots__/cloud-run-service-with-volumes.test.ts.snap +1490 -0
  299. package/examples/__snapshots__/cloud-run-storybook.test.ts.snap +1302 -0
  300. package/examples/__snapshots__/cloud-run-with-ngnix.test.ts.snap +1418 -0
  301. package/examples/__snapshots__/cloud-run-with-sql-reuse-db.test.ts.snap +2998 -0
  302. package/examples/__snapshots__/cloud-run-with-sql.test.ts.snap +1733 -0
  303. package/examples/__snapshots__/cloud-run-with-worker.test.ts.snap +1426 -0
  304. package/examples/__snapshots__/custom-build-job-with-tests.test.ts.snap +1285 -0
  305. package/examples/__snapshots__/custom-build-job.test.ts.snap +1174 -0
  306. package/examples/__snapshots__/custom-deploy.test.ts.snap +1168 -0
  307. package/examples/__snapshots__/custom-envs.test.ts.snap +798 -0
  308. package/examples/__snapshots__/custom-sbom-java.test.ts.snap +1182 -0
  309. package/examples/__snapshots__/git-submodule.test.ts.snap +1419 -0
  310. package/examples/__snapshots__/kubernetes-application-customization.test.ts.snap +1759 -0
  311. package/examples/__snapshots__/kubernetes-with-cloud-sql.test.ts.snap +1779 -0
  312. package/examples/__snapshots__/kubernetes-with-jobs.test.ts.snap +3357 -0
  313. package/examples/__snapshots__/kubernetes-with-mongodb.test.ts.snap +1883 -0
  314. package/examples/__snapshots__/local-dot-env.test.ts.snap +1342 -0
  315. package/examples/__snapshots__/meteor-kubernetes.test.ts.snap +1836 -0
  316. package/examples/__snapshots__/multiline-var.test.ts.snap +5679 -0
  317. package/examples/__snapshots__/native-app.test.ts.snap +2206 -0
  318. package/examples/__snapshots__/node-build-with-custom-image.test.ts.snap +1418 -0
  319. package/examples/__snapshots__/node-build-with-docker-additions.test.ts.snap +1426 -0
  320. package/examples/__snapshots__/rails-k8s-with-worker-dockerfile.test.ts.snap +1487 -0
  321. package/examples/__snapshots__/rails-k8s-with-worker.test.ts.snap +1471 -0
  322. package/examples/__snapshots__/referencing-other-vars.test.ts.snap +4739 -0
  323. package/examples/__snapshots__/wait-for-other-deploy.test.ts.snap +1368 -0
  324. package/examples/__snapshots__/workspace-api-www-turbo-cache.test.ts.snap +2338 -0
  325. package/examples/__snapshots__/workspace-api-www.test.ts.snap +2330 -0
  326. package/examples/__utils__/helpers.ts +9 -12
  327. package/examples/cloud-run-http2.test.ts +11 -0
  328. package/examples/cloud-run-http2.ts +29 -0
  329. package/examples/cloud-run-memory-limit.test.ts +11 -0
  330. package/examples/cloud-run-memory-limit.ts +10 -5
  331. package/examples/cloud-run-meteor-with-worker.test.ts +11 -0
  332. package/examples/cloud-run-meteor-with-worker.ts +37 -0
  333. package/examples/cloud-run-nextjs.test.ts +11 -0
  334. package/examples/cloud-run-nextjs.ts +28 -0
  335. package/examples/cloud-run-no-cpu-throttling.test.ts +11 -0
  336. package/examples/cloud-run-no-cpu-throttling.ts +6 -4
  337. package/examples/cloud-run-no-service.test.ts +11 -0
  338. package/examples/cloud-run-no-service.ts +33 -0
  339. package/examples/cloud-run-non-public.test.ts +11 -0
  340. package/examples/cloud-run-non-public.ts +5 -4
  341. package/examples/cloud-run-post-stop-job.test.ts +11 -0
  342. package/examples/cloud-run-post-stop-job.ts +42 -0
  343. package/examples/cloud-run-service-custom-vpc-connector.test.ts +11 -0
  344. package/examples/cloud-run-service-custom-vpc-connector.ts +30 -0
  345. package/examples/cloud-run-service-custom-vpc.test.ts +11 -0
  346. package/examples/cloud-run-service-custom-vpc.ts +31 -0
  347. package/examples/cloud-run-service-gen2.test.ts +11 -0
  348. package/examples/cloud-run-service-gen2.ts +29 -0
  349. package/examples/cloud-run-service-increase-timout.test.ts +11 -0
  350. package/examples/cloud-run-service-increase-timout.ts +29 -0
  351. package/examples/cloud-run-service-with-volumes.test.ts +11 -0
  352. package/examples/cloud-run-service-with-volumes.ts +56 -0
  353. package/examples/cloud-run-storybook.test.ts +11 -0
  354. package/examples/cloud-run-storybook.ts +33 -0
  355. package/examples/cloud-run-with-ngnix.test.ts +11 -0
  356. package/examples/cloud-run-with-ngnix.ts +29 -0
  357. package/examples/cloud-run-with-sql-reuse-db.test.ts +11 -0
  358. package/examples/cloud-run-with-sql-reuse-db.ts +5 -4
  359. package/examples/cloud-run-with-sql.test.ts +11 -0
  360. package/examples/cloud-run-with-sql.ts +6 -20
  361. package/examples/cloud-run-with-worker.test.ts +11 -0
  362. package/examples/cloud-run-with-worker.ts +37 -0
  363. package/examples/custom-build-job-with-tests.test.ts +11 -0
  364. package/examples/custom-build-job-with-tests.ts +5 -4
  365. package/examples/custom-build-job.test.ts +11 -0
  366. package/examples/custom-build-job.ts +5 -4
  367. package/examples/custom-deploy.test.ts +11 -0
  368. package/examples/custom-deploy.ts +12 -4
  369. package/examples/custom-envs.test.ts +11 -0
  370. package/examples/custom-envs.ts +5 -4
  371. package/examples/custom-sbom-java.test.ts +11 -0
  372. package/examples/custom-sbom-java.ts +10 -6
  373. package/examples/git-submodule.test.ts +11 -0
  374. package/examples/git-submodule.ts +30 -0
  375. package/examples/kubernetes-application-customization.test.ts +11 -0
  376. package/examples/kubernetes-application-customization.ts +7 -4
  377. package/examples/kubernetes-with-cloud-sql.test.ts +11 -0
  378. package/examples/kubernetes-with-cloud-sql.ts +7 -4
  379. package/examples/kubernetes-with-jobs.test.ts +11 -0
  380. package/examples/kubernetes-with-jobs.ts +7 -4
  381. package/examples/kubernetes-with-mongodb.test.ts +11 -0
  382. package/examples/kubernetes-with-mongodb.ts +7 -4
  383. package/examples/local-dot-env.test.ts +11 -0
  384. package/examples/local-dot-env.ts +27 -0
  385. package/examples/meteor-kubernetes.test.ts +11 -0
  386. package/examples/meteor-kubernetes.ts +4 -5
  387. package/examples/multiline-var.test.ts +11 -0
  388. package/examples/multiline-var.ts +107 -0
  389. package/examples/native-app.test.ts +11 -0
  390. package/examples/native-app.ts +22 -17
  391. package/examples/node-build-with-custom-image.test.ts +11 -0
  392. package/examples/node-build-with-custom-image.ts +5 -4
  393. package/examples/node-build-with-docker-additions.test.ts +11 -0
  394. package/examples/node-build-with-docker-additions.ts +29 -0
  395. package/examples/rails-k8s-with-worker-dockerfile.test.ts +33 -0
  396. package/examples/rails-k8s-with-worker.test.ts +11 -0
  397. package/examples/rails-k8s-with-worker.ts +14 -11
  398. package/examples/referencing-other-vars.test.ts +11 -0
  399. package/examples/referencing-other-vars.ts +83 -0
  400. package/examples/wait-for-other-deploy.test.ts +11 -0
  401. package/examples/wait-for-other-deploy.ts +5 -4
  402. package/examples/workspace-api-www-turbo-cache.test.ts +11 -0
  403. package/examples/workspace-api-www-turbo-cache.ts +52 -0
  404. package/examples/workspace-api-www.test.ts +11 -0
  405. package/examples/workspace-api-www.ts +46 -0
  406. package/package.json +75 -26
  407. package/scripts/generate-examples-test.ts +84 -0
  408. package/scripts/generate-gitlab-ci-types.ts +2 -2
  409. package/scripts/tsconfig.json +7 -0
  410. package/src/bash/BashExpression.ts +78 -0
  411. package/src/bash/bashEscape.ts +158 -0
  412. package/src/bash/bashExpressionPerPipelineType.ts +16 -0
  413. package/src/bash/bashYaml.ts +80 -0
  414. package/src/bash/getInjectVarsScript.ts +21 -0
  415. package/src/bash/index.ts +2 -0
  416. package/src/build/artifacts/createBuildJobArtifact.ts +61 -0
  417. package/src/build/base/__tests__/createArtifactsConfig.test.ts +3 -3
  418. package/src/build/base/constants.ts +2 -2
  419. package/src/build/base/createAppBuildJob.ts +40 -24
  420. package/src/build/base/createArtifactsConfig.ts +2 -2
  421. package/src/build/base/createBuildJobDefinition.ts +37 -0
  422. package/src/build/base/index.ts +37 -8
  423. package/src/build/base/writeBuildInfo.ts +3 -3
  424. package/src/build/base/writeDotEnv.ts +25 -6
  425. package/src/build/cache/createJobCache.ts +83 -0
  426. package/src/build/cache/getAllCacheConfigsFromConfig.ts +28 -0
  427. package/src/build/cache/transformLegacyJobCache.ts +14 -0
  428. package/src/build/custom/__tests__/testJob.test.ts +10 -13
  429. package/src/build/custom/buildJob.ts +11 -37
  430. package/src/build/custom/index.ts +2 -2
  431. package/src/build/custom/testJob.ts +24 -22
  432. package/src/build/docker.ts +145 -49
  433. package/src/build/index.ts +42 -10
  434. package/src/build/node/buildJob.ts +65 -62
  435. package/src/build/node/cache.ts +30 -35
  436. package/src/build/node/constants.ts +2 -3
  437. package/src/build/node/index.ts +8 -4
  438. package/src/build/node/meteor.ts +16 -24
  439. package/src/build/node/testJob.ts +47 -26
  440. package/src/build/node/yarn.ts +32 -16
  441. package/src/build/rails/build.ts +21 -9
  442. package/src/build/rails/index.ts +2 -2
  443. package/src/build/rails/test.ts +22 -12
  444. package/src/build/sbom.ts +15 -10
  445. package/src/build/types.ts +190 -47
  446. package/src/catladder-gitlab.ts +7 -56
  447. package/src/config/__tests__/__snapshots__/getAllEnvs.test.ts.snap +31 -0
  448. package/src/config/__tests__/__snapshots__/getAllEnvsInAllComponents.test.ts.snap +15 -0
  449. package/src/config/__tests__/getAllEnvs.test.ts +71 -0
  450. package/src/config/__tests__/getAllEnvsInAllComponents.test.ts +63 -0
  451. package/src/config/configruedEnvs.ts +6 -6
  452. package/src/config/readConfig.ts +15 -22
  453. package/src/constants.ts +5 -2
  454. package/src/context/createAllComponentsContext.ts +31 -0
  455. package/src/context/createComponentContext.ts +134 -0
  456. package/src/context/createWorkspaceContext.ts +56 -0
  457. package/src/context/getBuildInfoVariables.ts +36 -0
  458. package/src/context/getEnvConfig.ts +3 -3
  459. package/src/context/getEnvType.ts +1 -1
  460. package/src/context/getEnvironment.ts +8 -24
  461. package/src/context/getEnvironmentContext.ts +25 -29
  462. package/src/context/getEnvironmentVariables.ts +104 -76
  463. package/src/context/getLabels.ts +5 -5
  464. package/src/context/getReviewSlug.ts +27 -0
  465. package/src/context/index.ts +1 -65
  466. package/src/context/transformJobOnlyVars.ts +6 -3
  467. package/src/context/utils/envVars.ts +5 -4
  468. package/src/deploy/base/deploy.ts +63 -47
  469. package/src/deploy/base/index.ts +11 -6
  470. package/src/deploy/base/rollback.ts +11 -16
  471. package/src/deploy/base/stop.ts +11 -15
  472. package/src/deploy/base/variables.ts +1 -2
  473. package/src/deploy/cloudRun/artifactsRegistry.ts +126 -0
  474. package/src/deploy/cloudRun/cleanup.ts +30 -0
  475. package/src/deploy/cloudRun/cloudRunRevisions.ts +65 -0
  476. package/src/deploy/cloudRun/createJobs/cloudRunJobs.ts +227 -0
  477. package/src/deploy/cloudRun/createJobs/cloudRunServices.ts +86 -0
  478. package/src/deploy/cloudRun/createJobs/common.ts +59 -0
  479. package/src/deploy/cloudRun/createJobs/constants.ts +1 -0
  480. package/src/deploy/cloudRun/createJobs/getCloudRunDeployScripts.ts +71 -0
  481. package/src/deploy/cloudRun/createJobs/getCloudRunStopScripts.ts +34 -0
  482. package/src/deploy/cloudRun/createJobs/index.ts +51 -0
  483. package/src/deploy/cloudRun/createJobs/volumes.ts +23 -0
  484. package/src/deploy/cloudRun/index.ts +85 -59
  485. package/src/deploy/cloudRun/utils/createArgsString.ts +21 -13
  486. package/src/deploy/cloudRun/utils/database.ts +31 -9
  487. package/src/deploy/cloudRun/utils/gcloudServiceAccountLoginCommands.ts +9 -11
  488. package/src/deploy/cloudRun/utils/getServiceName.ts +3 -0
  489. package/src/deploy/cloudRun/utils/jobName.ts +7 -2
  490. package/src/deploy/cloudRun/utils/removeFirstLinesFromCommandOutput.ts +12 -0
  491. package/src/deploy/cloudSql/utils.ts +13 -10
  492. package/src/deploy/custom/deployJob.ts +15 -10
  493. package/src/deploy/custom/index.ts +2 -2
  494. package/src/deploy/dockerTag/deployJob.ts +7 -8
  495. package/src/deploy/dockerTag/index.ts +8 -7
  496. package/src/deploy/index.ts +15 -12
  497. package/src/deploy/kubernetes/additionalSecretKeys.ts +3 -1
  498. package/src/deploy/kubernetes/cloudSql/index.ts +16 -25
  499. package/src/deploy/kubernetes/deployJob.ts +30 -21
  500. package/src/deploy/kubernetes/index.ts +43 -35
  501. package/src/deploy/kubernetes/kubeEnv.ts +12 -10
  502. package/src/deploy/kubernetes/kubeValues.ts +15 -19
  503. package/src/deploy/kubernetes/mongodb.ts +15 -15
  504. package/src/deploy/sbom.ts +18 -10
  505. package/src/deploy/types/base.ts +3 -3
  506. package/src/deploy/types/custom.ts +3 -7
  507. package/src/deploy/types/dockerTag.ts +2 -0
  508. package/src/deploy/types/googleCloudRun.ts +133 -10
  509. package/src/deploy/types/index.ts +2 -2
  510. package/src/deploy/types/kubernetes.ts +5 -36
  511. package/src/deploy/utils.ts +5 -5
  512. package/src/globalScriptFunctions/index.ts +30 -0
  513. package/src/index.ts +4 -1
  514. package/src/packageInfos.ts +14 -0
  515. package/src/pipeline/__tests__/__snapshots__/getPipelineStages.test.ts.snap +69 -0
  516. package/src/pipeline/__tests__/getPipelineStages.test.ts +63 -0
  517. package/src/pipeline/createAllJobs.ts +67 -33
  518. package/src/pipeline/createJobsForComponent.ts +10 -38
  519. package/src/pipeline/createJobsForWorkspace.ts +12 -0
  520. package/src/pipeline/createMainPipeline.ts +119 -0
  521. package/src/pipeline/generatePipelineFiles.ts +100 -0
  522. package/src/pipeline/getPipelineStages.ts +23 -0
  523. package/src/pipeline/gitlab/createGitlabJobs.ts +388 -108
  524. package/src/pipeline/gitlab/createGitlabPipeline.ts +35 -0
  525. package/src/pipeline/gitlab/gitlabReleaseJobs.ts +23 -0
  526. package/src/pipeline/gitlab/sortGitLabJobDefProps.ts +59 -0
  527. package/src/pipeline/index.ts +2 -1
  528. package/src/pipeline/packageManager.ts +44 -26
  529. package/src/pipeline/yarn/yarnUtils.ts +39 -10
  530. package/src/rules/index.ts +36 -9
  531. package/src/runner/index.ts +0 -1
  532. package/src/types/config.ts +43 -16
  533. package/src/types/context.ts +165 -37
  534. package/src/types/environmentContext.ts +18 -13
  535. package/src/types/gitlab-ci-yml.ts +0 -1
  536. package/src/types/gitlab-types.ts +10 -7
  537. package/src/types/index.ts +1 -0
  538. package/src/types/jobDefinition.ts +34 -0
  539. package/src/types/jobs.ts +31 -15
  540. package/src/types/utils.ts +4 -4
  541. package/src/utils/gitlab.ts +20 -3
  542. package/src/utils/index.ts +6 -3
  543. package/src/utils/jsonParse.ts +7 -0
  544. package/src/utils/removeUndefined.ts +4 -0
  545. package/src/utils/writeFiles.ts +52 -0
  546. package/src/variables/VariableValue.ts +6 -0
  547. package/src/variables/VariableValueContainingReferences.ts +89 -0
  548. package/src/variables/__tests__/resolveAllReferences.test.ts +110 -0
  549. package/src/variables/__tests__/resolveAllReferencesOnce.test.ts +64 -0
  550. package/src/variables/__tests__/resolveReferencesOnce.test.ts +117 -0
  551. package/src/variables/__tests__/variableValue.test.ts +73 -0
  552. package/src/variables/resolveAllReferences.ts +46 -0
  553. package/src/variables/resolveAllReferencesOnce.ts +44 -0
  554. package/src/variables/resolveReferencesOnce.ts +29 -0
  555. package/bin/catladder-gitlab-dev.js +0 -3
  556. package/bin/catladder-gitlab.js +0 -3
  557. package/dist/bundles/catladder-gitlab/index.js +0 -33838
  558. package/dist/context/__tests__/resolveReferences.test.js +0 -336
  559. package/dist/context/resolveReferences.d.ts +0 -4
  560. package/dist/context/resolveReferences.js +0 -254
  561. package/dist/deploy/cloudRun/deployJob.d.ts +0 -3
  562. package/dist/deploy/cloudRun/deployJob.js +0 -248
  563. package/dist/deploy/kubernetes/processSecretsAsFiles.d.ts +0 -84
  564. package/dist/deploy/kubernetes/processSecretsAsFiles.js +0 -31
  565. package/dist/pipeline/commitInfo/getBuildId.d.ts +0 -6
  566. package/dist/pipeline/commitInfo/getCommitInfo.d.ts +0 -2
  567. package/dist/pipeline/createChildPipeline.d.ts +0 -3
  568. package/examples/__snapshots__/cloud-run-memory-limit.ts.snap +0 -1780
  569. package/examples/__snapshots__/cloud-run-no-cpu-throttling.ts.snap +0 -1780
  570. package/examples/__snapshots__/cloud-run-non-public.ts.snap +0 -1780
  571. package/examples/__snapshots__/cloud-run-with-sql-reuse-db.ts.snap +0 -3532
  572. package/examples/__snapshots__/cloud-run-with-sql.ts.snap +0 -3543
  573. package/examples/__snapshots__/custom-build-job-with-tests.ts.snap +0 -1656
  574. package/examples/__snapshots__/custom-build-job.ts.snap +0 -1362
  575. package/examples/__snapshots__/custom-deploy.ts.snap +0 -1556
  576. package/examples/__snapshots__/custom-envs.ts.snap +0 -1050
  577. package/examples/__snapshots__/custom-sbom-java.ts.snap +0 -1370
  578. package/examples/__snapshots__/kubernetes-application-customization.ts.snap +0 -2468
  579. package/examples/__snapshots__/kubernetes-with-cloud-sql-legacy.ts.snap +0 -2428
  580. package/examples/__snapshots__/kubernetes-with-cloud-sql.ts.snap +0 -2440
  581. package/examples/__snapshots__/kubernetes-with-jobs.ts.snap +0 -4453
  582. package/examples/__snapshots__/kubernetes-with-mongodb.ts.snap +0 -2632
  583. package/examples/__snapshots__/meteor-kubernetes.ts.snap +0 -2557
  584. package/examples/__snapshots__/native-app.ts.snap +0 -2878
  585. package/examples/__snapshots__/node-build-with-custom-image.ts.snap +0 -1780
  586. package/examples/__snapshots__/rails-k8s-with-worker.ts.snap +0 -4189
  587. package/examples/__snapshots__/wait-for-other-deploy.ts.snap +0 -1922
  588. package/examples/kubernetes-with-cloud-sql-legacy.ts +0 -33
  589. package/scripts/bundle +0 -2
  590. package/src/context/__tests__/resolveReferences.test.ts +0 -143
  591. package/src/context/resolveReferences.ts +0 -70
  592. package/src/deploy/cloudRun/deployJob.ts +0 -301
  593. package/src/deploy/kubernetes/processSecretsAsFiles.ts +0 -34
  594. package/src/pipeline/commitInfo/getBuildId.ts +0 -17
  595. package/src/pipeline/commitInfo/getCommitInfo.ts +0 -15
  596. package/src/pipeline/createChildPipeline.ts +0 -45
  597. /package/dist/{context/__tests__/resolveReferences.test.d.ts → config/__tests__/getAllEnvs.test.d.ts} +0 -0
@@ -1,4453 +0,0 @@
1
- // Jest Snapshot v1, https://goo.gl/fbAQLP
2
-
3
- exports[`matches snapshot 1`] = `
4
- {
5
- "mainBranch": {
6
- "image": "path/to/docker/jobs-default:the-version",
7
- "jobs": {
8
- "api ↩️ Rollback ⚠️ | dev ": {
9
- "environment": {
10
- "action": "access",
11
- "name": "dev/api",
12
- "url": "https://api.dev.test-app.pan.panter.cloud",
13
- },
14
- "image": "path/to/docker/kubernetes:the-version",
15
- "interruptible": true,
16
- "needs": [],
17
- "retry": {
18
- "max": 2,
19
- "when": [
20
- "runner_system_failure",
21
- "stuck_or_timeout_failure",
22
- ],
23
- },
24
- "rules": [
25
- {
26
- "allow_failure": true,
27
- "when": "manual",
28
- },
29
- ],
30
- "script": [
31
- "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
- "kubectl config set-credentials "kube-pan-test-app-dev-api" --token="$CL_dev_api_KUBE_TOKEN"",
33
- "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
- "kubectl config use-context "kube-pan-test-app-dev-api"",
35
- "kubernetesRollback",
36
- ],
37
- "stage": "rollback dev",
38
- "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
- "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
- "KUBERNETES_CPU_LIMIT": "1",
54
- "KUBERNETES_CPU_REQUEST": "0.5",
55
- "KUBERNETES_MEMORY_LIMIT": "400Mi",
56
- "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
- public:
64
- ENV_SHORT: 'dev'
65
- APP_DIR: 'api'
66
- ENV_TYPE: 'dev'
67
- BUILD_INFO_ID: 'some-id'
68
- BUILD_INFO_BUILD_TIME: '01-01-2023 12:13:14'
69
- BUILD_INFO_CURRENT_VERSION: '3.2.1'
70
- HOST: 'api.dev.test-app.pan.panter.cloud'
71
- ROOT_URL: 'https://api.dev.test-app.pan.panter.cloud'
72
- KUBE_NAMESPACE: 'pan-test-app-dev'
73
- KUBE_APP_NAME: 'api'
74
- KUBE_APP_NAME_PREFIX: ''
75
- HOST_CANONICAL: 'api.dev.test-app.pan.panter.cloud'
76
- _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","KUBE_NAMESPACE","KUBE_APP_NAME","KUBE_APP_NAME_PREFIX","HOST_CANONICAL"]'
77
- application:
78
- host: 'api.dev.test-app.pan.panter.cloud'
79
- command: 'yarn start'
80
- livenessProbe:
81
- httpGet:
82
- path: '__health'
83
- readinessProbe:
84
- httpGet:
85
- path: '__health'
86
- startupProbe:
87
- httpGet:
88
- path: '__health'
89
- jobs:
90
- migration:
91
- command: 'yarn migrate'
92
- cronjobs:
93
- send-emails:
94
- command: 'yarn send emails'
95
- schedule: '0 * * * *'
96
- ",
97
- "RELEASE_NAME": "pan-test-app-dev-api",
98
- "ROOT_URL": "https://api.dev.test-app.pan.panter.cloud",
99
- "_ALL_ENV_VAR_KEYS": "["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","KUBE_NAMESPACE","KUBE_APP_NAME","KUBE_APP_NAME_PREFIX","HOST_CANONICAL"]",
100
- },
101
- },
102
- "api 👮 lint": {
103
- "cache": [
104
- {
105
- "key": "api-yarn",
106
- "paths": [
107
- "api/.yarn",
108
- ],
109
- "policy": "pull-push",
110
- },
111
- {
112
- "key": "api-node-modules",
113
- "paths": [
114
- "api/node_modules",
115
- ],
116
- "policy": "pull-push",
117
- },
118
- ],
119
- "image": "path/to/docker/jobs-default:the-version",
120
- "interruptible": true,
121
- "needs": [],
122
- "retry": {
123
- "max": 2,
124
- "when": [
125
- "runner_system_failure",
126
- "stuck_or_timeout_failure",
127
- ],
128
- },
129
- "script": [
130
- "cd api",
131
- "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
132
- "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
133
- "yarn install --immutable",
134
- "yarn lint",
135
- ],
136
- "stage": "test",
137
- "variables": {
138
- "APP_PATH": "api",
139
- "KUBERNETES_CPU_LIMIT": "2",
140
- "KUBERNETES_CPU_REQUEST": "0.5",
141
- "KUBERNETES_MEMORY_LIMIT": "4Gi",
142
- "KUBERNETES_MEMORY_REQUEST": "2Gi",
143
- },
144
- },
145
- "api 🔨 app | dev ": {
146
- "artifacts": {
147
- "expire_in": "1 day",
148
- "paths": [
149
- "api/__build_info.json",
150
- "api/dist",
151
- "api/.next",
152
- ],
153
- "reports": {
154
- "junit": undefined,
155
- },
156
- },
157
- "cache": [
158
- {
159
- "key": "api-yarn",
160
- "paths": [
161
- "api/.yarn",
162
- ],
163
- "policy": "pull-push",
164
- },
165
- {
166
- "key": "api-node-modules",
167
- "paths": [
168
- "api/node_modules",
169
- ],
170
- "policy": "pull-push",
171
- },
172
- {
173
- "key": "api-next-cache",
174
- "paths": [
175
- "api/.next/cache/",
176
- ],
177
- "policy": "pull-push",
178
- },
179
- ],
180
- "image": "path/to/docker/jobs-default:the-version",
181
- "interruptible": true,
182
- "needs": [],
183
- "retry": {
184
- "max": 2,
185
- "when": [
186
- "runner_system_failure",
187
- "stuck_or_timeout_failure",
188
- ],
189
- },
190
- "script": [
191
- "echo '{"id":"some-id","time":"01-01-2023 12:13:14"}' > api/__build_info.json",
192
- "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
193
- "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
194
- "cd api",
195
- "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
196
- "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
197
- "yarn install --immutable",
198
- "yarn build",
199
- ],
200
- "stage": "build",
201
- "variables": {
202
- "APP_DIR": "api",
203
- "BUILD_INFO_BUILD_TIME": "01-01-2023 12:13:14",
204
- "BUILD_INFO_CURRENT_VERSION": "3.2.1",
205
- "BUILD_INFO_ID": "some-id",
206
- "ENV_SHORT": "dev",
207
- "ENV_TYPE": "dev",
208
- "HOST": "api.dev.test-app.pan.panter.cloud",
209
- "HOST_CANONICAL": "api.dev.test-app.pan.panter.cloud",
210
- "KUBERNETES_CPU_LIMIT": "2",
211
- "KUBERNETES_CPU_REQUEST": "0.5",
212
- "KUBERNETES_MEMORY_LIMIT": "4Gi",
213
- "KUBERNETES_MEMORY_REQUEST": "2Gi",
214
- "KUBE_APP_NAME": "api",
215
- "KUBE_APP_NAME_PREFIX": "",
216
- "KUBE_NAMESPACE": "pan-test-app-dev",
217
- "ROOT_URL": "https://api.dev.test-app.pan.panter.cloud",
218
- "_ALL_ENV_VAR_KEYS": "["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","KUBE_NAMESPACE","KUBE_APP_NAME","KUBE_APP_NAME_PREFIX","HOST_CANONICAL"]",
219
- },
220
- },
221
- "api 🔨 docker | dev ": {
222
- "cache": [
223
- {
224
- "key": "api-yarn",
225
- "paths": [
226
- "api/.yarn",
227
- ],
228
- "policy": "pull",
229
- },
230
- ],
231
- "image": "path/to/docker/docker-build:the-version",
232
- "interruptible": true,
233
- "needs": [
234
- "api 🔨 app | dev ",
235
- ],
236
- "retry": {
237
- "max": 2,
238
- "when": [
239
- "runner_system_failure",
240
- "stuck_or_timeout_failure",
241
- ],
242
- },
243
- "script": [
244
- "ensureNodeDockerfile",
245
- "docker login --username gitlab-ci-token --password $CI_JOB_TOKEN $CI_REGISTRY",
246
- "docker version",
247
- "docker build --network host --cache-from $DOCKER_CACHE_IMAGE --tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG -f $APP_DIR/Dockerfile . --build-arg BUILDKIT_INLINE_CACHE=1",
248
- "docker push $DOCKER_IMAGE:$DOCKER_IMAGE_TAG",
249
- "docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG $DOCKER_CACHE_IMAGE",
250
- "docker push $DOCKER_CACHE_IMAGE",
251
- ],
252
- "services": [
253
- {
254
- "command": [
255
- "--tls=false",
256
- ],
257
- "name": "docker:20-dind",
258
- },
259
- ],
260
- "stage": "build",
261
- "variables": {
262
- "APP_DIR": "api",
263
- "DOCKERFILE_ADDITIONS": undefined,
264
- "DOCKERFILE_ADDITIONS_END": undefined,
265
- "DOCKER_BUILDKIT": "1",
266
- "DOCKER_CACHE_IMAGE": "$DOCKER_REGISTRY_IMAGE_PATH/caches/api",
267
- "DOCKER_COPY_AND_INSTALL_APP": "COPY --chown=node:node $APP_DIR .
268
- RUN yarn plugin import workspace-tools
269
- RUN yarn workspaces focus --production && yarn rebuild",
270
- "DOCKER_COPY_WORKSPACE_FILES": "COPY --chown=node:node api/package.json /app/api/package.json
271
- COPY --chown=node:node api/yarn.lock /app/api/yarn.lock
272
- COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
273
- COPY --chown=node:node .yarn /app/.yarn",
274
- "DOCKER_DIR": ".",
275
- "DOCKER_DRIVER": "overlay2",
276
- "DOCKER_HOST": "tcp://0.0.0.0:2375",
277
- "DOCKER_IMAGE": "$DOCKER_REGISTRY_IMAGE_PATH/$DOCKER_IMAGE_NAME",
278
- "DOCKER_IMAGE_NAME": "dev/api",
279
- "DOCKER_IMAGE_TAG": "$CI_COMMIT_SHA",
280
- "DOCKER_REGISTRY": "$CI_REGISTRY",
281
- "DOCKER_REGISTRY_IMAGE_PATH": "$CI_REGISTRY_IMAGE",
282
- "DOCKER_TLS_CERTDIR": "",
283
- "KUBERNETES_CPU_LIMIT": "1",
284
- "KUBERNETES_CPU_REQUEST": "0.5",
285
- "KUBERNETES_MEMORY_LIMIT": "2Gi",
286
- "KUBERNETES_MEMORY_REQUEST": "1Gi",
287
- },
288
- },
289
- "api 🚀 Deploy | dev ": {
290
- "allow_failure": false,
291
- "environment": {
292
- "auto_stop_in": "4 weeks",
293
- "name": "dev/api",
294
- "on_stop": "api 🛑 Stop ⚠️ | dev ",
295
- "url": "https://api.dev.test-app.pan.panter.cloud",
296
- },
297
- "image": "path/to/docker/kubernetes:the-version",
298
- "interruptible": true,
299
- "needs": [
300
- {
301
- "artifacts": false,
302
- "job": "api 👮 lint",
303
- },
304
- {
305
- "artifacts": false,
306
- "job": "api 🔨 app | dev ",
307
- },
308
- {
309
- "artifacts": false,
310
- "job": "api 🔨 docker | dev ",
311
- },
312
- {
313
- "artifacts": false,
314
- "job": "api 🧪 test",
315
- },
316
- {
317
- "artifacts": true,
318
- "job": "api 🧾 sbom | dev ",
319
- },
320
- {
321
- "artifacts": false,
322
- "job": "api 🛡 audit",
323
- },
324
- ],
325
- "retry": {
326
- "max": 2,
327
- "when": [
328
- "runner_system_failure",
329
- "stuck_or_timeout_failure",
330
- ],
331
- },
332
- "rules": [
333
- {
334
- "when": "on_success",
335
- },
336
- ],
337
- "script": [
338
- "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",
339
- "kubectl config set-credentials "kube-pan-test-app-dev-api" --token="$CL_dev_api_KUBE_TOKEN"",
340
- "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"",
341
- "kubectl config use-context "kube-pan-test-app-dev-api"",
342
- "kubernetesCreateSecret",
343
- "kubernetesDeploy",
344
- "echo Uploading SBOM to Dependency Track",
345
- "/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",
346
- "echo deployment successful 😻",
347
- ],
348
- "stage": "deploy dev",
349
- "variables": {
350
- "APP_DIR": "api",
351
- "BUILD_ID": "some-id",
352
- "BUILD_INFO_BUILD_TIME": "01-01-2023 12:13:14",
353
- "BUILD_INFO_CURRENT_VERSION": "3.2.1",
354
- "BUILD_INFO_ID": "some-id",
355
- "COMPONENT_NAME": "api",
356
- "DOCKER_CACHE_IMAGE": "$DOCKER_REGISTRY_IMAGE_PATH/caches/api",
357
- "DOCKER_IMAGE": "$DOCKER_REGISTRY_IMAGE_PATH/$DOCKER_IMAGE_NAME",
358
- "DOCKER_IMAGE_NAME": "dev/api",
359
- "DOCKER_IMAGE_TAG": "$CI_COMMIT_SHA",
360
- "DOCKER_REGISTRY": "$CI_REGISTRY",
361
- "DOCKER_REGISTRY_IMAGE_PATH": "$CI_REGISTRY_IMAGE",
362
- "ENV_SHORT": "dev",
363
- "ENV_TYPE": "dev",
364
- "HELM_ARGS": "",
365
- "HELM_EXPERIMENTAL_OCI": "1",
366
- "HELM_GITLAB_CHART_NAME": "/helm-charts/the-panter-chart",
367
- "HOST": "api.dev.test-app.pan.panter.cloud",
368
- "HOST_CANONICAL": "api.dev.test-app.pan.panter.cloud",
369
- "KUBERNETES_CPU_LIMIT": "1",
370
- "KUBERNETES_CPU_REQUEST": "0.5",
371
- "KUBERNETES_MEMORY_LIMIT": "400Mi",
372
- "KUBERNETES_MEMORY_REQUEST": "200Mi",
373
- "KUBE_APP_NAME": "api",
374
- "KUBE_APP_NAME_PREFIX": "",
375
- "KUBE_DOCKER_IMAGE_PULL_SECRET": "gitlab-registry-api",
376
- "KUBE_NAMESPACE": "pan-test-app-dev",
377
- "KUBE_VALUES": "env:
378
- secret: {}
379
- public:
380
- ENV_SHORT: 'dev'
381
- APP_DIR: 'api'
382
- ENV_TYPE: 'dev'
383
- BUILD_INFO_ID: 'some-id'
384
- BUILD_INFO_BUILD_TIME: '01-01-2023 12:13:14'
385
- BUILD_INFO_CURRENT_VERSION: '3.2.1'
386
- HOST: 'api.dev.test-app.pan.panter.cloud'
387
- ROOT_URL: 'https://api.dev.test-app.pan.panter.cloud'
388
- KUBE_NAMESPACE: 'pan-test-app-dev'
389
- KUBE_APP_NAME: 'api'
390
- KUBE_APP_NAME_PREFIX: ''
391
- HOST_CANONICAL: 'api.dev.test-app.pan.panter.cloud'
392
- _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","KUBE_NAMESPACE","KUBE_APP_NAME","KUBE_APP_NAME_PREFIX","HOST_CANONICAL"]'
393
- application:
394
- host: 'api.dev.test-app.pan.panter.cloud'
395
- command: 'yarn start'
396
- livenessProbe:
397
- httpGet:
398
- path: '__health'
399
- readinessProbe:
400
- httpGet:
401
- path: '__health'
402
- startupProbe:
403
- httpGet:
404
- path: '__health'
405
- jobs:
406
- migration:
407
- command: 'yarn migrate'
408
- cronjobs:
409
- send-emails:
410
- command: 'yarn send emails'
411
- schedule: '0 * * * *'
412
- ",
413
- "RELEASE_NAME": "pan-test-app-dev-api",
414
- "ROOT_URL": "https://api.dev.test-app.pan.panter.cloud",
415
- "_ALL_ENV_VAR_KEYS": "["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","KUBE_NAMESPACE","KUBE_APP_NAME","KUBE_APP_NAME_PREFIX","HOST_CANONICAL"]",
416
- },
417
- },
418
- "api 🛑 Stop ⚠️ | dev ": {
419
- "environment": {
420
- "action": "stop",
421
- "name": "dev/api",
422
- "url": "https://api.dev.test-app.pan.panter.cloud",
423
- },
424
- "image": "path/to/docker/kubernetes:the-version",
425
- "interruptible": true,
426
- "needs": [],
427
- "retry": {
428
- "max": 2,
429
- "when": [
430
- "runner_system_failure",
431
- "stuck_or_timeout_failure",
432
- ],
433
- },
434
- "rules": [
435
- {
436
- "allow_failure": true,
437
- "if": "$CI_COMMIT_BRANCH =~ /^[0-9]+\\.([0-9]+|x)\\.x$/",
438
- "when": "on_success",
439
- },
440
- {
441
- "allow_failure": true,
442
- "when": "manual",
443
- },
444
- ],
445
- "script": [
446
- "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",
447
- "kubectl config set-credentials "kube-pan-test-app-dev-api" --token="$CL_dev_api_KUBE_TOKEN"",
448
- "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"",
449
- "kubectl config use-context "kube-pan-test-app-dev-api"",
450
- "kubernetesDelete",
451
- "echo Disabling component in Dependency Track",
452
- "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" disable "pan-test-app/api" "https://api.dev.test-app.pan.panter.cloud" || true",
453
- ],
454
- "stage": "stop dev",
455
- "variables": {
456
- "APP_DIR": "api",
457
- "BUILD_ID": "some-id",
458
- "BUILD_INFO_BUILD_TIME": "01-01-2023 12:13:14",
459
- "BUILD_INFO_CURRENT_VERSION": "3.2.1",
460
- "BUILD_INFO_ID": "some-id",
461
- "COMPONENT_NAME": "api",
462
- "ENV_SHORT": "dev",
463
- "ENV_TYPE": "dev",
464
- "GIT_STRATEGY": "none",
465
- "HELM_ARGS": "",
466
- "HELM_EXPERIMENTAL_OCI": "1",
467
- "HELM_GITLAB_CHART_NAME": "/helm-charts/the-panter-chart",
468
- "HOST": "api.dev.test-app.pan.panter.cloud",
469
- "HOST_CANONICAL": "api.dev.test-app.pan.panter.cloud",
470
- "KUBERNETES_CPU_LIMIT": "1",
471
- "KUBERNETES_CPU_REQUEST": "0.5",
472
- "KUBERNETES_MEMORY_LIMIT": "400Mi",
473
- "KUBERNETES_MEMORY_REQUEST": "200Mi",
474
- "KUBE_APP_NAME": "api",
475
- "KUBE_APP_NAME_PREFIX": "",
476
- "KUBE_DOCKER_IMAGE_PULL_SECRET": "gitlab-registry-api",
477
- "KUBE_NAMESPACE": "pan-test-app-dev",
478
- "KUBE_VALUES": "env:
479
- secret: {}
480
- public:
481
- ENV_SHORT: 'dev'
482
- APP_DIR: 'api'
483
- ENV_TYPE: 'dev'
484
- BUILD_INFO_ID: 'some-id'
485
- BUILD_INFO_BUILD_TIME: '01-01-2023 12:13:14'
486
- BUILD_INFO_CURRENT_VERSION: '3.2.1'
487
- HOST: 'api.dev.test-app.pan.panter.cloud'
488
- ROOT_URL: 'https://api.dev.test-app.pan.panter.cloud'
489
- KUBE_NAMESPACE: 'pan-test-app-dev'
490
- KUBE_APP_NAME: 'api'
491
- KUBE_APP_NAME_PREFIX: ''
492
- HOST_CANONICAL: 'api.dev.test-app.pan.panter.cloud'
493
- _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","KUBE_NAMESPACE","KUBE_APP_NAME","KUBE_APP_NAME_PREFIX","HOST_CANONICAL"]'
494
- application:
495
- host: 'api.dev.test-app.pan.panter.cloud'
496
- command: 'yarn start'
497
- livenessProbe:
498
- httpGet:
499
- path: '__health'
500
- readinessProbe:
501
- httpGet:
502
- path: '__health'
503
- startupProbe:
504
- httpGet:
505
- path: '__health'
506
- jobs:
507
- migration:
508
- command: 'yarn migrate'
509
- cronjobs:
510
- send-emails:
511
- command: 'yarn send emails'
512
- schedule: '0 * * * *'
513
- ",
514
- "RELEASE_NAME": "pan-test-app-dev-api",
515
- "ROOT_URL": "https://api.dev.test-app.pan.panter.cloud",
516
- "_ALL_ENV_VAR_KEYS": "["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","KUBE_NAMESPACE","KUBE_APP_NAME","KUBE_APP_NAME_PREFIX","HOST_CANONICAL"]",
517
- },
518
- },
519
- "api 🛡 audit": {
520
- "allow_failure": true,
521
- "image": "path/to/docker/jobs-default:the-version",
522
- "interruptible": true,
523
- "needs": [],
524
- "retry": {
525
- "max": 2,
526
- "when": [
527
- "runner_system_failure",
528
- "stuck_or_timeout_failure",
529
- ],
530
- },
531
- "script": [
532
- "cd api",
533
- "yarn npm audit --environment production",
534
- ],
535
- "stage": "test",
536
- "variables": {
537
- "APP_PATH": "api",
538
- "KUBERNETES_CPU_LIMIT": "2",
539
- "KUBERNETES_CPU_REQUEST": "0.5",
540
- "KUBERNETES_MEMORY_LIMIT": "4Gi",
541
- "KUBERNETES_MEMORY_REQUEST": "2Gi",
542
- },
543
- },
544
- "api 🧪 test": {
545
- "cache": [
546
- {
547
- "key": "api-yarn",
548
- "paths": [
549
- "api/.yarn",
550
- ],
551
- "policy": "pull-push",
552
- },
553
- {
554
- "key": "api-node-modules",
555
- "paths": [
556
- "api/node_modules",
557
- ],
558
- "policy": "pull-push",
559
- },
560
- ],
561
- "image": "path/to/docker/jobs-testing-chrome:the-version",
562
- "interruptible": true,
563
- "needs": [],
564
- "retry": {
565
- "max": 2,
566
- "when": [
567
- "runner_system_failure",
568
- "stuck_or_timeout_failure",
569
- ],
570
- },
571
- "script": [
572
- "cd api",
573
- "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
574
- "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
575
- "yarn install --immutable",
576
- "yarn test",
577
- ],
578
- "stage": "test",
579
- "variables": {
580
- "APP_PATH": "api",
581
- "KUBERNETES_CPU_LIMIT": "2",
582
- "KUBERNETES_CPU_REQUEST": "0.5",
583
- "KUBERNETES_MEMORY_LIMIT": "4Gi",
584
- "KUBERNETES_MEMORY_REQUEST": "2Gi",
585
- },
586
- },
587
- "api 🧾 sbom | dev ": {
588
- "allow_failure": true,
589
- "artifacts": {
590
- "paths": [
591
- "__sbom.json",
592
- ],
593
- },
594
- "image": "aquasec/trivy:0.38.3",
595
- "interruptible": true,
596
- "needs": [],
597
- "retry": {
598
- "max": 2,
599
- "when": [
600
- "runner_system_failure",
601
- "stuck_or_timeout_failure",
602
- ],
603
- },
604
- "script": [
605
- "trivy fs --quiet --format cyclonedx --output "__sbom.json" api",
606
- ],
607
- "stage": "build",
608
- "variables": {},
609
- },
610
- "www ↩️ Rollback ⚠️ | dev ": {
611
- "environment": {
612
- "action": "access",
613
- "name": "dev/www",
614
- "url": "https://www.dev.test-app.pan.panter.cloud",
615
- },
616
- "image": "path/to/docker/kubernetes:the-version",
617
- "interruptible": true,
618
- "needs": [],
619
- "retry": {
620
- "max": 2,
621
- "when": [
622
- "runner_system_failure",
623
- "stuck_or_timeout_failure",
624
- ],
625
- },
626
- "rules": [
627
- {
628
- "allow_failure": true,
629
- "when": "manual",
630
- },
631
- ],
632
- "script": [
633
- "kubectl config set-cluster "kube-pan-test-app-dev-www" --server="$CL_dev_www_KUBE_URL" --certificate-authority <(echo $CL_dev_www_KUBE_CA_PEM | base64 -d) --embed-certs=true",
634
- "kubectl config set-credentials "kube-pan-test-app-dev-www" --token="$CL_dev_www_KUBE_TOKEN"",
635
- "kubectl config set-context "kube-pan-test-app-dev-www" --cluster="kube-pan-test-app-dev-www" --user="kube-pan-test-app-dev-www" --namespace="pan-test-app-dev"",
636
- "kubectl config use-context "kube-pan-test-app-dev-www"",
637
- "kubernetesRollback",
638
- ],
639
- "stage": "rollback dev",
640
- "variables": {
641
- "APP_DIR": "www",
642
- "BUILD_ID": "some-id",
643
- "BUILD_INFO_BUILD_TIME": "01-01-2023 12:13:14",
644
- "BUILD_INFO_CURRENT_VERSION": "3.2.1",
645
- "BUILD_INFO_ID": "some-id",
646
- "COMPONENT_NAME": "www",
647
- "ENV_SHORT": "dev",
648
- "ENV_TYPE": "dev",
649
- "GIT_STRATEGY": "none",
650
- "HELM_ARGS": "",
651
- "HELM_EXPERIMENTAL_OCI": "1",
652
- "HELM_GITLAB_CHART_NAME": "/helm-charts/the-panter-chart",
653
- "HOST": "www.dev.test-app.pan.panter.cloud",
654
- "HOST_CANONICAL": "www.dev.test-app.pan.panter.cloud",
655
- "KUBERNETES_CPU_LIMIT": "1",
656
- "KUBERNETES_CPU_REQUEST": "0.5",
657
- "KUBERNETES_MEMORY_LIMIT": "400Mi",
658
- "KUBERNETES_MEMORY_REQUEST": "200Mi",
659
- "KUBE_APP_NAME": "www",
660
- "KUBE_APP_NAME_PREFIX": "",
661
- "KUBE_DOCKER_IMAGE_PULL_SECRET": "gitlab-registry-www",
662
- "KUBE_NAMESPACE": "pan-test-app-dev",
663
- "KUBE_VALUES": "env:
664
- secret: {}
665
- public:
666
- ENV_SHORT: 'dev'
667
- APP_DIR: 'www'
668
- ENV_TYPE: 'dev'
669
- BUILD_INFO_ID: 'some-id'
670
- BUILD_INFO_BUILD_TIME: '01-01-2023 12:13:14'
671
- BUILD_INFO_CURRENT_VERSION: '3.2.1'
672
- HOST: 'www.dev.test-app.pan.panter.cloud'
673
- ROOT_URL: 'https://www.dev.test-app.pan.panter.cloud'
674
- KUBE_NAMESPACE: 'pan-test-app-dev'
675
- KUBE_APP_NAME: 'www'
676
- KUBE_APP_NAME_PREFIX: ''
677
- HOST_CANONICAL: 'www.dev.test-app.pan.panter.cloud'
678
- _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","KUBE_NAMESPACE","KUBE_APP_NAME","KUBE_APP_NAME_PREFIX","HOST_CANONICAL"]'
679
- application:
680
- host: 'www.dev.test-app.pan.panter.cloud'
681
- command: 'yarn start'
682
- livenessProbe:
683
- httpGet:
684
- path: '__health'
685
- readinessProbe:
686
- httpGet:
687
- path: '__health'
688
- startupProbe:
689
- httpGet:
690
- path: '__health'
691
- ",
692
- "RELEASE_NAME": "pan-test-app-dev-www",
693
- "ROOT_URL": "https://www.dev.test-app.pan.panter.cloud",
694
- "_ALL_ENV_VAR_KEYS": "["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","KUBE_NAMESPACE","KUBE_APP_NAME","KUBE_APP_NAME_PREFIX","HOST_CANONICAL"]",
695
- },
696
- },
697
- "www 👮 lint": {
698
- "cache": [
699
- {
700
- "key": "www-yarn",
701
- "paths": [
702
- "www/.yarn",
703
- ],
704
- "policy": "pull-push",
705
- },
706
- {
707
- "key": "www-node-modules",
708
- "paths": [
709
- "www/node_modules",
710
- ],
711
- "policy": "pull-push",
712
- },
713
- ],
714
- "image": "path/to/docker/jobs-default:the-version",
715
- "interruptible": true,
716
- "needs": [],
717
- "retry": {
718
- "max": 2,
719
- "when": [
720
- "runner_system_failure",
721
- "stuck_or_timeout_failure",
722
- ],
723
- },
724
- "script": [
725
- "cd www",
726
- "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
727
- "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
728
- "yarn install --immutable",
729
- "yarn lint",
730
- ],
731
- "stage": "test",
732
- "variables": {
733
- "APP_PATH": "www",
734
- "KUBERNETES_CPU_LIMIT": "2",
735
- "KUBERNETES_CPU_REQUEST": "0.5",
736
- "KUBERNETES_MEMORY_LIMIT": "4Gi",
737
- "KUBERNETES_MEMORY_REQUEST": "2Gi",
738
- },
739
- },
740
- "www 🔨 app | dev ": {
741
- "artifacts": {
742
- "expire_in": "1 day",
743
- "paths": [
744
- "www/__build_info.json",
745
- "www/dist",
746
- "www/.next",
747
- ],
748
- "reports": {
749
- "junit": undefined,
750
- },
751
- },
752
- "cache": [
753
- {
754
- "key": "www-yarn",
755
- "paths": [
756
- "www/.yarn",
757
- ],
758
- "policy": "pull-push",
759
- },
760
- {
761
- "key": "www-node-modules",
762
- "paths": [
763
- "www/node_modules",
764
- ],
765
- "policy": "pull-push",
766
- },
767
- {
768
- "key": "www-next-cache",
769
- "paths": [
770
- "www/.next/cache/",
771
- ],
772
- "policy": "pull-push",
773
- },
774
- ],
775
- "image": "path/to/docker/jobs-default:the-version",
776
- "interruptible": true,
777
- "needs": [],
778
- "retry": {
779
- "max": 2,
780
- "when": [
781
- "runner_system_failure",
782
- "stuck_or_timeout_failure",
783
- ],
784
- },
785
- "script": [
786
- "echo '{"id":"some-id","time":"01-01-2023 12:13:14"}' > www/__build_info.json",
787
- "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
788
- "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
789
- "cd www",
790
- "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
791
- "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
792
- "yarn install --immutable",
793
- "yarn build",
794
- ],
795
- "stage": "build",
796
- "variables": {
797
- "APP_DIR": "www",
798
- "BUILD_INFO_BUILD_TIME": "01-01-2023 12:13:14",
799
- "BUILD_INFO_CURRENT_VERSION": "3.2.1",
800
- "BUILD_INFO_ID": "some-id",
801
- "ENV_SHORT": "dev",
802
- "ENV_TYPE": "dev",
803
- "HOST": "www.dev.test-app.pan.panter.cloud",
804
- "HOST_CANONICAL": "www.dev.test-app.pan.panter.cloud",
805
- "KUBERNETES_CPU_LIMIT": "2",
806
- "KUBERNETES_CPU_REQUEST": "0.5",
807
- "KUBERNETES_MEMORY_LIMIT": "4Gi",
808
- "KUBERNETES_MEMORY_REQUEST": "2Gi",
809
- "KUBE_APP_NAME": "www",
810
- "KUBE_APP_NAME_PREFIX": "",
811
- "KUBE_NAMESPACE": "pan-test-app-dev",
812
- "ROOT_URL": "https://www.dev.test-app.pan.panter.cloud",
813
- "_ALL_ENV_VAR_KEYS": "["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","KUBE_NAMESPACE","KUBE_APP_NAME","KUBE_APP_NAME_PREFIX","HOST_CANONICAL"]",
814
- },
815
- },
816
- "www 🔨 docker | dev ": {
817
- "cache": [
818
- {
819
- "key": "www-yarn",
820
- "paths": [
821
- "www/.yarn",
822
- ],
823
- "policy": "pull",
824
- },
825
- ],
826
- "image": "path/to/docker/docker-build:the-version",
827
- "interruptible": true,
828
- "needs": [
829
- "www 🔨 app | dev ",
830
- ],
831
- "retry": {
832
- "max": 2,
833
- "when": [
834
- "runner_system_failure",
835
- "stuck_or_timeout_failure",
836
- ],
837
- },
838
- "script": [
839
- "ensureNodeDockerfile",
840
- "docker login --username gitlab-ci-token --password $CI_JOB_TOKEN $CI_REGISTRY",
841
- "docker version",
842
- "docker build --network host --cache-from $DOCKER_CACHE_IMAGE --tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG -f $APP_DIR/Dockerfile . --build-arg BUILDKIT_INLINE_CACHE=1",
843
- "docker push $DOCKER_IMAGE:$DOCKER_IMAGE_TAG",
844
- "docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG $DOCKER_CACHE_IMAGE",
845
- "docker push $DOCKER_CACHE_IMAGE",
846
- ],
847
- "services": [
848
- {
849
- "command": [
850
- "--tls=false",
851
- ],
852
- "name": "docker:20-dind",
853
- },
854
- ],
855
- "stage": "build",
856
- "variables": {
857
- "APP_DIR": "www",
858
- "DOCKERFILE_ADDITIONS": undefined,
859
- "DOCKERFILE_ADDITIONS_END": undefined,
860
- "DOCKER_BUILDKIT": "1",
861
- "DOCKER_CACHE_IMAGE": "$DOCKER_REGISTRY_IMAGE_PATH/caches/www",
862
- "DOCKER_COPY_AND_INSTALL_APP": "COPY --chown=node:node $APP_DIR .
863
- RUN yarn plugin import workspace-tools
864
- RUN yarn workspaces focus --production && yarn rebuild",
865
- "DOCKER_COPY_WORKSPACE_FILES": "COPY --chown=node:node www/package.json /app/www/package.json
866
- COPY --chown=node:node www/yarn.lock /app/www/yarn.lock
867
- COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
868
- COPY --chown=node:node .yarn /app/.yarn",
869
- "DOCKER_DIR": ".",
870
- "DOCKER_DRIVER": "overlay2",
871
- "DOCKER_HOST": "tcp://0.0.0.0:2375",
872
- "DOCKER_IMAGE": "$DOCKER_REGISTRY_IMAGE_PATH/$DOCKER_IMAGE_NAME",
873
- "DOCKER_IMAGE_NAME": "dev/www",
874
- "DOCKER_IMAGE_TAG": "$CI_COMMIT_SHA",
875
- "DOCKER_REGISTRY": "$CI_REGISTRY",
876
- "DOCKER_REGISTRY_IMAGE_PATH": "$CI_REGISTRY_IMAGE",
877
- "DOCKER_TLS_CERTDIR": "",
878
- "KUBERNETES_CPU_LIMIT": "1",
879
- "KUBERNETES_CPU_REQUEST": "0.5",
880
- "KUBERNETES_MEMORY_LIMIT": "2Gi",
881
- "KUBERNETES_MEMORY_REQUEST": "1Gi",
882
- },
883
- },
884
- "www 🚀 Deploy | dev ": {
885
- "allow_failure": false,
886
- "environment": {
887
- "auto_stop_in": "4 weeks",
888
- "name": "dev/www",
889
- "on_stop": "www 🛑 Stop ⚠️ | dev ",
890
- "url": "https://www.dev.test-app.pan.panter.cloud",
891
- },
892
- "image": "path/to/docker/kubernetes:the-version",
893
- "interruptible": true,
894
- "needs": [
895
- {
896
- "artifacts": false,
897
- "job": "www 👮 lint",
898
- },
899
- {
900
- "artifacts": false,
901
- "job": "www 🔨 app | dev ",
902
- },
903
- {
904
- "artifacts": false,
905
- "job": "www 🔨 docker | dev ",
906
- },
907
- {
908
- "artifacts": false,
909
- "job": "www 🧪 test",
910
- },
911
- {
912
- "artifacts": true,
913
- "job": "www 🧾 sbom | dev ",
914
- },
915
- {
916
- "artifacts": false,
917
- "job": "www 🛡 audit",
918
- },
919
- ],
920
- "retry": {
921
- "max": 2,
922
- "when": [
923
- "runner_system_failure",
924
- "stuck_or_timeout_failure",
925
- ],
926
- },
927
- "rules": [
928
- {
929
- "when": "on_success",
930
- },
931
- ],
932
- "script": [
933
- "kubectl config set-cluster "kube-pan-test-app-dev-www" --server="$CL_dev_www_KUBE_URL" --certificate-authority <(echo $CL_dev_www_KUBE_CA_PEM | base64 -d) --embed-certs=true",
934
- "kubectl config set-credentials "kube-pan-test-app-dev-www" --token="$CL_dev_www_KUBE_TOKEN"",
935
- "kubectl config set-context "kube-pan-test-app-dev-www" --cluster="kube-pan-test-app-dev-www" --user="kube-pan-test-app-dev-www" --namespace="pan-test-app-dev"",
936
- "kubectl config use-context "kube-pan-test-app-dev-www"",
937
- "kubernetesCreateSecret",
938
- "kubernetesDeploy",
939
- "echo Uploading SBOM to Dependency Track",
940
- "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/www" "https://www.dev.test-app.pan.panter.cloud" "__sbom.json" vex.json || true",
941
- "echo deployment successful 😻",
942
- ],
943
- "stage": "deploy dev",
944
- "variables": {
945
- "APP_DIR": "www",
946
- "BUILD_ID": "some-id",
947
- "BUILD_INFO_BUILD_TIME": "01-01-2023 12:13:14",
948
- "BUILD_INFO_CURRENT_VERSION": "3.2.1",
949
- "BUILD_INFO_ID": "some-id",
950
- "COMPONENT_NAME": "www",
951
- "DOCKER_CACHE_IMAGE": "$DOCKER_REGISTRY_IMAGE_PATH/caches/www",
952
- "DOCKER_IMAGE": "$DOCKER_REGISTRY_IMAGE_PATH/$DOCKER_IMAGE_NAME",
953
- "DOCKER_IMAGE_NAME": "dev/www",
954
- "DOCKER_IMAGE_TAG": "$CI_COMMIT_SHA",
955
- "DOCKER_REGISTRY": "$CI_REGISTRY",
956
- "DOCKER_REGISTRY_IMAGE_PATH": "$CI_REGISTRY_IMAGE",
957
- "ENV_SHORT": "dev",
958
- "ENV_TYPE": "dev",
959
- "HELM_ARGS": "",
960
- "HELM_EXPERIMENTAL_OCI": "1",
961
- "HELM_GITLAB_CHART_NAME": "/helm-charts/the-panter-chart",
962
- "HOST": "www.dev.test-app.pan.panter.cloud",
963
- "HOST_CANONICAL": "www.dev.test-app.pan.panter.cloud",
964
- "KUBERNETES_CPU_LIMIT": "1",
965
- "KUBERNETES_CPU_REQUEST": "0.5",
966
- "KUBERNETES_MEMORY_LIMIT": "400Mi",
967
- "KUBERNETES_MEMORY_REQUEST": "200Mi",
968
- "KUBE_APP_NAME": "www",
969
- "KUBE_APP_NAME_PREFIX": "",
970
- "KUBE_DOCKER_IMAGE_PULL_SECRET": "gitlab-registry-www",
971
- "KUBE_NAMESPACE": "pan-test-app-dev",
972
- "KUBE_VALUES": "env:
973
- secret: {}
974
- public:
975
- ENV_SHORT: 'dev'
976
- APP_DIR: 'www'
977
- ENV_TYPE: 'dev'
978
- BUILD_INFO_ID: 'some-id'
979
- BUILD_INFO_BUILD_TIME: '01-01-2023 12:13:14'
980
- BUILD_INFO_CURRENT_VERSION: '3.2.1'
981
- HOST: 'www.dev.test-app.pan.panter.cloud'
982
- ROOT_URL: 'https://www.dev.test-app.pan.panter.cloud'
983
- KUBE_NAMESPACE: 'pan-test-app-dev'
984
- KUBE_APP_NAME: 'www'
985
- KUBE_APP_NAME_PREFIX: ''
986
- HOST_CANONICAL: 'www.dev.test-app.pan.panter.cloud'
987
- _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","KUBE_NAMESPACE","KUBE_APP_NAME","KUBE_APP_NAME_PREFIX","HOST_CANONICAL"]'
988
- application:
989
- host: 'www.dev.test-app.pan.panter.cloud'
990
- command: 'yarn start'
991
- livenessProbe:
992
- httpGet:
993
- path: '__health'
994
- readinessProbe:
995
- httpGet:
996
- path: '__health'
997
- startupProbe:
998
- httpGet:
999
- path: '__health'
1000
- ",
1001
- "RELEASE_NAME": "pan-test-app-dev-www",
1002
- "ROOT_URL": "https://www.dev.test-app.pan.panter.cloud",
1003
- "_ALL_ENV_VAR_KEYS": "["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","KUBE_NAMESPACE","KUBE_APP_NAME","KUBE_APP_NAME_PREFIX","HOST_CANONICAL"]",
1004
- },
1005
- },
1006
- "www 🛑 Stop ⚠️ | dev ": {
1007
- "environment": {
1008
- "action": "stop",
1009
- "name": "dev/www",
1010
- "url": "https://www.dev.test-app.pan.panter.cloud",
1011
- },
1012
- "image": "path/to/docker/kubernetes:the-version",
1013
- "interruptible": true,
1014
- "needs": [],
1015
- "retry": {
1016
- "max": 2,
1017
- "when": [
1018
- "runner_system_failure",
1019
- "stuck_or_timeout_failure",
1020
- ],
1021
- },
1022
- "rules": [
1023
- {
1024
- "allow_failure": true,
1025
- "if": "$CI_COMMIT_BRANCH =~ /^[0-9]+\\.([0-9]+|x)\\.x$/",
1026
- "when": "on_success",
1027
- },
1028
- {
1029
- "allow_failure": true,
1030
- "when": "manual",
1031
- },
1032
- ],
1033
- "script": [
1034
- "kubectl config set-cluster "kube-pan-test-app-dev-www" --server="$CL_dev_www_KUBE_URL" --certificate-authority <(echo $CL_dev_www_KUBE_CA_PEM | base64 -d) --embed-certs=true",
1035
- "kubectl config set-credentials "kube-pan-test-app-dev-www" --token="$CL_dev_www_KUBE_TOKEN"",
1036
- "kubectl config set-context "kube-pan-test-app-dev-www" --cluster="kube-pan-test-app-dev-www" --user="kube-pan-test-app-dev-www" --namespace="pan-test-app-dev"",
1037
- "kubectl config use-context "kube-pan-test-app-dev-www"",
1038
- "kubernetesDelete",
1039
- "echo Disabling component in Dependency Track",
1040
- "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" disable "pan-test-app/www" "https://www.dev.test-app.pan.panter.cloud" || true",
1041
- ],
1042
- "stage": "stop dev",
1043
- "variables": {
1044
- "APP_DIR": "www",
1045
- "BUILD_ID": "some-id",
1046
- "BUILD_INFO_BUILD_TIME": "01-01-2023 12:13:14",
1047
- "BUILD_INFO_CURRENT_VERSION": "3.2.1",
1048
- "BUILD_INFO_ID": "some-id",
1049
- "COMPONENT_NAME": "www",
1050
- "ENV_SHORT": "dev",
1051
- "ENV_TYPE": "dev",
1052
- "GIT_STRATEGY": "none",
1053
- "HELM_ARGS": "",
1054
- "HELM_EXPERIMENTAL_OCI": "1",
1055
- "HELM_GITLAB_CHART_NAME": "/helm-charts/the-panter-chart",
1056
- "HOST": "www.dev.test-app.pan.panter.cloud",
1057
- "HOST_CANONICAL": "www.dev.test-app.pan.panter.cloud",
1058
- "KUBERNETES_CPU_LIMIT": "1",
1059
- "KUBERNETES_CPU_REQUEST": "0.5",
1060
- "KUBERNETES_MEMORY_LIMIT": "400Mi",
1061
- "KUBERNETES_MEMORY_REQUEST": "200Mi",
1062
- "KUBE_APP_NAME": "www",
1063
- "KUBE_APP_NAME_PREFIX": "",
1064
- "KUBE_DOCKER_IMAGE_PULL_SECRET": "gitlab-registry-www",
1065
- "KUBE_NAMESPACE": "pan-test-app-dev",
1066
- "KUBE_VALUES": "env:
1067
- secret: {}
1068
- public:
1069
- ENV_SHORT: 'dev'
1070
- APP_DIR: 'www'
1071
- ENV_TYPE: 'dev'
1072
- BUILD_INFO_ID: 'some-id'
1073
- BUILD_INFO_BUILD_TIME: '01-01-2023 12:13:14'
1074
- BUILD_INFO_CURRENT_VERSION: '3.2.1'
1075
- HOST: 'www.dev.test-app.pan.panter.cloud'
1076
- ROOT_URL: 'https://www.dev.test-app.pan.panter.cloud'
1077
- KUBE_NAMESPACE: 'pan-test-app-dev'
1078
- KUBE_APP_NAME: 'www'
1079
- KUBE_APP_NAME_PREFIX: ''
1080
- HOST_CANONICAL: 'www.dev.test-app.pan.panter.cloud'
1081
- _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","KUBE_NAMESPACE","KUBE_APP_NAME","KUBE_APP_NAME_PREFIX","HOST_CANONICAL"]'
1082
- application:
1083
- host: 'www.dev.test-app.pan.panter.cloud'
1084
- command: 'yarn start'
1085
- livenessProbe:
1086
- httpGet:
1087
- path: '__health'
1088
- readinessProbe:
1089
- httpGet:
1090
- path: '__health'
1091
- startupProbe:
1092
- httpGet:
1093
- path: '__health'
1094
- ",
1095
- "RELEASE_NAME": "pan-test-app-dev-www",
1096
- "ROOT_URL": "https://www.dev.test-app.pan.panter.cloud",
1097
- "_ALL_ENV_VAR_KEYS": "["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","KUBE_NAMESPACE","KUBE_APP_NAME","KUBE_APP_NAME_PREFIX","HOST_CANONICAL"]",
1098
- },
1099
- },
1100
- "www 🛡 audit": {
1101
- "allow_failure": true,
1102
- "image": "path/to/docker/jobs-default:the-version",
1103
- "interruptible": true,
1104
- "needs": [],
1105
- "retry": {
1106
- "max": 2,
1107
- "when": [
1108
- "runner_system_failure",
1109
- "stuck_or_timeout_failure",
1110
- ],
1111
- },
1112
- "script": [
1113
- "cd www",
1114
- "yarn npm audit --environment production",
1115
- ],
1116
- "stage": "test",
1117
- "variables": {
1118
- "APP_PATH": "www",
1119
- "KUBERNETES_CPU_LIMIT": "2",
1120
- "KUBERNETES_CPU_REQUEST": "0.5",
1121
- "KUBERNETES_MEMORY_LIMIT": "4Gi",
1122
- "KUBERNETES_MEMORY_REQUEST": "2Gi",
1123
- },
1124
- },
1125
- "www 🧪 test": {
1126
- "cache": [
1127
- {
1128
- "key": "www-yarn",
1129
- "paths": [
1130
- "www/.yarn",
1131
- ],
1132
- "policy": "pull-push",
1133
- },
1134
- {
1135
- "key": "www-node-modules",
1136
- "paths": [
1137
- "www/node_modules",
1138
- ],
1139
- "policy": "pull-push",
1140
- },
1141
- ],
1142
- "image": "path/to/docker/jobs-testing-chrome:the-version",
1143
- "interruptible": true,
1144
- "needs": [],
1145
- "retry": {
1146
- "max": 2,
1147
- "when": [
1148
- "runner_system_failure",
1149
- "stuck_or_timeout_failure",
1150
- ],
1151
- },
1152
- "script": [
1153
- "cd www",
1154
- "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
1155
- "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
1156
- "yarn install --immutable",
1157
- "yarn test",
1158
- ],
1159
- "stage": "test",
1160
- "variables": {
1161
- "APP_PATH": "www",
1162
- "KUBERNETES_CPU_LIMIT": "2",
1163
- "KUBERNETES_CPU_REQUEST": "0.5",
1164
- "KUBERNETES_MEMORY_LIMIT": "4Gi",
1165
- "KUBERNETES_MEMORY_REQUEST": "2Gi",
1166
- },
1167
- },
1168
- "www 🧾 sbom | dev ": {
1169
- "allow_failure": true,
1170
- "artifacts": {
1171
- "paths": [
1172
- "__sbom.json",
1173
- ],
1174
- },
1175
- "image": "aquasec/trivy:0.38.3",
1176
- "interruptible": true,
1177
- "needs": [],
1178
- "retry": {
1179
- "max": 2,
1180
- "when": [
1181
- "runner_system_failure",
1182
- "stuck_or_timeout_failure",
1183
- ],
1184
- },
1185
- "script": [
1186
- "trivy fs --quiet --format cyclonedx --output "__sbom.json" www",
1187
- ],
1188
- "stage": "build",
1189
- "variables": {},
1190
- },
1191
- },
1192
- "stages": [
1193
- "setup",
1194
- "setup dev",
1195
- "setup review",
1196
- "setup stage",
1197
- "setup prod",
1198
- "setup local",
1199
- "test",
1200
- "test dev",
1201
- "test review",
1202
- "test stage",
1203
- "test prod",
1204
- "test local",
1205
- "build",
1206
- "build dev",
1207
- "build review",
1208
- "build stage",
1209
- "build prod",
1210
- "build local",
1211
- "deploy",
1212
- "deploy dev",
1213
- "deploy review",
1214
- "deploy stage",
1215
- "deploy prod",
1216
- "deploy local",
1217
- "verify",
1218
- "verify dev",
1219
- "verify review",
1220
- "verify stage",
1221
- "verify prod",
1222
- "verify local",
1223
- "rollback",
1224
- "rollback dev",
1225
- "rollback review",
1226
- "rollback stage",
1227
- "rollback prod",
1228
- "rollback local",
1229
- "stop",
1230
- "stop dev",
1231
- "stop review",
1232
- "stop stage",
1233
- "stop prod",
1234
- "stop local",
1235
- ],
1236
- "variables": {
1237
- "FF_USE_FASTZIP": "true",
1238
- },
1239
- "workflow": {
1240
- "rules": [
1241
- {
1242
- "if": "$CI_COMMIT_TAG",
1243
- },
1244
- {
1245
- "if": "$CI_COMMIT_MESSAGE =~ /^chore\\(release\\).*/",
1246
- "when": "never",
1247
- },
1248
- {
1249
- "if": "$CI_COMMIT_BRANCH =~ /^[0-9]+.([0-9]+|x).x$/",
1250
- },
1251
- {
1252
- "if": "$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH",
1253
- },
1254
- {
1255
- "if": "$CI_MERGE_REQUEST_ID",
1256
- },
1257
- ],
1258
- },
1259
- },
1260
- "mr": {
1261
- "image": "path/to/docker/jobs-default:the-version",
1262
- "jobs": {
1263
- "api ↩️ Rollback ⚠️ | review ": {
1264
- "environment": {
1265
- "action": "access",
1266
- "name": "review/some-commit/api",
1267
- "url": "https://api.mr1234.review.test-app.pan.panter.cloud",
1268
- },
1269
- "image": "path/to/docker/kubernetes:the-version",
1270
- "interruptible": true,
1271
- "needs": [],
1272
- "retry": {
1273
- "max": 2,
1274
- "when": [
1275
- "runner_system_failure",
1276
- "stuck_or_timeout_failure",
1277
- ],
1278
- },
1279
- "rules": [
1280
- {
1281
- "allow_failure": true,
1282
- "when": "manual",
1283
- },
1284
- ],
1285
- "script": [
1286
- "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",
1287
- "kubectl config set-credentials "kube-pan-test-app-review-mr1234-api" --token="$CL_review_api_KUBE_TOKEN"",
1288
- "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"",
1289
- "kubectl config use-context "kube-pan-test-app-review-mr1234-api"",
1290
- "kubernetesRollback",
1291
- ],
1292
- "stage": "rollback review",
1293
- "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
- "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
- "KUBERNETES_CPU_LIMIT": "1",
1309
- "KUBERNETES_CPU_REQUEST": "0.5",
1310
- "KUBERNETES_MEMORY_LIMIT": "400Mi",
1311
- "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
- public:
1319
- ENV_SHORT: 'review'
1320
- APP_DIR: 'api'
1321
- ENV_TYPE: 'review'
1322
- BUILD_INFO_ID: 'some-id'
1323
- BUILD_INFO_BUILD_TIME: '01-01-2023 12:13:14'
1324
- BUILD_INFO_CURRENT_VERSION: '3.2.1'
1325
- HOST: 'api.mr1234.review.test-app.pan.panter.cloud'
1326
- ROOT_URL: 'https://api.mr1234.review.test-app.pan.panter.cloud'
1327
- KUBE_NAMESPACE: 'pan-test-app-review'
1328
- KUBE_APP_NAME: 'mr1234-api'
1329
- KUBE_APP_NAME_PREFIX: 'mr1234-'
1330
- HOST_CANONICAL: 'api.mr1234.review.test-app.pan.panter.cloud'
1331
- _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","KUBE_NAMESPACE","KUBE_APP_NAME","KUBE_APP_NAME_PREFIX","HOST_CANONICAL"]'
1332
- application:
1333
- host: 'api.mr1234.review.test-app.pan.panter.cloud'
1334
- command: 'yarn start'
1335
- livenessProbe:
1336
- httpGet:
1337
- path: '__health'
1338
- readinessProbe:
1339
- httpGet:
1340
- path: '__health'
1341
- startupProbe:
1342
- httpGet:
1343
- path: '__health'
1344
- jobs:
1345
- migration:
1346
- command: 'yarn migrate'
1347
- cronjobs: {}
1348
- ",
1349
- "RELEASE_NAME": "pan-test-app-review-mr1234-api",
1350
- "ROOT_URL": "https://api.mr1234.review.test-app.pan.panter.cloud",
1351
- "_ALL_ENV_VAR_KEYS": "["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","KUBE_NAMESPACE","KUBE_APP_NAME","KUBE_APP_NAME_PREFIX","HOST_CANONICAL"]",
1352
- },
1353
- },
1354
- "api 👮 lint": {
1355
- "cache": [
1356
- {
1357
- "key": "api-yarn",
1358
- "paths": [
1359
- "api/.yarn",
1360
- ],
1361
- "policy": "pull-push",
1362
- },
1363
- {
1364
- "key": "api-node-modules",
1365
- "paths": [
1366
- "api/node_modules",
1367
- ],
1368
- "policy": "pull-push",
1369
- },
1370
- ],
1371
- "image": "path/to/docker/jobs-default:the-version",
1372
- "interruptible": true,
1373
- "needs": [],
1374
- "retry": {
1375
- "max": 2,
1376
- "when": [
1377
- "runner_system_failure",
1378
- "stuck_or_timeout_failure",
1379
- ],
1380
- },
1381
- "script": [
1382
- "cd api",
1383
- "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
1384
- "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
1385
- "yarn install --immutable",
1386
- "yarn lint",
1387
- ],
1388
- "stage": "test",
1389
- "variables": {
1390
- "APP_PATH": "api",
1391
- "KUBERNETES_CPU_LIMIT": "2",
1392
- "KUBERNETES_CPU_REQUEST": "0.5",
1393
- "KUBERNETES_MEMORY_LIMIT": "4Gi",
1394
- "KUBERNETES_MEMORY_REQUEST": "2Gi",
1395
- },
1396
- },
1397
- "api 🔨 app | review ": {
1398
- "artifacts": {
1399
- "expire_in": "1 day",
1400
- "paths": [
1401
- "api/__build_info.json",
1402
- "api/dist",
1403
- "api/.next",
1404
- ],
1405
- "reports": {
1406
- "junit": undefined,
1407
- },
1408
- },
1409
- "cache": [
1410
- {
1411
- "key": "api-yarn",
1412
- "paths": [
1413
- "api/.yarn",
1414
- ],
1415
- "policy": "pull-push",
1416
- },
1417
- {
1418
- "key": "api-node-modules",
1419
- "paths": [
1420
- "api/node_modules",
1421
- ],
1422
- "policy": "pull-push",
1423
- },
1424
- {
1425
- "key": "api-next-cache",
1426
- "paths": [
1427
- "api/.next/cache/",
1428
- ],
1429
- "policy": "pull-push",
1430
- },
1431
- ],
1432
- "image": "path/to/docker/jobs-default:the-version",
1433
- "interruptible": true,
1434
- "needs": [],
1435
- "retry": {
1436
- "max": 2,
1437
- "when": [
1438
- "runner_system_failure",
1439
- "stuck_or_timeout_failure",
1440
- ],
1441
- },
1442
- "script": [
1443
- "echo '{"id":"some-id","time":"01-01-2023 12:13:14"}' > api/__build_info.json",
1444
- "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
1445
- "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
1446
- "cd api",
1447
- "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
1448
- "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
1449
- "yarn install --immutable",
1450
- "yarn build",
1451
- ],
1452
- "stage": "build",
1453
- "variables": {
1454
- "APP_DIR": "api",
1455
- "BUILD_INFO_BUILD_TIME": "01-01-2023 12:13:14",
1456
- "BUILD_INFO_CURRENT_VERSION": "3.2.1",
1457
- "BUILD_INFO_ID": "some-id",
1458
- "ENV_SHORT": "review",
1459
- "ENV_TYPE": "review",
1460
- "HOST": "api.mr1234.review.test-app.pan.panter.cloud",
1461
- "HOST_CANONICAL": "api.mr1234.review.test-app.pan.panter.cloud",
1462
- "KUBERNETES_CPU_LIMIT": "2",
1463
- "KUBERNETES_CPU_REQUEST": "0.5",
1464
- "KUBERNETES_MEMORY_LIMIT": "4Gi",
1465
- "KUBERNETES_MEMORY_REQUEST": "2Gi",
1466
- "KUBE_APP_NAME": "mr1234-api",
1467
- "KUBE_APP_NAME_PREFIX": "mr1234-",
1468
- "KUBE_NAMESPACE": "pan-test-app-review",
1469
- "ROOT_URL": "https://api.mr1234.review.test-app.pan.panter.cloud",
1470
- "_ALL_ENV_VAR_KEYS": "["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","KUBE_NAMESPACE","KUBE_APP_NAME","KUBE_APP_NAME_PREFIX","HOST_CANONICAL"]",
1471
- },
1472
- },
1473
- "api 🔨 docker | review ": {
1474
- "cache": [
1475
- {
1476
- "key": "api-yarn",
1477
- "paths": [
1478
- "api/.yarn",
1479
- ],
1480
- "policy": "pull",
1481
- },
1482
- ],
1483
- "image": "path/to/docker/docker-build:the-version",
1484
- "interruptible": true,
1485
- "needs": [
1486
- "api 🔨 app | review ",
1487
- ],
1488
- "retry": {
1489
- "max": 2,
1490
- "when": [
1491
- "runner_system_failure",
1492
- "stuck_or_timeout_failure",
1493
- ],
1494
- },
1495
- "script": [
1496
- "ensureNodeDockerfile",
1497
- "docker login --username gitlab-ci-token --password $CI_JOB_TOKEN $CI_REGISTRY",
1498
- "docker version",
1499
- "docker build --network host --cache-from $DOCKER_CACHE_IMAGE --tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG -f $APP_DIR/Dockerfile . --build-arg BUILDKIT_INLINE_CACHE=1",
1500
- "docker push $DOCKER_IMAGE:$DOCKER_IMAGE_TAG",
1501
- "docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG $DOCKER_CACHE_IMAGE",
1502
- "docker push $DOCKER_CACHE_IMAGE",
1503
- ],
1504
- "services": [
1505
- {
1506
- "command": [
1507
- "--tls=false",
1508
- ],
1509
- "name": "docker:20-dind",
1510
- },
1511
- ],
1512
- "stage": "build",
1513
- "variables": {
1514
- "APP_DIR": "api",
1515
- "DOCKERFILE_ADDITIONS": undefined,
1516
- "DOCKERFILE_ADDITIONS_END": undefined,
1517
- "DOCKER_BUILDKIT": "1",
1518
- "DOCKER_CACHE_IMAGE": "$DOCKER_REGISTRY_IMAGE_PATH/caches/api",
1519
- "DOCKER_COPY_AND_INSTALL_APP": "COPY --chown=node:node $APP_DIR .
1520
- RUN yarn plugin import workspace-tools
1521
- RUN yarn workspaces focus --production && yarn rebuild",
1522
- "DOCKER_COPY_WORKSPACE_FILES": "COPY --chown=node:node api/package.json /app/api/package.json
1523
- COPY --chown=node:node api/yarn.lock /app/api/yarn.lock
1524
- COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
1525
- COPY --chown=node:node .yarn /app/.yarn",
1526
- "DOCKER_DIR": ".",
1527
- "DOCKER_DRIVER": "overlay2",
1528
- "DOCKER_HOST": "tcp://0.0.0.0:2375",
1529
- "DOCKER_IMAGE": "$DOCKER_REGISTRY_IMAGE_PATH/$DOCKER_IMAGE_NAME",
1530
- "DOCKER_IMAGE_NAME": "review/api",
1531
- "DOCKER_IMAGE_TAG": "$CI_COMMIT_SHA",
1532
- "DOCKER_REGISTRY": "$CI_REGISTRY",
1533
- "DOCKER_REGISTRY_IMAGE_PATH": "$CI_REGISTRY_IMAGE",
1534
- "DOCKER_TLS_CERTDIR": "",
1535
- "KUBERNETES_CPU_LIMIT": "1",
1536
- "KUBERNETES_CPU_REQUEST": "0.5",
1537
- "KUBERNETES_MEMORY_LIMIT": "2Gi",
1538
- "KUBERNETES_MEMORY_REQUEST": "1Gi",
1539
- },
1540
- },
1541
- "api 🚀 Deploy | review ": {
1542
- "allow_failure": false,
1543
- "environment": {
1544
- "auto_stop_in": "2 week",
1545
- "name": "review/some-commit/api",
1546
- "on_stop": "api 🛑 Stop ⚠️ | review ",
1547
- "url": "https://api.mr1234.review.test-app.pan.panter.cloud",
1548
- },
1549
- "image": "path/to/docker/kubernetes:the-version",
1550
- "interruptible": true,
1551
- "needs": [
1552
- {
1553
- "artifacts": false,
1554
- "job": "api 👮 lint",
1555
- },
1556
- {
1557
- "artifacts": false,
1558
- "job": "api 🔨 app | review ",
1559
- },
1560
- {
1561
- "artifacts": false,
1562
- "job": "api 🔨 docker | review ",
1563
- },
1564
- {
1565
- "artifacts": false,
1566
- "job": "api 🧪 test",
1567
- },
1568
- {
1569
- "artifacts": true,
1570
- "job": "api 🧾 sbom | review ",
1571
- },
1572
- {
1573
- "artifacts": false,
1574
- "job": "api 🛡 audit",
1575
- },
1576
- ],
1577
- "retry": {
1578
- "max": 2,
1579
- "when": [
1580
- "runner_system_failure",
1581
- "stuck_or_timeout_failure",
1582
- ],
1583
- },
1584
- "rules": [
1585
- {
1586
- "when": "on_success",
1587
- },
1588
- ],
1589
- "script": [
1590
- "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",
1591
- "kubectl config set-credentials "kube-pan-test-app-review-mr1234-api" --token="$CL_review_api_KUBE_TOKEN"",
1592
- "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"",
1593
- "kubectl config use-context "kube-pan-test-app-review-mr1234-api"",
1594
- "kubernetesCreateSecret",
1595
- "kubernetesDeploy",
1596
- "echo Uploading SBOM to Dependency Track",
1597
- "/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",
1598
- "echo deployment successful 😻",
1599
- ],
1600
- "stage": "deploy review",
1601
- "variables": {
1602
- "APP_DIR": "api",
1603
- "BUILD_ID": "some-id",
1604
- "BUILD_INFO_BUILD_TIME": "01-01-2023 12:13:14",
1605
- "BUILD_INFO_CURRENT_VERSION": "3.2.1",
1606
- "BUILD_INFO_ID": "some-id",
1607
- "COMPONENT_NAME": "api",
1608
- "DOCKER_CACHE_IMAGE": "$DOCKER_REGISTRY_IMAGE_PATH/caches/api",
1609
- "DOCKER_IMAGE": "$DOCKER_REGISTRY_IMAGE_PATH/$DOCKER_IMAGE_NAME",
1610
- "DOCKER_IMAGE_NAME": "review/api",
1611
- "DOCKER_IMAGE_TAG": "$CI_COMMIT_SHA",
1612
- "DOCKER_REGISTRY": "$CI_REGISTRY",
1613
- "DOCKER_REGISTRY_IMAGE_PATH": "$CI_REGISTRY_IMAGE",
1614
- "ENV_SHORT": "review",
1615
- "ENV_TYPE": "review",
1616
- "HELM_ARGS": "",
1617
- "HELM_EXPERIMENTAL_OCI": "1",
1618
- "HELM_GITLAB_CHART_NAME": "/helm-charts/the-panter-chart",
1619
- "HOST": "api.mr1234.review.test-app.pan.panter.cloud",
1620
- "HOST_CANONICAL": "api.mr1234.review.test-app.pan.panter.cloud",
1621
- "KUBERNETES_CPU_LIMIT": "1",
1622
- "KUBERNETES_CPU_REQUEST": "0.5",
1623
- "KUBERNETES_MEMORY_LIMIT": "400Mi",
1624
- "KUBERNETES_MEMORY_REQUEST": "200Mi",
1625
- "KUBE_APP_NAME": "mr1234-api",
1626
- "KUBE_APP_NAME_PREFIX": "mr1234-",
1627
- "KUBE_DOCKER_IMAGE_PULL_SECRET": "gitlab-registry-api",
1628
- "KUBE_NAMESPACE": "pan-test-app-review",
1629
- "KUBE_VALUES": "env:
1630
- secret: {}
1631
- public:
1632
- ENV_SHORT: 'review'
1633
- APP_DIR: 'api'
1634
- ENV_TYPE: 'review'
1635
- BUILD_INFO_ID: 'some-id'
1636
- BUILD_INFO_BUILD_TIME: '01-01-2023 12:13:14'
1637
- BUILD_INFO_CURRENT_VERSION: '3.2.1'
1638
- HOST: 'api.mr1234.review.test-app.pan.panter.cloud'
1639
- ROOT_URL: 'https://api.mr1234.review.test-app.pan.panter.cloud'
1640
- KUBE_NAMESPACE: 'pan-test-app-review'
1641
- KUBE_APP_NAME: 'mr1234-api'
1642
- KUBE_APP_NAME_PREFIX: 'mr1234-'
1643
- HOST_CANONICAL: 'api.mr1234.review.test-app.pan.panter.cloud'
1644
- _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","KUBE_NAMESPACE","KUBE_APP_NAME","KUBE_APP_NAME_PREFIX","HOST_CANONICAL"]'
1645
- application:
1646
- host: 'api.mr1234.review.test-app.pan.panter.cloud'
1647
- command: 'yarn start'
1648
- livenessProbe:
1649
- httpGet:
1650
- path: '__health'
1651
- readinessProbe:
1652
- httpGet:
1653
- path: '__health'
1654
- startupProbe:
1655
- httpGet:
1656
- path: '__health'
1657
- jobs:
1658
- migration:
1659
- command: 'yarn migrate'
1660
- cronjobs: {}
1661
- ",
1662
- "RELEASE_NAME": "pan-test-app-review-mr1234-api",
1663
- "ROOT_URL": "https://api.mr1234.review.test-app.pan.panter.cloud",
1664
- "_ALL_ENV_VAR_KEYS": "["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","KUBE_NAMESPACE","KUBE_APP_NAME","KUBE_APP_NAME_PREFIX","HOST_CANONICAL"]",
1665
- },
1666
- },
1667
- "api 🛑 Stop ⚠️ | review ": {
1668
- "environment": {
1669
- "action": "stop",
1670
- "name": "review/some-commit/api",
1671
- "url": "https://api.mr1234.review.test-app.pan.panter.cloud",
1672
- },
1673
- "image": "path/to/docker/kubernetes:the-version",
1674
- "interruptible": true,
1675
- "needs": [],
1676
- "retry": {
1677
- "max": 2,
1678
- "when": [
1679
- "runner_system_failure",
1680
- "stuck_or_timeout_failure",
1681
- ],
1682
- },
1683
- "rules": [
1684
- {
1685
- "allow_failure": true,
1686
- "if": "$CI_COMMIT_BRANCH =~ /^[0-9]+\\.([0-9]+|x)\\.x$/",
1687
- "when": "on_success",
1688
- },
1689
- {
1690
- "allow_failure": true,
1691
- "when": "manual",
1692
- },
1693
- ],
1694
- "script": [
1695
- "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",
1696
- "kubectl config set-credentials "kube-pan-test-app-review-mr1234-api" --token="$CL_review_api_KUBE_TOKEN"",
1697
- "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"",
1698
- "kubectl config use-context "kube-pan-test-app-review-mr1234-api"",
1699
- "kubernetesDelete",
1700
- "echo Disabling component in Dependency Track",
1701
- "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" disable "pan-test-app/api" "https://api.mr1234.review.test-app.pan.panter.cloud" || true",
1702
- ],
1703
- "stage": "stop review",
1704
- "variables": {
1705
- "APP_DIR": "api",
1706
- "BUILD_ID": "some-id",
1707
- "BUILD_INFO_BUILD_TIME": "01-01-2023 12:13:14",
1708
- "BUILD_INFO_CURRENT_VERSION": "3.2.1",
1709
- "BUILD_INFO_ID": "some-id",
1710
- "COMPONENT_NAME": "api",
1711
- "ENV_SHORT": "review",
1712
- "ENV_TYPE": "review",
1713
- "GIT_STRATEGY": "none",
1714
- "HELM_ARGS": "",
1715
- "HELM_EXPERIMENTAL_OCI": "1",
1716
- "HELM_GITLAB_CHART_NAME": "/helm-charts/the-panter-chart",
1717
- "HOST": "api.mr1234.review.test-app.pan.panter.cloud",
1718
- "HOST_CANONICAL": "api.mr1234.review.test-app.pan.panter.cloud",
1719
- "KUBERNETES_CPU_LIMIT": "1",
1720
- "KUBERNETES_CPU_REQUEST": "0.5",
1721
- "KUBERNETES_MEMORY_LIMIT": "400Mi",
1722
- "KUBERNETES_MEMORY_REQUEST": "200Mi",
1723
- "KUBE_APP_NAME": "mr1234-api",
1724
- "KUBE_APP_NAME_PREFIX": "mr1234-",
1725
- "KUBE_DOCKER_IMAGE_PULL_SECRET": "gitlab-registry-api",
1726
- "KUBE_NAMESPACE": "pan-test-app-review",
1727
- "KUBE_VALUES": "env:
1728
- secret: {}
1729
- public:
1730
- ENV_SHORT: 'review'
1731
- APP_DIR: 'api'
1732
- ENV_TYPE: 'review'
1733
- BUILD_INFO_ID: 'some-id'
1734
- BUILD_INFO_BUILD_TIME: '01-01-2023 12:13:14'
1735
- BUILD_INFO_CURRENT_VERSION: '3.2.1'
1736
- HOST: 'api.mr1234.review.test-app.pan.panter.cloud'
1737
- ROOT_URL: 'https://api.mr1234.review.test-app.pan.panter.cloud'
1738
- KUBE_NAMESPACE: 'pan-test-app-review'
1739
- KUBE_APP_NAME: 'mr1234-api'
1740
- KUBE_APP_NAME_PREFIX: 'mr1234-'
1741
- HOST_CANONICAL: 'api.mr1234.review.test-app.pan.panter.cloud'
1742
- _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","KUBE_NAMESPACE","KUBE_APP_NAME","KUBE_APP_NAME_PREFIX","HOST_CANONICAL"]'
1743
- application:
1744
- host: 'api.mr1234.review.test-app.pan.panter.cloud'
1745
- command: 'yarn start'
1746
- livenessProbe:
1747
- httpGet:
1748
- path: '__health'
1749
- readinessProbe:
1750
- httpGet:
1751
- path: '__health'
1752
- startupProbe:
1753
- httpGet:
1754
- path: '__health'
1755
- jobs:
1756
- migration:
1757
- command: 'yarn migrate'
1758
- cronjobs: {}
1759
- ",
1760
- "RELEASE_NAME": "pan-test-app-review-mr1234-api",
1761
- "ROOT_URL": "https://api.mr1234.review.test-app.pan.panter.cloud",
1762
- "_ALL_ENV_VAR_KEYS": "["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","KUBE_NAMESPACE","KUBE_APP_NAME","KUBE_APP_NAME_PREFIX","HOST_CANONICAL"]",
1763
- },
1764
- },
1765
- "api 🛡 audit": {
1766
- "allow_failure": true,
1767
- "image": "path/to/docker/jobs-default:the-version",
1768
- "interruptible": true,
1769
- "needs": [],
1770
- "retry": {
1771
- "max": 2,
1772
- "when": [
1773
- "runner_system_failure",
1774
- "stuck_or_timeout_failure",
1775
- ],
1776
- },
1777
- "script": [
1778
- "cd api",
1779
- "yarn npm audit --environment production",
1780
- ],
1781
- "stage": "test",
1782
- "variables": {
1783
- "APP_PATH": "api",
1784
- "KUBERNETES_CPU_LIMIT": "2",
1785
- "KUBERNETES_CPU_REQUEST": "0.5",
1786
- "KUBERNETES_MEMORY_LIMIT": "4Gi",
1787
- "KUBERNETES_MEMORY_REQUEST": "2Gi",
1788
- },
1789
- },
1790
- "api 🧪 test": {
1791
- "cache": [
1792
- {
1793
- "key": "api-yarn",
1794
- "paths": [
1795
- "api/.yarn",
1796
- ],
1797
- "policy": "pull-push",
1798
- },
1799
- {
1800
- "key": "api-node-modules",
1801
- "paths": [
1802
- "api/node_modules",
1803
- ],
1804
- "policy": "pull-push",
1805
- },
1806
- ],
1807
- "image": "path/to/docker/jobs-testing-chrome:the-version",
1808
- "interruptible": true,
1809
- "needs": [],
1810
- "retry": {
1811
- "max": 2,
1812
- "when": [
1813
- "runner_system_failure",
1814
- "stuck_or_timeout_failure",
1815
- ],
1816
- },
1817
- "script": [
1818
- "cd api",
1819
- "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
1820
- "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
1821
- "yarn install --immutable",
1822
- "yarn test",
1823
- ],
1824
- "stage": "test",
1825
- "variables": {
1826
- "APP_PATH": "api",
1827
- "KUBERNETES_CPU_LIMIT": "2",
1828
- "KUBERNETES_CPU_REQUEST": "0.5",
1829
- "KUBERNETES_MEMORY_LIMIT": "4Gi",
1830
- "KUBERNETES_MEMORY_REQUEST": "2Gi",
1831
- },
1832
- },
1833
- "api 🧾 sbom | review ": {
1834
- "allow_failure": true,
1835
- "artifacts": {
1836
- "paths": [
1837
- "__sbom.json",
1838
- ],
1839
- },
1840
- "image": "aquasec/trivy:0.38.3",
1841
- "interruptible": true,
1842
- "needs": [],
1843
- "retry": {
1844
- "max": 2,
1845
- "when": [
1846
- "runner_system_failure",
1847
- "stuck_or_timeout_failure",
1848
- ],
1849
- },
1850
- "script": [
1851
- "trivy fs --quiet --format cyclonedx --output "__sbom.json" api",
1852
- ],
1853
- "stage": "build",
1854
- "variables": {},
1855
- },
1856
- "www ↩️ Rollback ⚠️ | review ": {
1857
- "environment": {
1858
- "action": "access",
1859
- "name": "review/some-commit/www",
1860
- "url": "https://www.mr1234.review.test-app.pan.panter.cloud",
1861
- },
1862
- "image": "path/to/docker/kubernetes:the-version",
1863
- "interruptible": true,
1864
- "needs": [],
1865
- "retry": {
1866
- "max": 2,
1867
- "when": [
1868
- "runner_system_failure",
1869
- "stuck_or_timeout_failure",
1870
- ],
1871
- },
1872
- "rules": [
1873
- {
1874
- "allow_failure": true,
1875
- "when": "manual",
1876
- },
1877
- ],
1878
- "script": [
1879
- "kubectl config set-cluster "kube-pan-test-app-review-mr1234-www" --server="$CL_review_www_KUBE_URL" --certificate-authority <(echo $CL_review_www_KUBE_CA_PEM | base64 -d) --embed-certs=true",
1880
- "kubectl config set-credentials "kube-pan-test-app-review-mr1234-www" --token="$CL_review_www_KUBE_TOKEN"",
1881
- "kubectl config set-context "kube-pan-test-app-review-mr1234-www" --cluster="kube-pan-test-app-review-mr1234-www" --user="kube-pan-test-app-review-mr1234-www" --namespace="pan-test-app-review"",
1882
- "kubectl config use-context "kube-pan-test-app-review-mr1234-www"",
1883
- "kubernetesRollback",
1884
- ],
1885
- "stage": "rollback review",
1886
- "variables": {
1887
- "APP_DIR": "www",
1888
- "BUILD_ID": "some-id",
1889
- "BUILD_INFO_BUILD_TIME": "01-01-2023 12:13:14",
1890
- "BUILD_INFO_CURRENT_VERSION": "3.2.1",
1891
- "BUILD_INFO_ID": "some-id",
1892
- "COMPONENT_NAME": "www",
1893
- "ENV_SHORT": "review",
1894
- "ENV_TYPE": "review",
1895
- "GIT_STRATEGY": "none",
1896
- "HELM_ARGS": "",
1897
- "HELM_EXPERIMENTAL_OCI": "1",
1898
- "HELM_GITLAB_CHART_NAME": "/helm-charts/the-panter-chart",
1899
- "HOST": "www.mr1234.review.test-app.pan.panter.cloud",
1900
- "HOST_CANONICAL": "www.mr1234.review.test-app.pan.panter.cloud",
1901
- "KUBERNETES_CPU_LIMIT": "1",
1902
- "KUBERNETES_CPU_REQUEST": "0.5",
1903
- "KUBERNETES_MEMORY_LIMIT": "400Mi",
1904
- "KUBERNETES_MEMORY_REQUEST": "200Mi",
1905
- "KUBE_APP_NAME": "mr1234-www",
1906
- "KUBE_APP_NAME_PREFIX": "mr1234-",
1907
- "KUBE_DOCKER_IMAGE_PULL_SECRET": "gitlab-registry-www",
1908
- "KUBE_NAMESPACE": "pan-test-app-review",
1909
- "KUBE_VALUES": "env:
1910
- secret: {}
1911
- public:
1912
- ENV_SHORT: 'review'
1913
- APP_DIR: 'www'
1914
- ENV_TYPE: 'review'
1915
- BUILD_INFO_ID: 'some-id'
1916
- BUILD_INFO_BUILD_TIME: '01-01-2023 12:13:14'
1917
- BUILD_INFO_CURRENT_VERSION: '3.2.1'
1918
- HOST: 'www.mr1234.review.test-app.pan.panter.cloud'
1919
- ROOT_URL: 'https://www.mr1234.review.test-app.pan.panter.cloud'
1920
- KUBE_NAMESPACE: 'pan-test-app-review'
1921
- KUBE_APP_NAME: 'mr1234-www'
1922
- KUBE_APP_NAME_PREFIX: 'mr1234-'
1923
- HOST_CANONICAL: 'www.mr1234.review.test-app.pan.panter.cloud'
1924
- _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","KUBE_NAMESPACE","KUBE_APP_NAME","KUBE_APP_NAME_PREFIX","HOST_CANONICAL"]'
1925
- application:
1926
- host: 'www.mr1234.review.test-app.pan.panter.cloud'
1927
- command: 'yarn start'
1928
- livenessProbe:
1929
- httpGet:
1930
- path: '__health'
1931
- readinessProbe:
1932
- httpGet:
1933
- path: '__health'
1934
- startupProbe:
1935
- httpGet:
1936
- path: '__health'
1937
- ",
1938
- "RELEASE_NAME": "pan-test-app-review-mr1234-www",
1939
- "ROOT_URL": "https://www.mr1234.review.test-app.pan.panter.cloud",
1940
- "_ALL_ENV_VAR_KEYS": "["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","KUBE_NAMESPACE","KUBE_APP_NAME","KUBE_APP_NAME_PREFIX","HOST_CANONICAL"]",
1941
- },
1942
- },
1943
- "www 👮 lint": {
1944
- "cache": [
1945
- {
1946
- "key": "www-yarn",
1947
- "paths": [
1948
- "www/.yarn",
1949
- ],
1950
- "policy": "pull-push",
1951
- },
1952
- {
1953
- "key": "www-node-modules",
1954
- "paths": [
1955
- "www/node_modules",
1956
- ],
1957
- "policy": "pull-push",
1958
- },
1959
- ],
1960
- "image": "path/to/docker/jobs-default:the-version",
1961
- "interruptible": true,
1962
- "needs": [],
1963
- "retry": {
1964
- "max": 2,
1965
- "when": [
1966
- "runner_system_failure",
1967
- "stuck_or_timeout_failure",
1968
- ],
1969
- },
1970
- "script": [
1971
- "cd www",
1972
- "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
1973
- "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
1974
- "yarn install --immutable",
1975
- "yarn lint",
1976
- ],
1977
- "stage": "test",
1978
- "variables": {
1979
- "APP_PATH": "www",
1980
- "KUBERNETES_CPU_LIMIT": "2",
1981
- "KUBERNETES_CPU_REQUEST": "0.5",
1982
- "KUBERNETES_MEMORY_LIMIT": "4Gi",
1983
- "KUBERNETES_MEMORY_REQUEST": "2Gi",
1984
- },
1985
- },
1986
- "www 🔨 app | review ": {
1987
- "artifacts": {
1988
- "expire_in": "1 day",
1989
- "paths": [
1990
- "www/__build_info.json",
1991
- "www/dist",
1992
- "www/.next",
1993
- ],
1994
- "reports": {
1995
- "junit": undefined,
1996
- },
1997
- },
1998
- "cache": [
1999
- {
2000
- "key": "www-yarn",
2001
- "paths": [
2002
- "www/.yarn",
2003
- ],
2004
- "policy": "pull-push",
2005
- },
2006
- {
2007
- "key": "www-node-modules",
2008
- "paths": [
2009
- "www/node_modules",
2010
- ],
2011
- "policy": "pull-push",
2012
- },
2013
- {
2014
- "key": "www-next-cache",
2015
- "paths": [
2016
- "www/.next/cache/",
2017
- ],
2018
- "policy": "pull-push",
2019
- },
2020
- ],
2021
- "image": "path/to/docker/jobs-default:the-version",
2022
- "interruptible": true,
2023
- "needs": [],
2024
- "retry": {
2025
- "max": 2,
2026
- "when": [
2027
- "runner_system_failure",
2028
- "stuck_or_timeout_failure",
2029
- ],
2030
- },
2031
- "script": [
2032
- "echo '{"id":"some-id","time":"01-01-2023 12:13:14"}' > www/__build_info.json",
2033
- "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
2034
- "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
2035
- "cd www",
2036
- "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
2037
- "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
2038
- "yarn install --immutable",
2039
- "yarn build",
2040
- ],
2041
- "stage": "build",
2042
- "variables": {
2043
- "APP_DIR": "www",
2044
- "BUILD_INFO_BUILD_TIME": "01-01-2023 12:13:14",
2045
- "BUILD_INFO_CURRENT_VERSION": "3.2.1",
2046
- "BUILD_INFO_ID": "some-id",
2047
- "ENV_SHORT": "review",
2048
- "ENV_TYPE": "review",
2049
- "HOST": "www.mr1234.review.test-app.pan.panter.cloud",
2050
- "HOST_CANONICAL": "www.mr1234.review.test-app.pan.panter.cloud",
2051
- "KUBERNETES_CPU_LIMIT": "2",
2052
- "KUBERNETES_CPU_REQUEST": "0.5",
2053
- "KUBERNETES_MEMORY_LIMIT": "4Gi",
2054
- "KUBERNETES_MEMORY_REQUEST": "2Gi",
2055
- "KUBE_APP_NAME": "mr1234-www",
2056
- "KUBE_APP_NAME_PREFIX": "mr1234-",
2057
- "KUBE_NAMESPACE": "pan-test-app-review",
2058
- "ROOT_URL": "https://www.mr1234.review.test-app.pan.panter.cloud",
2059
- "_ALL_ENV_VAR_KEYS": "["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","KUBE_NAMESPACE","KUBE_APP_NAME","KUBE_APP_NAME_PREFIX","HOST_CANONICAL"]",
2060
- },
2061
- },
2062
- "www 🔨 docker | review ": {
2063
- "cache": [
2064
- {
2065
- "key": "www-yarn",
2066
- "paths": [
2067
- "www/.yarn",
2068
- ],
2069
- "policy": "pull",
2070
- },
2071
- ],
2072
- "image": "path/to/docker/docker-build:the-version",
2073
- "interruptible": true,
2074
- "needs": [
2075
- "www 🔨 app | review ",
2076
- ],
2077
- "retry": {
2078
- "max": 2,
2079
- "when": [
2080
- "runner_system_failure",
2081
- "stuck_or_timeout_failure",
2082
- ],
2083
- },
2084
- "script": [
2085
- "ensureNodeDockerfile",
2086
- "docker login --username gitlab-ci-token --password $CI_JOB_TOKEN $CI_REGISTRY",
2087
- "docker version",
2088
- "docker build --network host --cache-from $DOCKER_CACHE_IMAGE --tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG -f $APP_DIR/Dockerfile . --build-arg BUILDKIT_INLINE_CACHE=1",
2089
- "docker push $DOCKER_IMAGE:$DOCKER_IMAGE_TAG",
2090
- "docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG $DOCKER_CACHE_IMAGE",
2091
- "docker push $DOCKER_CACHE_IMAGE",
2092
- ],
2093
- "services": [
2094
- {
2095
- "command": [
2096
- "--tls=false",
2097
- ],
2098
- "name": "docker:20-dind",
2099
- },
2100
- ],
2101
- "stage": "build",
2102
- "variables": {
2103
- "APP_DIR": "www",
2104
- "DOCKERFILE_ADDITIONS": undefined,
2105
- "DOCKERFILE_ADDITIONS_END": undefined,
2106
- "DOCKER_BUILDKIT": "1",
2107
- "DOCKER_CACHE_IMAGE": "$DOCKER_REGISTRY_IMAGE_PATH/caches/www",
2108
- "DOCKER_COPY_AND_INSTALL_APP": "COPY --chown=node:node $APP_DIR .
2109
- RUN yarn plugin import workspace-tools
2110
- RUN yarn workspaces focus --production && yarn rebuild",
2111
- "DOCKER_COPY_WORKSPACE_FILES": "COPY --chown=node:node www/package.json /app/www/package.json
2112
- COPY --chown=node:node www/yarn.lock /app/www/yarn.lock
2113
- COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
2114
- COPY --chown=node:node .yarn /app/.yarn",
2115
- "DOCKER_DIR": ".",
2116
- "DOCKER_DRIVER": "overlay2",
2117
- "DOCKER_HOST": "tcp://0.0.0.0:2375",
2118
- "DOCKER_IMAGE": "$DOCKER_REGISTRY_IMAGE_PATH/$DOCKER_IMAGE_NAME",
2119
- "DOCKER_IMAGE_NAME": "review/www",
2120
- "DOCKER_IMAGE_TAG": "$CI_COMMIT_SHA",
2121
- "DOCKER_REGISTRY": "$CI_REGISTRY",
2122
- "DOCKER_REGISTRY_IMAGE_PATH": "$CI_REGISTRY_IMAGE",
2123
- "DOCKER_TLS_CERTDIR": "",
2124
- "KUBERNETES_CPU_LIMIT": "1",
2125
- "KUBERNETES_CPU_REQUEST": "0.5",
2126
- "KUBERNETES_MEMORY_LIMIT": "2Gi",
2127
- "KUBERNETES_MEMORY_REQUEST": "1Gi",
2128
- },
2129
- },
2130
- "www 🚀 Deploy | review ": {
2131
- "allow_failure": false,
2132
- "environment": {
2133
- "auto_stop_in": "2 week",
2134
- "name": "review/some-commit/www",
2135
- "on_stop": "www 🛑 Stop ⚠️ | review ",
2136
- "url": "https://www.mr1234.review.test-app.pan.panter.cloud",
2137
- },
2138
- "image": "path/to/docker/kubernetes:the-version",
2139
- "interruptible": true,
2140
- "needs": [
2141
- {
2142
- "artifacts": false,
2143
- "job": "www 👮 lint",
2144
- },
2145
- {
2146
- "artifacts": false,
2147
- "job": "www 🔨 app | review ",
2148
- },
2149
- {
2150
- "artifacts": false,
2151
- "job": "www 🔨 docker | review ",
2152
- },
2153
- {
2154
- "artifacts": false,
2155
- "job": "www 🧪 test",
2156
- },
2157
- {
2158
- "artifacts": true,
2159
- "job": "www 🧾 sbom | review ",
2160
- },
2161
- {
2162
- "artifacts": false,
2163
- "job": "www 🛡 audit",
2164
- },
2165
- ],
2166
- "retry": {
2167
- "max": 2,
2168
- "when": [
2169
- "runner_system_failure",
2170
- "stuck_or_timeout_failure",
2171
- ],
2172
- },
2173
- "rules": [
2174
- {
2175
- "when": "on_success",
2176
- },
2177
- ],
2178
- "script": [
2179
- "kubectl config set-cluster "kube-pan-test-app-review-mr1234-www" --server="$CL_review_www_KUBE_URL" --certificate-authority <(echo $CL_review_www_KUBE_CA_PEM | base64 -d) --embed-certs=true",
2180
- "kubectl config set-credentials "kube-pan-test-app-review-mr1234-www" --token="$CL_review_www_KUBE_TOKEN"",
2181
- "kubectl config set-context "kube-pan-test-app-review-mr1234-www" --cluster="kube-pan-test-app-review-mr1234-www" --user="kube-pan-test-app-review-mr1234-www" --namespace="pan-test-app-review"",
2182
- "kubectl config use-context "kube-pan-test-app-review-mr1234-www"",
2183
- "kubernetesCreateSecret",
2184
- "kubernetesDeploy",
2185
- "echo Uploading SBOM to Dependency Track",
2186
- "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/www" "https://www.mr1234.review.test-app.pan.panter.cloud" "__sbom.json" vex.json || true",
2187
- "echo deployment successful 😻",
2188
- ],
2189
- "stage": "deploy review",
2190
- "variables": {
2191
- "APP_DIR": "www",
2192
- "BUILD_ID": "some-id",
2193
- "BUILD_INFO_BUILD_TIME": "01-01-2023 12:13:14",
2194
- "BUILD_INFO_CURRENT_VERSION": "3.2.1",
2195
- "BUILD_INFO_ID": "some-id",
2196
- "COMPONENT_NAME": "www",
2197
- "DOCKER_CACHE_IMAGE": "$DOCKER_REGISTRY_IMAGE_PATH/caches/www",
2198
- "DOCKER_IMAGE": "$DOCKER_REGISTRY_IMAGE_PATH/$DOCKER_IMAGE_NAME",
2199
- "DOCKER_IMAGE_NAME": "review/www",
2200
- "DOCKER_IMAGE_TAG": "$CI_COMMIT_SHA",
2201
- "DOCKER_REGISTRY": "$CI_REGISTRY",
2202
- "DOCKER_REGISTRY_IMAGE_PATH": "$CI_REGISTRY_IMAGE",
2203
- "ENV_SHORT": "review",
2204
- "ENV_TYPE": "review",
2205
- "HELM_ARGS": "",
2206
- "HELM_EXPERIMENTAL_OCI": "1",
2207
- "HELM_GITLAB_CHART_NAME": "/helm-charts/the-panter-chart",
2208
- "HOST": "www.mr1234.review.test-app.pan.panter.cloud",
2209
- "HOST_CANONICAL": "www.mr1234.review.test-app.pan.panter.cloud",
2210
- "KUBERNETES_CPU_LIMIT": "1",
2211
- "KUBERNETES_CPU_REQUEST": "0.5",
2212
- "KUBERNETES_MEMORY_LIMIT": "400Mi",
2213
- "KUBERNETES_MEMORY_REQUEST": "200Mi",
2214
- "KUBE_APP_NAME": "mr1234-www",
2215
- "KUBE_APP_NAME_PREFIX": "mr1234-",
2216
- "KUBE_DOCKER_IMAGE_PULL_SECRET": "gitlab-registry-www",
2217
- "KUBE_NAMESPACE": "pan-test-app-review",
2218
- "KUBE_VALUES": "env:
2219
- secret: {}
2220
- public:
2221
- ENV_SHORT: 'review'
2222
- APP_DIR: 'www'
2223
- ENV_TYPE: 'review'
2224
- BUILD_INFO_ID: 'some-id'
2225
- BUILD_INFO_BUILD_TIME: '01-01-2023 12:13:14'
2226
- BUILD_INFO_CURRENT_VERSION: '3.2.1'
2227
- HOST: 'www.mr1234.review.test-app.pan.panter.cloud'
2228
- ROOT_URL: 'https://www.mr1234.review.test-app.pan.panter.cloud'
2229
- KUBE_NAMESPACE: 'pan-test-app-review'
2230
- KUBE_APP_NAME: 'mr1234-www'
2231
- KUBE_APP_NAME_PREFIX: 'mr1234-'
2232
- HOST_CANONICAL: 'www.mr1234.review.test-app.pan.panter.cloud'
2233
- _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","KUBE_NAMESPACE","KUBE_APP_NAME","KUBE_APP_NAME_PREFIX","HOST_CANONICAL"]'
2234
- application:
2235
- host: 'www.mr1234.review.test-app.pan.panter.cloud'
2236
- command: 'yarn start'
2237
- livenessProbe:
2238
- httpGet:
2239
- path: '__health'
2240
- readinessProbe:
2241
- httpGet:
2242
- path: '__health'
2243
- startupProbe:
2244
- httpGet:
2245
- path: '__health'
2246
- ",
2247
- "RELEASE_NAME": "pan-test-app-review-mr1234-www",
2248
- "ROOT_URL": "https://www.mr1234.review.test-app.pan.panter.cloud",
2249
- "_ALL_ENV_VAR_KEYS": "["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","KUBE_NAMESPACE","KUBE_APP_NAME","KUBE_APP_NAME_PREFIX","HOST_CANONICAL"]",
2250
- },
2251
- },
2252
- "www 🛑 Stop ⚠️ | review ": {
2253
- "environment": {
2254
- "action": "stop",
2255
- "name": "review/some-commit/www",
2256
- "url": "https://www.mr1234.review.test-app.pan.panter.cloud",
2257
- },
2258
- "image": "path/to/docker/kubernetes:the-version",
2259
- "interruptible": true,
2260
- "needs": [],
2261
- "retry": {
2262
- "max": 2,
2263
- "when": [
2264
- "runner_system_failure",
2265
- "stuck_or_timeout_failure",
2266
- ],
2267
- },
2268
- "rules": [
2269
- {
2270
- "allow_failure": true,
2271
- "if": "$CI_COMMIT_BRANCH =~ /^[0-9]+\\.([0-9]+|x)\\.x$/",
2272
- "when": "on_success",
2273
- },
2274
- {
2275
- "allow_failure": true,
2276
- "when": "manual",
2277
- },
2278
- ],
2279
- "script": [
2280
- "kubectl config set-cluster "kube-pan-test-app-review-mr1234-www" --server="$CL_review_www_KUBE_URL" --certificate-authority <(echo $CL_review_www_KUBE_CA_PEM | base64 -d) --embed-certs=true",
2281
- "kubectl config set-credentials "kube-pan-test-app-review-mr1234-www" --token="$CL_review_www_KUBE_TOKEN"",
2282
- "kubectl config set-context "kube-pan-test-app-review-mr1234-www" --cluster="kube-pan-test-app-review-mr1234-www" --user="kube-pan-test-app-review-mr1234-www" --namespace="pan-test-app-review"",
2283
- "kubectl config use-context "kube-pan-test-app-review-mr1234-www"",
2284
- "kubernetesDelete",
2285
- "echo Disabling component in Dependency Track",
2286
- "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" disable "pan-test-app/www" "https://www.mr1234.review.test-app.pan.panter.cloud" || true",
2287
- ],
2288
- "stage": "stop review",
2289
- "variables": {
2290
- "APP_DIR": "www",
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": "www",
2296
- "ENV_SHORT": "review",
2297
- "ENV_TYPE": "review",
2298
- "GIT_STRATEGY": "none",
2299
- "HELM_ARGS": "",
2300
- "HELM_EXPERIMENTAL_OCI": "1",
2301
- "HELM_GITLAB_CHART_NAME": "/helm-charts/the-panter-chart",
2302
- "HOST": "www.mr1234.review.test-app.pan.panter.cloud",
2303
- "HOST_CANONICAL": "www.mr1234.review.test-app.pan.panter.cloud",
2304
- "KUBERNETES_CPU_LIMIT": "1",
2305
- "KUBERNETES_CPU_REQUEST": "0.5",
2306
- "KUBERNETES_MEMORY_LIMIT": "400Mi",
2307
- "KUBERNETES_MEMORY_REQUEST": "200Mi",
2308
- "KUBE_APP_NAME": "mr1234-www",
2309
- "KUBE_APP_NAME_PREFIX": "mr1234-",
2310
- "KUBE_DOCKER_IMAGE_PULL_SECRET": "gitlab-registry-www",
2311
- "KUBE_NAMESPACE": "pan-test-app-review",
2312
- "KUBE_VALUES": "env:
2313
- secret: {}
2314
- public:
2315
- ENV_SHORT: 'review'
2316
- APP_DIR: 'www'
2317
- ENV_TYPE: 'review'
2318
- BUILD_INFO_ID: 'some-id'
2319
- BUILD_INFO_BUILD_TIME: '01-01-2023 12:13:14'
2320
- BUILD_INFO_CURRENT_VERSION: '3.2.1'
2321
- HOST: 'www.mr1234.review.test-app.pan.panter.cloud'
2322
- ROOT_URL: 'https://www.mr1234.review.test-app.pan.panter.cloud'
2323
- KUBE_NAMESPACE: 'pan-test-app-review'
2324
- KUBE_APP_NAME: 'mr1234-www'
2325
- KUBE_APP_NAME_PREFIX: 'mr1234-'
2326
- HOST_CANONICAL: 'www.mr1234.review.test-app.pan.panter.cloud'
2327
- _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","KUBE_NAMESPACE","KUBE_APP_NAME","KUBE_APP_NAME_PREFIX","HOST_CANONICAL"]'
2328
- application:
2329
- host: 'www.mr1234.review.test-app.pan.panter.cloud'
2330
- command: 'yarn start'
2331
- livenessProbe:
2332
- httpGet:
2333
- path: '__health'
2334
- readinessProbe:
2335
- httpGet:
2336
- path: '__health'
2337
- startupProbe:
2338
- httpGet:
2339
- path: '__health'
2340
- ",
2341
- "RELEASE_NAME": "pan-test-app-review-mr1234-www",
2342
- "ROOT_URL": "https://www.mr1234.review.test-app.pan.panter.cloud",
2343
- "_ALL_ENV_VAR_KEYS": "["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","KUBE_NAMESPACE","KUBE_APP_NAME","KUBE_APP_NAME_PREFIX","HOST_CANONICAL"]",
2344
- },
2345
- },
2346
- "www 🛡 audit": {
2347
- "allow_failure": true,
2348
- "image": "path/to/docker/jobs-default:the-version",
2349
- "interruptible": true,
2350
- "needs": [],
2351
- "retry": {
2352
- "max": 2,
2353
- "when": [
2354
- "runner_system_failure",
2355
- "stuck_or_timeout_failure",
2356
- ],
2357
- },
2358
- "script": [
2359
- "cd www",
2360
- "yarn npm audit --environment production",
2361
- ],
2362
- "stage": "test",
2363
- "variables": {
2364
- "APP_PATH": "www",
2365
- "KUBERNETES_CPU_LIMIT": "2",
2366
- "KUBERNETES_CPU_REQUEST": "0.5",
2367
- "KUBERNETES_MEMORY_LIMIT": "4Gi",
2368
- "KUBERNETES_MEMORY_REQUEST": "2Gi",
2369
- },
2370
- },
2371
- "www 🧪 test": {
2372
- "cache": [
2373
- {
2374
- "key": "www-yarn",
2375
- "paths": [
2376
- "www/.yarn",
2377
- ],
2378
- "policy": "pull-push",
2379
- },
2380
- {
2381
- "key": "www-node-modules",
2382
- "paths": [
2383
- "www/node_modules",
2384
- ],
2385
- "policy": "pull-push",
2386
- },
2387
- ],
2388
- "image": "path/to/docker/jobs-testing-chrome:the-version",
2389
- "interruptible": true,
2390
- "needs": [],
2391
- "retry": {
2392
- "max": 2,
2393
- "when": [
2394
- "runner_system_failure",
2395
- "stuck_or_timeout_failure",
2396
- ],
2397
- },
2398
- "script": [
2399
- "cd www",
2400
- "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
2401
- "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
2402
- "yarn install --immutable",
2403
- "yarn test",
2404
- ],
2405
- "stage": "test",
2406
- "variables": {
2407
- "APP_PATH": "www",
2408
- "KUBERNETES_CPU_LIMIT": "2",
2409
- "KUBERNETES_CPU_REQUEST": "0.5",
2410
- "KUBERNETES_MEMORY_LIMIT": "4Gi",
2411
- "KUBERNETES_MEMORY_REQUEST": "2Gi",
2412
- },
2413
- },
2414
- "www 🧾 sbom | review ": {
2415
- "allow_failure": true,
2416
- "artifacts": {
2417
- "paths": [
2418
- "__sbom.json",
2419
- ],
2420
- },
2421
- "image": "aquasec/trivy:0.38.3",
2422
- "interruptible": true,
2423
- "needs": [],
2424
- "retry": {
2425
- "max": 2,
2426
- "when": [
2427
- "runner_system_failure",
2428
- "stuck_or_timeout_failure",
2429
- ],
2430
- },
2431
- "script": [
2432
- "trivy fs --quiet --format cyclonedx --output "__sbom.json" www",
2433
- ],
2434
- "stage": "build",
2435
- "variables": {},
2436
- },
2437
- },
2438
- "stages": [
2439
- "setup",
2440
- "setup dev",
2441
- "setup review",
2442
- "setup stage",
2443
- "setup prod",
2444
- "setup local",
2445
- "test",
2446
- "test dev",
2447
- "test review",
2448
- "test stage",
2449
- "test prod",
2450
- "test local",
2451
- "build",
2452
- "build dev",
2453
- "build review",
2454
- "build stage",
2455
- "build prod",
2456
- "build local",
2457
- "deploy",
2458
- "deploy dev",
2459
- "deploy review",
2460
- "deploy stage",
2461
- "deploy prod",
2462
- "deploy local",
2463
- "verify",
2464
- "verify dev",
2465
- "verify review",
2466
- "verify stage",
2467
- "verify prod",
2468
- "verify local",
2469
- "rollback",
2470
- "rollback dev",
2471
- "rollback review",
2472
- "rollback stage",
2473
- "rollback prod",
2474
- "rollback local",
2475
- "stop",
2476
- "stop dev",
2477
- "stop review",
2478
- "stop stage",
2479
- "stop prod",
2480
- "stop local",
2481
- ],
2482
- "variables": {
2483
- "FF_USE_FASTZIP": "true",
2484
- },
2485
- "workflow": {
2486
- "rules": [
2487
- {
2488
- "if": "$CI_COMMIT_TAG",
2489
- },
2490
- {
2491
- "if": "$CI_COMMIT_MESSAGE =~ /^chore\\(release\\).*/",
2492
- "when": "never",
2493
- },
2494
- {
2495
- "if": "$CI_COMMIT_BRANCH =~ /^[0-9]+.([0-9]+|x).x$/",
2496
- },
2497
- {
2498
- "if": "$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH",
2499
- },
2500
- {
2501
- "if": "$CI_MERGE_REQUEST_ID",
2502
- },
2503
- ],
2504
- },
2505
- },
2506
- "taggedRelease": {
2507
- "image": "path/to/docker/jobs-default:the-version",
2508
- "jobs": {
2509
- "api ↩️ Rollback ⚠️ | prod ": {
2510
- "environment": {
2511
- "action": "access",
2512
- "name": "prod/api",
2513
- "url": "https://api.prod.test-app.pan.panter.cloud",
2514
- },
2515
- "image": "path/to/docker/kubernetes:the-version",
2516
- "interruptible": true,
2517
- "needs": [],
2518
- "retry": {
2519
- "max": 2,
2520
- "when": [
2521
- "runner_system_failure",
2522
- "stuck_or_timeout_failure",
2523
- ],
2524
- },
2525
- "rules": [
2526
- {
2527
- "allow_failure": true,
2528
- "when": "manual",
2529
- },
2530
- ],
2531
- "script": [
2532
- "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",
2533
- "kubectl config set-credentials "kube-pan-test-app-prod-api" --token="$CL_prod_api_KUBE_TOKEN"",
2534
- "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"",
2535
- "kubectl config use-context "kube-pan-test-app-prod-api"",
2536
- "kubernetesRollback",
2537
- ],
2538
- "stage": "rollback prod",
2539
- "variables": {
2540
- "APP_DIR": "api",
2541
- "BUILD_ID": "some-id",
2542
- "BUILD_INFO_BUILD_TIME": "01-01-2023 12:13:14",
2543
- "BUILD_INFO_CURRENT_VERSION": "3.2.1",
2544
- "BUILD_INFO_ID": "some-id",
2545
- "COMPONENT_NAME": "api",
2546
- "ENV_SHORT": "prod",
2547
- "ENV_TYPE": "prod",
2548
- "GIT_STRATEGY": "none",
2549
- "HELM_ARGS": "",
2550
- "HELM_EXPERIMENTAL_OCI": "1",
2551
- "HELM_GITLAB_CHART_NAME": "/helm-charts/the-panter-chart",
2552
- "HOST": "api.prod.test-app.pan.panter.cloud",
2553
- "HOST_CANONICAL": "api.prod.test-app.pan.panter.cloud",
2554
- "KUBERNETES_CPU_LIMIT": "1",
2555
- "KUBERNETES_CPU_REQUEST": "0.5",
2556
- "KUBERNETES_MEMORY_LIMIT": "400Mi",
2557
- "KUBERNETES_MEMORY_REQUEST": "200Mi",
2558
- "KUBE_APP_NAME": "api",
2559
- "KUBE_APP_NAME_PREFIX": "",
2560
- "KUBE_DOCKER_IMAGE_PULL_SECRET": "gitlab-registry-api",
2561
- "KUBE_NAMESPACE": "pan-test-app-prod",
2562
- "KUBE_VALUES": "env:
2563
- secret: {}
2564
- public:
2565
- ENV_SHORT: 'prod'
2566
- APP_DIR: 'api'
2567
- ENV_TYPE: 'prod'
2568
- BUILD_INFO_ID: 'some-id'
2569
- BUILD_INFO_BUILD_TIME: '01-01-2023 12:13:14'
2570
- BUILD_INFO_CURRENT_VERSION: '3.2.1'
2571
- HOST: 'api.prod.test-app.pan.panter.cloud'
2572
- ROOT_URL: 'https://api.prod.test-app.pan.panter.cloud'
2573
- KUBE_NAMESPACE: 'pan-test-app-prod'
2574
- KUBE_APP_NAME: 'api'
2575
- KUBE_APP_NAME_PREFIX: ''
2576
- HOST_CANONICAL: 'api.prod.test-app.pan.panter.cloud'
2577
- _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","KUBE_NAMESPACE","KUBE_APP_NAME","KUBE_APP_NAME_PREFIX","HOST_CANONICAL"]'
2578
- application:
2579
- host: 'api.prod.test-app.pan.panter.cloud'
2580
- command: 'yarn start'
2581
- livenessProbe:
2582
- httpGet:
2583
- path: '__health'
2584
- readinessProbe:
2585
- httpGet:
2586
- path: '__health'
2587
- startupProbe:
2588
- httpGet:
2589
- path: '__health'
2590
- jobs:
2591
- migration:
2592
- command: 'yarn migrate'
2593
- cronjobs:
2594
- send-emails:
2595
- command: 'yarn send emails'
2596
- schedule: '0 * * * *'
2597
- ",
2598
- "RELEASE_NAME": "pan-test-app-prod-api",
2599
- "ROOT_URL": "https://api.prod.test-app.pan.panter.cloud",
2600
- "_ALL_ENV_VAR_KEYS": "["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","KUBE_NAMESPACE","KUBE_APP_NAME","KUBE_APP_NAME_PREFIX","HOST_CANONICAL"]",
2601
- },
2602
- },
2603
- "api ↩️ Rollback ⚠️ | stage ": {
2604
- "environment": {
2605
- "action": "access",
2606
- "name": "stage/api",
2607
- "url": "https://api.stage.test-app.pan.panter.cloud",
2608
- },
2609
- "image": "path/to/docker/kubernetes:the-version",
2610
- "interruptible": true,
2611
- "needs": [],
2612
- "retry": {
2613
- "max": 2,
2614
- "when": [
2615
- "runner_system_failure",
2616
- "stuck_or_timeout_failure",
2617
- ],
2618
- },
2619
- "rules": [
2620
- {
2621
- "allow_failure": true,
2622
- "when": "manual",
2623
- },
2624
- ],
2625
- "script": [
2626
- "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",
2627
- "kubectl config set-credentials "kube-pan-test-app-stage-api" --token="$CL_stage_api_KUBE_TOKEN"",
2628
- "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"",
2629
- "kubectl config use-context "kube-pan-test-app-stage-api"",
2630
- "kubernetesRollback",
2631
- ],
2632
- "stage": "rollback stage",
2633
- "variables": {
2634
- "APP_DIR": "api",
2635
- "BUILD_ID": "some-id",
2636
- "BUILD_INFO_BUILD_TIME": "01-01-2023 12:13:14",
2637
- "BUILD_INFO_CURRENT_VERSION": "3.2.1",
2638
- "BUILD_INFO_ID": "some-id",
2639
- "COMPONENT_NAME": "api",
2640
- "ENV_SHORT": "stage",
2641
- "ENV_TYPE": "stage",
2642
- "GIT_STRATEGY": "none",
2643
- "HELM_ARGS": "",
2644
- "HELM_EXPERIMENTAL_OCI": "1",
2645
- "HELM_GITLAB_CHART_NAME": "/helm-charts/the-panter-chart",
2646
- "HOST": "api.stage.test-app.pan.panter.cloud",
2647
- "HOST_CANONICAL": "api.stage.test-app.pan.panter.cloud",
2648
- "KUBERNETES_CPU_LIMIT": "1",
2649
- "KUBERNETES_CPU_REQUEST": "0.5",
2650
- "KUBERNETES_MEMORY_LIMIT": "400Mi",
2651
- "KUBERNETES_MEMORY_REQUEST": "200Mi",
2652
- "KUBE_APP_NAME": "api",
2653
- "KUBE_APP_NAME_PREFIX": "",
2654
- "KUBE_DOCKER_IMAGE_PULL_SECRET": "gitlab-registry-api",
2655
- "KUBE_NAMESPACE": "pan-test-app-stage",
2656
- "KUBE_VALUES": "env:
2657
- secret: {}
2658
- public:
2659
- ENV_SHORT: 'stage'
2660
- APP_DIR: 'api'
2661
- ENV_TYPE: 'stage'
2662
- BUILD_INFO_ID: 'some-id'
2663
- BUILD_INFO_BUILD_TIME: '01-01-2023 12:13:14'
2664
- BUILD_INFO_CURRENT_VERSION: '3.2.1'
2665
- HOST: 'api.stage.test-app.pan.panter.cloud'
2666
- ROOT_URL: 'https://api.stage.test-app.pan.panter.cloud'
2667
- KUBE_NAMESPACE: 'pan-test-app-stage'
2668
- KUBE_APP_NAME: 'api'
2669
- KUBE_APP_NAME_PREFIX: ''
2670
- HOST_CANONICAL: 'api.stage.test-app.pan.panter.cloud'
2671
- _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","KUBE_NAMESPACE","KUBE_APP_NAME","KUBE_APP_NAME_PREFIX","HOST_CANONICAL"]'
2672
- application:
2673
- host: 'api.stage.test-app.pan.panter.cloud'
2674
- command: 'yarn start'
2675
- livenessProbe:
2676
- httpGet:
2677
- path: '__health'
2678
- readinessProbe:
2679
- httpGet:
2680
- path: '__health'
2681
- startupProbe:
2682
- httpGet:
2683
- path: '__health'
2684
- jobs:
2685
- migration:
2686
- command: 'yarn migrate'
2687
- cronjobs:
2688
- send-emails:
2689
- command: 'yarn send emails'
2690
- schedule: '0 * * * *'
2691
- ",
2692
- "RELEASE_NAME": "pan-test-app-stage-api",
2693
- "ROOT_URL": "https://api.stage.test-app.pan.panter.cloud",
2694
- "_ALL_ENV_VAR_KEYS": "["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","KUBE_NAMESPACE","KUBE_APP_NAME","KUBE_APP_NAME_PREFIX","HOST_CANONICAL"]",
2695
- },
2696
- },
2697
- "api 🔨 app | prod ": {
2698
- "artifacts": {
2699
- "expire_in": "1 day",
2700
- "paths": [
2701
- "api/__build_info.json",
2702
- "api/dist",
2703
- "api/.next",
2704
- ],
2705
- "reports": {
2706
- "junit": undefined,
2707
- },
2708
- },
2709
- "cache": [
2710
- {
2711
- "key": "api-yarn",
2712
- "paths": [
2713
- "api/.yarn",
2714
- ],
2715
- "policy": "pull-push",
2716
- },
2717
- {
2718
- "key": "api-node-modules",
2719
- "paths": [
2720
- "api/node_modules",
2721
- ],
2722
- "policy": "pull-push",
2723
- },
2724
- {
2725
- "key": "api-next-cache",
2726
- "paths": [
2727
- "api/.next/cache/",
2728
- ],
2729
- "policy": "pull-push",
2730
- },
2731
- ],
2732
- "image": "path/to/docker/jobs-default:the-version",
2733
- "interruptible": true,
2734
- "needs": [],
2735
- "retry": {
2736
- "max": 2,
2737
- "when": [
2738
- "runner_system_failure",
2739
- "stuck_or_timeout_failure",
2740
- ],
2741
- },
2742
- "script": [
2743
- "echo '{"id":"some-id","time":"01-01-2023 12:13:14"}' > api/__build_info.json",
2744
- "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
2745
- "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
2746
- "cd api",
2747
- "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
2748
- "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
2749
- "yarn install --immutable",
2750
- "yarn build",
2751
- ],
2752
- "stage": "build",
2753
- "variables": {
2754
- "APP_DIR": "api",
2755
- "BUILD_INFO_BUILD_TIME": "01-01-2023 12:13:14",
2756
- "BUILD_INFO_CURRENT_VERSION": "3.2.1",
2757
- "BUILD_INFO_ID": "some-id",
2758
- "ENV_SHORT": "prod",
2759
- "ENV_TYPE": "prod",
2760
- "HOST": "api.prod.test-app.pan.panter.cloud",
2761
- "HOST_CANONICAL": "api.prod.test-app.pan.panter.cloud",
2762
- "KUBERNETES_CPU_LIMIT": "2",
2763
- "KUBERNETES_CPU_REQUEST": "0.5",
2764
- "KUBERNETES_MEMORY_LIMIT": "4Gi",
2765
- "KUBERNETES_MEMORY_REQUEST": "2Gi",
2766
- "KUBE_APP_NAME": "api",
2767
- "KUBE_APP_NAME_PREFIX": "",
2768
- "KUBE_NAMESPACE": "pan-test-app-prod",
2769
- "ROOT_URL": "https://api.prod.test-app.pan.panter.cloud",
2770
- "_ALL_ENV_VAR_KEYS": "["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","KUBE_NAMESPACE","KUBE_APP_NAME","KUBE_APP_NAME_PREFIX","HOST_CANONICAL"]",
2771
- },
2772
- },
2773
- "api 🔨 app | stage ": {
2774
- "artifacts": {
2775
- "expire_in": "1 day",
2776
- "paths": [
2777
- "api/__build_info.json",
2778
- "api/dist",
2779
- "api/.next",
2780
- ],
2781
- "reports": {
2782
- "junit": undefined,
2783
- },
2784
- },
2785
- "cache": [
2786
- {
2787
- "key": "api-yarn",
2788
- "paths": [
2789
- "api/.yarn",
2790
- ],
2791
- "policy": "pull-push",
2792
- },
2793
- {
2794
- "key": "api-node-modules",
2795
- "paths": [
2796
- "api/node_modules",
2797
- ],
2798
- "policy": "pull-push",
2799
- },
2800
- {
2801
- "key": "api-next-cache",
2802
- "paths": [
2803
- "api/.next/cache/",
2804
- ],
2805
- "policy": "pull-push",
2806
- },
2807
- ],
2808
- "image": "path/to/docker/jobs-default:the-version",
2809
- "interruptible": true,
2810
- "needs": [],
2811
- "retry": {
2812
- "max": 2,
2813
- "when": [
2814
- "runner_system_failure",
2815
- "stuck_or_timeout_failure",
2816
- ],
2817
- },
2818
- "script": [
2819
- "echo '{"id":"some-id","time":"01-01-2023 12:13:14"}' > api/__build_info.json",
2820
- "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
2821
- "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
2822
- "cd api",
2823
- "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
2824
- "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
2825
- "yarn install --immutable",
2826
- "yarn build",
2827
- ],
2828
- "stage": "build",
2829
- "variables": {
2830
- "APP_DIR": "api",
2831
- "BUILD_INFO_BUILD_TIME": "01-01-2023 12:13:14",
2832
- "BUILD_INFO_CURRENT_VERSION": "3.2.1",
2833
- "BUILD_INFO_ID": "some-id",
2834
- "ENV_SHORT": "stage",
2835
- "ENV_TYPE": "stage",
2836
- "HOST": "api.stage.test-app.pan.panter.cloud",
2837
- "HOST_CANONICAL": "api.stage.test-app.pan.panter.cloud",
2838
- "KUBERNETES_CPU_LIMIT": "2",
2839
- "KUBERNETES_CPU_REQUEST": "0.5",
2840
- "KUBERNETES_MEMORY_LIMIT": "4Gi",
2841
- "KUBERNETES_MEMORY_REQUEST": "2Gi",
2842
- "KUBE_APP_NAME": "api",
2843
- "KUBE_APP_NAME_PREFIX": "",
2844
- "KUBE_NAMESPACE": "pan-test-app-stage",
2845
- "ROOT_URL": "https://api.stage.test-app.pan.panter.cloud",
2846
- "_ALL_ENV_VAR_KEYS": "["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","KUBE_NAMESPACE","KUBE_APP_NAME","KUBE_APP_NAME_PREFIX","HOST_CANONICAL"]",
2847
- },
2848
- },
2849
- "api 🔨 docker | prod ": {
2850
- "cache": [
2851
- {
2852
- "key": "api-yarn",
2853
- "paths": [
2854
- "api/.yarn",
2855
- ],
2856
- "policy": "pull",
2857
- },
2858
- ],
2859
- "image": "path/to/docker/docker-build:the-version",
2860
- "interruptible": true,
2861
- "needs": [
2862
- "api 🔨 app | prod ",
2863
- ],
2864
- "retry": {
2865
- "max": 2,
2866
- "when": [
2867
- "runner_system_failure",
2868
- "stuck_or_timeout_failure",
2869
- ],
2870
- },
2871
- "script": [
2872
- "ensureNodeDockerfile",
2873
- "docker login --username gitlab-ci-token --password $CI_JOB_TOKEN $CI_REGISTRY",
2874
- "docker version",
2875
- "docker build --network host --cache-from $DOCKER_CACHE_IMAGE --tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG -f $APP_DIR/Dockerfile . --build-arg BUILDKIT_INLINE_CACHE=1",
2876
- "docker push $DOCKER_IMAGE:$DOCKER_IMAGE_TAG",
2877
- "docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG $DOCKER_CACHE_IMAGE",
2878
- "docker push $DOCKER_CACHE_IMAGE",
2879
- ],
2880
- "services": [
2881
- {
2882
- "command": [
2883
- "--tls=false",
2884
- ],
2885
- "name": "docker:20-dind",
2886
- },
2887
- ],
2888
- "stage": "build",
2889
- "variables": {
2890
- "APP_DIR": "api",
2891
- "DOCKERFILE_ADDITIONS": undefined,
2892
- "DOCKERFILE_ADDITIONS_END": undefined,
2893
- "DOCKER_BUILDKIT": "1",
2894
- "DOCKER_CACHE_IMAGE": "$DOCKER_REGISTRY_IMAGE_PATH/caches/api",
2895
- "DOCKER_COPY_AND_INSTALL_APP": "COPY --chown=node:node $APP_DIR .
2896
- RUN yarn plugin import workspace-tools
2897
- RUN yarn workspaces focus --production && yarn rebuild",
2898
- "DOCKER_COPY_WORKSPACE_FILES": "COPY --chown=node:node api/package.json /app/api/package.json
2899
- COPY --chown=node:node api/yarn.lock /app/api/yarn.lock
2900
- COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
2901
- COPY --chown=node:node .yarn /app/.yarn",
2902
- "DOCKER_DIR": ".",
2903
- "DOCKER_DRIVER": "overlay2",
2904
- "DOCKER_HOST": "tcp://0.0.0.0:2375",
2905
- "DOCKER_IMAGE": "$DOCKER_REGISTRY_IMAGE_PATH/$DOCKER_IMAGE_NAME",
2906
- "DOCKER_IMAGE_NAME": "prod/api",
2907
- "DOCKER_IMAGE_TAG": "$CI_COMMIT_SHA",
2908
- "DOCKER_REGISTRY": "$CI_REGISTRY",
2909
- "DOCKER_REGISTRY_IMAGE_PATH": "$CI_REGISTRY_IMAGE",
2910
- "DOCKER_TLS_CERTDIR": "",
2911
- "KUBERNETES_CPU_LIMIT": "1",
2912
- "KUBERNETES_CPU_REQUEST": "0.5",
2913
- "KUBERNETES_MEMORY_LIMIT": "2Gi",
2914
- "KUBERNETES_MEMORY_REQUEST": "1Gi",
2915
- },
2916
- },
2917
- "api 🔨 docker | stage ": {
2918
- "cache": [
2919
- {
2920
- "key": "api-yarn",
2921
- "paths": [
2922
- "api/.yarn",
2923
- ],
2924
- "policy": "pull",
2925
- },
2926
- ],
2927
- "image": "path/to/docker/docker-build:the-version",
2928
- "interruptible": true,
2929
- "needs": [
2930
- "api 🔨 app | stage ",
2931
- ],
2932
- "retry": {
2933
- "max": 2,
2934
- "when": [
2935
- "runner_system_failure",
2936
- "stuck_or_timeout_failure",
2937
- ],
2938
- },
2939
- "script": [
2940
- "ensureNodeDockerfile",
2941
- "docker login --username gitlab-ci-token --password $CI_JOB_TOKEN $CI_REGISTRY",
2942
- "docker version",
2943
- "docker build --network host --cache-from $DOCKER_CACHE_IMAGE --tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG -f $APP_DIR/Dockerfile . --build-arg BUILDKIT_INLINE_CACHE=1",
2944
- "docker push $DOCKER_IMAGE:$DOCKER_IMAGE_TAG",
2945
- "docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG $DOCKER_CACHE_IMAGE",
2946
- "docker push $DOCKER_CACHE_IMAGE",
2947
- ],
2948
- "services": [
2949
- {
2950
- "command": [
2951
- "--tls=false",
2952
- ],
2953
- "name": "docker:20-dind",
2954
- },
2955
- ],
2956
- "stage": "build",
2957
- "variables": {
2958
- "APP_DIR": "api",
2959
- "DOCKERFILE_ADDITIONS": undefined,
2960
- "DOCKERFILE_ADDITIONS_END": undefined,
2961
- "DOCKER_BUILDKIT": "1",
2962
- "DOCKER_CACHE_IMAGE": "$DOCKER_REGISTRY_IMAGE_PATH/caches/api",
2963
- "DOCKER_COPY_AND_INSTALL_APP": "COPY --chown=node:node $APP_DIR .
2964
- RUN yarn plugin import workspace-tools
2965
- RUN yarn workspaces focus --production && yarn rebuild",
2966
- "DOCKER_COPY_WORKSPACE_FILES": "COPY --chown=node:node api/package.json /app/api/package.json
2967
- COPY --chown=node:node api/yarn.lock /app/api/yarn.lock
2968
- COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
2969
- COPY --chown=node:node .yarn /app/.yarn",
2970
- "DOCKER_DIR": ".",
2971
- "DOCKER_DRIVER": "overlay2",
2972
- "DOCKER_HOST": "tcp://0.0.0.0:2375",
2973
- "DOCKER_IMAGE": "$DOCKER_REGISTRY_IMAGE_PATH/$DOCKER_IMAGE_NAME",
2974
- "DOCKER_IMAGE_NAME": "stage/api",
2975
- "DOCKER_IMAGE_TAG": "$CI_COMMIT_SHA",
2976
- "DOCKER_REGISTRY": "$CI_REGISTRY",
2977
- "DOCKER_REGISTRY_IMAGE_PATH": "$CI_REGISTRY_IMAGE",
2978
- "DOCKER_TLS_CERTDIR": "",
2979
- "KUBERNETES_CPU_LIMIT": "1",
2980
- "KUBERNETES_CPU_REQUEST": "0.5",
2981
- "KUBERNETES_MEMORY_LIMIT": "2Gi",
2982
- "KUBERNETES_MEMORY_REQUEST": "1Gi",
2983
- },
2984
- },
2985
- "api 🚀 Deploy | prod ": {
2986
- "allow_failure": true,
2987
- "environment": {
2988
- "auto_stop_in": undefined,
2989
- "name": "prod/api",
2990
- "on_stop": "api 🛑 Stop ⚠️ | prod ",
2991
- "url": "https://api.prod.test-app.pan.panter.cloud",
2992
- },
2993
- "image": "path/to/docker/kubernetes:the-version",
2994
- "interruptible": true,
2995
- "needs": [
2996
- {
2997
- "artifacts": false,
2998
- "job": "api 🔨 app | prod ",
2999
- },
3000
- {
3001
- "artifacts": false,
3002
- "job": "api 🔨 docker | prod ",
3003
- },
3004
- {
3005
- "artifacts": true,
3006
- "job": "api 🧾 sbom | prod ",
3007
- },
3008
- ],
3009
- "retry": {
3010
- "max": 2,
3011
- "when": [
3012
- "runner_system_failure",
3013
- "stuck_or_timeout_failure",
3014
- ],
3015
- },
3016
- "rules": [
3017
- {
3018
- "when": "manual",
3019
- },
3020
- ],
3021
- "script": [
3022
- "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",
3023
- "kubectl config set-credentials "kube-pan-test-app-prod-api" --token="$CL_prod_api_KUBE_TOKEN"",
3024
- "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"",
3025
- "kubectl config use-context "kube-pan-test-app-prod-api"",
3026
- "kubernetesCreateSecret",
3027
- "kubernetesDeploy",
3028
- "echo Uploading SBOM to Dependency Track",
3029
- "/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",
3030
- "echo deployment successful 😻",
3031
- ],
3032
- "stage": "deploy prod",
3033
- "variables": {
3034
- "APP_DIR": "api",
3035
- "BUILD_ID": "some-id",
3036
- "BUILD_INFO_BUILD_TIME": "01-01-2023 12:13:14",
3037
- "BUILD_INFO_CURRENT_VERSION": "3.2.1",
3038
- "BUILD_INFO_ID": "some-id",
3039
- "COMPONENT_NAME": "api",
3040
- "DOCKER_CACHE_IMAGE": "$DOCKER_REGISTRY_IMAGE_PATH/caches/api",
3041
- "DOCKER_IMAGE": "$DOCKER_REGISTRY_IMAGE_PATH/$DOCKER_IMAGE_NAME",
3042
- "DOCKER_IMAGE_NAME": "prod/api",
3043
- "DOCKER_IMAGE_TAG": "$CI_COMMIT_SHA",
3044
- "DOCKER_REGISTRY": "$CI_REGISTRY",
3045
- "DOCKER_REGISTRY_IMAGE_PATH": "$CI_REGISTRY_IMAGE",
3046
- "ENV_SHORT": "prod",
3047
- "ENV_TYPE": "prod",
3048
- "HELM_ARGS": "",
3049
- "HELM_EXPERIMENTAL_OCI": "1",
3050
- "HELM_GITLAB_CHART_NAME": "/helm-charts/the-panter-chart",
3051
- "HOST": "api.prod.test-app.pan.panter.cloud",
3052
- "HOST_CANONICAL": "api.prod.test-app.pan.panter.cloud",
3053
- "KUBERNETES_CPU_LIMIT": "1",
3054
- "KUBERNETES_CPU_REQUEST": "0.5",
3055
- "KUBERNETES_MEMORY_LIMIT": "400Mi",
3056
- "KUBERNETES_MEMORY_REQUEST": "200Mi",
3057
- "KUBE_APP_NAME": "api",
3058
- "KUBE_APP_NAME_PREFIX": "",
3059
- "KUBE_DOCKER_IMAGE_PULL_SECRET": "gitlab-registry-api",
3060
- "KUBE_NAMESPACE": "pan-test-app-prod",
3061
- "KUBE_VALUES": "env:
3062
- secret: {}
3063
- public:
3064
- ENV_SHORT: 'prod'
3065
- APP_DIR: 'api'
3066
- ENV_TYPE: 'prod'
3067
- BUILD_INFO_ID: 'some-id'
3068
- BUILD_INFO_BUILD_TIME: '01-01-2023 12:13:14'
3069
- BUILD_INFO_CURRENT_VERSION: '3.2.1'
3070
- HOST: 'api.prod.test-app.pan.panter.cloud'
3071
- ROOT_URL: 'https://api.prod.test-app.pan.panter.cloud'
3072
- KUBE_NAMESPACE: 'pan-test-app-prod'
3073
- KUBE_APP_NAME: 'api'
3074
- KUBE_APP_NAME_PREFIX: ''
3075
- HOST_CANONICAL: 'api.prod.test-app.pan.panter.cloud'
3076
- _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","KUBE_NAMESPACE","KUBE_APP_NAME","KUBE_APP_NAME_PREFIX","HOST_CANONICAL"]'
3077
- application:
3078
- host: 'api.prod.test-app.pan.panter.cloud'
3079
- command: 'yarn start'
3080
- livenessProbe:
3081
- httpGet:
3082
- path: '__health'
3083
- readinessProbe:
3084
- httpGet:
3085
- path: '__health'
3086
- startupProbe:
3087
- httpGet:
3088
- path: '__health'
3089
- jobs:
3090
- migration:
3091
- command: 'yarn migrate'
3092
- cronjobs:
3093
- send-emails:
3094
- command: 'yarn send emails'
3095
- schedule: '0 * * * *'
3096
- ",
3097
- "RELEASE_NAME": "pan-test-app-prod-api",
3098
- "ROOT_URL": "https://api.prod.test-app.pan.panter.cloud",
3099
- "_ALL_ENV_VAR_KEYS": "["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","KUBE_NAMESPACE","KUBE_APP_NAME","KUBE_APP_NAME_PREFIX","HOST_CANONICAL"]",
3100
- },
3101
- },
3102
- "api 🚀 Deploy | stage ": {
3103
- "allow_failure": false,
3104
- "environment": {
3105
- "auto_stop_in": undefined,
3106
- "name": "stage/api",
3107
- "on_stop": "api 🛑 Stop ⚠️ | stage ",
3108
- "url": "https://api.stage.test-app.pan.panter.cloud",
3109
- },
3110
- "image": "path/to/docker/kubernetes:the-version",
3111
- "interruptible": true,
3112
- "needs": [
3113
- {
3114
- "artifacts": false,
3115
- "job": "api 🔨 app | stage ",
3116
- },
3117
- {
3118
- "artifacts": false,
3119
- "job": "api 🔨 docker | stage ",
3120
- },
3121
- {
3122
- "artifacts": true,
3123
- "job": "api 🧾 sbom | stage ",
3124
- },
3125
- ],
3126
- "retry": {
3127
- "max": 2,
3128
- "when": [
3129
- "runner_system_failure",
3130
- "stuck_or_timeout_failure",
3131
- ],
3132
- },
3133
- "rules": [
3134
- {
3135
- "when": "on_success",
3136
- },
3137
- ],
3138
- "script": [
3139
- "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",
3140
- "kubectl config set-credentials "kube-pan-test-app-stage-api" --token="$CL_stage_api_KUBE_TOKEN"",
3141
- "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"",
3142
- "kubectl config use-context "kube-pan-test-app-stage-api"",
3143
- "kubernetesCreateSecret",
3144
- "kubernetesDeploy",
3145
- "echo Uploading SBOM to Dependency Track",
3146
- "/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",
3147
- "echo deployment successful 😻",
3148
- ],
3149
- "stage": "deploy stage",
3150
- "variables": {
3151
- "APP_DIR": "api",
3152
- "BUILD_ID": "some-id",
3153
- "BUILD_INFO_BUILD_TIME": "01-01-2023 12:13:14",
3154
- "BUILD_INFO_CURRENT_VERSION": "3.2.1",
3155
- "BUILD_INFO_ID": "some-id",
3156
- "COMPONENT_NAME": "api",
3157
- "DOCKER_CACHE_IMAGE": "$DOCKER_REGISTRY_IMAGE_PATH/caches/api",
3158
- "DOCKER_IMAGE": "$DOCKER_REGISTRY_IMAGE_PATH/$DOCKER_IMAGE_NAME",
3159
- "DOCKER_IMAGE_NAME": "stage/api",
3160
- "DOCKER_IMAGE_TAG": "$CI_COMMIT_SHA",
3161
- "DOCKER_REGISTRY": "$CI_REGISTRY",
3162
- "DOCKER_REGISTRY_IMAGE_PATH": "$CI_REGISTRY_IMAGE",
3163
- "ENV_SHORT": "stage",
3164
- "ENV_TYPE": "stage",
3165
- "HELM_ARGS": "",
3166
- "HELM_EXPERIMENTAL_OCI": "1",
3167
- "HELM_GITLAB_CHART_NAME": "/helm-charts/the-panter-chart",
3168
- "HOST": "api.stage.test-app.pan.panter.cloud",
3169
- "HOST_CANONICAL": "api.stage.test-app.pan.panter.cloud",
3170
- "KUBERNETES_CPU_LIMIT": "1",
3171
- "KUBERNETES_CPU_REQUEST": "0.5",
3172
- "KUBERNETES_MEMORY_LIMIT": "400Mi",
3173
- "KUBERNETES_MEMORY_REQUEST": "200Mi",
3174
- "KUBE_APP_NAME": "api",
3175
- "KUBE_APP_NAME_PREFIX": "",
3176
- "KUBE_DOCKER_IMAGE_PULL_SECRET": "gitlab-registry-api",
3177
- "KUBE_NAMESPACE": "pan-test-app-stage",
3178
- "KUBE_VALUES": "env:
3179
- secret: {}
3180
- public:
3181
- ENV_SHORT: 'stage'
3182
- APP_DIR: 'api'
3183
- ENV_TYPE: 'stage'
3184
- BUILD_INFO_ID: 'some-id'
3185
- BUILD_INFO_BUILD_TIME: '01-01-2023 12:13:14'
3186
- BUILD_INFO_CURRENT_VERSION: '3.2.1'
3187
- HOST: 'api.stage.test-app.pan.panter.cloud'
3188
- ROOT_URL: 'https://api.stage.test-app.pan.panter.cloud'
3189
- KUBE_NAMESPACE: 'pan-test-app-stage'
3190
- KUBE_APP_NAME: 'api'
3191
- KUBE_APP_NAME_PREFIX: ''
3192
- HOST_CANONICAL: 'api.stage.test-app.pan.panter.cloud'
3193
- _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","KUBE_NAMESPACE","KUBE_APP_NAME","KUBE_APP_NAME_PREFIX","HOST_CANONICAL"]'
3194
- application:
3195
- host: 'api.stage.test-app.pan.panter.cloud'
3196
- command: 'yarn start'
3197
- livenessProbe:
3198
- httpGet:
3199
- path: '__health'
3200
- readinessProbe:
3201
- httpGet:
3202
- path: '__health'
3203
- startupProbe:
3204
- httpGet:
3205
- path: '__health'
3206
- jobs:
3207
- migration:
3208
- command: 'yarn migrate'
3209
- cronjobs:
3210
- send-emails:
3211
- command: 'yarn send emails'
3212
- schedule: '0 * * * *'
3213
- ",
3214
- "RELEASE_NAME": "pan-test-app-stage-api",
3215
- "ROOT_URL": "https://api.stage.test-app.pan.panter.cloud",
3216
- "_ALL_ENV_VAR_KEYS": "["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","KUBE_NAMESPACE","KUBE_APP_NAME","KUBE_APP_NAME_PREFIX","HOST_CANONICAL"]",
3217
- },
3218
- },
3219
- "api 🛑 Stop ⚠️ | prod ": {
3220
- "environment": {
3221
- "action": "stop",
3222
- "name": "prod/api",
3223
- "url": "https://api.prod.test-app.pan.panter.cloud",
3224
- },
3225
- "image": "path/to/docker/kubernetes:the-version",
3226
- "interruptible": true,
3227
- "needs": [],
3228
- "retry": {
3229
- "max": 2,
3230
- "when": [
3231
- "runner_system_failure",
3232
- "stuck_or_timeout_failure",
3233
- ],
3234
- },
3235
- "rules": [
3236
- {
3237
- "allow_failure": true,
3238
- "if": "$CI_COMMIT_BRANCH =~ /^[0-9]+\\.([0-9]+|x)\\.x$/",
3239
- "when": "on_success",
3240
- },
3241
- {
3242
- "allow_failure": true,
3243
- "when": "manual",
3244
- },
3245
- ],
3246
- "script": [
3247
- "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",
3248
- "kubectl config set-credentials "kube-pan-test-app-prod-api" --token="$CL_prod_api_KUBE_TOKEN"",
3249
- "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"",
3250
- "kubectl config use-context "kube-pan-test-app-prod-api"",
3251
- "kubernetesDelete",
3252
- "echo Disabling component in Dependency Track",
3253
- "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" disable "pan-test-app/api" "https://api.prod.test-app.pan.panter.cloud" || true",
3254
- ],
3255
- "stage": "stop prod",
3256
- "variables": {
3257
- "APP_DIR": "api",
3258
- "BUILD_ID": "some-id",
3259
- "BUILD_INFO_BUILD_TIME": "01-01-2023 12:13:14",
3260
- "BUILD_INFO_CURRENT_VERSION": "3.2.1",
3261
- "BUILD_INFO_ID": "some-id",
3262
- "COMPONENT_NAME": "api",
3263
- "ENV_SHORT": "prod",
3264
- "ENV_TYPE": "prod",
3265
- "GIT_STRATEGY": "none",
3266
- "HELM_ARGS": "",
3267
- "HELM_EXPERIMENTAL_OCI": "1",
3268
- "HELM_GITLAB_CHART_NAME": "/helm-charts/the-panter-chart",
3269
- "HOST": "api.prod.test-app.pan.panter.cloud",
3270
- "HOST_CANONICAL": "api.prod.test-app.pan.panter.cloud",
3271
- "KUBERNETES_CPU_LIMIT": "1",
3272
- "KUBERNETES_CPU_REQUEST": "0.5",
3273
- "KUBERNETES_MEMORY_LIMIT": "400Mi",
3274
- "KUBERNETES_MEMORY_REQUEST": "200Mi",
3275
- "KUBE_APP_NAME": "api",
3276
- "KUBE_APP_NAME_PREFIX": "",
3277
- "KUBE_DOCKER_IMAGE_PULL_SECRET": "gitlab-registry-api",
3278
- "KUBE_NAMESPACE": "pan-test-app-prod",
3279
- "KUBE_VALUES": "env:
3280
- secret: {}
3281
- public:
3282
- ENV_SHORT: 'prod'
3283
- APP_DIR: 'api'
3284
- ENV_TYPE: 'prod'
3285
- BUILD_INFO_ID: 'some-id'
3286
- BUILD_INFO_BUILD_TIME: '01-01-2023 12:13:14'
3287
- BUILD_INFO_CURRENT_VERSION: '3.2.1'
3288
- HOST: 'api.prod.test-app.pan.panter.cloud'
3289
- ROOT_URL: 'https://api.prod.test-app.pan.panter.cloud'
3290
- KUBE_NAMESPACE: 'pan-test-app-prod'
3291
- KUBE_APP_NAME: 'api'
3292
- KUBE_APP_NAME_PREFIX: ''
3293
- HOST_CANONICAL: 'api.prod.test-app.pan.panter.cloud'
3294
- _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","KUBE_NAMESPACE","KUBE_APP_NAME","KUBE_APP_NAME_PREFIX","HOST_CANONICAL"]'
3295
- application:
3296
- host: 'api.prod.test-app.pan.panter.cloud'
3297
- command: 'yarn start'
3298
- livenessProbe:
3299
- httpGet:
3300
- path: '__health'
3301
- readinessProbe:
3302
- httpGet:
3303
- path: '__health'
3304
- startupProbe:
3305
- httpGet:
3306
- path: '__health'
3307
- jobs:
3308
- migration:
3309
- command: 'yarn migrate'
3310
- cronjobs:
3311
- send-emails:
3312
- command: 'yarn send emails'
3313
- schedule: '0 * * * *'
3314
- ",
3315
- "RELEASE_NAME": "pan-test-app-prod-api",
3316
- "ROOT_URL": "https://api.prod.test-app.pan.panter.cloud",
3317
- "_ALL_ENV_VAR_KEYS": "["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","KUBE_NAMESPACE","KUBE_APP_NAME","KUBE_APP_NAME_PREFIX","HOST_CANONICAL"]",
3318
- },
3319
- },
3320
- "api 🛑 Stop ⚠️ | stage ": {
3321
- "environment": {
3322
- "action": "stop",
3323
- "name": "stage/api",
3324
- "url": "https://api.stage.test-app.pan.panter.cloud",
3325
- },
3326
- "image": "path/to/docker/kubernetes:the-version",
3327
- "interruptible": true,
3328
- "needs": [],
3329
- "retry": {
3330
- "max": 2,
3331
- "when": [
3332
- "runner_system_failure",
3333
- "stuck_or_timeout_failure",
3334
- ],
3335
- },
3336
- "rules": [
3337
- {
3338
- "allow_failure": true,
3339
- "if": "$CI_COMMIT_BRANCH =~ /^[0-9]+\\.([0-9]+|x)\\.x$/",
3340
- "when": "on_success",
3341
- },
3342
- {
3343
- "allow_failure": true,
3344
- "when": "manual",
3345
- },
3346
- ],
3347
- "script": [
3348
- "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",
3349
- "kubectl config set-credentials "kube-pan-test-app-stage-api" --token="$CL_stage_api_KUBE_TOKEN"",
3350
- "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"",
3351
- "kubectl config use-context "kube-pan-test-app-stage-api"",
3352
- "kubernetesDelete",
3353
- "echo Disabling component in Dependency Track",
3354
- "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" disable "pan-test-app/api" "https://api.stage.test-app.pan.panter.cloud" || true",
3355
- ],
3356
- "stage": "stop stage",
3357
- "variables": {
3358
- "APP_DIR": "api",
3359
- "BUILD_ID": "some-id",
3360
- "BUILD_INFO_BUILD_TIME": "01-01-2023 12:13:14",
3361
- "BUILD_INFO_CURRENT_VERSION": "3.2.1",
3362
- "BUILD_INFO_ID": "some-id",
3363
- "COMPONENT_NAME": "api",
3364
- "ENV_SHORT": "stage",
3365
- "ENV_TYPE": "stage",
3366
- "GIT_STRATEGY": "none",
3367
- "HELM_ARGS": "",
3368
- "HELM_EXPERIMENTAL_OCI": "1",
3369
- "HELM_GITLAB_CHART_NAME": "/helm-charts/the-panter-chart",
3370
- "HOST": "api.stage.test-app.pan.panter.cloud",
3371
- "HOST_CANONICAL": "api.stage.test-app.pan.panter.cloud",
3372
- "KUBERNETES_CPU_LIMIT": "1",
3373
- "KUBERNETES_CPU_REQUEST": "0.5",
3374
- "KUBERNETES_MEMORY_LIMIT": "400Mi",
3375
- "KUBERNETES_MEMORY_REQUEST": "200Mi",
3376
- "KUBE_APP_NAME": "api",
3377
- "KUBE_APP_NAME_PREFIX": "",
3378
- "KUBE_DOCKER_IMAGE_PULL_SECRET": "gitlab-registry-api",
3379
- "KUBE_NAMESPACE": "pan-test-app-stage",
3380
- "KUBE_VALUES": "env:
3381
- secret: {}
3382
- public:
3383
- ENV_SHORT: 'stage'
3384
- APP_DIR: 'api'
3385
- ENV_TYPE: 'stage'
3386
- BUILD_INFO_ID: 'some-id'
3387
- BUILD_INFO_BUILD_TIME: '01-01-2023 12:13:14'
3388
- BUILD_INFO_CURRENT_VERSION: '3.2.1'
3389
- HOST: 'api.stage.test-app.pan.panter.cloud'
3390
- ROOT_URL: 'https://api.stage.test-app.pan.panter.cloud'
3391
- KUBE_NAMESPACE: 'pan-test-app-stage'
3392
- KUBE_APP_NAME: 'api'
3393
- KUBE_APP_NAME_PREFIX: ''
3394
- HOST_CANONICAL: 'api.stage.test-app.pan.panter.cloud'
3395
- _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","KUBE_NAMESPACE","KUBE_APP_NAME","KUBE_APP_NAME_PREFIX","HOST_CANONICAL"]'
3396
- application:
3397
- host: 'api.stage.test-app.pan.panter.cloud'
3398
- command: 'yarn start'
3399
- livenessProbe:
3400
- httpGet:
3401
- path: '__health'
3402
- readinessProbe:
3403
- httpGet:
3404
- path: '__health'
3405
- startupProbe:
3406
- httpGet:
3407
- path: '__health'
3408
- jobs:
3409
- migration:
3410
- command: 'yarn migrate'
3411
- cronjobs:
3412
- send-emails:
3413
- command: 'yarn send emails'
3414
- schedule: '0 * * * *'
3415
- ",
3416
- "RELEASE_NAME": "pan-test-app-stage-api",
3417
- "ROOT_URL": "https://api.stage.test-app.pan.panter.cloud",
3418
- "_ALL_ENV_VAR_KEYS": "["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","KUBE_NAMESPACE","KUBE_APP_NAME","KUBE_APP_NAME_PREFIX","HOST_CANONICAL"]",
3419
- },
3420
- },
3421
- "api 🧾 sbom | prod ": {
3422
- "allow_failure": true,
3423
- "artifacts": {
3424
- "paths": [
3425
- "__sbom.json",
3426
- ],
3427
- },
3428
- "image": "aquasec/trivy:0.38.3",
3429
- "interruptible": true,
3430
- "needs": [],
3431
- "retry": {
3432
- "max": 2,
3433
- "when": [
3434
- "runner_system_failure",
3435
- "stuck_or_timeout_failure",
3436
- ],
3437
- },
3438
- "script": [
3439
- "trivy fs --quiet --format cyclonedx --output "__sbom.json" api",
3440
- ],
3441
- "stage": "build",
3442
- "variables": {},
3443
- },
3444
- "api 🧾 sbom | stage ": {
3445
- "allow_failure": true,
3446
- "artifacts": {
3447
- "paths": [
3448
- "__sbom.json",
3449
- ],
3450
- },
3451
- "image": "aquasec/trivy:0.38.3",
3452
- "interruptible": true,
3453
- "needs": [],
3454
- "retry": {
3455
- "max": 2,
3456
- "when": [
3457
- "runner_system_failure",
3458
- "stuck_or_timeout_failure",
3459
- ],
3460
- },
3461
- "script": [
3462
- "trivy fs --quiet --format cyclonedx --output "__sbom.json" api",
3463
- ],
3464
- "stage": "build",
3465
- "variables": {},
3466
- },
3467
- "www ↩️ Rollback ⚠️ | prod ": {
3468
- "environment": {
3469
- "action": "access",
3470
- "name": "prod/www",
3471
- "url": "https://www.prod.test-app.pan.panter.cloud",
3472
- },
3473
- "image": "path/to/docker/kubernetes:the-version",
3474
- "interruptible": true,
3475
- "needs": [],
3476
- "retry": {
3477
- "max": 2,
3478
- "when": [
3479
- "runner_system_failure",
3480
- "stuck_or_timeout_failure",
3481
- ],
3482
- },
3483
- "rules": [
3484
- {
3485
- "allow_failure": true,
3486
- "when": "manual",
3487
- },
3488
- ],
3489
- "script": [
3490
- "kubectl config set-cluster "kube-pan-test-app-prod-www" --server="$CL_prod_www_KUBE_URL" --certificate-authority <(echo $CL_prod_www_KUBE_CA_PEM | base64 -d) --embed-certs=true",
3491
- "kubectl config set-credentials "kube-pan-test-app-prod-www" --token="$CL_prod_www_KUBE_TOKEN"",
3492
- "kubectl config set-context "kube-pan-test-app-prod-www" --cluster="kube-pan-test-app-prod-www" --user="kube-pan-test-app-prod-www" --namespace="pan-test-app-prod"",
3493
- "kubectl config use-context "kube-pan-test-app-prod-www"",
3494
- "kubernetesRollback",
3495
- ],
3496
- "stage": "rollback prod",
3497
- "variables": {
3498
- "APP_DIR": "www",
3499
- "BUILD_ID": "some-id",
3500
- "BUILD_INFO_BUILD_TIME": "01-01-2023 12:13:14",
3501
- "BUILD_INFO_CURRENT_VERSION": "3.2.1",
3502
- "BUILD_INFO_ID": "some-id",
3503
- "COMPONENT_NAME": "www",
3504
- "ENV_SHORT": "prod",
3505
- "ENV_TYPE": "prod",
3506
- "GIT_STRATEGY": "none",
3507
- "HELM_ARGS": "",
3508
- "HELM_EXPERIMENTAL_OCI": "1",
3509
- "HELM_GITLAB_CHART_NAME": "/helm-charts/the-panter-chart",
3510
- "HOST": "www.prod.test-app.pan.panter.cloud",
3511
- "HOST_CANONICAL": "www.prod.test-app.pan.panter.cloud",
3512
- "KUBERNETES_CPU_LIMIT": "1",
3513
- "KUBERNETES_CPU_REQUEST": "0.5",
3514
- "KUBERNETES_MEMORY_LIMIT": "400Mi",
3515
- "KUBERNETES_MEMORY_REQUEST": "200Mi",
3516
- "KUBE_APP_NAME": "www",
3517
- "KUBE_APP_NAME_PREFIX": "",
3518
- "KUBE_DOCKER_IMAGE_PULL_SECRET": "gitlab-registry-www",
3519
- "KUBE_NAMESPACE": "pan-test-app-prod",
3520
- "KUBE_VALUES": "env:
3521
- secret: {}
3522
- public:
3523
- ENV_SHORT: 'prod'
3524
- APP_DIR: 'www'
3525
- ENV_TYPE: 'prod'
3526
- BUILD_INFO_ID: 'some-id'
3527
- BUILD_INFO_BUILD_TIME: '01-01-2023 12:13:14'
3528
- BUILD_INFO_CURRENT_VERSION: '3.2.1'
3529
- HOST: 'www.prod.test-app.pan.panter.cloud'
3530
- ROOT_URL: 'https://www.prod.test-app.pan.panter.cloud'
3531
- KUBE_NAMESPACE: 'pan-test-app-prod'
3532
- KUBE_APP_NAME: 'www'
3533
- KUBE_APP_NAME_PREFIX: ''
3534
- HOST_CANONICAL: 'www.prod.test-app.pan.panter.cloud'
3535
- _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","KUBE_NAMESPACE","KUBE_APP_NAME","KUBE_APP_NAME_PREFIX","HOST_CANONICAL"]'
3536
- application:
3537
- host: 'www.prod.test-app.pan.panter.cloud'
3538
- command: 'yarn start'
3539
- livenessProbe:
3540
- httpGet:
3541
- path: '__health'
3542
- readinessProbe:
3543
- httpGet:
3544
- path: '__health'
3545
- startupProbe:
3546
- httpGet:
3547
- path: '__health'
3548
- ",
3549
- "RELEASE_NAME": "pan-test-app-prod-www",
3550
- "ROOT_URL": "https://www.prod.test-app.pan.panter.cloud",
3551
- "_ALL_ENV_VAR_KEYS": "["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","KUBE_NAMESPACE","KUBE_APP_NAME","KUBE_APP_NAME_PREFIX","HOST_CANONICAL"]",
3552
- },
3553
- },
3554
- "www ↩️ Rollback ⚠️ | stage ": {
3555
- "environment": {
3556
- "action": "access",
3557
- "name": "stage/www",
3558
- "url": "https://www.stage.test-app.pan.panter.cloud",
3559
- },
3560
- "image": "path/to/docker/kubernetes:the-version",
3561
- "interruptible": true,
3562
- "needs": [],
3563
- "retry": {
3564
- "max": 2,
3565
- "when": [
3566
- "runner_system_failure",
3567
- "stuck_or_timeout_failure",
3568
- ],
3569
- },
3570
- "rules": [
3571
- {
3572
- "allow_failure": true,
3573
- "when": "manual",
3574
- },
3575
- ],
3576
- "script": [
3577
- "kubectl config set-cluster "kube-pan-test-app-stage-www" --server="$CL_stage_www_KUBE_URL" --certificate-authority <(echo $CL_stage_www_KUBE_CA_PEM | base64 -d) --embed-certs=true",
3578
- "kubectl config set-credentials "kube-pan-test-app-stage-www" --token="$CL_stage_www_KUBE_TOKEN"",
3579
- "kubectl config set-context "kube-pan-test-app-stage-www" --cluster="kube-pan-test-app-stage-www" --user="kube-pan-test-app-stage-www" --namespace="pan-test-app-stage"",
3580
- "kubectl config use-context "kube-pan-test-app-stage-www"",
3581
- "kubernetesRollback",
3582
- ],
3583
- "stage": "rollback stage",
3584
- "variables": {
3585
- "APP_DIR": "www",
3586
- "BUILD_ID": "some-id",
3587
- "BUILD_INFO_BUILD_TIME": "01-01-2023 12:13:14",
3588
- "BUILD_INFO_CURRENT_VERSION": "3.2.1",
3589
- "BUILD_INFO_ID": "some-id",
3590
- "COMPONENT_NAME": "www",
3591
- "ENV_SHORT": "stage",
3592
- "ENV_TYPE": "stage",
3593
- "GIT_STRATEGY": "none",
3594
- "HELM_ARGS": "",
3595
- "HELM_EXPERIMENTAL_OCI": "1",
3596
- "HELM_GITLAB_CHART_NAME": "/helm-charts/the-panter-chart",
3597
- "HOST": "www.stage.test-app.pan.panter.cloud",
3598
- "HOST_CANONICAL": "www.stage.test-app.pan.panter.cloud",
3599
- "KUBERNETES_CPU_LIMIT": "1",
3600
- "KUBERNETES_CPU_REQUEST": "0.5",
3601
- "KUBERNETES_MEMORY_LIMIT": "400Mi",
3602
- "KUBERNETES_MEMORY_REQUEST": "200Mi",
3603
- "KUBE_APP_NAME": "www",
3604
- "KUBE_APP_NAME_PREFIX": "",
3605
- "KUBE_DOCKER_IMAGE_PULL_SECRET": "gitlab-registry-www",
3606
- "KUBE_NAMESPACE": "pan-test-app-stage",
3607
- "KUBE_VALUES": "env:
3608
- secret: {}
3609
- public:
3610
- ENV_SHORT: 'stage'
3611
- APP_DIR: 'www'
3612
- ENV_TYPE: 'stage'
3613
- BUILD_INFO_ID: 'some-id'
3614
- BUILD_INFO_BUILD_TIME: '01-01-2023 12:13:14'
3615
- BUILD_INFO_CURRENT_VERSION: '3.2.1'
3616
- HOST: 'www.stage.test-app.pan.panter.cloud'
3617
- ROOT_URL: 'https://www.stage.test-app.pan.panter.cloud'
3618
- KUBE_NAMESPACE: 'pan-test-app-stage'
3619
- KUBE_APP_NAME: 'www'
3620
- KUBE_APP_NAME_PREFIX: ''
3621
- HOST_CANONICAL: 'www.stage.test-app.pan.panter.cloud'
3622
- _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","KUBE_NAMESPACE","KUBE_APP_NAME","KUBE_APP_NAME_PREFIX","HOST_CANONICAL"]'
3623
- application:
3624
- host: 'www.stage.test-app.pan.panter.cloud'
3625
- command: 'yarn start'
3626
- livenessProbe:
3627
- httpGet:
3628
- path: '__health'
3629
- readinessProbe:
3630
- httpGet:
3631
- path: '__health'
3632
- startupProbe:
3633
- httpGet:
3634
- path: '__health'
3635
- ",
3636
- "RELEASE_NAME": "pan-test-app-stage-www",
3637
- "ROOT_URL": "https://www.stage.test-app.pan.panter.cloud",
3638
- "_ALL_ENV_VAR_KEYS": "["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","KUBE_NAMESPACE","KUBE_APP_NAME","KUBE_APP_NAME_PREFIX","HOST_CANONICAL"]",
3639
- },
3640
- },
3641
- "www 🔨 app | prod ": {
3642
- "artifacts": {
3643
- "expire_in": "1 day",
3644
- "paths": [
3645
- "www/__build_info.json",
3646
- "www/dist",
3647
- "www/.next",
3648
- ],
3649
- "reports": {
3650
- "junit": undefined,
3651
- },
3652
- },
3653
- "cache": [
3654
- {
3655
- "key": "www-yarn",
3656
- "paths": [
3657
- "www/.yarn",
3658
- ],
3659
- "policy": "pull-push",
3660
- },
3661
- {
3662
- "key": "www-node-modules",
3663
- "paths": [
3664
- "www/node_modules",
3665
- ],
3666
- "policy": "pull-push",
3667
- },
3668
- {
3669
- "key": "www-next-cache",
3670
- "paths": [
3671
- "www/.next/cache/",
3672
- ],
3673
- "policy": "pull-push",
3674
- },
3675
- ],
3676
- "image": "path/to/docker/jobs-default:the-version",
3677
- "interruptible": true,
3678
- "needs": [],
3679
- "retry": {
3680
- "max": 2,
3681
- "when": [
3682
- "runner_system_failure",
3683
- "stuck_or_timeout_failure",
3684
- ],
3685
- },
3686
- "script": [
3687
- "echo '{"id":"some-id","time":"01-01-2023 12:13:14"}' > www/__build_info.json",
3688
- "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
3689
- "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
3690
- "cd www",
3691
- "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
3692
- "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
3693
- "yarn install --immutable",
3694
- "yarn build",
3695
- ],
3696
- "stage": "build",
3697
- "variables": {
3698
- "APP_DIR": "www",
3699
- "BUILD_INFO_BUILD_TIME": "01-01-2023 12:13:14",
3700
- "BUILD_INFO_CURRENT_VERSION": "3.2.1",
3701
- "BUILD_INFO_ID": "some-id",
3702
- "ENV_SHORT": "prod",
3703
- "ENV_TYPE": "prod",
3704
- "HOST": "www.prod.test-app.pan.panter.cloud",
3705
- "HOST_CANONICAL": "www.prod.test-app.pan.panter.cloud",
3706
- "KUBERNETES_CPU_LIMIT": "2",
3707
- "KUBERNETES_CPU_REQUEST": "0.5",
3708
- "KUBERNETES_MEMORY_LIMIT": "4Gi",
3709
- "KUBERNETES_MEMORY_REQUEST": "2Gi",
3710
- "KUBE_APP_NAME": "www",
3711
- "KUBE_APP_NAME_PREFIX": "",
3712
- "KUBE_NAMESPACE": "pan-test-app-prod",
3713
- "ROOT_URL": "https://www.prod.test-app.pan.panter.cloud",
3714
- "_ALL_ENV_VAR_KEYS": "["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","KUBE_NAMESPACE","KUBE_APP_NAME","KUBE_APP_NAME_PREFIX","HOST_CANONICAL"]",
3715
- },
3716
- },
3717
- "www 🔨 app | stage ": {
3718
- "artifacts": {
3719
- "expire_in": "1 day",
3720
- "paths": [
3721
- "www/__build_info.json",
3722
- "www/dist",
3723
- "www/.next",
3724
- ],
3725
- "reports": {
3726
- "junit": undefined,
3727
- },
3728
- },
3729
- "cache": [
3730
- {
3731
- "key": "www-yarn",
3732
- "paths": [
3733
- "www/.yarn",
3734
- ],
3735
- "policy": "pull-push",
3736
- },
3737
- {
3738
- "key": "www-node-modules",
3739
- "paths": [
3740
- "www/node_modules",
3741
- ],
3742
- "policy": "pull-push",
3743
- },
3744
- {
3745
- "key": "www-next-cache",
3746
- "paths": [
3747
- "www/.next/cache/",
3748
- ],
3749
- "policy": "pull-push",
3750
- },
3751
- ],
3752
- "image": "path/to/docker/jobs-default:the-version",
3753
- "interruptible": true,
3754
- "needs": [],
3755
- "retry": {
3756
- "max": 2,
3757
- "when": [
3758
- "runner_system_failure",
3759
- "stuck_or_timeout_failure",
3760
- ],
3761
- },
3762
- "script": [
3763
- "echo '{"id":"some-id","time":"01-01-2023 12:13:14"}' > www/__build_info.json",
3764
- "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
3765
- "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
3766
- "cd www",
3767
- "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
3768
- "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
3769
- "yarn install --immutable",
3770
- "yarn build",
3771
- ],
3772
- "stage": "build",
3773
- "variables": {
3774
- "APP_DIR": "www",
3775
- "BUILD_INFO_BUILD_TIME": "01-01-2023 12:13:14",
3776
- "BUILD_INFO_CURRENT_VERSION": "3.2.1",
3777
- "BUILD_INFO_ID": "some-id",
3778
- "ENV_SHORT": "stage",
3779
- "ENV_TYPE": "stage",
3780
- "HOST": "www.stage.test-app.pan.panter.cloud",
3781
- "HOST_CANONICAL": "www.stage.test-app.pan.panter.cloud",
3782
- "KUBERNETES_CPU_LIMIT": "2",
3783
- "KUBERNETES_CPU_REQUEST": "0.5",
3784
- "KUBERNETES_MEMORY_LIMIT": "4Gi",
3785
- "KUBERNETES_MEMORY_REQUEST": "2Gi",
3786
- "KUBE_APP_NAME": "www",
3787
- "KUBE_APP_NAME_PREFIX": "",
3788
- "KUBE_NAMESPACE": "pan-test-app-stage",
3789
- "ROOT_URL": "https://www.stage.test-app.pan.panter.cloud",
3790
- "_ALL_ENV_VAR_KEYS": "["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","KUBE_NAMESPACE","KUBE_APP_NAME","KUBE_APP_NAME_PREFIX","HOST_CANONICAL"]",
3791
- },
3792
- },
3793
- "www 🔨 docker | prod ": {
3794
- "cache": [
3795
- {
3796
- "key": "www-yarn",
3797
- "paths": [
3798
- "www/.yarn",
3799
- ],
3800
- "policy": "pull",
3801
- },
3802
- ],
3803
- "image": "path/to/docker/docker-build:the-version",
3804
- "interruptible": true,
3805
- "needs": [
3806
- "www 🔨 app | prod ",
3807
- ],
3808
- "retry": {
3809
- "max": 2,
3810
- "when": [
3811
- "runner_system_failure",
3812
- "stuck_or_timeout_failure",
3813
- ],
3814
- },
3815
- "script": [
3816
- "ensureNodeDockerfile",
3817
- "docker login --username gitlab-ci-token --password $CI_JOB_TOKEN $CI_REGISTRY",
3818
- "docker version",
3819
- "docker build --network host --cache-from $DOCKER_CACHE_IMAGE --tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG -f $APP_DIR/Dockerfile . --build-arg BUILDKIT_INLINE_CACHE=1",
3820
- "docker push $DOCKER_IMAGE:$DOCKER_IMAGE_TAG",
3821
- "docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG $DOCKER_CACHE_IMAGE",
3822
- "docker push $DOCKER_CACHE_IMAGE",
3823
- ],
3824
- "services": [
3825
- {
3826
- "command": [
3827
- "--tls=false",
3828
- ],
3829
- "name": "docker:20-dind",
3830
- },
3831
- ],
3832
- "stage": "build",
3833
- "variables": {
3834
- "APP_DIR": "www",
3835
- "DOCKERFILE_ADDITIONS": undefined,
3836
- "DOCKERFILE_ADDITIONS_END": undefined,
3837
- "DOCKER_BUILDKIT": "1",
3838
- "DOCKER_CACHE_IMAGE": "$DOCKER_REGISTRY_IMAGE_PATH/caches/www",
3839
- "DOCKER_COPY_AND_INSTALL_APP": "COPY --chown=node:node $APP_DIR .
3840
- RUN yarn plugin import workspace-tools
3841
- RUN yarn workspaces focus --production && yarn rebuild",
3842
- "DOCKER_COPY_WORKSPACE_FILES": "COPY --chown=node:node www/package.json /app/www/package.json
3843
- COPY --chown=node:node www/yarn.lock /app/www/yarn.lock
3844
- COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
3845
- COPY --chown=node:node .yarn /app/.yarn",
3846
- "DOCKER_DIR": ".",
3847
- "DOCKER_DRIVER": "overlay2",
3848
- "DOCKER_HOST": "tcp://0.0.0.0:2375",
3849
- "DOCKER_IMAGE": "$DOCKER_REGISTRY_IMAGE_PATH/$DOCKER_IMAGE_NAME",
3850
- "DOCKER_IMAGE_NAME": "prod/www",
3851
- "DOCKER_IMAGE_TAG": "$CI_COMMIT_SHA",
3852
- "DOCKER_REGISTRY": "$CI_REGISTRY",
3853
- "DOCKER_REGISTRY_IMAGE_PATH": "$CI_REGISTRY_IMAGE",
3854
- "DOCKER_TLS_CERTDIR": "",
3855
- "KUBERNETES_CPU_LIMIT": "1",
3856
- "KUBERNETES_CPU_REQUEST": "0.5",
3857
- "KUBERNETES_MEMORY_LIMIT": "2Gi",
3858
- "KUBERNETES_MEMORY_REQUEST": "1Gi",
3859
- },
3860
- },
3861
- "www 🔨 docker | stage ": {
3862
- "cache": [
3863
- {
3864
- "key": "www-yarn",
3865
- "paths": [
3866
- "www/.yarn",
3867
- ],
3868
- "policy": "pull",
3869
- },
3870
- ],
3871
- "image": "path/to/docker/docker-build:the-version",
3872
- "interruptible": true,
3873
- "needs": [
3874
- "www 🔨 app | stage ",
3875
- ],
3876
- "retry": {
3877
- "max": 2,
3878
- "when": [
3879
- "runner_system_failure",
3880
- "stuck_or_timeout_failure",
3881
- ],
3882
- },
3883
- "script": [
3884
- "ensureNodeDockerfile",
3885
- "docker login --username gitlab-ci-token --password $CI_JOB_TOKEN $CI_REGISTRY",
3886
- "docker version",
3887
- "docker build --network host --cache-from $DOCKER_CACHE_IMAGE --tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG -f $APP_DIR/Dockerfile . --build-arg BUILDKIT_INLINE_CACHE=1",
3888
- "docker push $DOCKER_IMAGE:$DOCKER_IMAGE_TAG",
3889
- "docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG $DOCKER_CACHE_IMAGE",
3890
- "docker push $DOCKER_CACHE_IMAGE",
3891
- ],
3892
- "services": [
3893
- {
3894
- "command": [
3895
- "--tls=false",
3896
- ],
3897
- "name": "docker:20-dind",
3898
- },
3899
- ],
3900
- "stage": "build",
3901
- "variables": {
3902
- "APP_DIR": "www",
3903
- "DOCKERFILE_ADDITIONS": undefined,
3904
- "DOCKERFILE_ADDITIONS_END": undefined,
3905
- "DOCKER_BUILDKIT": "1",
3906
- "DOCKER_CACHE_IMAGE": "$DOCKER_REGISTRY_IMAGE_PATH/caches/www",
3907
- "DOCKER_COPY_AND_INSTALL_APP": "COPY --chown=node:node $APP_DIR .
3908
- RUN yarn plugin import workspace-tools
3909
- RUN yarn workspaces focus --production && yarn rebuild",
3910
- "DOCKER_COPY_WORKSPACE_FILES": "COPY --chown=node:node www/package.json /app/www/package.json
3911
- COPY --chown=node:node www/yarn.lock /app/www/yarn.lock
3912
- COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
3913
- COPY --chown=node:node .yarn /app/.yarn",
3914
- "DOCKER_DIR": ".",
3915
- "DOCKER_DRIVER": "overlay2",
3916
- "DOCKER_HOST": "tcp://0.0.0.0:2375",
3917
- "DOCKER_IMAGE": "$DOCKER_REGISTRY_IMAGE_PATH/$DOCKER_IMAGE_NAME",
3918
- "DOCKER_IMAGE_NAME": "stage/www",
3919
- "DOCKER_IMAGE_TAG": "$CI_COMMIT_SHA",
3920
- "DOCKER_REGISTRY": "$CI_REGISTRY",
3921
- "DOCKER_REGISTRY_IMAGE_PATH": "$CI_REGISTRY_IMAGE",
3922
- "DOCKER_TLS_CERTDIR": "",
3923
- "KUBERNETES_CPU_LIMIT": "1",
3924
- "KUBERNETES_CPU_REQUEST": "0.5",
3925
- "KUBERNETES_MEMORY_LIMIT": "2Gi",
3926
- "KUBERNETES_MEMORY_REQUEST": "1Gi",
3927
- },
3928
- },
3929
- "www 🚀 Deploy | prod ": {
3930
- "allow_failure": true,
3931
- "environment": {
3932
- "auto_stop_in": undefined,
3933
- "name": "prod/www",
3934
- "on_stop": "www 🛑 Stop ⚠️ | prod ",
3935
- "url": "https://www.prod.test-app.pan.panter.cloud",
3936
- },
3937
- "image": "path/to/docker/kubernetes:the-version",
3938
- "interruptible": true,
3939
- "needs": [
3940
- {
3941
- "artifacts": false,
3942
- "job": "www 🔨 app | prod ",
3943
- },
3944
- {
3945
- "artifacts": false,
3946
- "job": "www 🔨 docker | prod ",
3947
- },
3948
- {
3949
- "artifacts": true,
3950
- "job": "www 🧾 sbom | prod ",
3951
- },
3952
- ],
3953
- "retry": {
3954
- "max": 2,
3955
- "when": [
3956
- "runner_system_failure",
3957
- "stuck_or_timeout_failure",
3958
- ],
3959
- },
3960
- "rules": [
3961
- {
3962
- "when": "manual",
3963
- },
3964
- ],
3965
- "script": [
3966
- "kubectl config set-cluster "kube-pan-test-app-prod-www" --server="$CL_prod_www_KUBE_URL" --certificate-authority <(echo $CL_prod_www_KUBE_CA_PEM | base64 -d) --embed-certs=true",
3967
- "kubectl config set-credentials "kube-pan-test-app-prod-www" --token="$CL_prod_www_KUBE_TOKEN"",
3968
- "kubectl config set-context "kube-pan-test-app-prod-www" --cluster="kube-pan-test-app-prod-www" --user="kube-pan-test-app-prod-www" --namespace="pan-test-app-prod"",
3969
- "kubectl config use-context "kube-pan-test-app-prod-www"",
3970
- "kubernetesCreateSecret",
3971
- "kubernetesDeploy",
3972
- "echo Uploading SBOM to Dependency Track",
3973
- "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/www" "https://www.prod.test-app.pan.panter.cloud" "__sbom.json" vex.json || true",
3974
- "echo deployment successful 😻",
3975
- ],
3976
- "stage": "deploy prod",
3977
- "variables": {
3978
- "APP_DIR": "www",
3979
- "BUILD_ID": "some-id",
3980
- "BUILD_INFO_BUILD_TIME": "01-01-2023 12:13:14",
3981
- "BUILD_INFO_CURRENT_VERSION": "3.2.1",
3982
- "BUILD_INFO_ID": "some-id",
3983
- "COMPONENT_NAME": "www",
3984
- "DOCKER_CACHE_IMAGE": "$DOCKER_REGISTRY_IMAGE_PATH/caches/www",
3985
- "DOCKER_IMAGE": "$DOCKER_REGISTRY_IMAGE_PATH/$DOCKER_IMAGE_NAME",
3986
- "DOCKER_IMAGE_NAME": "prod/www",
3987
- "DOCKER_IMAGE_TAG": "$CI_COMMIT_SHA",
3988
- "DOCKER_REGISTRY": "$CI_REGISTRY",
3989
- "DOCKER_REGISTRY_IMAGE_PATH": "$CI_REGISTRY_IMAGE",
3990
- "ENV_SHORT": "prod",
3991
- "ENV_TYPE": "prod",
3992
- "HELM_ARGS": "",
3993
- "HELM_EXPERIMENTAL_OCI": "1",
3994
- "HELM_GITLAB_CHART_NAME": "/helm-charts/the-panter-chart",
3995
- "HOST": "www.prod.test-app.pan.panter.cloud",
3996
- "HOST_CANONICAL": "www.prod.test-app.pan.panter.cloud",
3997
- "KUBERNETES_CPU_LIMIT": "1",
3998
- "KUBERNETES_CPU_REQUEST": "0.5",
3999
- "KUBERNETES_MEMORY_LIMIT": "400Mi",
4000
- "KUBERNETES_MEMORY_REQUEST": "200Mi",
4001
- "KUBE_APP_NAME": "www",
4002
- "KUBE_APP_NAME_PREFIX": "",
4003
- "KUBE_DOCKER_IMAGE_PULL_SECRET": "gitlab-registry-www",
4004
- "KUBE_NAMESPACE": "pan-test-app-prod",
4005
- "KUBE_VALUES": "env:
4006
- secret: {}
4007
- public:
4008
- ENV_SHORT: 'prod'
4009
- APP_DIR: 'www'
4010
- ENV_TYPE: 'prod'
4011
- BUILD_INFO_ID: 'some-id'
4012
- BUILD_INFO_BUILD_TIME: '01-01-2023 12:13:14'
4013
- BUILD_INFO_CURRENT_VERSION: '3.2.1'
4014
- HOST: 'www.prod.test-app.pan.panter.cloud'
4015
- ROOT_URL: 'https://www.prod.test-app.pan.panter.cloud'
4016
- KUBE_NAMESPACE: 'pan-test-app-prod'
4017
- KUBE_APP_NAME: 'www'
4018
- KUBE_APP_NAME_PREFIX: ''
4019
- HOST_CANONICAL: 'www.prod.test-app.pan.panter.cloud'
4020
- _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","KUBE_NAMESPACE","KUBE_APP_NAME","KUBE_APP_NAME_PREFIX","HOST_CANONICAL"]'
4021
- application:
4022
- host: 'www.prod.test-app.pan.panter.cloud'
4023
- command: 'yarn start'
4024
- livenessProbe:
4025
- httpGet:
4026
- path: '__health'
4027
- readinessProbe:
4028
- httpGet:
4029
- path: '__health'
4030
- startupProbe:
4031
- httpGet:
4032
- path: '__health'
4033
- ",
4034
- "RELEASE_NAME": "pan-test-app-prod-www",
4035
- "ROOT_URL": "https://www.prod.test-app.pan.panter.cloud",
4036
- "_ALL_ENV_VAR_KEYS": "["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","KUBE_NAMESPACE","KUBE_APP_NAME","KUBE_APP_NAME_PREFIX","HOST_CANONICAL"]",
4037
- },
4038
- },
4039
- "www 🚀 Deploy | stage ": {
4040
- "allow_failure": false,
4041
- "environment": {
4042
- "auto_stop_in": undefined,
4043
- "name": "stage/www",
4044
- "on_stop": "www 🛑 Stop ⚠️ | stage ",
4045
- "url": "https://www.stage.test-app.pan.panter.cloud",
4046
- },
4047
- "image": "path/to/docker/kubernetes:the-version",
4048
- "interruptible": true,
4049
- "needs": [
4050
- {
4051
- "artifacts": false,
4052
- "job": "www 🔨 app | stage ",
4053
- },
4054
- {
4055
- "artifacts": false,
4056
- "job": "www 🔨 docker | stage ",
4057
- },
4058
- {
4059
- "artifacts": true,
4060
- "job": "www 🧾 sbom | stage ",
4061
- },
4062
- ],
4063
- "retry": {
4064
- "max": 2,
4065
- "when": [
4066
- "runner_system_failure",
4067
- "stuck_or_timeout_failure",
4068
- ],
4069
- },
4070
- "rules": [
4071
- {
4072
- "when": "on_success",
4073
- },
4074
- ],
4075
- "script": [
4076
- "kubectl config set-cluster "kube-pan-test-app-stage-www" --server="$CL_stage_www_KUBE_URL" --certificate-authority <(echo $CL_stage_www_KUBE_CA_PEM | base64 -d) --embed-certs=true",
4077
- "kubectl config set-credentials "kube-pan-test-app-stage-www" --token="$CL_stage_www_KUBE_TOKEN"",
4078
- "kubectl config set-context "kube-pan-test-app-stage-www" --cluster="kube-pan-test-app-stage-www" --user="kube-pan-test-app-stage-www" --namespace="pan-test-app-stage"",
4079
- "kubectl config use-context "kube-pan-test-app-stage-www"",
4080
- "kubernetesCreateSecret",
4081
- "kubernetesDeploy",
4082
- "echo Uploading SBOM to Dependency Track",
4083
- "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/www" "https://www.stage.test-app.pan.panter.cloud" "__sbom.json" vex.json || true",
4084
- "echo deployment successful 😻",
4085
- ],
4086
- "stage": "deploy stage",
4087
- "variables": {
4088
- "APP_DIR": "www",
4089
- "BUILD_ID": "some-id",
4090
- "BUILD_INFO_BUILD_TIME": "01-01-2023 12:13:14",
4091
- "BUILD_INFO_CURRENT_VERSION": "3.2.1",
4092
- "BUILD_INFO_ID": "some-id",
4093
- "COMPONENT_NAME": "www",
4094
- "DOCKER_CACHE_IMAGE": "$DOCKER_REGISTRY_IMAGE_PATH/caches/www",
4095
- "DOCKER_IMAGE": "$DOCKER_REGISTRY_IMAGE_PATH/$DOCKER_IMAGE_NAME",
4096
- "DOCKER_IMAGE_NAME": "stage/www",
4097
- "DOCKER_IMAGE_TAG": "$CI_COMMIT_SHA",
4098
- "DOCKER_REGISTRY": "$CI_REGISTRY",
4099
- "DOCKER_REGISTRY_IMAGE_PATH": "$CI_REGISTRY_IMAGE",
4100
- "ENV_SHORT": "stage",
4101
- "ENV_TYPE": "stage",
4102
- "HELM_ARGS": "",
4103
- "HELM_EXPERIMENTAL_OCI": "1",
4104
- "HELM_GITLAB_CHART_NAME": "/helm-charts/the-panter-chart",
4105
- "HOST": "www.stage.test-app.pan.panter.cloud",
4106
- "HOST_CANONICAL": "www.stage.test-app.pan.panter.cloud",
4107
- "KUBERNETES_CPU_LIMIT": "1",
4108
- "KUBERNETES_CPU_REQUEST": "0.5",
4109
- "KUBERNETES_MEMORY_LIMIT": "400Mi",
4110
- "KUBERNETES_MEMORY_REQUEST": "200Mi",
4111
- "KUBE_APP_NAME": "www",
4112
- "KUBE_APP_NAME_PREFIX": "",
4113
- "KUBE_DOCKER_IMAGE_PULL_SECRET": "gitlab-registry-www",
4114
- "KUBE_NAMESPACE": "pan-test-app-stage",
4115
- "KUBE_VALUES": "env:
4116
- secret: {}
4117
- public:
4118
- ENV_SHORT: 'stage'
4119
- APP_DIR: 'www'
4120
- ENV_TYPE: 'stage'
4121
- BUILD_INFO_ID: 'some-id'
4122
- BUILD_INFO_BUILD_TIME: '01-01-2023 12:13:14'
4123
- BUILD_INFO_CURRENT_VERSION: '3.2.1'
4124
- HOST: 'www.stage.test-app.pan.panter.cloud'
4125
- ROOT_URL: 'https://www.stage.test-app.pan.panter.cloud'
4126
- KUBE_NAMESPACE: 'pan-test-app-stage'
4127
- KUBE_APP_NAME: 'www'
4128
- KUBE_APP_NAME_PREFIX: ''
4129
- HOST_CANONICAL: 'www.stage.test-app.pan.panter.cloud'
4130
- _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","KUBE_NAMESPACE","KUBE_APP_NAME","KUBE_APP_NAME_PREFIX","HOST_CANONICAL"]'
4131
- application:
4132
- host: 'www.stage.test-app.pan.panter.cloud'
4133
- command: 'yarn start'
4134
- livenessProbe:
4135
- httpGet:
4136
- path: '__health'
4137
- readinessProbe:
4138
- httpGet:
4139
- path: '__health'
4140
- startupProbe:
4141
- httpGet:
4142
- path: '__health'
4143
- ",
4144
- "RELEASE_NAME": "pan-test-app-stage-www",
4145
- "ROOT_URL": "https://www.stage.test-app.pan.panter.cloud",
4146
- "_ALL_ENV_VAR_KEYS": "["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","KUBE_NAMESPACE","KUBE_APP_NAME","KUBE_APP_NAME_PREFIX","HOST_CANONICAL"]",
4147
- },
4148
- },
4149
- "www 🛑 Stop ⚠️ | prod ": {
4150
- "environment": {
4151
- "action": "stop",
4152
- "name": "prod/www",
4153
- "url": "https://www.prod.test-app.pan.panter.cloud",
4154
- },
4155
- "image": "path/to/docker/kubernetes:the-version",
4156
- "interruptible": true,
4157
- "needs": [],
4158
- "retry": {
4159
- "max": 2,
4160
- "when": [
4161
- "runner_system_failure",
4162
- "stuck_or_timeout_failure",
4163
- ],
4164
- },
4165
- "rules": [
4166
- {
4167
- "allow_failure": true,
4168
- "if": "$CI_COMMIT_BRANCH =~ /^[0-9]+\\.([0-9]+|x)\\.x$/",
4169
- "when": "on_success",
4170
- },
4171
- {
4172
- "allow_failure": true,
4173
- "when": "manual",
4174
- },
4175
- ],
4176
- "script": [
4177
- "kubectl config set-cluster "kube-pan-test-app-prod-www" --server="$CL_prod_www_KUBE_URL" --certificate-authority <(echo $CL_prod_www_KUBE_CA_PEM | base64 -d) --embed-certs=true",
4178
- "kubectl config set-credentials "kube-pan-test-app-prod-www" --token="$CL_prod_www_KUBE_TOKEN"",
4179
- "kubectl config set-context "kube-pan-test-app-prod-www" --cluster="kube-pan-test-app-prod-www" --user="kube-pan-test-app-prod-www" --namespace="pan-test-app-prod"",
4180
- "kubectl config use-context "kube-pan-test-app-prod-www"",
4181
- "kubernetesDelete",
4182
- "echo Disabling component in Dependency Track",
4183
- "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" disable "pan-test-app/www" "https://www.prod.test-app.pan.panter.cloud" || true",
4184
- ],
4185
- "stage": "stop prod",
4186
- "variables": {
4187
- "APP_DIR": "www",
4188
- "BUILD_ID": "some-id",
4189
- "BUILD_INFO_BUILD_TIME": "01-01-2023 12:13:14",
4190
- "BUILD_INFO_CURRENT_VERSION": "3.2.1",
4191
- "BUILD_INFO_ID": "some-id",
4192
- "COMPONENT_NAME": "www",
4193
- "ENV_SHORT": "prod",
4194
- "ENV_TYPE": "prod",
4195
- "GIT_STRATEGY": "none",
4196
- "HELM_ARGS": "",
4197
- "HELM_EXPERIMENTAL_OCI": "1",
4198
- "HELM_GITLAB_CHART_NAME": "/helm-charts/the-panter-chart",
4199
- "HOST": "www.prod.test-app.pan.panter.cloud",
4200
- "HOST_CANONICAL": "www.prod.test-app.pan.panter.cloud",
4201
- "KUBERNETES_CPU_LIMIT": "1",
4202
- "KUBERNETES_CPU_REQUEST": "0.5",
4203
- "KUBERNETES_MEMORY_LIMIT": "400Mi",
4204
- "KUBERNETES_MEMORY_REQUEST": "200Mi",
4205
- "KUBE_APP_NAME": "www",
4206
- "KUBE_APP_NAME_PREFIX": "",
4207
- "KUBE_DOCKER_IMAGE_PULL_SECRET": "gitlab-registry-www",
4208
- "KUBE_NAMESPACE": "pan-test-app-prod",
4209
- "KUBE_VALUES": "env:
4210
- secret: {}
4211
- public:
4212
- ENV_SHORT: 'prod'
4213
- APP_DIR: 'www'
4214
- ENV_TYPE: 'prod'
4215
- BUILD_INFO_ID: 'some-id'
4216
- BUILD_INFO_BUILD_TIME: '01-01-2023 12:13:14'
4217
- BUILD_INFO_CURRENT_VERSION: '3.2.1'
4218
- HOST: 'www.prod.test-app.pan.panter.cloud'
4219
- ROOT_URL: 'https://www.prod.test-app.pan.panter.cloud'
4220
- KUBE_NAMESPACE: 'pan-test-app-prod'
4221
- KUBE_APP_NAME: 'www'
4222
- KUBE_APP_NAME_PREFIX: ''
4223
- HOST_CANONICAL: 'www.prod.test-app.pan.panter.cloud'
4224
- _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","KUBE_NAMESPACE","KUBE_APP_NAME","KUBE_APP_NAME_PREFIX","HOST_CANONICAL"]'
4225
- application:
4226
- host: 'www.prod.test-app.pan.panter.cloud'
4227
- command: 'yarn start'
4228
- livenessProbe:
4229
- httpGet:
4230
- path: '__health'
4231
- readinessProbe:
4232
- httpGet:
4233
- path: '__health'
4234
- startupProbe:
4235
- httpGet:
4236
- path: '__health'
4237
- ",
4238
- "RELEASE_NAME": "pan-test-app-prod-www",
4239
- "ROOT_URL": "https://www.prod.test-app.pan.panter.cloud",
4240
- "_ALL_ENV_VAR_KEYS": "["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","KUBE_NAMESPACE","KUBE_APP_NAME","KUBE_APP_NAME_PREFIX","HOST_CANONICAL"]",
4241
- },
4242
- },
4243
- "www 🛑 Stop ⚠️ | stage ": {
4244
- "environment": {
4245
- "action": "stop",
4246
- "name": "stage/www",
4247
- "url": "https://www.stage.test-app.pan.panter.cloud",
4248
- },
4249
- "image": "path/to/docker/kubernetes:the-version",
4250
- "interruptible": true,
4251
- "needs": [],
4252
- "retry": {
4253
- "max": 2,
4254
- "when": [
4255
- "runner_system_failure",
4256
- "stuck_or_timeout_failure",
4257
- ],
4258
- },
4259
- "rules": [
4260
- {
4261
- "allow_failure": true,
4262
- "if": "$CI_COMMIT_BRANCH =~ /^[0-9]+\\.([0-9]+|x)\\.x$/",
4263
- "when": "on_success",
4264
- },
4265
- {
4266
- "allow_failure": true,
4267
- "when": "manual",
4268
- },
4269
- ],
4270
- "script": [
4271
- "kubectl config set-cluster "kube-pan-test-app-stage-www" --server="$CL_stage_www_KUBE_URL" --certificate-authority <(echo $CL_stage_www_KUBE_CA_PEM | base64 -d) --embed-certs=true",
4272
- "kubectl config set-credentials "kube-pan-test-app-stage-www" --token="$CL_stage_www_KUBE_TOKEN"",
4273
- "kubectl config set-context "kube-pan-test-app-stage-www" --cluster="kube-pan-test-app-stage-www" --user="kube-pan-test-app-stage-www" --namespace="pan-test-app-stage"",
4274
- "kubectl config use-context "kube-pan-test-app-stage-www"",
4275
- "kubernetesDelete",
4276
- "echo Disabling component in Dependency Track",
4277
- "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" disable "pan-test-app/www" "https://www.stage.test-app.pan.panter.cloud" || true",
4278
- ],
4279
- "stage": "stop stage",
4280
- "variables": {
4281
- "APP_DIR": "www",
4282
- "BUILD_ID": "some-id",
4283
- "BUILD_INFO_BUILD_TIME": "01-01-2023 12:13:14",
4284
- "BUILD_INFO_CURRENT_VERSION": "3.2.1",
4285
- "BUILD_INFO_ID": "some-id",
4286
- "COMPONENT_NAME": "www",
4287
- "ENV_SHORT": "stage",
4288
- "ENV_TYPE": "stage",
4289
- "GIT_STRATEGY": "none",
4290
- "HELM_ARGS": "",
4291
- "HELM_EXPERIMENTAL_OCI": "1",
4292
- "HELM_GITLAB_CHART_NAME": "/helm-charts/the-panter-chart",
4293
- "HOST": "www.stage.test-app.pan.panter.cloud",
4294
- "HOST_CANONICAL": "www.stage.test-app.pan.panter.cloud",
4295
- "KUBERNETES_CPU_LIMIT": "1",
4296
- "KUBERNETES_CPU_REQUEST": "0.5",
4297
- "KUBERNETES_MEMORY_LIMIT": "400Mi",
4298
- "KUBERNETES_MEMORY_REQUEST": "200Mi",
4299
- "KUBE_APP_NAME": "www",
4300
- "KUBE_APP_NAME_PREFIX": "",
4301
- "KUBE_DOCKER_IMAGE_PULL_SECRET": "gitlab-registry-www",
4302
- "KUBE_NAMESPACE": "pan-test-app-stage",
4303
- "KUBE_VALUES": "env:
4304
- secret: {}
4305
- public:
4306
- ENV_SHORT: 'stage'
4307
- APP_DIR: 'www'
4308
- ENV_TYPE: 'stage'
4309
- BUILD_INFO_ID: 'some-id'
4310
- BUILD_INFO_BUILD_TIME: '01-01-2023 12:13:14'
4311
- BUILD_INFO_CURRENT_VERSION: '3.2.1'
4312
- HOST: 'www.stage.test-app.pan.panter.cloud'
4313
- ROOT_URL: 'https://www.stage.test-app.pan.panter.cloud'
4314
- KUBE_NAMESPACE: 'pan-test-app-stage'
4315
- KUBE_APP_NAME: 'www'
4316
- KUBE_APP_NAME_PREFIX: ''
4317
- HOST_CANONICAL: 'www.stage.test-app.pan.panter.cloud'
4318
- _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","KUBE_NAMESPACE","KUBE_APP_NAME","KUBE_APP_NAME_PREFIX","HOST_CANONICAL"]'
4319
- application:
4320
- host: 'www.stage.test-app.pan.panter.cloud'
4321
- command: 'yarn start'
4322
- livenessProbe:
4323
- httpGet:
4324
- path: '__health'
4325
- readinessProbe:
4326
- httpGet:
4327
- path: '__health'
4328
- startupProbe:
4329
- httpGet:
4330
- path: '__health'
4331
- ",
4332
- "RELEASE_NAME": "pan-test-app-stage-www",
4333
- "ROOT_URL": "https://www.stage.test-app.pan.panter.cloud",
4334
- "_ALL_ENV_VAR_KEYS": "["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","KUBE_NAMESPACE","KUBE_APP_NAME","KUBE_APP_NAME_PREFIX","HOST_CANONICAL"]",
4335
- },
4336
- },
4337
- "www 🧾 sbom | prod ": {
4338
- "allow_failure": true,
4339
- "artifacts": {
4340
- "paths": [
4341
- "__sbom.json",
4342
- ],
4343
- },
4344
- "image": "aquasec/trivy:0.38.3",
4345
- "interruptible": true,
4346
- "needs": [],
4347
- "retry": {
4348
- "max": 2,
4349
- "when": [
4350
- "runner_system_failure",
4351
- "stuck_or_timeout_failure",
4352
- ],
4353
- },
4354
- "script": [
4355
- "trivy fs --quiet --format cyclonedx --output "__sbom.json" www",
4356
- ],
4357
- "stage": "build",
4358
- "variables": {},
4359
- },
4360
- "www 🧾 sbom | stage ": {
4361
- "allow_failure": true,
4362
- "artifacts": {
4363
- "paths": [
4364
- "__sbom.json",
4365
- ],
4366
- },
4367
- "image": "aquasec/trivy:0.38.3",
4368
- "interruptible": true,
4369
- "needs": [],
4370
- "retry": {
4371
- "max": 2,
4372
- "when": [
4373
- "runner_system_failure",
4374
- "stuck_or_timeout_failure",
4375
- ],
4376
- },
4377
- "script": [
4378
- "trivy fs --quiet --format cyclonedx --output "__sbom.json" www",
4379
- ],
4380
- "stage": "build",
4381
- "variables": {},
4382
- },
4383
- },
4384
- "stages": [
4385
- "setup",
4386
- "setup dev",
4387
- "setup review",
4388
- "setup stage",
4389
- "setup prod",
4390
- "setup local",
4391
- "test",
4392
- "test dev",
4393
- "test review",
4394
- "test stage",
4395
- "test prod",
4396
- "test local",
4397
- "build",
4398
- "build dev",
4399
- "build review",
4400
- "build stage",
4401
- "build prod",
4402
- "build local",
4403
- "deploy",
4404
- "deploy dev",
4405
- "deploy review",
4406
- "deploy stage",
4407
- "deploy prod",
4408
- "deploy local",
4409
- "verify",
4410
- "verify dev",
4411
- "verify review",
4412
- "verify stage",
4413
- "verify prod",
4414
- "verify local",
4415
- "rollback",
4416
- "rollback dev",
4417
- "rollback review",
4418
- "rollback stage",
4419
- "rollback prod",
4420
- "rollback local",
4421
- "stop",
4422
- "stop dev",
4423
- "stop review",
4424
- "stop stage",
4425
- "stop prod",
4426
- "stop local",
4427
- ],
4428
- "variables": {
4429
- "FF_USE_FASTZIP": "true",
4430
- },
4431
- "workflow": {
4432
- "rules": [
4433
- {
4434
- "if": "$CI_COMMIT_TAG",
4435
- },
4436
- {
4437
- "if": "$CI_COMMIT_MESSAGE =~ /^chore\\(release\\).*/",
4438
- "when": "never",
4439
- },
4440
- {
4441
- "if": "$CI_COMMIT_BRANCH =~ /^[0-9]+.([0-9]+|x).x$/",
4442
- },
4443
- {
4444
- "if": "$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH",
4445
- },
4446
- {
4447
- "if": "$CI_MERGE_REQUEST_ID",
4448
- },
4449
- ],
4450
- },
4451
- },
4452
- }
4453
- `;