@catladder/pipeline 0.0.0-refactore-catenv-command-validates-argument-78d05852 → 0.0.0-reference-database-url-1befbbee

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