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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (597) hide show
  1. package/README.md +17 -0
  2. package/dist/bash/BashExpression.d.ts +36 -0
  3. package/dist/bash/BashExpression.js +114 -0
  4. package/dist/bash/bashEscape.d.ts +34 -0
  5. package/dist/bash/bashEscape.js +114 -0
  6. package/dist/bash/bashExpressionPerPipelineType.d.ts +6 -0
  7. package/dist/bash/bashExpressionPerPipelineType.js +11 -0
  8. package/dist/bash/bashYaml.d.ts +10 -0
  9. package/dist/bash/bashYaml.js +69 -0
  10. package/dist/bash/getInjectVarsScript.d.ts +2 -0
  11. package/dist/bash/getInjectVarsScript.js +47 -0
  12. package/dist/bash/index.d.ts +2 -0
  13. package/dist/bash/index.js +26 -0
  14. package/dist/build/artifacts/createBuildJobArtifact.d.ts +3 -0
  15. package/dist/build/artifacts/createBuildJobArtifact.js +97 -0
  16. package/dist/build/base/__tests__/createArtifactsConfig.test.js +3 -1
  17. package/dist/build/base/constants.d.ts +0 -1
  18. package/dist/build/base/constants.js +4 -3
  19. package/dist/build/base/createAppBuildJob.d.ts +5 -3
  20. package/dist/build/base/createAppBuildJob.js +18 -15
  21. package/dist/build/base/createArtifactsConfig.d.ts +1 -1
  22. package/dist/build/base/createArtifactsConfig.js +3 -1
  23. package/dist/build/base/createBuildJobDefinition.d.ts +6 -0
  24. package/dist/build/base/createBuildJobDefinition.js +58 -0
  25. package/dist/build/base/index.d.ts +7 -4
  26. package/dist/build/base/index.js +17 -6
  27. package/dist/build/base/writeBuildInfo.d.ts +2 -2
  28. package/dist/build/base/writeBuildInfo.js +4 -3
  29. package/dist/build/base/writeDotEnv.d.ts +3 -2
  30. package/dist/build/base/writeDotEnv.js +30 -6
  31. package/dist/build/cache/createJobCache.d.ts +7 -0
  32. package/dist/build/cache/createJobCache.js +115 -0
  33. package/dist/build/cache/getAllCacheConfigsFromConfig.d.ts +3 -0
  34. package/dist/build/cache/getAllCacheConfigsFromConfig.js +64 -0
  35. package/dist/build/cache/transformLegacyJobCache.d.ts +3 -0
  36. package/dist/build/cache/transformLegacyJobCache.js +29 -0
  37. package/dist/build/custom/__tests__/testJob.test.js +15 -16
  38. package/dist/build/custom/buildJob.d.ts +2 -2
  39. package/dist/build/custom/buildJob.js +8 -67
  40. package/dist/build/custom/index.d.ts +2 -2
  41. package/dist/build/custom/index.js +3 -1
  42. package/dist/build/custom/testJob.d.ts +4 -4
  43. package/dist/build/custom/testJob.js +25 -21
  44. package/dist/build/docker.d.ts +48 -39
  45. package/dist/build/docker.js +112 -37
  46. package/dist/build/index.d.ts +14 -7
  47. package/dist/build/index.js +44 -16
  48. package/dist/build/node/buildJob.d.ts +6 -2
  49. package/dist/build/node/buildJob.js +39 -48
  50. package/dist/build/node/cache.d.ts +4 -5
  51. package/dist/build/node/cache.js +18 -23
  52. package/dist/build/node/constants.d.ts +0 -1
  53. package/dist/build/node/constants.js +5 -4
  54. package/dist/build/node/index.d.ts +4 -4
  55. package/dist/build/node/index.js +3 -1
  56. package/dist/build/node/meteor.d.ts +2 -2
  57. package/dist/build/node/meteor.js +10 -12
  58. package/dist/build/node/testJob.d.ts +3 -2
  59. package/dist/build/node/testJob.js +29 -19
  60. package/dist/build/node/yarn.d.ts +3 -2
  61. package/dist/build/node/yarn.js +13 -13
  62. package/dist/build/rails/build.d.ts +2 -2
  63. package/dist/build/rails/build.js +24 -8
  64. package/dist/build/rails/index.d.ts +2 -2
  65. package/dist/build/rails/index.js +3 -1
  66. package/dist/build/rails/test.d.ts +2 -2
  67. package/dist/build/rails/test.js +20 -12
  68. package/dist/build/sbom.d.ts +2 -2
  69. package/dist/build/sbom.js +9 -6
  70. package/dist/build/types.d.ts +152 -47
  71. package/dist/build/types.js +10 -2
  72. package/dist/catladder-gitlab.js +129 -49
  73. package/dist/config/__tests__/configruedEnvs.test.js +3 -1
  74. package/dist/config/__tests__/getAllEnvs.test.js +79 -0
  75. package/dist/config/__tests__/getAllEnvsInAllComponents.test.d.ts +1 -0
  76. package/dist/config/__tests__/getAllEnvsInAllComponents.test.js +73 -0
  77. package/dist/config/configruedEnvs.js +3 -1
  78. package/dist/config/index.js +13 -7
  79. package/dist/config/readConfig.d.ts +2 -2
  80. package/dist/config/readConfig.js +191 -40
  81. package/dist/constants.js +5 -3
  82. package/dist/context/createAllComponentsContext.d.ts +12 -0
  83. package/dist/{pipeline/commitInfo/getCommitInfo.js → context/createAllComponentsContext.js} +35 -19
  84. package/dist/context/createComponentContext.d.ts +11 -0
  85. package/dist/context/createComponentContext.js +255 -0
  86. package/dist/context/createWorkspaceContext.d.ts +16 -0
  87. package/dist/context/createWorkspaceContext.js +173 -0
  88. package/dist/context/getBuildInfoVariables.d.ts +6 -0
  89. package/dist/context/getBuildInfoVariables.js +55 -0
  90. package/dist/context/getEnvConfig.js +5 -2
  91. package/dist/context/getEnvType.js +3 -1
  92. package/dist/context/getEnvironment.d.ts +3 -3
  93. package/dist/context/getEnvironment.js +11 -12
  94. package/dist/context/getEnvironmentContext.d.ts +7 -3
  95. package/dist/context/getEnvironmentContext.js +21 -11
  96. package/dist/context/getEnvironmentVariables.d.ts +22 -5
  97. package/dist/context/getEnvironmentVariables.js +81 -49
  98. package/dist/context/getLabels.d.ts +2 -2
  99. package/dist/context/getLabels.js +9 -7
  100. package/dist/context/getReviewSlug.d.ts +4 -0
  101. package/dist/context/getReviewSlug.js +21 -0
  102. package/dist/context/index.d.ts +2 -4
  103. package/dist/context/index.js +15 -162
  104. package/dist/context/transformJobOnlyVars.d.ts +5 -2
  105. package/dist/context/transformJobOnlyVars.js +4 -2
  106. package/dist/context/utils/envVars.d.ts +1 -1
  107. package/dist/context/utils/envVars.js +5 -2
  108. package/dist/defaults/index.js +3 -1
  109. package/dist/deploy/base/deploy.d.ts +3 -3
  110. package/dist/deploy/base/deploy.js +38 -22
  111. package/dist/deploy/base/index.d.ts +3 -5
  112. package/dist/deploy/base/index.js +3 -1
  113. package/dist/deploy/base/rollback.d.ts +3 -3
  114. package/dist/deploy/base/rollback.js +13 -9
  115. package/dist/deploy/base/stop.d.ts +3 -3
  116. package/dist/deploy/base/stop.js +16 -11
  117. package/dist/deploy/base/types.d.ts +1 -1
  118. package/dist/deploy/base/types.js +3 -1
  119. package/dist/deploy/base/variables.d.ts +0 -1
  120. package/dist/deploy/base/variables.js +4 -3
  121. package/dist/deploy/cloudRun/artifactsRegistry.d.ts +19 -0
  122. package/dist/deploy/cloudRun/artifactsRegistry.js +125 -0
  123. package/dist/deploy/cloudRun/cleanup.d.ts +2 -0
  124. package/dist/deploy/cloudRun/cleanup.js +53 -0
  125. package/dist/deploy/cloudRun/cloudRunRevisions.d.ts +2 -0
  126. package/dist/deploy/cloudRun/cloudRunRevisions.js +62 -0
  127. package/dist/deploy/cloudRun/createJobs/cloudRunJobs.d.ts +7 -0
  128. package/dist/deploy/cloudRun/createJobs/cloudRunJobs.js +207 -0
  129. package/dist/deploy/cloudRun/createJobs/cloudRunServices.d.ts +4 -0
  130. package/dist/deploy/cloudRun/createJobs/cloudRunServices.js +96 -0
  131. package/dist/deploy/cloudRun/createJobs/common.d.ts +18 -0
  132. package/dist/deploy/cloudRun/createJobs/common.js +93 -0
  133. package/dist/deploy/cloudRun/createJobs/constants.d.ts +1 -0
  134. package/dist/deploy/cloudRun/createJobs/constants.js +7 -0
  135. package/dist/deploy/cloudRun/createJobs/getCloudRunDeployScripts.d.ts +2 -0
  136. package/dist/deploy/cloudRun/createJobs/getCloudRunDeployScripts.js +62 -0
  137. package/dist/deploy/cloudRun/createJobs/getCloudRunStopScripts.d.ts +2 -0
  138. package/dist/deploy/cloudRun/createJobs/getCloudRunStopScripts.js +54 -0
  139. package/dist/deploy/cloudRun/createJobs/index.d.ts +3 -0
  140. package/dist/deploy/cloudRun/createJobs/index.js +57 -0
  141. package/dist/deploy/cloudRun/createJobs/volumes.d.ts +3 -0
  142. package/dist/deploy/cloudRun/createJobs/volumes.js +58 -0
  143. package/dist/deploy/cloudRun/index.d.ts +2 -2
  144. package/dist/deploy/cloudRun/index.js +17 -10
  145. package/dist/deploy/cloudRun/utils/createArgsString.d.ts +3 -1
  146. package/dist/deploy/cloudRun/utils/createArgsString.js +25 -17
  147. package/dist/deploy/cloudRun/utils/database.d.ts +6 -4
  148. package/dist/deploy/cloudRun/utils/database.js +28 -15
  149. package/dist/deploy/cloudRun/utils/gcloudServiceAccountLoginCommands.d.ts +2 -2
  150. package/dist/deploy/cloudRun/utils/gcloudServiceAccountLoginCommands.js +4 -2
  151. package/dist/deploy/cloudRun/utils/getServiceName.d.ts +2 -0
  152. package/dist/deploy/cloudRun/utils/getServiceName.js +10 -0
  153. package/dist/deploy/cloudRun/utils/jobName.d.ts +2 -1
  154. package/dist/deploy/cloudRun/utils/jobName.js +4 -2
  155. package/dist/deploy/cloudRun/utils/removeFirstLinesFromCommandOutput.d.ts +9 -0
  156. package/dist/deploy/cloudRun/utils/removeFirstLinesFromCommandOutput.js +18 -0
  157. package/dist/deploy/cloudSql/utils.d.ts +2 -1
  158. package/dist/deploy/cloudSql/utils.js +7 -2
  159. package/dist/deploy/custom/deployJob.d.ts +2 -2
  160. package/dist/deploy/custom/deployJob.js +10 -9
  161. package/dist/deploy/custom/index.d.ts +2 -2
  162. package/dist/deploy/custom/index.js +3 -1
  163. package/dist/deploy/dockerTag/deployJob.d.ts +2 -2
  164. package/dist/deploy/dockerTag/deployJob.js +38 -7
  165. package/dist/deploy/dockerTag/index.d.ts +2 -2
  166. package/dist/deploy/dockerTag/index.js +3 -1
  167. package/dist/deploy/index.d.ts +10 -9
  168. package/dist/deploy/index.js +13 -7
  169. package/dist/deploy/kubernetes/additionalSecretKeys.d.ts +3 -1
  170. package/dist/deploy/kubernetes/additionalSecretKeys.js +3 -1
  171. package/dist/deploy/kubernetes/cloudSql/index.d.ts +6 -5
  172. package/dist/deploy/kubernetes/cloudSql/index.js +14 -21
  173. package/dist/deploy/kubernetes/deployJob.d.ts +2 -2
  174. package/dist/deploy/kubernetes/deployJob.js +23 -22
  175. package/dist/deploy/kubernetes/index.d.ts +2 -2
  176. package/dist/deploy/kubernetes/index.js +52 -15
  177. package/dist/deploy/kubernetes/kubeEnv.d.ts +5 -4
  178. package/dist/deploy/kubernetes/kubeEnv.js +9 -5
  179. package/dist/deploy/kubernetes/kubeValues.d.ts +5 -6
  180. package/dist/deploy/kubernetes/kubeValues.js +16 -18
  181. package/dist/deploy/kubernetes/mongodb.d.ts +2 -2
  182. package/dist/deploy/kubernetes/mongodb.js +14 -12
  183. package/dist/deploy/sbom.d.ts +4 -4
  184. package/dist/deploy/sbom.js +7 -4
  185. package/dist/deploy/types/base.d.ts +5 -5
  186. package/dist/deploy/types/base.js +3 -1
  187. package/dist/deploy/types/custom.d.ts +3 -7
  188. package/dist/deploy/types/custom.js +3 -1
  189. package/dist/deploy/types/dockerTag.d.ts +3 -1
  190. package/dist/deploy/types/dockerTag.js +3 -1
  191. package/dist/deploy/types/googleCloudRun.d.ts +127 -24
  192. package/dist/deploy/types/googleCloudRun.js +3 -1
  193. package/dist/deploy/types/index.d.ts +6 -6
  194. package/dist/deploy/types/index.js +14 -8
  195. package/dist/deploy/types/kubernetes.d.ts +25 -54
  196. package/dist/deploy/types/kubernetes.js +3 -1
  197. package/dist/deploy/utils.d.ts +2 -2
  198. package/dist/deploy/utils.js +5 -2
  199. package/dist/globalScriptFunctions/index.d.ts +14 -0
  200. package/dist/globalScriptFunctions/index.js +37 -0
  201. package/dist/index.d.ts +5 -2
  202. package/dist/index.js +18 -9
  203. package/dist/packageInfos.d.ts +4 -0
  204. package/dist/packageInfos.js +20 -0
  205. package/dist/pipeline/__tests__/getPipelineStages.test.d.ts +1 -0
  206. package/dist/pipeline/__tests__/getPipelineStages.test.js +73 -0
  207. package/dist/pipeline/createAllJobs.d.ts +16 -6
  208. package/dist/pipeline/createAllJobs.js +99 -27
  209. package/dist/pipeline/createJobsForComponent.d.ts +2 -2
  210. package/dist/pipeline/createJobsForComponent.js +9 -149
  211. package/dist/pipeline/createJobsForWorkspace.d.ts +3 -0
  212. package/dist/pipeline/createJobsForWorkspace.js +12 -0
  213. package/dist/pipeline/createMainPipeline.d.ts +3 -0
  214. package/dist/pipeline/createMainPipeline.js +283 -0
  215. package/dist/pipeline/generatePipelineFiles.d.ts +7 -0
  216. package/dist/pipeline/generatePipelineFiles.js +304 -0
  217. package/dist/pipeline/getPipelineStages.d.ts +7 -0
  218. package/dist/pipeline/getPipelineStages.js +56 -0
  219. package/dist/pipeline/gitlab/createGitlabJobs.d.ts +11 -14
  220. package/dist/pipeline/gitlab/createGitlabJobs.js +258 -74
  221. package/dist/pipeline/gitlab/createGitlabPipeline.d.ts +9 -0
  222. package/dist/pipeline/gitlab/createGitlabPipeline.js +77 -0
  223. package/dist/pipeline/gitlab/gitlabReleaseJobs.d.ts +33 -0
  224. package/dist/pipeline/gitlab/gitlabReleaseJobs.js +25 -0
  225. package/dist/pipeline/gitlab/sortGitLabJobDefProps.d.ts +7 -0
  226. package/dist/pipeline/gitlab/sortGitLabJobDefProps.js +27 -0
  227. package/dist/pipeline/index.d.ts +3 -2
  228. package/dist/pipeline/index.js +16 -9
  229. package/dist/pipeline/packageManager.d.ts +3 -2
  230. package/dist/pipeline/packageManager.js +50 -24
  231. package/dist/pipeline/yarn/yarnUtils.d.ts +3 -2
  232. package/dist/pipeline/yarn/yarnUtils.js +65 -17
  233. package/dist/rules/index.d.ts +7 -2
  234. package/dist/rules/index.js +34 -16
  235. package/dist/runner/index.d.ts +1 -1
  236. package/dist/runner/index.js +3 -1
  237. package/dist/tsconfig.tsbuildinfo +1 -1
  238. package/dist/types/config.d.ts +44 -29
  239. package/dist/types/config.js +5 -2
  240. package/dist/types/context.d.ts +124 -40
  241. package/dist/types/context.js +12 -1
  242. package/dist/types/environmentContext.d.ts +15 -12
  243. package/dist/types/environmentContext.js +3 -1
  244. package/dist/types/gitlab-ci-yml.d.ts +30 -30
  245. package/dist/types/gitlab-ci-yml.js +3 -2
  246. package/dist/types/gitlab-types.d.ts +8 -8
  247. package/dist/types/gitlab-types.js +3 -1
  248. package/dist/types/index.d.ts +1 -0
  249. package/dist/types/index.js +14 -7
  250. package/dist/types/jobDefinition.d.ts +11 -0
  251. package/dist/types/jobDefinition.js +5 -0
  252. package/dist/types/jobs.d.ts +30 -15
  253. package/dist/types/jobs.js +3 -1
  254. package/dist/types/pipeline.d.ts +3 -3
  255. package/dist/types/pipeline.js +3 -1
  256. package/dist/types/utils.d.ts +1 -1
  257. package/dist/types/utils.js +3 -1
  258. package/dist/utils/gitlab.js +7 -2
  259. package/dist/utils/index.d.ts +2 -1
  260. package/dist/utils/index.js +10 -3
  261. package/dist/utils/jsonParse.d.ts +1 -0
  262. package/dist/utils/jsonParse.js +14 -0
  263. package/dist/utils/removeUndefined.d.ts +1 -0
  264. package/dist/utils/removeUndefined.js +36 -0
  265. package/dist/utils/writeFiles.d.ts +11 -0
  266. package/dist/{pipeline/commitInfo/getBuildId.js → utils/writeFiles.js} +39 -22
  267. package/dist/variables/VariableValue.d.ts +3 -0
  268. package/dist/variables/VariableValue.js +5 -0
  269. package/dist/variables/VariableValueContainingReferences.d.ts +24 -0
  270. package/dist/variables/VariableValueContainingReferences.js +97 -0
  271. package/dist/variables/__tests__/resolveAllReferences.test.d.ts +1 -0
  272. package/dist/variables/__tests__/resolveAllReferences.test.js +218 -0
  273. package/dist/variables/__tests__/resolveAllReferencesOnce.test.d.ts +1 -0
  274. package/dist/variables/__tests__/resolveAllReferencesOnce.test.js +171 -0
  275. package/dist/variables/__tests__/resolveReferencesOnce.test.d.ts +1 -0
  276. package/dist/variables/__tests__/resolveReferencesOnce.test.js +199 -0
  277. package/dist/variables/__tests__/variableValue.test.d.ts +1 -0
  278. package/dist/variables/__tests__/variableValue.test.js +36 -0
  279. package/dist/variables/resolveAllReferences.d.ts +3 -0
  280. package/dist/{pipeline/createChildPipeline.js → variables/resolveAllReferences.js} +44 -47
  281. package/dist/variables/resolveAllReferencesOnce.d.ts +5 -0
  282. package/dist/variables/resolveAllReferencesOnce.js +191 -0
  283. package/dist/variables/resolveReferencesOnce.d.ts +8 -0
  284. package/dist/variables/resolveReferencesOnce.js +22 -0
  285. package/examples/.test-gen-ignore +1 -0
  286. package/examples/__snapshots__/cloud-run-http2.test.ts.snap +1418 -0
  287. package/examples/__snapshots__/cloud-run-memory-limit.test.ts.snap +1418 -0
  288. package/examples/__snapshots__/cloud-run-meteor-with-worker.test.ts.snap +1418 -0
  289. package/examples/__snapshots__/cloud-run-nextjs.test.ts.snap +1434 -0
  290. package/examples/__snapshots__/cloud-run-no-cpu-throttling.test.ts.snap +1418 -0
  291. package/examples/__snapshots__/cloud-run-no-service.test.ts.snap +1526 -0
  292. package/examples/__snapshots__/cloud-run-non-public.test.ts.snap +1418 -0
  293. package/examples/__snapshots__/cloud-run-post-stop-job.test.ts.snap +1436 -0
  294. package/examples/__snapshots__/cloud-run-service-custom-vpc-connector.test.ts.snap +1418 -0
  295. package/examples/__snapshots__/cloud-run-service-custom-vpc.test.ts.snap +1418 -0
  296. package/examples/__snapshots__/cloud-run-service-gen2.test.ts.snap +1418 -0
  297. package/examples/__snapshots__/cloud-run-service-increase-timout.test.ts.snap +1418 -0
  298. package/examples/__snapshots__/cloud-run-service-with-volumes.test.ts.snap +1490 -0
  299. package/examples/__snapshots__/cloud-run-storybook.test.ts.snap +1302 -0
  300. package/examples/__snapshots__/cloud-run-with-ngnix.test.ts.snap +1418 -0
  301. package/examples/__snapshots__/cloud-run-with-sql-reuse-db.test.ts.snap +2998 -0
  302. package/examples/__snapshots__/cloud-run-with-sql.test.ts.snap +1733 -0
  303. package/examples/__snapshots__/cloud-run-with-worker.test.ts.snap +1426 -0
  304. package/examples/__snapshots__/custom-build-job-with-tests.test.ts.snap +1285 -0
  305. package/examples/__snapshots__/custom-build-job.test.ts.snap +1174 -0
  306. package/examples/__snapshots__/custom-deploy.test.ts.snap +1168 -0
  307. package/examples/__snapshots__/custom-envs.test.ts.snap +798 -0
  308. package/examples/__snapshots__/custom-sbom-java.test.ts.snap +1182 -0
  309. package/examples/__snapshots__/git-submodule.test.ts.snap +1419 -0
  310. package/examples/__snapshots__/kubernetes-application-customization.test.ts.snap +1759 -0
  311. package/examples/__snapshots__/kubernetes-with-cloud-sql.test.ts.snap +1779 -0
  312. package/examples/__snapshots__/kubernetes-with-jobs.test.ts.snap +3357 -0
  313. package/examples/__snapshots__/kubernetes-with-mongodb.test.ts.snap +1883 -0
  314. package/examples/__snapshots__/local-dot-env.test.ts.snap +1342 -0
  315. package/examples/__snapshots__/meteor-kubernetes.test.ts.snap +1836 -0
  316. package/examples/__snapshots__/multiline-var.test.ts.snap +5679 -0
  317. package/examples/__snapshots__/native-app.test.ts.snap +2206 -0
  318. package/examples/__snapshots__/node-build-with-custom-image.test.ts.snap +1418 -0
  319. package/examples/__snapshots__/node-build-with-docker-additions.test.ts.snap +1426 -0
  320. package/examples/__snapshots__/rails-k8s-with-worker-dockerfile.test.ts.snap +1487 -0
  321. package/examples/__snapshots__/rails-k8s-with-worker.test.ts.snap +1471 -0
  322. package/examples/__snapshots__/referencing-other-vars.test.ts.snap +4739 -0
  323. package/examples/__snapshots__/wait-for-other-deploy.test.ts.snap +1368 -0
  324. package/examples/__snapshots__/workspace-api-www-turbo-cache.test.ts.snap +2338 -0
  325. package/examples/__snapshots__/workspace-api-www.test.ts.snap +2330 -0
  326. package/examples/__utils__/helpers.ts +9 -12
  327. package/examples/cloud-run-http2.test.ts +11 -0
  328. package/examples/cloud-run-http2.ts +29 -0
  329. package/examples/cloud-run-memory-limit.test.ts +11 -0
  330. package/examples/cloud-run-memory-limit.ts +10 -5
  331. package/examples/cloud-run-meteor-with-worker.test.ts +11 -0
  332. package/examples/cloud-run-meteor-with-worker.ts +37 -0
  333. package/examples/cloud-run-nextjs.test.ts +11 -0
  334. package/examples/cloud-run-nextjs.ts +28 -0
  335. package/examples/cloud-run-no-cpu-throttling.test.ts +11 -0
  336. package/examples/cloud-run-no-cpu-throttling.ts +6 -4
  337. package/examples/cloud-run-no-service.test.ts +11 -0
  338. package/examples/cloud-run-no-service.ts +33 -0
  339. package/examples/cloud-run-non-public.test.ts +11 -0
  340. package/examples/cloud-run-non-public.ts +5 -4
  341. package/examples/cloud-run-post-stop-job.test.ts +11 -0
  342. package/examples/cloud-run-post-stop-job.ts +42 -0
  343. package/examples/cloud-run-service-custom-vpc-connector.test.ts +11 -0
  344. package/examples/cloud-run-service-custom-vpc-connector.ts +30 -0
  345. package/examples/cloud-run-service-custom-vpc.test.ts +11 -0
  346. package/examples/cloud-run-service-custom-vpc.ts +31 -0
  347. package/examples/cloud-run-service-gen2.test.ts +11 -0
  348. package/examples/cloud-run-service-gen2.ts +29 -0
  349. package/examples/cloud-run-service-increase-timout.test.ts +11 -0
  350. package/examples/cloud-run-service-increase-timout.ts +29 -0
  351. package/examples/cloud-run-service-with-volumes.test.ts +11 -0
  352. package/examples/cloud-run-service-with-volumes.ts +56 -0
  353. package/examples/cloud-run-storybook.test.ts +11 -0
  354. package/examples/cloud-run-storybook.ts +33 -0
  355. package/examples/cloud-run-with-ngnix.test.ts +11 -0
  356. package/examples/cloud-run-with-ngnix.ts +29 -0
  357. package/examples/cloud-run-with-sql-reuse-db.test.ts +11 -0
  358. package/examples/cloud-run-with-sql-reuse-db.ts +5 -4
  359. package/examples/cloud-run-with-sql.test.ts +11 -0
  360. package/examples/cloud-run-with-sql.ts +6 -20
  361. package/examples/cloud-run-with-worker.test.ts +11 -0
  362. package/examples/cloud-run-with-worker.ts +37 -0
  363. package/examples/custom-build-job-with-tests.test.ts +11 -0
  364. package/examples/custom-build-job-with-tests.ts +5 -4
  365. package/examples/custom-build-job.test.ts +11 -0
  366. package/examples/custom-build-job.ts +5 -4
  367. package/examples/custom-deploy.test.ts +11 -0
  368. package/examples/custom-deploy.ts +12 -4
  369. package/examples/custom-envs.test.ts +11 -0
  370. package/examples/custom-envs.ts +5 -4
  371. package/examples/custom-sbom-java.test.ts +11 -0
  372. package/examples/custom-sbom-java.ts +10 -6
  373. package/examples/git-submodule.test.ts +11 -0
  374. package/examples/git-submodule.ts +30 -0
  375. package/examples/kubernetes-application-customization.test.ts +11 -0
  376. package/examples/kubernetes-application-customization.ts +7 -4
  377. package/examples/kubernetes-with-cloud-sql.test.ts +11 -0
  378. package/examples/kubernetes-with-cloud-sql.ts +7 -4
  379. package/examples/kubernetes-with-jobs.test.ts +11 -0
  380. package/examples/kubernetes-with-jobs.ts +7 -4
  381. package/examples/kubernetes-with-mongodb.test.ts +11 -0
  382. package/examples/kubernetes-with-mongodb.ts +7 -4
  383. package/examples/local-dot-env.test.ts +11 -0
  384. package/examples/local-dot-env.ts +27 -0
  385. package/examples/meteor-kubernetes.test.ts +11 -0
  386. package/examples/meteor-kubernetes.ts +4 -5
  387. package/examples/multiline-var.test.ts +11 -0
  388. package/examples/multiline-var.ts +107 -0
  389. package/examples/native-app.test.ts +11 -0
  390. package/examples/native-app.ts +22 -17
  391. package/examples/node-build-with-custom-image.test.ts +11 -0
  392. package/examples/node-build-with-custom-image.ts +5 -4
  393. package/examples/node-build-with-docker-additions.test.ts +11 -0
  394. package/examples/node-build-with-docker-additions.ts +29 -0
  395. package/examples/rails-k8s-with-worker-dockerfile.test.ts +33 -0
  396. package/examples/rails-k8s-with-worker.test.ts +11 -0
  397. package/examples/rails-k8s-with-worker.ts +14 -11
  398. package/examples/referencing-other-vars.test.ts +11 -0
  399. package/examples/referencing-other-vars.ts +83 -0
  400. package/examples/wait-for-other-deploy.test.ts +11 -0
  401. package/examples/wait-for-other-deploy.ts +5 -4
  402. package/examples/workspace-api-www-turbo-cache.test.ts +11 -0
  403. package/examples/workspace-api-www-turbo-cache.ts +52 -0
  404. package/examples/workspace-api-www.test.ts +11 -0
  405. package/examples/workspace-api-www.ts +46 -0
  406. package/package.json +75 -26
  407. package/scripts/generate-examples-test.ts +84 -0
  408. package/scripts/generate-gitlab-ci-types.ts +2 -2
  409. package/scripts/tsconfig.json +7 -0
  410. package/src/bash/BashExpression.ts +78 -0
  411. package/src/bash/bashEscape.ts +158 -0
  412. package/src/bash/bashExpressionPerPipelineType.ts +16 -0
  413. package/src/bash/bashYaml.ts +80 -0
  414. package/src/bash/getInjectVarsScript.ts +21 -0
  415. package/src/bash/index.ts +2 -0
  416. package/src/build/artifacts/createBuildJobArtifact.ts +61 -0
  417. package/src/build/base/__tests__/createArtifactsConfig.test.ts +3 -3
  418. package/src/build/base/constants.ts +2 -2
  419. package/src/build/base/createAppBuildJob.ts +40 -24
  420. package/src/build/base/createArtifactsConfig.ts +2 -2
  421. package/src/build/base/createBuildJobDefinition.ts +37 -0
  422. package/src/build/base/index.ts +37 -8
  423. package/src/build/base/writeBuildInfo.ts +3 -3
  424. package/src/build/base/writeDotEnv.ts +25 -6
  425. package/src/build/cache/createJobCache.ts +83 -0
  426. package/src/build/cache/getAllCacheConfigsFromConfig.ts +28 -0
  427. package/src/build/cache/transformLegacyJobCache.ts +14 -0
  428. package/src/build/custom/__tests__/testJob.test.ts +10 -13
  429. package/src/build/custom/buildJob.ts +11 -37
  430. package/src/build/custom/index.ts +2 -2
  431. package/src/build/custom/testJob.ts +24 -22
  432. package/src/build/docker.ts +145 -49
  433. package/src/build/index.ts +42 -10
  434. package/src/build/node/buildJob.ts +65 -62
  435. package/src/build/node/cache.ts +30 -35
  436. package/src/build/node/constants.ts +2 -3
  437. package/src/build/node/index.ts +8 -4
  438. package/src/build/node/meteor.ts +16 -24
  439. package/src/build/node/testJob.ts +47 -26
  440. package/src/build/node/yarn.ts +32 -16
  441. package/src/build/rails/build.ts +21 -9
  442. package/src/build/rails/index.ts +2 -2
  443. package/src/build/rails/test.ts +22 -12
  444. package/src/build/sbom.ts +15 -10
  445. package/src/build/types.ts +190 -47
  446. package/src/catladder-gitlab.ts +7 -56
  447. package/src/config/__tests__/__snapshots__/getAllEnvs.test.ts.snap +31 -0
  448. package/src/config/__tests__/__snapshots__/getAllEnvsInAllComponents.test.ts.snap +15 -0
  449. package/src/config/__tests__/getAllEnvs.test.ts +71 -0
  450. package/src/config/__tests__/getAllEnvsInAllComponents.test.ts +63 -0
  451. package/src/config/configruedEnvs.ts +6 -6
  452. package/src/config/readConfig.ts +15 -22
  453. package/src/constants.ts +5 -2
  454. package/src/context/createAllComponentsContext.ts +31 -0
  455. package/src/context/createComponentContext.ts +134 -0
  456. package/src/context/createWorkspaceContext.ts +56 -0
  457. package/src/context/getBuildInfoVariables.ts +36 -0
  458. package/src/context/getEnvConfig.ts +3 -3
  459. package/src/context/getEnvType.ts +1 -1
  460. package/src/context/getEnvironment.ts +8 -24
  461. package/src/context/getEnvironmentContext.ts +25 -29
  462. package/src/context/getEnvironmentVariables.ts +104 -76
  463. package/src/context/getLabels.ts +5 -5
  464. package/src/context/getReviewSlug.ts +27 -0
  465. package/src/context/index.ts +1 -65
  466. package/src/context/transformJobOnlyVars.ts +6 -3
  467. package/src/context/utils/envVars.ts +5 -4
  468. package/src/deploy/base/deploy.ts +63 -47
  469. package/src/deploy/base/index.ts +11 -6
  470. package/src/deploy/base/rollback.ts +11 -16
  471. package/src/deploy/base/stop.ts +11 -15
  472. package/src/deploy/base/variables.ts +1 -2
  473. package/src/deploy/cloudRun/artifactsRegistry.ts +126 -0
  474. package/src/deploy/cloudRun/cleanup.ts +30 -0
  475. package/src/deploy/cloudRun/cloudRunRevisions.ts +65 -0
  476. package/src/deploy/cloudRun/createJobs/cloudRunJobs.ts +227 -0
  477. package/src/deploy/cloudRun/createJobs/cloudRunServices.ts +86 -0
  478. package/src/deploy/cloudRun/createJobs/common.ts +59 -0
  479. package/src/deploy/cloudRun/createJobs/constants.ts +1 -0
  480. package/src/deploy/cloudRun/createJobs/getCloudRunDeployScripts.ts +71 -0
  481. package/src/deploy/cloudRun/createJobs/getCloudRunStopScripts.ts +34 -0
  482. package/src/deploy/cloudRun/createJobs/index.ts +51 -0
  483. package/src/deploy/cloudRun/createJobs/volumes.ts +23 -0
  484. package/src/deploy/cloudRun/index.ts +85 -59
  485. package/src/deploy/cloudRun/utils/createArgsString.ts +21 -13
  486. package/src/deploy/cloudRun/utils/database.ts +31 -9
  487. package/src/deploy/cloudRun/utils/gcloudServiceAccountLoginCommands.ts +9 -11
  488. package/src/deploy/cloudRun/utils/getServiceName.ts +3 -0
  489. package/src/deploy/cloudRun/utils/jobName.ts +7 -2
  490. package/src/deploy/cloudRun/utils/removeFirstLinesFromCommandOutput.ts +12 -0
  491. package/src/deploy/cloudSql/utils.ts +13 -10
  492. package/src/deploy/custom/deployJob.ts +15 -10
  493. package/src/deploy/custom/index.ts +2 -2
  494. package/src/deploy/dockerTag/deployJob.ts +7 -8
  495. package/src/deploy/dockerTag/index.ts +8 -7
  496. package/src/deploy/index.ts +15 -12
  497. package/src/deploy/kubernetes/additionalSecretKeys.ts +3 -1
  498. package/src/deploy/kubernetes/cloudSql/index.ts +16 -25
  499. package/src/deploy/kubernetes/deployJob.ts +30 -21
  500. package/src/deploy/kubernetes/index.ts +43 -35
  501. package/src/deploy/kubernetes/kubeEnv.ts +12 -10
  502. package/src/deploy/kubernetes/kubeValues.ts +15 -19
  503. package/src/deploy/kubernetes/mongodb.ts +15 -15
  504. package/src/deploy/sbom.ts +18 -10
  505. package/src/deploy/types/base.ts +3 -3
  506. package/src/deploy/types/custom.ts +3 -7
  507. package/src/deploy/types/dockerTag.ts +2 -0
  508. package/src/deploy/types/googleCloudRun.ts +133 -10
  509. package/src/deploy/types/index.ts +2 -2
  510. package/src/deploy/types/kubernetes.ts +5 -36
  511. package/src/deploy/utils.ts +5 -5
  512. package/src/globalScriptFunctions/index.ts +30 -0
  513. package/src/index.ts +4 -1
  514. package/src/packageInfos.ts +14 -0
  515. package/src/pipeline/__tests__/__snapshots__/getPipelineStages.test.ts.snap +69 -0
  516. package/src/pipeline/__tests__/getPipelineStages.test.ts +63 -0
  517. package/src/pipeline/createAllJobs.ts +67 -33
  518. package/src/pipeline/createJobsForComponent.ts +10 -38
  519. package/src/pipeline/createJobsForWorkspace.ts +12 -0
  520. package/src/pipeline/createMainPipeline.ts +119 -0
  521. package/src/pipeline/generatePipelineFiles.ts +100 -0
  522. package/src/pipeline/getPipelineStages.ts +23 -0
  523. package/src/pipeline/gitlab/createGitlabJobs.ts +388 -108
  524. package/src/pipeline/gitlab/createGitlabPipeline.ts +35 -0
  525. package/src/pipeline/gitlab/gitlabReleaseJobs.ts +23 -0
  526. package/src/pipeline/gitlab/sortGitLabJobDefProps.ts +59 -0
  527. package/src/pipeline/index.ts +2 -1
  528. package/src/pipeline/packageManager.ts +44 -26
  529. package/src/pipeline/yarn/yarnUtils.ts +39 -10
  530. package/src/rules/index.ts +36 -9
  531. package/src/runner/index.ts +0 -1
  532. package/src/types/config.ts +43 -16
  533. package/src/types/context.ts +165 -37
  534. package/src/types/environmentContext.ts +18 -13
  535. package/src/types/gitlab-ci-yml.ts +0 -1
  536. package/src/types/gitlab-types.ts +10 -7
  537. package/src/types/index.ts +1 -0
  538. package/src/types/jobDefinition.ts +34 -0
  539. package/src/types/jobs.ts +31 -15
  540. package/src/types/utils.ts +4 -4
  541. package/src/utils/gitlab.ts +20 -3
  542. package/src/utils/index.ts +6 -3
  543. package/src/utils/jsonParse.ts +7 -0
  544. package/src/utils/removeUndefined.ts +4 -0
  545. package/src/utils/writeFiles.ts +52 -0
  546. package/src/variables/VariableValue.ts +6 -0
  547. package/src/variables/VariableValueContainingReferences.ts +89 -0
  548. package/src/variables/__tests__/resolveAllReferences.test.ts +110 -0
  549. package/src/variables/__tests__/resolveAllReferencesOnce.test.ts +64 -0
  550. package/src/variables/__tests__/resolveReferencesOnce.test.ts +117 -0
  551. package/src/variables/__tests__/variableValue.test.ts +73 -0
  552. package/src/variables/resolveAllReferences.ts +46 -0
  553. package/src/variables/resolveAllReferencesOnce.ts +44 -0
  554. package/src/variables/resolveReferencesOnce.ts +29 -0
  555. package/bin/catladder-gitlab-dev.js +0 -3
  556. package/bin/catladder-gitlab.js +0 -3
  557. package/dist/bundles/catladder-gitlab/index.js +0 -33838
  558. package/dist/context/__tests__/resolveReferences.test.js +0 -336
  559. package/dist/context/resolveReferences.d.ts +0 -4
  560. package/dist/context/resolveReferences.js +0 -254
  561. package/dist/deploy/cloudRun/deployJob.d.ts +0 -3
  562. package/dist/deploy/cloudRun/deployJob.js +0 -248
  563. package/dist/deploy/kubernetes/processSecretsAsFiles.d.ts +0 -84
  564. package/dist/deploy/kubernetes/processSecretsAsFiles.js +0 -31
  565. package/dist/pipeline/commitInfo/getBuildId.d.ts +0 -6
  566. package/dist/pipeline/commitInfo/getCommitInfo.d.ts +0 -2
  567. package/dist/pipeline/createChildPipeline.d.ts +0 -3
  568. package/examples/__snapshots__/cloud-run-memory-limit.ts.snap +0 -1780
  569. package/examples/__snapshots__/cloud-run-no-cpu-throttling.ts.snap +0 -1780
  570. package/examples/__snapshots__/cloud-run-non-public.ts.snap +0 -1780
  571. package/examples/__snapshots__/cloud-run-with-sql-reuse-db.ts.snap +0 -3532
  572. package/examples/__snapshots__/cloud-run-with-sql.ts.snap +0 -3543
  573. package/examples/__snapshots__/custom-build-job-with-tests.ts.snap +0 -1656
  574. package/examples/__snapshots__/custom-build-job.ts.snap +0 -1362
  575. package/examples/__snapshots__/custom-deploy.ts.snap +0 -1556
  576. package/examples/__snapshots__/custom-envs.ts.snap +0 -1050
  577. package/examples/__snapshots__/custom-sbom-java.ts.snap +0 -1370
  578. package/examples/__snapshots__/kubernetes-application-customization.ts.snap +0 -2468
  579. package/examples/__snapshots__/kubernetes-with-cloud-sql-legacy.ts.snap +0 -2428
  580. package/examples/__snapshots__/kubernetes-with-cloud-sql.ts.snap +0 -2440
  581. package/examples/__snapshots__/kubernetes-with-jobs.ts.snap +0 -4453
  582. package/examples/__snapshots__/kubernetes-with-mongodb.ts.snap +0 -2632
  583. package/examples/__snapshots__/meteor-kubernetes.ts.snap +0 -2557
  584. package/examples/__snapshots__/native-app.ts.snap +0 -2878
  585. package/examples/__snapshots__/node-build-with-custom-image.ts.snap +0 -1780
  586. package/examples/__snapshots__/rails-k8s-with-worker.ts.snap +0 -4189
  587. package/examples/__snapshots__/wait-for-other-deploy.ts.snap +0 -1922
  588. package/examples/kubernetes-with-cloud-sql-legacy.ts +0 -33
  589. package/scripts/bundle +0 -2
  590. package/src/context/__tests__/resolveReferences.test.ts +0 -143
  591. package/src/context/resolveReferences.ts +0 -70
  592. package/src/deploy/cloudRun/deployJob.ts +0 -301
  593. package/src/deploy/kubernetes/processSecretsAsFiles.ts +0 -34
  594. package/src/pipeline/commitInfo/getBuildId.ts +0 -17
  595. package/src/pipeline/commitInfo/getCommitInfo.ts +0 -15
  596. package/src/pipeline/createChildPipeline.ts +0 -45
  597. /package/dist/{context/__tests__/resolveReferences.test.d.ts → config/__tests__/getAllEnvs.test.d.ts} +0 -0
@@ -1,3532 +0,0 @@
1
- // Jest Snapshot v1, https://goo.gl/fbAQLP
2
-
3
- exports[`matches snapshot 1`] = `
4
- {
5
- "mainBranch": {
6
- "image": "path/to/docker/jobs-default:the-version",
7
- "jobs": {
8
- "api 👮 lint": {
9
- "cache": [
10
- {
11
- "key": "api-yarn",
12
- "paths": [
13
- "api/.yarn",
14
- ],
15
- "policy": "pull-push",
16
- },
17
- {
18
- "key": "api-node-modules",
19
- "paths": [
20
- "api/node_modules",
21
- ],
22
- "policy": "pull-push",
23
- },
24
- ],
25
- "image": "path/to/docker/jobs-default:the-version",
26
- "interruptible": true,
27
- "needs": [],
28
- "retry": {
29
- "max": 2,
30
- "when": [
31
- "runner_system_failure",
32
- "stuck_or_timeout_failure",
33
- ],
34
- },
35
- "script": [
36
- "cd api",
37
- "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
38
- "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
39
- "yarn install --immutable",
40
- "yarn lint",
41
- ],
42
- "stage": "test",
43
- "variables": {
44
- "APP_PATH": "api",
45
- "KUBERNETES_CPU_LIMIT": "2",
46
- "KUBERNETES_CPU_REQUEST": "0.5",
47
- "KUBERNETES_MEMORY_LIMIT": "4Gi",
48
- "KUBERNETES_MEMORY_REQUEST": "2Gi",
49
- },
50
- },
51
- "api 🔨 app | dev ": {
52
- "artifacts": {
53
- "expire_in": "1 day",
54
- "paths": [
55
- "api/__build_info.json",
56
- "api/dist",
57
- "api/.next",
58
- ],
59
- "reports": {
60
- "junit": undefined,
61
- },
62
- },
63
- "cache": [
64
- {
65
- "key": "api-yarn",
66
- "paths": [
67
- "api/.yarn",
68
- ],
69
- "policy": "pull-push",
70
- },
71
- {
72
- "key": "api-node-modules",
73
- "paths": [
74
- "api/node_modules",
75
- ],
76
- "policy": "pull-push",
77
- },
78
- {
79
- "key": "api-next-cache",
80
- "paths": [
81
- "api/.next/cache/",
82
- ],
83
- "policy": "pull-push",
84
- },
85
- ],
86
- "image": "path/to/docker/jobs-default:the-version",
87
- "interruptible": true,
88
- "needs": [],
89
- "retry": {
90
- "max": 2,
91
- "when": [
92
- "runner_system_failure",
93
- "stuck_or_timeout_failure",
94
- ],
95
- },
96
- "script": [
97
- "echo '{"id":"some-id","time":"01-01-2023 12:13:14"}' > api/__build_info.json",
98
- "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
99
- "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
100
- "cd api",
101
- "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
102
- "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
103
- "yarn install --immutable",
104
- "yarn build",
105
- ],
106
- "stage": "build",
107
- "variables": {
108
- "APP_DIR": "api",
109
- "BUILD_INFO_BUILD_TIME": "01-01-2023 12:13:14",
110
- "BUILD_INFO_CURRENT_VERSION": "3.2.1",
111
- "BUILD_INFO_ID": "some-id",
112
- "CLOUD_SQL_INSTANCE_CONNECTION_NAME": "projectId:region:instancename",
113
- "DATABASE_JDBC_URL": "jdbc:postgresql:///$DB_NAME?cloudSqlInstance=$CLOUD_SQL_INSTANCE_CONNECTION_NAME&socketFactory=com.google.cloud.sql.postgres.SocketFactory&user=$DB_USER&password=$DB_PASSWORD",
114
- "DATABASE_URL": "postgresql://$DB_USER:$DB_PASSWORD@localhost/$DB_NAME?host=/cloudsql/$CLOUD_SQL_INSTANCE_CONNECTION_NAME",
115
- "DB_NAME": "pan-test-app-dev-api",
116
- "DB_PASSWORD": "$CL_dev_api_DB_PASSWORD",
117
- "DB_USER": "my-user",
118
- "ENV_SHORT": "dev",
119
- "ENV_TYPE": "dev",
120
- "GCLOUD_DEPLOY_credentialsKey": "$CL_dev_api_GCLOUD_DEPLOY_credentialsKey",
121
- "GCLOUD_RUN_canonicalHostSuffix": "$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix",
122
- "HOST": "pan-test-app-dev-api-unknown-host.example.com",
123
- "HOST_CANONICAL": "pan-test-app-dev-api-unknown-host.example.com",
124
- "KUBERNETES_CPU_LIMIT": "2",
125
- "KUBERNETES_CPU_REQUEST": "0.5",
126
- "KUBERNETES_MEMORY_LIMIT": "4Gi",
127
- "KUBERNETES_MEMORY_REQUEST": "2Gi",
128
- "ROOT_URL": "https://pan-test-app-dev-api-unknown-host.example.com",
129
- "_ALL_ENV_VAR_KEYS": "["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","HOST_CANONICAL","CLOUD_SQL_INSTANCE_CONNECTION_NAME","DB_NAME","DB_USER","DB_PASSWORD","DATABASE_URL","DATABASE_JDBC_URL","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]",
130
- },
131
- },
132
- "api 🔨 docker | dev ": {
133
- "cache": [
134
- {
135
- "key": "api-yarn",
136
- "paths": [
137
- "api/.yarn",
138
- ],
139
- "policy": "pull",
140
- },
141
- ],
142
- "image": "path/to/docker/docker-build:the-version",
143
- "interruptible": true,
144
- "needs": [
145
- "api 🔨 app | dev ",
146
- ],
147
- "retry": {
148
- "max": 2,
149
- "when": [
150
- "runner_system_failure",
151
- "stuck_or_timeout_failure",
152
- ],
153
- },
154
- "script": [
155
- "ensureNodeDockerfile",
156
- "docker login --username gitlab-ci-token --password $CI_JOB_TOKEN $CI_REGISTRY",
157
- "docker version",
158
- "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",
159
- "docker push $DOCKER_IMAGE:$DOCKER_IMAGE_TAG",
160
- "docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG $DOCKER_CACHE_IMAGE",
161
- "docker push $DOCKER_CACHE_IMAGE",
162
- ],
163
- "services": [
164
- {
165
- "command": [
166
- "--tls=false",
167
- ],
168
- "name": "docker:20-dind",
169
- },
170
- ],
171
- "stage": "build",
172
- "variables": {
173
- "APP_DIR": "api",
174
- "DOCKERFILE_ADDITIONS": undefined,
175
- "DOCKERFILE_ADDITIONS_END": undefined,
176
- "DOCKER_BUILDKIT": "1",
177
- "DOCKER_CACHE_IMAGE": "$DOCKER_REGISTRY_IMAGE_PATH/caches/api",
178
- "DOCKER_COPY_AND_INSTALL_APP": "COPY --chown=node:node $APP_DIR .
179
- RUN yarn plugin import workspace-tools
180
- RUN yarn workspaces focus --production && yarn rebuild",
181
- "DOCKER_COPY_WORKSPACE_FILES": "COPY --chown=node:node api/package.json /app/api/package.json
182
- COPY --chown=node:node api/yarn.lock /app/api/yarn.lock
183
- COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
184
- COPY --chown=node:node .yarn /app/.yarn",
185
- "DOCKER_DIR": ".",
186
- "DOCKER_DRIVER": "overlay2",
187
- "DOCKER_HOST": "tcp://0.0.0.0:2375",
188
- "DOCKER_IMAGE": "$DOCKER_REGISTRY_IMAGE_PATH/$DOCKER_IMAGE_NAME",
189
- "DOCKER_IMAGE_NAME": "dev/api",
190
- "DOCKER_IMAGE_TAG": "$CI_COMMIT_SHA",
191
- "DOCKER_REGISTRY": "$CI_REGISTRY",
192
- "DOCKER_REGISTRY_IMAGE_PATH": "$CI_REGISTRY_IMAGE",
193
- "DOCKER_TLS_CERTDIR": "",
194
- "KUBERNETES_CPU_LIMIT": "1",
195
- "KUBERNETES_CPU_REQUEST": "0.5",
196
- "KUBERNETES_MEMORY_LIMIT": "2Gi",
197
- "KUBERNETES_MEMORY_REQUEST": "1Gi",
198
- },
199
- },
200
- "api 🚀 Deploy | dev ": {
201
- "allow_failure": false,
202
- "artifacts": {
203
- "paths": [
204
- "____envvars.yaml",
205
- ],
206
- },
207
- "environment": {
208
- "auto_stop_in": "4 weeks",
209
- "name": "dev/api",
210
- "on_stop": "api 🛑 Stop ⚠️ | dev ",
211
- "url": "https://pan-test-app-dev-api-unknown-host.example.com",
212
- },
213
- "image": "path/to/docker/gcloud:the-version",
214
- "interruptible": true,
215
- "needs": [
216
- {
217
- "artifacts": false,
218
- "job": "api 👮 lint",
219
- },
220
- {
221
- "artifacts": false,
222
- "job": "api 🔨 app | dev ",
223
- },
224
- {
225
- "artifacts": false,
226
- "job": "api 🔨 docker | dev ",
227
- },
228
- {
229
- "artifacts": false,
230
- "job": "api 🧪 test",
231
- },
232
- {
233
- "artifacts": true,
234
- "job": "api 🧾 sbom | dev ",
235
- },
236
- {
237
- "artifacts": false,
238
- "job": "api 🛡 audit",
239
- },
240
- ],
241
- "retry": {
242
- "max": 2,
243
- "when": [
244
- "runner_system_failure",
245
- "stuck_or_timeout_failure",
246
- ],
247
- },
248
- "rules": [
249
- {
250
- "when": "on_success",
251
- },
252
- ],
253
- "script": [
254
- "echo -e "\\e[0Ksection_start:$(date +%s):prepare[collapsed=true]\\r\\e[0KPrepare..."",
255
- "echo $CL_dev_api_GCLOUD_DEPLOY_credentialsKey > ./____keyfile.json
256
- ",
257
- "gcloud auth activate-service-account --key-file="./____keyfile.json"",
258
- "export GCLOUD_PROJECT_NUMBER=$(gcloud projects describe google-project-id --format="value(projectNumber)")",
259
- "echo "GCLOUD_PROJECT_NUMBER: $GCLOUD_PROJECT_NUMBER"",
260
- "echo -e "\\e[0Ksection_end:$(date +%s):prepare\\r\\e[0K"",
261
- "echo -e "\\e[0Ksection_start:$(date +%s):pushToArtifactRegistry[collapsed=true]\\r\\e[0KPushing image to artifacts registry"",
262
- "docker login --username gitlab-ci-token --password $CI_JOB_TOKEN $CI_REGISTRY",
263
- "gcloud auth configure-docker europe-west6-docker.pkg.dev",
264
- "docker pull $DOCKER_IMAGE:$DOCKER_IMAGE_TAG",
265
- "docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/dev/api:$DOCKER_IMAGE_TAG",
266
- "docker push europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/dev/api:$DOCKER_IMAGE_TAG",
267
- "echo -e "\\e[0Ksection_end:$(date +%s):pushToArtifactRegistry\\r\\e[0K"",
268
- "echo -e "\\e[0Ksection_start:$(date +%s):deploy[collapsed=true]\\r\\e[0KDeploy to cloud run"",
269
- "echo "$ENV_VARS" > ____envvars.yaml",
270
- "set +e",
271
- "echo "ensuring Database..."",
272
- "gcloud sql databases create pan-test-app-dev-api --instance=instancename --project projectId",
273
- "set -e",
274
- "gcloud run deploy pan-test-app-dev-api --command="yarn,start" --image=europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/dev/api:$DOCKER_IMAGE_TAG --project=google-project-id --region=europe-west6 --set-cloudsql-instances=projectId:region:instancename --labels=customer-name=pan,component-name=api,app-name=test-app,env-type=dev,env-name=dev,build-type=node --env-vars-file=____envvars.yaml --min-instances=0 --max-instances=100 --cpu-throttling --allow-unauthenticated --cpu-boost",
275
- "echo -e "\\e[0Ksection_end:$(date +%s):deploy\\r\\e[0K"",
276
- "docker image rm europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/dev/api:$DOCKER_IMAGE_TAG",
277
- "echo Uploading SBOM to Dependency Track",
278
- "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/api" "https://pan-test-app-dev-api-unknown-host.example.com" "__sbom.json" vex.json || true",
279
- ],
280
- "services": [
281
- {
282
- "command": [
283
- "--tls=false",
284
- ],
285
- "name": "docker:20-dind",
286
- },
287
- ],
288
- "stage": "deploy dev",
289
- "variables": {
290
- "APP_DIR": "api",
291
- "BUILD_INFO_BUILD_TIME": "01-01-2023 12:13:14",
292
- "BUILD_INFO_CURRENT_VERSION": "3.2.1",
293
- "BUILD_INFO_ID": "some-id",
294
- "CLOUDSDK_CORE_DISABLE_PROMPTS": "1",
295
- "CLOUD_SQL_INSTANCE_CONNECTION_NAME": "projectId:region:instancename",
296
- "DATABASE_JDBC_URL": "jdbc:postgresql:///$DB_NAME?cloudSqlInstance=$CLOUD_SQL_INSTANCE_CONNECTION_NAME&socketFactory=com.google.cloud.sql.postgres.SocketFactory&user=$DB_USER&password=$DB_PASSWORD",
297
- "DATABASE_URL": "postgresql://$DB_USER:$DB_PASSWORD@localhost/$DB_NAME?host=/cloudsql/$CLOUD_SQL_INSTANCE_CONNECTION_NAME",
298
- "DB_NAME": "pan-test-app-dev-api",
299
- "DB_PASSWORD": "$CL_dev_api_DB_PASSWORD",
300
- "DB_USER": "my-user",
301
- "DOCKER_BUILDKIT": "1",
302
- "DOCKER_CACHE_IMAGE": "$DOCKER_REGISTRY_IMAGE_PATH/caches/api",
303
- "DOCKER_DRIVER": "overlay2",
304
- "DOCKER_HOST": "tcp://0.0.0.0:2375",
305
- "DOCKER_IMAGE": "$DOCKER_REGISTRY_IMAGE_PATH/$DOCKER_IMAGE_NAME",
306
- "DOCKER_IMAGE_NAME": "dev/api",
307
- "DOCKER_IMAGE_TAG": "$CI_COMMIT_SHA",
308
- "DOCKER_REGISTRY": "$CI_REGISTRY",
309
- "DOCKER_REGISTRY_IMAGE_PATH": "$CI_REGISTRY_IMAGE",
310
- "DOCKER_TLS_CERTDIR": "",
311
- "ENV_SHORT": "dev",
312
- "ENV_TYPE": "dev",
313
- "ENV_VARS": "ENV_SHORT: 'dev'
314
- APP_DIR: 'api'
315
- ENV_TYPE: 'dev'
316
- BUILD_INFO_ID: 'some-id'
317
- BUILD_INFO_BUILD_TIME: '01-01-2023 12:13:14'
318
- BUILD_INFO_CURRENT_VERSION: '3.2.1'
319
- HOST: 'pan-test-app-dev-api-unknown-host.example.com'
320
- ROOT_URL: 'https://pan-test-app-dev-api-unknown-host.example.com'
321
- HOST_CANONICAL: 'pan-test-app-dev-api-unknown-host.example.com'
322
- CLOUD_SQL_INSTANCE_CONNECTION_NAME: 'projectId:region:instancename'
323
- DB_NAME: 'pan-test-app-dev-api'
324
- DB_USER: 'my-user'
325
- DB_PASSWORD: '$CL_dev_api_DB_PASSWORD'
326
- DATABASE_URL: 'postgresql://$DB_USER:$DB_PASSWORD@localhost/$DB_NAME?host=/cloudsql/$CLOUD_SQL_INSTANCE_CONNECTION_NAME'
327
- DATABASE_JDBC_URL: 'jdbc:postgresql:///$DB_NAME?cloudSqlInstance=$CLOUD_SQL_INSTANCE_CONNECTION_NAME&socketFactory=com.google.cloud.sql.postgres.SocketFactory&user=$DB_USER&password=$DB_PASSWORD'
328
- GCLOUD_RUN_canonicalHostSuffix: '$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix'
329
- _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","HOST_CANONICAL","CLOUD_SQL_INSTANCE_CONNECTION_NAME","DB_NAME","DB_USER","DB_PASSWORD","DATABASE_URL","DATABASE_JDBC_URL","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]'
330
- ",
331
- "GCLOUD_DEPLOY_credentialsKey": "$CL_dev_api_GCLOUD_DEPLOY_credentialsKey",
332
- "GCLOUD_RUN_canonicalHostSuffix": "$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix",
333
- "HOST": "pan-test-app-dev-api-unknown-host.example.com",
334
- "HOST_CANONICAL": "pan-test-app-dev-api-unknown-host.example.com",
335
- "KUBERNETES_CPU_LIMIT": "1",
336
- "KUBERNETES_CPU_REQUEST": "0.5",
337
- "KUBERNETES_MEMORY_LIMIT": "400Mi",
338
- "KUBERNETES_MEMORY_REQUEST": "200Mi",
339
- "ROOT_URL": "https://pan-test-app-dev-api-unknown-host.example.com",
340
- "_ALL_ENV_VAR_KEYS": "["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","HOST_CANONICAL","CLOUD_SQL_INSTANCE_CONNECTION_NAME","DB_NAME","DB_USER","DB_PASSWORD","DATABASE_URL","DATABASE_JDBC_URL","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]",
341
- },
342
- },
343
- "api 🛑 Stop ⚠️ | dev ": {
344
- "environment": {
345
- "action": "stop",
346
- "name": "dev/api",
347
- "url": "https://pan-test-app-dev-api-unknown-host.example.com",
348
- },
349
- "image": "path/to/docker/gcloud:the-version",
350
- "interruptible": true,
351
- "needs": [],
352
- "retry": {
353
- "max": 2,
354
- "when": [
355
- "runner_system_failure",
356
- "stuck_or_timeout_failure",
357
- ],
358
- },
359
- "rules": [
360
- {
361
- "allow_failure": true,
362
- "if": "$CI_COMMIT_BRANCH =~ /^[0-9]+\\.([0-9]+|x)\\.x$/",
363
- "when": "on_success",
364
- },
365
- {
366
- "allow_failure": true,
367
- "when": "manual",
368
- },
369
- ],
370
- "script": [
371
- "set +e",
372
- "echo $CL_dev_api_GCLOUD_DEPLOY_credentialsKey > ./____keyfile.json
373
- ",
374
- "gcloud auth activate-service-account --key-file="./____keyfile.json"",
375
- "gcloud run services delete pan-test-app-dev-api --project=google-project-id --region=europe-west6",
376
- "echo Disabling component in Dependency Track",
377
- "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" disable "pan-test-app/api" "https://pan-test-app-dev-api-unknown-host.example.com" || true",
378
- "set -e",
379
- ],
380
- "stage": "stop dev",
381
- "variables": {
382
- "CLOUDSDK_CORE_DISABLE_PROMPTS": "1",
383
- "GIT_STRATEGY": "none",
384
- "KUBERNETES_CPU_LIMIT": "1",
385
- "KUBERNETES_CPU_REQUEST": "0.5",
386
- "KUBERNETES_MEMORY_LIMIT": "400Mi",
387
- "KUBERNETES_MEMORY_REQUEST": "200Mi",
388
- },
389
- },
390
- "api 🛡 audit": {
391
- "allow_failure": true,
392
- "image": "path/to/docker/jobs-default:the-version",
393
- "interruptible": true,
394
- "needs": [],
395
- "retry": {
396
- "max": 2,
397
- "when": [
398
- "runner_system_failure",
399
- "stuck_or_timeout_failure",
400
- ],
401
- },
402
- "script": [
403
- "cd api",
404
- "yarn npm audit --environment production",
405
- ],
406
- "stage": "test",
407
- "variables": {
408
- "APP_PATH": "api",
409
- "KUBERNETES_CPU_LIMIT": "2",
410
- "KUBERNETES_CPU_REQUEST": "0.5",
411
- "KUBERNETES_MEMORY_LIMIT": "4Gi",
412
- "KUBERNETES_MEMORY_REQUEST": "2Gi",
413
- },
414
- },
415
- "api 🧪 test": {
416
- "cache": [
417
- {
418
- "key": "api-yarn",
419
- "paths": [
420
- "api/.yarn",
421
- ],
422
- "policy": "pull-push",
423
- },
424
- {
425
- "key": "api-node-modules",
426
- "paths": [
427
- "api/node_modules",
428
- ],
429
- "policy": "pull-push",
430
- },
431
- ],
432
- "image": "path/to/docker/jobs-testing-chrome:the-version",
433
- "interruptible": true,
434
- "needs": [],
435
- "retry": {
436
- "max": 2,
437
- "when": [
438
- "runner_system_failure",
439
- "stuck_or_timeout_failure",
440
- ],
441
- },
442
- "script": [
443
- "cd api",
444
- "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
445
- "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
446
- "yarn install --immutable",
447
- "yarn test",
448
- ],
449
- "stage": "test",
450
- "variables": {
451
- "APP_PATH": "api",
452
- "KUBERNETES_CPU_LIMIT": "2",
453
- "KUBERNETES_CPU_REQUEST": "0.5",
454
- "KUBERNETES_MEMORY_LIMIT": "4Gi",
455
- "KUBERNETES_MEMORY_REQUEST": "2Gi",
456
- },
457
- },
458
- "api 🧾 sbom | dev ": {
459
- "allow_failure": true,
460
- "artifacts": {
461
- "paths": [
462
- "__sbom.json",
463
- ],
464
- },
465
- "image": "aquasec/trivy:0.38.3",
466
- "interruptible": true,
467
- "needs": [],
468
- "retry": {
469
- "max": 2,
470
- "when": [
471
- "runner_system_failure",
472
- "stuck_or_timeout_failure",
473
- ],
474
- },
475
- "script": [
476
- "trivy fs --quiet --format cyclonedx --output "__sbom.json" api",
477
- ],
478
- "stage": "build",
479
- "variables": {},
480
- },
481
- "worker 👮 lint": {
482
- "cache": [
483
- {
484
- "key": "api-yarn",
485
- "paths": [
486
- "api/.yarn",
487
- ],
488
- "policy": "pull-push",
489
- },
490
- {
491
- "key": "api-node-modules",
492
- "paths": [
493
- "api/node_modules",
494
- ],
495
- "policy": "pull-push",
496
- },
497
- ],
498
- "image": "path/to/docker/jobs-default:the-version",
499
- "interruptible": true,
500
- "needs": [],
501
- "retry": {
502
- "max": 2,
503
- "when": [
504
- "runner_system_failure",
505
- "stuck_or_timeout_failure",
506
- ],
507
- },
508
- "script": [
509
- "cd api",
510
- "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
511
- "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
512
- "yarn install --immutable",
513
- "yarn lint",
514
- ],
515
- "stage": "test",
516
- "variables": {
517
- "APP_PATH": "api",
518
- "KUBERNETES_CPU_LIMIT": "2",
519
- "KUBERNETES_CPU_REQUEST": "0.5",
520
- "KUBERNETES_MEMORY_LIMIT": "4Gi",
521
- "KUBERNETES_MEMORY_REQUEST": "2Gi",
522
- },
523
- },
524
- "worker 🔨 app | dev ": {
525
- "artifacts": {
526
- "expire_in": "1 day",
527
- "paths": [
528
- "api/__build_info.json",
529
- "api/dist",
530
- "api/.next",
531
- ],
532
- "reports": {
533
- "junit": undefined,
534
- },
535
- },
536
- "cache": [
537
- {
538
- "key": "api-yarn",
539
- "paths": [
540
- "api/.yarn",
541
- ],
542
- "policy": "pull-push",
543
- },
544
- {
545
- "key": "api-node-modules",
546
- "paths": [
547
- "api/node_modules",
548
- ],
549
- "policy": "pull-push",
550
- },
551
- {
552
- "key": "worker-next-cache",
553
- "paths": [
554
- "api/.next/cache/",
555
- ],
556
- "policy": "pull-push",
557
- },
558
- ],
559
- "image": "path/to/docker/jobs-default:the-version",
560
- "interruptible": true,
561
- "needs": [],
562
- "retry": {
563
- "max": 2,
564
- "when": [
565
- "runner_system_failure",
566
- "stuck_or_timeout_failure",
567
- ],
568
- },
569
- "script": [
570
- "echo '{"id":"some-id","time":"01-01-2023 12:13:14"}' > api/__build_info.json",
571
- "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
572
- "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
573
- "cd api",
574
- "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
575
- "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
576
- "yarn install --immutable",
577
- "yarn build:worker",
578
- ],
579
- "stage": "build",
580
- "variables": {
581
- "APP_DIR": "api",
582
- "BUILD_INFO_BUILD_TIME": "01-01-2023 12:13:14",
583
- "BUILD_INFO_CURRENT_VERSION": "3.2.1",
584
- "BUILD_INFO_ID": "some-id",
585
- "CLOUD_SQL_INSTANCE_CONNECTION_NAME": "projectId:region:instancename",
586
- "DATABASE_JDBC_URL": "jdbc:postgresql:///$DB_NAME?cloudSqlInstance=$CLOUD_SQL_INSTANCE_CONNECTION_NAME&socketFactory=com.google.cloud.sql.postgres.SocketFactory&user=$DB_USER&password=$DB_PASSWORD",
587
- "DATABASE_URL": "postgresql://$DB_USER:$DB_PASSWORD@localhost/$DB_NAME?host=/cloudsql/$CLOUD_SQL_INSTANCE_CONNECTION_NAME",
588
- "DB_NAME": "pan-test-app-dev-api",
589
- "DB_PASSWORD": "$CL_dev_api_DB_PASSWORD",
590
- "DB_USER": "my-user",
591
- "ENV_SHORT": "dev",
592
- "ENV_TYPE": "dev",
593
- "GCLOUD_DEPLOY_credentialsKey": "$CL_dev_worker_GCLOUD_DEPLOY_credentialsKey",
594
- "GCLOUD_RUN_canonicalHostSuffix": "$CL_dev_worker_GCLOUD_RUN_canonicalHostSuffix",
595
- "HOST": "pan-test-app-dev-worker-unknown-host.example.com",
596
- "HOST_CANONICAL": "pan-test-app-dev-worker-unknown-host.example.com",
597
- "KUBERNETES_CPU_LIMIT": "2",
598
- "KUBERNETES_CPU_REQUEST": "0.5",
599
- "KUBERNETES_MEMORY_LIMIT": "4Gi",
600
- "KUBERNETES_MEMORY_REQUEST": "2Gi",
601
- "ROOT_URL": "https://pan-test-app-dev-worker-unknown-host.example.com",
602
- "_ALL_ENV_VAR_KEYS": "["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","HOST_CANONICAL","CLOUD_SQL_INSTANCE_CONNECTION_NAME","DB_NAME","DB_USER","DB_PASSWORD","DATABASE_URL","DATABASE_JDBC_URL","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]",
603
- },
604
- },
605
- "worker 🔨 docker | dev ": {
606
- "cache": [
607
- {
608
- "key": "api-yarn",
609
- "paths": [
610
- "api/.yarn",
611
- ],
612
- "policy": "pull",
613
- },
614
- ],
615
- "image": "path/to/docker/docker-build:the-version",
616
- "interruptible": true,
617
- "needs": [
618
- "worker 🔨 app | dev ",
619
- ],
620
- "retry": {
621
- "max": 2,
622
- "when": [
623
- "runner_system_failure",
624
- "stuck_or_timeout_failure",
625
- ],
626
- },
627
- "script": [
628
- "ensureNodeDockerfile",
629
- "docker login --username gitlab-ci-token --password $CI_JOB_TOKEN $CI_REGISTRY",
630
- "docker version",
631
- "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",
632
- "docker push $DOCKER_IMAGE:$DOCKER_IMAGE_TAG",
633
- "docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG $DOCKER_CACHE_IMAGE",
634
- "docker push $DOCKER_CACHE_IMAGE",
635
- ],
636
- "services": [
637
- {
638
- "command": [
639
- "--tls=false",
640
- ],
641
- "name": "docker:20-dind",
642
- },
643
- ],
644
- "stage": "build",
645
- "variables": {
646
- "APP_DIR": "api",
647
- "DOCKERFILE_ADDITIONS": undefined,
648
- "DOCKERFILE_ADDITIONS_END": undefined,
649
- "DOCKER_BUILDKIT": "1",
650
- "DOCKER_CACHE_IMAGE": "$DOCKER_REGISTRY_IMAGE_PATH/caches/worker",
651
- "DOCKER_COPY_AND_INSTALL_APP": "COPY --chown=node:node $APP_DIR .
652
- RUN yarn plugin import workspace-tools
653
- RUN yarn workspaces focus --production && yarn rebuild",
654
- "DOCKER_COPY_WORKSPACE_FILES": "COPY --chown=node:node api/package.json /app/api/package.json
655
- COPY --chown=node:node api/yarn.lock /app/api/yarn.lock
656
- COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
657
- COPY --chown=node:node .yarn /app/.yarn",
658
- "DOCKER_DIR": ".",
659
- "DOCKER_DRIVER": "overlay2",
660
- "DOCKER_HOST": "tcp://0.0.0.0:2375",
661
- "DOCKER_IMAGE": "$DOCKER_REGISTRY_IMAGE_PATH/$DOCKER_IMAGE_NAME",
662
- "DOCKER_IMAGE_NAME": "dev/worker",
663
- "DOCKER_IMAGE_TAG": "$CI_COMMIT_SHA",
664
- "DOCKER_REGISTRY": "$CI_REGISTRY",
665
- "DOCKER_REGISTRY_IMAGE_PATH": "$CI_REGISTRY_IMAGE",
666
- "DOCKER_TLS_CERTDIR": "",
667
- "KUBERNETES_CPU_LIMIT": "1",
668
- "KUBERNETES_CPU_REQUEST": "0.5",
669
- "KUBERNETES_MEMORY_LIMIT": "2Gi",
670
- "KUBERNETES_MEMORY_REQUEST": "1Gi",
671
- },
672
- },
673
- "worker 🚀 Deploy | dev ": {
674
- "allow_failure": false,
675
- "artifacts": {
676
- "paths": [
677
- "____envvars.yaml",
678
- ],
679
- },
680
- "environment": {
681
- "auto_stop_in": "4 weeks",
682
- "name": "dev/worker",
683
- "on_stop": "worker 🛑 Stop ⚠️ | dev ",
684
- "url": "https://pan-test-app-dev-worker-unknown-host.example.com",
685
- },
686
- "image": "path/to/docker/gcloud:the-version",
687
- "interruptible": true,
688
- "needs": [
689
- {
690
- "artifacts": false,
691
- "job": "worker 👮 lint",
692
- },
693
- {
694
- "artifacts": false,
695
- "job": "worker 🔨 app | dev ",
696
- },
697
- {
698
- "artifacts": false,
699
- "job": "worker 🔨 docker | dev ",
700
- },
701
- {
702
- "artifacts": false,
703
- "job": "worker 🧪 test",
704
- },
705
- {
706
- "artifacts": true,
707
- "job": "worker 🧾 sbom | dev ",
708
- },
709
- {
710
- "artifacts": false,
711
- "job": "worker 🛡 audit",
712
- },
713
- ],
714
- "retry": {
715
- "max": 2,
716
- "when": [
717
- "runner_system_failure",
718
- "stuck_or_timeout_failure",
719
- ],
720
- },
721
- "rules": [
722
- {
723
- "when": "on_success",
724
- },
725
- ],
726
- "script": [
727
- "echo -e "\\e[0Ksection_start:$(date +%s):prepare[collapsed=true]\\r\\e[0KPrepare..."",
728
- "echo $CL_dev_worker_GCLOUD_DEPLOY_credentialsKey > ./____keyfile.json
729
- ",
730
- "gcloud auth activate-service-account --key-file="./____keyfile.json"",
731
- "export GCLOUD_PROJECT_NUMBER=$(gcloud projects describe google-project-id --format="value(projectNumber)")",
732
- "echo "GCLOUD_PROJECT_NUMBER: $GCLOUD_PROJECT_NUMBER"",
733
- "echo -e "\\e[0Ksection_end:$(date +%s):prepare\\r\\e[0K"",
734
- "echo -e "\\e[0Ksection_start:$(date +%s):pushToArtifactRegistry[collapsed=true]\\r\\e[0KPushing image to artifacts registry"",
735
- "docker login --username gitlab-ci-token --password $CI_JOB_TOKEN $CI_REGISTRY",
736
- "gcloud auth configure-docker europe-west6-docker.pkg.dev",
737
- "docker pull $DOCKER_IMAGE:$DOCKER_IMAGE_TAG",
738
- "docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/dev/worker:$DOCKER_IMAGE_TAG",
739
- "docker push europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/dev/worker:$DOCKER_IMAGE_TAG",
740
- "echo -e "\\e[0Ksection_end:$(date +%s):pushToArtifactRegistry\\r\\e[0K"",
741
- "echo -e "\\e[0Ksection_start:$(date +%s):deploy[collapsed=true]\\r\\e[0KDeploy to cloud run"",
742
- "echo "$ENV_VARS" > ____envvars.yaml",
743
- "set +e",
744
- "echo "ensuring Database..."",
745
- "gcloud sql databases create pan-test-app-dev-api --instance=instancename --project projectId",
746
- "set -e",
747
- "gcloud run deploy pan-test-app-dev-worker --command="yarn,start" --image=europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/dev/worker:$DOCKER_IMAGE_TAG --project=google-project-id --region=europe-west6 --set-cloudsql-instances=projectId:region:instancename --labels=customer-name=pan,component-name=worker,app-name=test-app,env-type=dev,env-name=dev,build-type=node --env-vars-file=____envvars.yaml --min-instances=0 --max-instances=100 --cpu-throttling --allow-unauthenticated --cpu-boost",
748
- "echo -e "\\e[0Ksection_end:$(date +%s):deploy\\r\\e[0K"",
749
- "docker image rm europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/dev/worker:$DOCKER_IMAGE_TAG",
750
- "echo Uploading SBOM to Dependency Track",
751
- "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/worker" "https://pan-test-app-dev-worker-unknown-host.example.com" "__sbom.json" vex.json || true",
752
- ],
753
- "services": [
754
- {
755
- "command": [
756
- "--tls=false",
757
- ],
758
- "name": "docker:20-dind",
759
- },
760
- ],
761
- "stage": "deploy dev",
762
- "variables": {
763
- "APP_DIR": "api",
764
- "BUILD_INFO_BUILD_TIME": "01-01-2023 12:13:14",
765
- "BUILD_INFO_CURRENT_VERSION": "3.2.1",
766
- "BUILD_INFO_ID": "some-id",
767
- "CLOUDSDK_CORE_DISABLE_PROMPTS": "1",
768
- "CLOUD_SQL_INSTANCE_CONNECTION_NAME": "projectId:region:instancename",
769
- "DATABASE_JDBC_URL": "jdbc:postgresql:///$DB_NAME?cloudSqlInstance=$CLOUD_SQL_INSTANCE_CONNECTION_NAME&socketFactory=com.google.cloud.sql.postgres.SocketFactory&user=$DB_USER&password=$DB_PASSWORD",
770
- "DATABASE_URL": "postgresql://$DB_USER:$DB_PASSWORD@localhost/$DB_NAME?host=/cloudsql/$CLOUD_SQL_INSTANCE_CONNECTION_NAME",
771
- "DB_NAME": "pan-test-app-dev-api",
772
- "DB_PASSWORD": "$CL_dev_api_DB_PASSWORD",
773
- "DB_USER": "my-user",
774
- "DOCKER_BUILDKIT": "1",
775
- "DOCKER_CACHE_IMAGE": "$DOCKER_REGISTRY_IMAGE_PATH/caches/worker",
776
- "DOCKER_DRIVER": "overlay2",
777
- "DOCKER_HOST": "tcp://0.0.0.0:2375",
778
- "DOCKER_IMAGE": "$DOCKER_REGISTRY_IMAGE_PATH/$DOCKER_IMAGE_NAME",
779
- "DOCKER_IMAGE_NAME": "dev/worker",
780
- "DOCKER_IMAGE_TAG": "$CI_COMMIT_SHA",
781
- "DOCKER_REGISTRY": "$CI_REGISTRY",
782
- "DOCKER_REGISTRY_IMAGE_PATH": "$CI_REGISTRY_IMAGE",
783
- "DOCKER_TLS_CERTDIR": "",
784
- "ENV_SHORT": "dev",
785
- "ENV_TYPE": "dev",
786
- "ENV_VARS": "ENV_SHORT: 'dev'
787
- APP_DIR: 'api'
788
- ENV_TYPE: 'dev'
789
- BUILD_INFO_ID: 'some-id'
790
- BUILD_INFO_BUILD_TIME: '01-01-2023 12:13:14'
791
- BUILD_INFO_CURRENT_VERSION: '3.2.1'
792
- HOST: 'pan-test-app-dev-worker-unknown-host.example.com'
793
- ROOT_URL: 'https://pan-test-app-dev-worker-unknown-host.example.com'
794
- HOST_CANONICAL: 'pan-test-app-dev-worker-unknown-host.example.com'
795
- CLOUD_SQL_INSTANCE_CONNECTION_NAME: 'projectId:region:instancename'
796
- DB_NAME: 'pan-test-app-dev-api'
797
- DB_USER: 'my-user'
798
- DB_PASSWORD: '$CL_dev_api_DB_PASSWORD'
799
- DATABASE_URL: 'postgresql://$DB_USER:$DB_PASSWORD@localhost/$DB_NAME?host=/cloudsql/$CLOUD_SQL_INSTANCE_CONNECTION_NAME'
800
- DATABASE_JDBC_URL: 'jdbc:postgresql:///$DB_NAME?cloudSqlInstance=$CLOUD_SQL_INSTANCE_CONNECTION_NAME&socketFactory=com.google.cloud.sql.postgres.SocketFactory&user=$DB_USER&password=$DB_PASSWORD'
801
- GCLOUD_RUN_canonicalHostSuffix: '$CL_dev_worker_GCLOUD_RUN_canonicalHostSuffix'
802
- _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","HOST_CANONICAL","CLOUD_SQL_INSTANCE_CONNECTION_NAME","DB_NAME","DB_USER","DB_PASSWORD","DATABASE_URL","DATABASE_JDBC_URL","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]'
803
- ",
804
- "GCLOUD_DEPLOY_credentialsKey": "$CL_dev_worker_GCLOUD_DEPLOY_credentialsKey",
805
- "GCLOUD_RUN_canonicalHostSuffix": "$CL_dev_worker_GCLOUD_RUN_canonicalHostSuffix",
806
- "HOST": "pan-test-app-dev-worker-unknown-host.example.com",
807
- "HOST_CANONICAL": "pan-test-app-dev-worker-unknown-host.example.com",
808
- "KUBERNETES_CPU_LIMIT": "1",
809
- "KUBERNETES_CPU_REQUEST": "0.5",
810
- "KUBERNETES_MEMORY_LIMIT": "400Mi",
811
- "KUBERNETES_MEMORY_REQUEST": "200Mi",
812
- "ROOT_URL": "https://pan-test-app-dev-worker-unknown-host.example.com",
813
- "_ALL_ENV_VAR_KEYS": "["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","HOST_CANONICAL","CLOUD_SQL_INSTANCE_CONNECTION_NAME","DB_NAME","DB_USER","DB_PASSWORD","DATABASE_URL","DATABASE_JDBC_URL","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]",
814
- },
815
- },
816
- "worker 🛑 Stop ⚠️ | dev ": {
817
- "environment": {
818
- "action": "stop",
819
- "name": "dev/worker",
820
- "url": "https://pan-test-app-dev-worker-unknown-host.example.com",
821
- },
822
- "image": "path/to/docker/gcloud:the-version",
823
- "interruptible": true,
824
- "needs": [],
825
- "retry": {
826
- "max": 2,
827
- "when": [
828
- "runner_system_failure",
829
- "stuck_or_timeout_failure",
830
- ],
831
- },
832
- "rules": [
833
- {
834
- "allow_failure": true,
835
- "if": "$CI_COMMIT_BRANCH =~ /^[0-9]+\\.([0-9]+|x)\\.x$/",
836
- "when": "on_success",
837
- },
838
- {
839
- "allow_failure": true,
840
- "when": "manual",
841
- },
842
- ],
843
- "script": [
844
- "set +e",
845
- "echo $CL_dev_worker_GCLOUD_DEPLOY_credentialsKey > ./____keyfile.json
846
- ",
847
- "gcloud auth activate-service-account --key-file="./____keyfile.json"",
848
- "gcloud run services delete pan-test-app-dev-worker --project=google-project-id --region=europe-west6",
849
- "echo Disabling component in Dependency Track",
850
- "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" disable "pan-test-app/worker" "https://pan-test-app-dev-worker-unknown-host.example.com" || true",
851
- "set -e",
852
- ],
853
- "stage": "stop dev",
854
- "variables": {
855
- "CLOUDSDK_CORE_DISABLE_PROMPTS": "1",
856
- "GIT_STRATEGY": "none",
857
- "KUBERNETES_CPU_LIMIT": "1",
858
- "KUBERNETES_CPU_REQUEST": "0.5",
859
- "KUBERNETES_MEMORY_LIMIT": "400Mi",
860
- "KUBERNETES_MEMORY_REQUEST": "200Mi",
861
- },
862
- },
863
- "worker 🛡 audit": {
864
- "allow_failure": true,
865
- "image": "path/to/docker/jobs-default:the-version",
866
- "interruptible": true,
867
- "needs": [],
868
- "retry": {
869
- "max": 2,
870
- "when": [
871
- "runner_system_failure",
872
- "stuck_or_timeout_failure",
873
- ],
874
- },
875
- "script": [
876
- "cd api",
877
- "yarn npm audit --environment production",
878
- ],
879
- "stage": "test",
880
- "variables": {
881
- "APP_PATH": "api",
882
- "KUBERNETES_CPU_LIMIT": "2",
883
- "KUBERNETES_CPU_REQUEST": "0.5",
884
- "KUBERNETES_MEMORY_LIMIT": "4Gi",
885
- "KUBERNETES_MEMORY_REQUEST": "2Gi",
886
- },
887
- },
888
- "worker 🧪 test": {
889
- "cache": [
890
- {
891
- "key": "api-yarn",
892
- "paths": [
893
- "api/.yarn",
894
- ],
895
- "policy": "pull-push",
896
- },
897
- {
898
- "key": "api-node-modules",
899
- "paths": [
900
- "api/node_modules",
901
- ],
902
- "policy": "pull-push",
903
- },
904
- ],
905
- "image": "path/to/docker/jobs-testing-chrome:the-version",
906
- "interruptible": true,
907
- "needs": [],
908
- "retry": {
909
- "max": 2,
910
- "when": [
911
- "runner_system_failure",
912
- "stuck_or_timeout_failure",
913
- ],
914
- },
915
- "script": [
916
- "cd api",
917
- "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
918
- "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
919
- "yarn install --immutable",
920
- "yarn test",
921
- ],
922
- "stage": "test",
923
- "variables": {
924
- "APP_PATH": "api",
925
- "KUBERNETES_CPU_LIMIT": "2",
926
- "KUBERNETES_CPU_REQUEST": "0.5",
927
- "KUBERNETES_MEMORY_LIMIT": "4Gi",
928
- "KUBERNETES_MEMORY_REQUEST": "2Gi",
929
- },
930
- },
931
- "worker 🧾 sbom | dev ": {
932
- "allow_failure": true,
933
- "artifacts": {
934
- "paths": [
935
- "__sbom.json",
936
- ],
937
- },
938
- "image": "aquasec/trivy:0.38.3",
939
- "interruptible": true,
940
- "needs": [],
941
- "retry": {
942
- "max": 2,
943
- "when": [
944
- "runner_system_failure",
945
- "stuck_or_timeout_failure",
946
- ],
947
- },
948
- "script": [
949
- "trivy fs --quiet --format cyclonedx --output "__sbom.json" api",
950
- ],
951
- "stage": "build",
952
- "variables": {},
953
- },
954
- },
955
- "stages": [
956
- "setup",
957
- "setup dev",
958
- "setup review",
959
- "setup stage",
960
- "setup prod",
961
- "setup local",
962
- "test",
963
- "test dev",
964
- "test review",
965
- "test stage",
966
- "test prod",
967
- "test local",
968
- "build",
969
- "build dev",
970
- "build review",
971
- "build stage",
972
- "build prod",
973
- "build local",
974
- "deploy",
975
- "deploy dev",
976
- "deploy review",
977
- "deploy stage",
978
- "deploy prod",
979
- "deploy local",
980
- "verify",
981
- "verify dev",
982
- "verify review",
983
- "verify stage",
984
- "verify prod",
985
- "verify local",
986
- "rollback",
987
- "rollback dev",
988
- "rollback review",
989
- "rollback stage",
990
- "rollback prod",
991
- "rollback local",
992
- "stop",
993
- "stop dev",
994
- "stop review",
995
- "stop stage",
996
- "stop prod",
997
- "stop local",
998
- ],
999
- "variables": {
1000
- "FF_USE_FASTZIP": "true",
1001
- },
1002
- "workflow": {
1003
- "rules": [
1004
- {
1005
- "if": "$CI_COMMIT_TAG",
1006
- },
1007
- {
1008
- "if": "$CI_COMMIT_MESSAGE =~ /^chore\\(release\\).*/",
1009
- "when": "never",
1010
- },
1011
- {
1012
- "if": "$CI_COMMIT_BRANCH =~ /^[0-9]+.([0-9]+|x).x$/",
1013
- },
1014
- {
1015
- "if": "$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH",
1016
- },
1017
- {
1018
- "if": "$CI_MERGE_REQUEST_ID",
1019
- },
1020
- ],
1021
- },
1022
- },
1023
- "mr": {
1024
- "image": "path/to/docker/jobs-default:the-version",
1025
- "jobs": {
1026
- "api 👮 lint": {
1027
- "cache": [
1028
- {
1029
- "key": "api-yarn",
1030
- "paths": [
1031
- "api/.yarn",
1032
- ],
1033
- "policy": "pull-push",
1034
- },
1035
- {
1036
- "key": "api-node-modules",
1037
- "paths": [
1038
- "api/node_modules",
1039
- ],
1040
- "policy": "pull-push",
1041
- },
1042
- ],
1043
- "image": "path/to/docker/jobs-default:the-version",
1044
- "interruptible": true,
1045
- "needs": [],
1046
- "retry": {
1047
- "max": 2,
1048
- "when": [
1049
- "runner_system_failure",
1050
- "stuck_or_timeout_failure",
1051
- ],
1052
- },
1053
- "script": [
1054
- "cd api",
1055
- "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
1056
- "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
1057
- "yarn install --immutable",
1058
- "yarn lint",
1059
- ],
1060
- "stage": "test",
1061
- "variables": {
1062
- "APP_PATH": "api",
1063
- "KUBERNETES_CPU_LIMIT": "2",
1064
- "KUBERNETES_CPU_REQUEST": "0.5",
1065
- "KUBERNETES_MEMORY_LIMIT": "4Gi",
1066
- "KUBERNETES_MEMORY_REQUEST": "2Gi",
1067
- },
1068
- },
1069
- "api 🔨 app | review ": {
1070
- "artifacts": {
1071
- "expire_in": "1 day",
1072
- "paths": [
1073
- "api/__build_info.json",
1074
- "api/dist",
1075
- "api/.next",
1076
- ],
1077
- "reports": {
1078
- "junit": undefined,
1079
- },
1080
- },
1081
- "cache": [
1082
- {
1083
- "key": "api-yarn",
1084
- "paths": [
1085
- "api/.yarn",
1086
- ],
1087
- "policy": "pull-push",
1088
- },
1089
- {
1090
- "key": "api-node-modules",
1091
- "paths": [
1092
- "api/node_modules",
1093
- ],
1094
- "policy": "pull-push",
1095
- },
1096
- {
1097
- "key": "api-next-cache",
1098
- "paths": [
1099
- "api/.next/cache/",
1100
- ],
1101
- "policy": "pull-push",
1102
- },
1103
- ],
1104
- "image": "path/to/docker/jobs-default:the-version",
1105
- "interruptible": true,
1106
- "needs": [],
1107
- "retry": {
1108
- "max": 2,
1109
- "when": [
1110
- "runner_system_failure",
1111
- "stuck_or_timeout_failure",
1112
- ],
1113
- },
1114
- "script": [
1115
- "echo '{"id":"some-id","time":"01-01-2023 12:13:14"}' > api/__build_info.json",
1116
- "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
1117
- "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
1118
- "cd api",
1119
- "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
1120
- "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
1121
- "yarn install --immutable",
1122
- "yarn build",
1123
- ],
1124
- "stage": "build",
1125
- "variables": {
1126
- "APP_DIR": "api",
1127
- "BUILD_INFO_BUILD_TIME": "01-01-2023 12:13:14",
1128
- "BUILD_INFO_CURRENT_VERSION": "3.2.1",
1129
- "BUILD_INFO_ID": "some-id",
1130
- "CLOUD_SQL_INSTANCE_CONNECTION_NAME": "projectId:region:instancename",
1131
- "DATABASE_JDBC_URL": "jdbc:postgresql:///$DB_NAME?cloudSqlInstance=$CLOUD_SQL_INSTANCE_CONNECTION_NAME&socketFactory=com.google.cloud.sql.postgres.SocketFactory&user=$DB_USER&password=$DB_PASSWORD",
1132
- "DATABASE_URL": "postgresql://$DB_USER:$DB_PASSWORD@localhost/$DB_NAME?host=/cloudsql/$CLOUD_SQL_INSTANCE_CONNECTION_NAME",
1133
- "DB_NAME": "pan-test-app-review-mr1234-api",
1134
- "DB_PASSWORD": "$CL_review_api_DB_PASSWORD",
1135
- "DB_USER": "my-user",
1136
- "ENV_SHORT": "review",
1137
- "ENV_TYPE": "review",
1138
- "GCLOUD_DEPLOY_credentialsKey": "$CL_review_api_GCLOUD_DEPLOY_credentialsKey",
1139
- "GCLOUD_RUN_canonicalHostSuffix": "$CL_review_api_GCLOUD_RUN_canonicalHostSuffix",
1140
- "HOST": "pan-test-app-review-mr1234-api-unknown-host.example.com",
1141
- "HOST_CANONICAL": "pan-test-app-review-mr1234-api-unknown-host.example.com",
1142
- "KUBERNETES_CPU_LIMIT": "2",
1143
- "KUBERNETES_CPU_REQUEST": "0.5",
1144
- "KUBERNETES_MEMORY_LIMIT": "4Gi",
1145
- "KUBERNETES_MEMORY_REQUEST": "2Gi",
1146
- "ROOT_URL": "https://pan-test-app-review-mr1234-api-unknown-host.example.com",
1147
- "_ALL_ENV_VAR_KEYS": "["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","HOST_CANONICAL","CLOUD_SQL_INSTANCE_CONNECTION_NAME","DB_NAME","DB_USER","DB_PASSWORD","DATABASE_URL","DATABASE_JDBC_URL","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]",
1148
- },
1149
- },
1150
- "api 🔨 docker | review ": {
1151
- "cache": [
1152
- {
1153
- "key": "api-yarn",
1154
- "paths": [
1155
- "api/.yarn",
1156
- ],
1157
- "policy": "pull",
1158
- },
1159
- ],
1160
- "image": "path/to/docker/docker-build:the-version",
1161
- "interruptible": true,
1162
- "needs": [
1163
- "api 🔨 app | review ",
1164
- ],
1165
- "retry": {
1166
- "max": 2,
1167
- "when": [
1168
- "runner_system_failure",
1169
- "stuck_or_timeout_failure",
1170
- ],
1171
- },
1172
- "script": [
1173
- "ensureNodeDockerfile",
1174
- "docker login --username gitlab-ci-token --password $CI_JOB_TOKEN $CI_REGISTRY",
1175
- "docker version",
1176
- "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",
1177
- "docker push $DOCKER_IMAGE:$DOCKER_IMAGE_TAG",
1178
- "docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG $DOCKER_CACHE_IMAGE",
1179
- "docker push $DOCKER_CACHE_IMAGE",
1180
- ],
1181
- "services": [
1182
- {
1183
- "command": [
1184
- "--tls=false",
1185
- ],
1186
- "name": "docker:20-dind",
1187
- },
1188
- ],
1189
- "stage": "build",
1190
- "variables": {
1191
- "APP_DIR": "api",
1192
- "DOCKERFILE_ADDITIONS": undefined,
1193
- "DOCKERFILE_ADDITIONS_END": undefined,
1194
- "DOCKER_BUILDKIT": "1",
1195
- "DOCKER_CACHE_IMAGE": "$DOCKER_REGISTRY_IMAGE_PATH/caches/api",
1196
- "DOCKER_COPY_AND_INSTALL_APP": "COPY --chown=node:node $APP_DIR .
1197
- RUN yarn plugin import workspace-tools
1198
- RUN yarn workspaces focus --production && yarn rebuild",
1199
- "DOCKER_COPY_WORKSPACE_FILES": "COPY --chown=node:node api/package.json /app/api/package.json
1200
- COPY --chown=node:node api/yarn.lock /app/api/yarn.lock
1201
- COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
1202
- COPY --chown=node:node .yarn /app/.yarn",
1203
- "DOCKER_DIR": ".",
1204
- "DOCKER_DRIVER": "overlay2",
1205
- "DOCKER_HOST": "tcp://0.0.0.0:2375",
1206
- "DOCKER_IMAGE": "$DOCKER_REGISTRY_IMAGE_PATH/$DOCKER_IMAGE_NAME",
1207
- "DOCKER_IMAGE_NAME": "review/api",
1208
- "DOCKER_IMAGE_TAG": "$CI_COMMIT_SHA",
1209
- "DOCKER_REGISTRY": "$CI_REGISTRY",
1210
- "DOCKER_REGISTRY_IMAGE_PATH": "$CI_REGISTRY_IMAGE",
1211
- "DOCKER_TLS_CERTDIR": "",
1212
- "KUBERNETES_CPU_LIMIT": "1",
1213
- "KUBERNETES_CPU_REQUEST": "0.5",
1214
- "KUBERNETES_MEMORY_LIMIT": "2Gi",
1215
- "KUBERNETES_MEMORY_REQUEST": "1Gi",
1216
- },
1217
- },
1218
- "api 🚀 Deploy | review ": {
1219
- "allow_failure": false,
1220
- "artifacts": {
1221
- "paths": [
1222
- "____envvars.yaml",
1223
- ],
1224
- },
1225
- "environment": {
1226
- "auto_stop_in": "2 week",
1227
- "name": "review/some-commit/api",
1228
- "on_stop": "api 🛑 Stop ⚠️ | review ",
1229
- "url": "https://pan-test-app-review-mr1234-api-unknown-host.example.com",
1230
- },
1231
- "image": "path/to/docker/gcloud:the-version",
1232
- "interruptible": true,
1233
- "needs": [
1234
- {
1235
- "artifacts": false,
1236
- "job": "api 👮 lint",
1237
- },
1238
- {
1239
- "artifacts": false,
1240
- "job": "api 🔨 app | review ",
1241
- },
1242
- {
1243
- "artifacts": false,
1244
- "job": "api 🔨 docker | review ",
1245
- },
1246
- {
1247
- "artifacts": false,
1248
- "job": "api 🧪 test",
1249
- },
1250
- {
1251
- "artifacts": true,
1252
- "job": "api 🧾 sbom | review ",
1253
- },
1254
- {
1255
- "artifacts": false,
1256
- "job": "api 🛡 audit",
1257
- },
1258
- ],
1259
- "retry": {
1260
- "max": 2,
1261
- "when": [
1262
- "runner_system_failure",
1263
- "stuck_or_timeout_failure",
1264
- ],
1265
- },
1266
- "rules": [
1267
- {
1268
- "when": "on_success",
1269
- },
1270
- ],
1271
- "script": [
1272
- "echo -e "\\e[0Ksection_start:$(date +%s):prepare[collapsed=true]\\r\\e[0KPrepare..."",
1273
- "echo $CL_review_api_GCLOUD_DEPLOY_credentialsKey > ./____keyfile.json
1274
- ",
1275
- "gcloud auth activate-service-account --key-file="./____keyfile.json"",
1276
- "export GCLOUD_PROJECT_NUMBER=$(gcloud projects describe google-project-id --format="value(projectNumber)")",
1277
- "echo "GCLOUD_PROJECT_NUMBER: $GCLOUD_PROJECT_NUMBER"",
1278
- "echo -e "\\e[0Ksection_end:$(date +%s):prepare\\r\\e[0K"",
1279
- "echo -e "\\e[0Ksection_start:$(date +%s):pushToArtifactRegistry[collapsed=true]\\r\\e[0KPushing image to artifacts registry"",
1280
- "docker login --username gitlab-ci-token --password $CI_JOB_TOKEN $CI_REGISTRY",
1281
- "gcloud auth configure-docker europe-west6-docker.pkg.dev",
1282
- "docker pull $DOCKER_IMAGE:$DOCKER_IMAGE_TAG",
1283
- "docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/review/api/mr1234:$DOCKER_IMAGE_TAG",
1284
- "docker push europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/review/api/mr1234:$DOCKER_IMAGE_TAG",
1285
- "echo -e "\\e[0Ksection_end:$(date +%s):pushToArtifactRegistry\\r\\e[0K"",
1286
- "echo -e "\\e[0Ksection_start:$(date +%s):deploy[collapsed=true]\\r\\e[0KDeploy to cloud run"",
1287
- "echo "$ENV_VARS" > ____envvars.yaml",
1288
- "set +e",
1289
- "echo "ensuring Database..."",
1290
- "gcloud sql databases create pan-test-app-review-mr1234-api --instance=instancename --project projectId",
1291
- "set -e",
1292
- "gcloud run deploy pan-test-app-review-mr1234-api --command="yarn,start" --image=europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/review/api/mr1234:$DOCKER_IMAGE_TAG --project=google-project-id --region=europe-west6 --set-cloudsql-instances=projectId:region:instancename --labels=customer-name=pan,component-name=api,app-name=test-app,env-type=review,env-name=review,build-type=node --env-vars-file=____envvars.yaml --min-instances=0 --max-instances=100 --cpu-throttling --allow-unauthenticated --cpu-boost",
1293
- "echo -e "\\e[0Ksection_end:$(date +%s):deploy\\r\\e[0K"",
1294
- "docker image rm europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/review/api/mr1234:$DOCKER_IMAGE_TAG",
1295
- "echo Uploading SBOM to Dependency Track",
1296
- "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/api" "https://pan-test-app-review-mr1234-api-unknown-host.example.com" "__sbom.json" vex.json || true",
1297
- ],
1298
- "services": [
1299
- {
1300
- "command": [
1301
- "--tls=false",
1302
- ],
1303
- "name": "docker:20-dind",
1304
- },
1305
- ],
1306
- "stage": "deploy review",
1307
- "variables": {
1308
- "APP_DIR": "api",
1309
- "BUILD_INFO_BUILD_TIME": "01-01-2023 12:13:14",
1310
- "BUILD_INFO_CURRENT_VERSION": "3.2.1",
1311
- "BUILD_INFO_ID": "some-id",
1312
- "CLOUDSDK_CORE_DISABLE_PROMPTS": "1",
1313
- "CLOUD_SQL_INSTANCE_CONNECTION_NAME": "projectId:region:instancename",
1314
- "DATABASE_JDBC_URL": "jdbc:postgresql:///$DB_NAME?cloudSqlInstance=$CLOUD_SQL_INSTANCE_CONNECTION_NAME&socketFactory=com.google.cloud.sql.postgres.SocketFactory&user=$DB_USER&password=$DB_PASSWORD",
1315
- "DATABASE_URL": "postgresql://$DB_USER:$DB_PASSWORD@localhost/$DB_NAME?host=/cloudsql/$CLOUD_SQL_INSTANCE_CONNECTION_NAME",
1316
- "DB_NAME": "pan-test-app-review-mr1234-api",
1317
- "DB_PASSWORD": "$CL_review_api_DB_PASSWORD",
1318
- "DB_USER": "my-user",
1319
- "DOCKER_BUILDKIT": "1",
1320
- "DOCKER_CACHE_IMAGE": "$DOCKER_REGISTRY_IMAGE_PATH/caches/api",
1321
- "DOCKER_DRIVER": "overlay2",
1322
- "DOCKER_HOST": "tcp://0.0.0.0:2375",
1323
- "DOCKER_IMAGE": "$DOCKER_REGISTRY_IMAGE_PATH/$DOCKER_IMAGE_NAME",
1324
- "DOCKER_IMAGE_NAME": "review/api",
1325
- "DOCKER_IMAGE_TAG": "$CI_COMMIT_SHA",
1326
- "DOCKER_REGISTRY": "$CI_REGISTRY",
1327
- "DOCKER_REGISTRY_IMAGE_PATH": "$CI_REGISTRY_IMAGE",
1328
- "DOCKER_TLS_CERTDIR": "",
1329
- "ENV_SHORT": "review",
1330
- "ENV_TYPE": "review",
1331
- "ENV_VARS": "ENV_SHORT: 'review'
1332
- APP_DIR: 'api'
1333
- ENV_TYPE: 'review'
1334
- BUILD_INFO_ID: 'some-id'
1335
- BUILD_INFO_BUILD_TIME: '01-01-2023 12:13:14'
1336
- BUILD_INFO_CURRENT_VERSION: '3.2.1'
1337
- HOST: 'pan-test-app-review-mr1234-api-unknown-host.example.com'
1338
- ROOT_URL: 'https://pan-test-app-review-mr1234-api-unknown-host.example.com'
1339
- HOST_CANONICAL: 'pan-test-app-review-mr1234-api-unknown-host.example.com'
1340
- CLOUD_SQL_INSTANCE_CONNECTION_NAME: 'projectId:region:instancename'
1341
- DB_NAME: 'pan-test-app-review-mr1234-api'
1342
- DB_USER: 'my-user'
1343
- DB_PASSWORD: '$CL_review_api_DB_PASSWORD'
1344
- DATABASE_URL: 'postgresql://$DB_USER:$DB_PASSWORD@localhost/$DB_NAME?host=/cloudsql/$CLOUD_SQL_INSTANCE_CONNECTION_NAME'
1345
- DATABASE_JDBC_URL: 'jdbc:postgresql:///$DB_NAME?cloudSqlInstance=$CLOUD_SQL_INSTANCE_CONNECTION_NAME&socketFactory=com.google.cloud.sql.postgres.SocketFactory&user=$DB_USER&password=$DB_PASSWORD'
1346
- GCLOUD_RUN_canonicalHostSuffix: '$CL_review_api_GCLOUD_RUN_canonicalHostSuffix'
1347
- _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","HOST_CANONICAL","CLOUD_SQL_INSTANCE_CONNECTION_NAME","DB_NAME","DB_USER","DB_PASSWORD","DATABASE_URL","DATABASE_JDBC_URL","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]'
1348
- ",
1349
- "GCLOUD_DEPLOY_credentialsKey": "$CL_review_api_GCLOUD_DEPLOY_credentialsKey",
1350
- "GCLOUD_RUN_canonicalHostSuffix": "$CL_review_api_GCLOUD_RUN_canonicalHostSuffix",
1351
- "HOST": "pan-test-app-review-mr1234-api-unknown-host.example.com",
1352
- "HOST_CANONICAL": "pan-test-app-review-mr1234-api-unknown-host.example.com",
1353
- "KUBERNETES_CPU_LIMIT": "1",
1354
- "KUBERNETES_CPU_REQUEST": "0.5",
1355
- "KUBERNETES_MEMORY_LIMIT": "400Mi",
1356
- "KUBERNETES_MEMORY_REQUEST": "200Mi",
1357
- "ROOT_URL": "https://pan-test-app-review-mr1234-api-unknown-host.example.com",
1358
- "_ALL_ENV_VAR_KEYS": "["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","HOST_CANONICAL","CLOUD_SQL_INSTANCE_CONNECTION_NAME","DB_NAME","DB_USER","DB_PASSWORD","DATABASE_URL","DATABASE_JDBC_URL","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]",
1359
- },
1360
- },
1361
- "api 🛑 Stop ⚠️ | review ": {
1362
- "environment": {
1363
- "action": "stop",
1364
- "name": "review/some-commit/api",
1365
- "url": "https://pan-test-app-review-mr1234-api-unknown-host.example.com",
1366
- },
1367
- "image": "path/to/docker/gcloud:the-version",
1368
- "interruptible": true,
1369
- "needs": [],
1370
- "retry": {
1371
- "max": 2,
1372
- "when": [
1373
- "runner_system_failure",
1374
- "stuck_or_timeout_failure",
1375
- ],
1376
- },
1377
- "rules": [
1378
- {
1379
- "allow_failure": true,
1380
- "if": "$CI_COMMIT_BRANCH =~ /^[0-9]+\\.([0-9]+|x)\\.x$/",
1381
- "when": "on_success",
1382
- },
1383
- {
1384
- "allow_failure": true,
1385
- "when": "manual",
1386
- },
1387
- ],
1388
- "script": [
1389
- "set +e",
1390
- "echo $CL_review_api_GCLOUD_DEPLOY_credentialsKey > ./____keyfile.json
1391
- ",
1392
- "gcloud auth activate-service-account --key-file="./____keyfile.json"",
1393
- "gcloud run services delete pan-test-app-review-mr1234-api --project=google-project-id --region=europe-west6",
1394
- "echo "deleting database pan-test-app-review-mr1234-api..."",
1395
- "echo "👆 this can take multiple attemps (3-5min), because google cloud run may still have a connection to the database after the cloud run service is shut down"",
1396
- "
1397
- until gcloud sql databases delete pan-test-app-review-mr1234-api --instance=instancename --project projectId
1398
- do
1399
- echo "Trying again."
1400
- sleep 10
1401
- done
1402
- ",
1403
- "echo Disabling component in Dependency Track",
1404
- "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" disable "pan-test-app/api" "https://pan-test-app-review-mr1234-api-unknown-host.example.com" || true",
1405
- "set -e",
1406
- ],
1407
- "stage": "stop review",
1408
- "variables": {
1409
- "CLOUDSDK_CORE_DISABLE_PROMPTS": "1",
1410
- "GIT_STRATEGY": "none",
1411
- "KUBERNETES_CPU_LIMIT": "1",
1412
- "KUBERNETES_CPU_REQUEST": "0.5",
1413
- "KUBERNETES_MEMORY_LIMIT": "400Mi",
1414
- "KUBERNETES_MEMORY_REQUEST": "200Mi",
1415
- },
1416
- },
1417
- "api 🛡 audit": {
1418
- "allow_failure": true,
1419
- "image": "path/to/docker/jobs-default:the-version",
1420
- "interruptible": true,
1421
- "needs": [],
1422
- "retry": {
1423
- "max": 2,
1424
- "when": [
1425
- "runner_system_failure",
1426
- "stuck_or_timeout_failure",
1427
- ],
1428
- },
1429
- "script": [
1430
- "cd api",
1431
- "yarn npm audit --environment production",
1432
- ],
1433
- "stage": "test",
1434
- "variables": {
1435
- "APP_PATH": "api",
1436
- "KUBERNETES_CPU_LIMIT": "2",
1437
- "KUBERNETES_CPU_REQUEST": "0.5",
1438
- "KUBERNETES_MEMORY_LIMIT": "4Gi",
1439
- "KUBERNETES_MEMORY_REQUEST": "2Gi",
1440
- },
1441
- },
1442
- "api 🧪 test": {
1443
- "cache": [
1444
- {
1445
- "key": "api-yarn",
1446
- "paths": [
1447
- "api/.yarn",
1448
- ],
1449
- "policy": "pull-push",
1450
- },
1451
- {
1452
- "key": "api-node-modules",
1453
- "paths": [
1454
- "api/node_modules",
1455
- ],
1456
- "policy": "pull-push",
1457
- },
1458
- ],
1459
- "image": "path/to/docker/jobs-testing-chrome:the-version",
1460
- "interruptible": true,
1461
- "needs": [],
1462
- "retry": {
1463
- "max": 2,
1464
- "when": [
1465
- "runner_system_failure",
1466
- "stuck_or_timeout_failure",
1467
- ],
1468
- },
1469
- "script": [
1470
- "cd api",
1471
- "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
1472
- "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
1473
- "yarn install --immutable",
1474
- "yarn test",
1475
- ],
1476
- "stage": "test",
1477
- "variables": {
1478
- "APP_PATH": "api",
1479
- "KUBERNETES_CPU_LIMIT": "2",
1480
- "KUBERNETES_CPU_REQUEST": "0.5",
1481
- "KUBERNETES_MEMORY_LIMIT": "4Gi",
1482
- "KUBERNETES_MEMORY_REQUEST": "2Gi",
1483
- },
1484
- },
1485
- "api 🧾 sbom | review ": {
1486
- "allow_failure": true,
1487
- "artifacts": {
1488
- "paths": [
1489
- "__sbom.json",
1490
- ],
1491
- },
1492
- "image": "aquasec/trivy:0.38.3",
1493
- "interruptible": true,
1494
- "needs": [],
1495
- "retry": {
1496
- "max": 2,
1497
- "when": [
1498
- "runner_system_failure",
1499
- "stuck_or_timeout_failure",
1500
- ],
1501
- },
1502
- "script": [
1503
- "trivy fs --quiet --format cyclonedx --output "__sbom.json" api",
1504
- ],
1505
- "stage": "build",
1506
- "variables": {},
1507
- },
1508
- "worker 👮 lint": {
1509
- "cache": [
1510
- {
1511
- "key": "api-yarn",
1512
- "paths": [
1513
- "api/.yarn",
1514
- ],
1515
- "policy": "pull-push",
1516
- },
1517
- {
1518
- "key": "api-node-modules",
1519
- "paths": [
1520
- "api/node_modules",
1521
- ],
1522
- "policy": "pull-push",
1523
- },
1524
- ],
1525
- "image": "path/to/docker/jobs-default:the-version",
1526
- "interruptible": true,
1527
- "needs": [],
1528
- "retry": {
1529
- "max": 2,
1530
- "when": [
1531
- "runner_system_failure",
1532
- "stuck_or_timeout_failure",
1533
- ],
1534
- },
1535
- "script": [
1536
- "cd api",
1537
- "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
1538
- "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
1539
- "yarn install --immutable",
1540
- "yarn lint",
1541
- ],
1542
- "stage": "test",
1543
- "variables": {
1544
- "APP_PATH": "api",
1545
- "KUBERNETES_CPU_LIMIT": "2",
1546
- "KUBERNETES_CPU_REQUEST": "0.5",
1547
- "KUBERNETES_MEMORY_LIMIT": "4Gi",
1548
- "KUBERNETES_MEMORY_REQUEST": "2Gi",
1549
- },
1550
- },
1551
- "worker 🔨 app | review ": {
1552
- "artifacts": {
1553
- "expire_in": "1 day",
1554
- "paths": [
1555
- "api/__build_info.json",
1556
- "api/dist",
1557
- "api/.next",
1558
- ],
1559
- "reports": {
1560
- "junit": undefined,
1561
- },
1562
- },
1563
- "cache": [
1564
- {
1565
- "key": "api-yarn",
1566
- "paths": [
1567
- "api/.yarn",
1568
- ],
1569
- "policy": "pull-push",
1570
- },
1571
- {
1572
- "key": "api-node-modules",
1573
- "paths": [
1574
- "api/node_modules",
1575
- ],
1576
- "policy": "pull-push",
1577
- },
1578
- {
1579
- "key": "worker-next-cache",
1580
- "paths": [
1581
- "api/.next/cache/",
1582
- ],
1583
- "policy": "pull-push",
1584
- },
1585
- ],
1586
- "image": "path/to/docker/jobs-default:the-version",
1587
- "interruptible": true,
1588
- "needs": [],
1589
- "retry": {
1590
- "max": 2,
1591
- "when": [
1592
- "runner_system_failure",
1593
- "stuck_or_timeout_failure",
1594
- ],
1595
- },
1596
- "script": [
1597
- "echo '{"id":"some-id","time":"01-01-2023 12:13:14"}' > api/__build_info.json",
1598
- "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
1599
- "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
1600
- "cd api",
1601
- "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
1602
- "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
1603
- "yarn install --immutable",
1604
- "yarn build:worker",
1605
- ],
1606
- "stage": "build",
1607
- "variables": {
1608
- "APP_DIR": "api",
1609
- "BUILD_INFO_BUILD_TIME": "01-01-2023 12:13:14",
1610
- "BUILD_INFO_CURRENT_VERSION": "3.2.1",
1611
- "BUILD_INFO_ID": "some-id",
1612
- "CLOUD_SQL_INSTANCE_CONNECTION_NAME": "projectId:region:instancename",
1613
- "DATABASE_JDBC_URL": "jdbc:postgresql:///$DB_NAME?cloudSqlInstance=$CLOUD_SQL_INSTANCE_CONNECTION_NAME&socketFactory=com.google.cloud.sql.postgres.SocketFactory&user=$DB_USER&password=$DB_PASSWORD",
1614
- "DATABASE_URL": "postgresql://$DB_USER:$DB_PASSWORD@localhost/$DB_NAME?host=/cloudsql/$CLOUD_SQL_INSTANCE_CONNECTION_NAME",
1615
- "DB_NAME": "pan-test-app-review-mr1234-api",
1616
- "DB_PASSWORD": "$CL_review_api_DB_PASSWORD",
1617
- "DB_USER": "my-user",
1618
- "ENV_SHORT": "review",
1619
- "ENV_TYPE": "review",
1620
- "GCLOUD_DEPLOY_credentialsKey": "$CL_review_worker_GCLOUD_DEPLOY_credentialsKey",
1621
- "GCLOUD_RUN_canonicalHostSuffix": "$CL_review_worker_GCLOUD_RUN_canonicalHostSuffix",
1622
- "HOST": "pan-test-app-review-mr1234-worker-unknown-host.example.com",
1623
- "HOST_CANONICAL": "pan-test-app-review-mr1234-worker-unknown-host.example.com",
1624
- "KUBERNETES_CPU_LIMIT": "2",
1625
- "KUBERNETES_CPU_REQUEST": "0.5",
1626
- "KUBERNETES_MEMORY_LIMIT": "4Gi",
1627
- "KUBERNETES_MEMORY_REQUEST": "2Gi",
1628
- "ROOT_URL": "https://pan-test-app-review-mr1234-worker-unknown-host.example.com",
1629
- "_ALL_ENV_VAR_KEYS": "["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","HOST_CANONICAL","CLOUD_SQL_INSTANCE_CONNECTION_NAME","DB_NAME","DB_USER","DB_PASSWORD","DATABASE_URL","DATABASE_JDBC_URL","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]",
1630
- },
1631
- },
1632
- "worker 🔨 docker | review ": {
1633
- "cache": [
1634
- {
1635
- "key": "api-yarn",
1636
- "paths": [
1637
- "api/.yarn",
1638
- ],
1639
- "policy": "pull",
1640
- },
1641
- ],
1642
- "image": "path/to/docker/docker-build:the-version",
1643
- "interruptible": true,
1644
- "needs": [
1645
- "worker 🔨 app | review ",
1646
- ],
1647
- "retry": {
1648
- "max": 2,
1649
- "when": [
1650
- "runner_system_failure",
1651
- "stuck_or_timeout_failure",
1652
- ],
1653
- },
1654
- "script": [
1655
- "ensureNodeDockerfile",
1656
- "docker login --username gitlab-ci-token --password $CI_JOB_TOKEN $CI_REGISTRY",
1657
- "docker version",
1658
- "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",
1659
- "docker push $DOCKER_IMAGE:$DOCKER_IMAGE_TAG",
1660
- "docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG $DOCKER_CACHE_IMAGE",
1661
- "docker push $DOCKER_CACHE_IMAGE",
1662
- ],
1663
- "services": [
1664
- {
1665
- "command": [
1666
- "--tls=false",
1667
- ],
1668
- "name": "docker:20-dind",
1669
- },
1670
- ],
1671
- "stage": "build",
1672
- "variables": {
1673
- "APP_DIR": "api",
1674
- "DOCKERFILE_ADDITIONS": undefined,
1675
- "DOCKERFILE_ADDITIONS_END": undefined,
1676
- "DOCKER_BUILDKIT": "1",
1677
- "DOCKER_CACHE_IMAGE": "$DOCKER_REGISTRY_IMAGE_PATH/caches/worker",
1678
- "DOCKER_COPY_AND_INSTALL_APP": "COPY --chown=node:node $APP_DIR .
1679
- RUN yarn plugin import workspace-tools
1680
- RUN yarn workspaces focus --production && yarn rebuild",
1681
- "DOCKER_COPY_WORKSPACE_FILES": "COPY --chown=node:node api/package.json /app/api/package.json
1682
- COPY --chown=node:node api/yarn.lock /app/api/yarn.lock
1683
- COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
1684
- COPY --chown=node:node .yarn /app/.yarn",
1685
- "DOCKER_DIR": ".",
1686
- "DOCKER_DRIVER": "overlay2",
1687
- "DOCKER_HOST": "tcp://0.0.0.0:2375",
1688
- "DOCKER_IMAGE": "$DOCKER_REGISTRY_IMAGE_PATH/$DOCKER_IMAGE_NAME",
1689
- "DOCKER_IMAGE_NAME": "review/worker",
1690
- "DOCKER_IMAGE_TAG": "$CI_COMMIT_SHA",
1691
- "DOCKER_REGISTRY": "$CI_REGISTRY",
1692
- "DOCKER_REGISTRY_IMAGE_PATH": "$CI_REGISTRY_IMAGE",
1693
- "DOCKER_TLS_CERTDIR": "",
1694
- "KUBERNETES_CPU_LIMIT": "1",
1695
- "KUBERNETES_CPU_REQUEST": "0.5",
1696
- "KUBERNETES_MEMORY_LIMIT": "2Gi",
1697
- "KUBERNETES_MEMORY_REQUEST": "1Gi",
1698
- },
1699
- },
1700
- "worker 🚀 Deploy | review ": {
1701
- "allow_failure": false,
1702
- "artifacts": {
1703
- "paths": [
1704
- "____envvars.yaml",
1705
- ],
1706
- },
1707
- "environment": {
1708
- "auto_stop_in": "2 week",
1709
- "name": "review/some-commit/worker",
1710
- "on_stop": "worker 🛑 Stop ⚠️ | review ",
1711
- "url": "https://pan-test-app-review-mr1234-worker-unknown-host.example.com",
1712
- },
1713
- "image": "path/to/docker/gcloud:the-version",
1714
- "interruptible": true,
1715
- "needs": [
1716
- {
1717
- "artifacts": false,
1718
- "job": "worker 👮 lint",
1719
- },
1720
- {
1721
- "artifacts": false,
1722
- "job": "worker 🔨 app | review ",
1723
- },
1724
- {
1725
- "artifacts": false,
1726
- "job": "worker 🔨 docker | review ",
1727
- },
1728
- {
1729
- "artifacts": false,
1730
- "job": "worker 🧪 test",
1731
- },
1732
- {
1733
- "artifacts": true,
1734
- "job": "worker 🧾 sbom | review ",
1735
- },
1736
- {
1737
- "artifacts": false,
1738
- "job": "worker 🛡 audit",
1739
- },
1740
- ],
1741
- "retry": {
1742
- "max": 2,
1743
- "when": [
1744
- "runner_system_failure",
1745
- "stuck_or_timeout_failure",
1746
- ],
1747
- },
1748
- "rules": [
1749
- {
1750
- "when": "on_success",
1751
- },
1752
- ],
1753
- "script": [
1754
- "echo -e "\\e[0Ksection_start:$(date +%s):prepare[collapsed=true]\\r\\e[0KPrepare..."",
1755
- "echo $CL_review_worker_GCLOUD_DEPLOY_credentialsKey > ./____keyfile.json
1756
- ",
1757
- "gcloud auth activate-service-account --key-file="./____keyfile.json"",
1758
- "export GCLOUD_PROJECT_NUMBER=$(gcloud projects describe google-project-id --format="value(projectNumber)")",
1759
- "echo "GCLOUD_PROJECT_NUMBER: $GCLOUD_PROJECT_NUMBER"",
1760
- "echo -e "\\e[0Ksection_end:$(date +%s):prepare\\r\\e[0K"",
1761
- "echo -e "\\e[0Ksection_start:$(date +%s):pushToArtifactRegistry[collapsed=true]\\r\\e[0KPushing image to artifacts registry"",
1762
- "docker login --username gitlab-ci-token --password $CI_JOB_TOKEN $CI_REGISTRY",
1763
- "gcloud auth configure-docker europe-west6-docker.pkg.dev",
1764
- "docker pull $DOCKER_IMAGE:$DOCKER_IMAGE_TAG",
1765
- "docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/review/worker/mr1234:$DOCKER_IMAGE_TAG",
1766
- "docker push europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/review/worker/mr1234:$DOCKER_IMAGE_TAG",
1767
- "echo -e "\\e[0Ksection_end:$(date +%s):pushToArtifactRegistry\\r\\e[0K"",
1768
- "echo -e "\\e[0Ksection_start:$(date +%s):deploy[collapsed=true]\\r\\e[0KDeploy to cloud run"",
1769
- "echo "$ENV_VARS" > ____envvars.yaml",
1770
- "set +e",
1771
- "echo "ensuring Database..."",
1772
- "gcloud sql databases create pan-test-app-review-mr1234-api --instance=instancename --project projectId",
1773
- "set -e",
1774
- "gcloud run deploy pan-test-app-review-mr1234-worker --command="yarn,start" --image=europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/review/worker/mr1234:$DOCKER_IMAGE_TAG --project=google-project-id --region=europe-west6 --set-cloudsql-instances=projectId:region:instancename --labels=customer-name=pan,component-name=worker,app-name=test-app,env-type=review,env-name=review,build-type=node --env-vars-file=____envvars.yaml --min-instances=0 --max-instances=100 --cpu-throttling --allow-unauthenticated --cpu-boost",
1775
- "echo -e "\\e[0Ksection_end:$(date +%s):deploy\\r\\e[0K"",
1776
- "docker image rm europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/review/worker/mr1234:$DOCKER_IMAGE_TAG",
1777
- "echo Uploading SBOM to Dependency Track",
1778
- "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/worker" "https://pan-test-app-review-mr1234-worker-unknown-host.example.com" "__sbom.json" vex.json || true",
1779
- ],
1780
- "services": [
1781
- {
1782
- "command": [
1783
- "--tls=false",
1784
- ],
1785
- "name": "docker:20-dind",
1786
- },
1787
- ],
1788
- "stage": "deploy review",
1789
- "variables": {
1790
- "APP_DIR": "api",
1791
- "BUILD_INFO_BUILD_TIME": "01-01-2023 12:13:14",
1792
- "BUILD_INFO_CURRENT_VERSION": "3.2.1",
1793
- "BUILD_INFO_ID": "some-id",
1794
- "CLOUDSDK_CORE_DISABLE_PROMPTS": "1",
1795
- "CLOUD_SQL_INSTANCE_CONNECTION_NAME": "projectId:region:instancename",
1796
- "DATABASE_JDBC_URL": "jdbc:postgresql:///$DB_NAME?cloudSqlInstance=$CLOUD_SQL_INSTANCE_CONNECTION_NAME&socketFactory=com.google.cloud.sql.postgres.SocketFactory&user=$DB_USER&password=$DB_PASSWORD",
1797
- "DATABASE_URL": "postgresql://$DB_USER:$DB_PASSWORD@localhost/$DB_NAME?host=/cloudsql/$CLOUD_SQL_INSTANCE_CONNECTION_NAME",
1798
- "DB_NAME": "pan-test-app-review-mr1234-api",
1799
- "DB_PASSWORD": "$CL_review_api_DB_PASSWORD",
1800
- "DB_USER": "my-user",
1801
- "DOCKER_BUILDKIT": "1",
1802
- "DOCKER_CACHE_IMAGE": "$DOCKER_REGISTRY_IMAGE_PATH/caches/worker",
1803
- "DOCKER_DRIVER": "overlay2",
1804
- "DOCKER_HOST": "tcp://0.0.0.0:2375",
1805
- "DOCKER_IMAGE": "$DOCKER_REGISTRY_IMAGE_PATH/$DOCKER_IMAGE_NAME",
1806
- "DOCKER_IMAGE_NAME": "review/worker",
1807
- "DOCKER_IMAGE_TAG": "$CI_COMMIT_SHA",
1808
- "DOCKER_REGISTRY": "$CI_REGISTRY",
1809
- "DOCKER_REGISTRY_IMAGE_PATH": "$CI_REGISTRY_IMAGE",
1810
- "DOCKER_TLS_CERTDIR": "",
1811
- "ENV_SHORT": "review",
1812
- "ENV_TYPE": "review",
1813
- "ENV_VARS": "ENV_SHORT: 'review'
1814
- APP_DIR: 'api'
1815
- ENV_TYPE: 'review'
1816
- BUILD_INFO_ID: 'some-id'
1817
- BUILD_INFO_BUILD_TIME: '01-01-2023 12:13:14'
1818
- BUILD_INFO_CURRENT_VERSION: '3.2.1'
1819
- HOST: 'pan-test-app-review-mr1234-worker-unknown-host.example.com'
1820
- ROOT_URL: 'https://pan-test-app-review-mr1234-worker-unknown-host.example.com'
1821
- HOST_CANONICAL: 'pan-test-app-review-mr1234-worker-unknown-host.example.com'
1822
- CLOUD_SQL_INSTANCE_CONNECTION_NAME: 'projectId:region:instancename'
1823
- DB_NAME: 'pan-test-app-review-mr1234-api'
1824
- DB_USER: 'my-user'
1825
- DB_PASSWORD: '$CL_review_api_DB_PASSWORD'
1826
- DATABASE_URL: 'postgresql://$DB_USER:$DB_PASSWORD@localhost/$DB_NAME?host=/cloudsql/$CLOUD_SQL_INSTANCE_CONNECTION_NAME'
1827
- DATABASE_JDBC_URL: 'jdbc:postgresql:///$DB_NAME?cloudSqlInstance=$CLOUD_SQL_INSTANCE_CONNECTION_NAME&socketFactory=com.google.cloud.sql.postgres.SocketFactory&user=$DB_USER&password=$DB_PASSWORD'
1828
- GCLOUD_RUN_canonicalHostSuffix: '$CL_review_worker_GCLOUD_RUN_canonicalHostSuffix'
1829
- _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","HOST_CANONICAL","CLOUD_SQL_INSTANCE_CONNECTION_NAME","DB_NAME","DB_USER","DB_PASSWORD","DATABASE_URL","DATABASE_JDBC_URL","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]'
1830
- ",
1831
- "GCLOUD_DEPLOY_credentialsKey": "$CL_review_worker_GCLOUD_DEPLOY_credentialsKey",
1832
- "GCLOUD_RUN_canonicalHostSuffix": "$CL_review_worker_GCLOUD_RUN_canonicalHostSuffix",
1833
- "HOST": "pan-test-app-review-mr1234-worker-unknown-host.example.com",
1834
- "HOST_CANONICAL": "pan-test-app-review-mr1234-worker-unknown-host.example.com",
1835
- "KUBERNETES_CPU_LIMIT": "1",
1836
- "KUBERNETES_CPU_REQUEST": "0.5",
1837
- "KUBERNETES_MEMORY_LIMIT": "400Mi",
1838
- "KUBERNETES_MEMORY_REQUEST": "200Mi",
1839
- "ROOT_URL": "https://pan-test-app-review-mr1234-worker-unknown-host.example.com",
1840
- "_ALL_ENV_VAR_KEYS": "["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","HOST_CANONICAL","CLOUD_SQL_INSTANCE_CONNECTION_NAME","DB_NAME","DB_USER","DB_PASSWORD","DATABASE_URL","DATABASE_JDBC_URL","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]",
1841
- },
1842
- },
1843
- "worker 🛑 Stop ⚠️ | review ": {
1844
- "environment": {
1845
- "action": "stop",
1846
- "name": "review/some-commit/worker",
1847
- "url": "https://pan-test-app-review-mr1234-worker-unknown-host.example.com",
1848
- },
1849
- "image": "path/to/docker/gcloud:the-version",
1850
- "interruptible": true,
1851
- "needs": [],
1852
- "retry": {
1853
- "max": 2,
1854
- "when": [
1855
- "runner_system_failure",
1856
- "stuck_or_timeout_failure",
1857
- ],
1858
- },
1859
- "rules": [
1860
- {
1861
- "allow_failure": true,
1862
- "if": "$CI_COMMIT_BRANCH =~ /^[0-9]+\\.([0-9]+|x)\\.x$/",
1863
- "when": "on_success",
1864
- },
1865
- {
1866
- "allow_failure": true,
1867
- "when": "manual",
1868
- },
1869
- ],
1870
- "script": [
1871
- "set +e",
1872
- "echo $CL_review_worker_GCLOUD_DEPLOY_credentialsKey > ./____keyfile.json
1873
- ",
1874
- "gcloud auth activate-service-account --key-file="./____keyfile.json"",
1875
- "gcloud run services delete pan-test-app-review-mr1234-worker --project=google-project-id --region=europe-west6",
1876
- "echo "deleting database pan-test-app-review-mr1234-api..."",
1877
- "echo "👆 this can take multiple attemps (3-5min), because google cloud run may still have a connection to the database after the cloud run service is shut down"",
1878
- "
1879
- until gcloud sql databases delete pan-test-app-review-mr1234-api --instance=instancename --project projectId
1880
- do
1881
- echo "Trying again."
1882
- sleep 10
1883
- done
1884
- ",
1885
- "echo Disabling component in Dependency Track",
1886
- "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" disable "pan-test-app/worker" "https://pan-test-app-review-mr1234-worker-unknown-host.example.com" || true",
1887
- "set -e",
1888
- ],
1889
- "stage": "stop review",
1890
- "variables": {
1891
- "CLOUDSDK_CORE_DISABLE_PROMPTS": "1",
1892
- "GIT_STRATEGY": "none",
1893
- "KUBERNETES_CPU_LIMIT": "1",
1894
- "KUBERNETES_CPU_REQUEST": "0.5",
1895
- "KUBERNETES_MEMORY_LIMIT": "400Mi",
1896
- "KUBERNETES_MEMORY_REQUEST": "200Mi",
1897
- },
1898
- },
1899
- "worker 🛡 audit": {
1900
- "allow_failure": true,
1901
- "image": "path/to/docker/jobs-default:the-version",
1902
- "interruptible": true,
1903
- "needs": [],
1904
- "retry": {
1905
- "max": 2,
1906
- "when": [
1907
- "runner_system_failure",
1908
- "stuck_or_timeout_failure",
1909
- ],
1910
- },
1911
- "script": [
1912
- "cd api",
1913
- "yarn npm audit --environment production",
1914
- ],
1915
- "stage": "test",
1916
- "variables": {
1917
- "APP_PATH": "api",
1918
- "KUBERNETES_CPU_LIMIT": "2",
1919
- "KUBERNETES_CPU_REQUEST": "0.5",
1920
- "KUBERNETES_MEMORY_LIMIT": "4Gi",
1921
- "KUBERNETES_MEMORY_REQUEST": "2Gi",
1922
- },
1923
- },
1924
- "worker 🧪 test": {
1925
- "cache": [
1926
- {
1927
- "key": "api-yarn",
1928
- "paths": [
1929
- "api/.yarn",
1930
- ],
1931
- "policy": "pull-push",
1932
- },
1933
- {
1934
- "key": "api-node-modules",
1935
- "paths": [
1936
- "api/node_modules",
1937
- ],
1938
- "policy": "pull-push",
1939
- },
1940
- ],
1941
- "image": "path/to/docker/jobs-testing-chrome:the-version",
1942
- "interruptible": true,
1943
- "needs": [],
1944
- "retry": {
1945
- "max": 2,
1946
- "when": [
1947
- "runner_system_failure",
1948
- "stuck_or_timeout_failure",
1949
- ],
1950
- },
1951
- "script": [
1952
- "cd api",
1953
- "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
1954
- "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
1955
- "yarn install --immutable",
1956
- "yarn test",
1957
- ],
1958
- "stage": "test",
1959
- "variables": {
1960
- "APP_PATH": "api",
1961
- "KUBERNETES_CPU_LIMIT": "2",
1962
- "KUBERNETES_CPU_REQUEST": "0.5",
1963
- "KUBERNETES_MEMORY_LIMIT": "4Gi",
1964
- "KUBERNETES_MEMORY_REQUEST": "2Gi",
1965
- },
1966
- },
1967
- "worker 🧾 sbom | review ": {
1968
- "allow_failure": true,
1969
- "artifacts": {
1970
- "paths": [
1971
- "__sbom.json",
1972
- ],
1973
- },
1974
- "image": "aquasec/trivy:0.38.3",
1975
- "interruptible": true,
1976
- "needs": [],
1977
- "retry": {
1978
- "max": 2,
1979
- "when": [
1980
- "runner_system_failure",
1981
- "stuck_or_timeout_failure",
1982
- ],
1983
- },
1984
- "script": [
1985
- "trivy fs --quiet --format cyclonedx --output "__sbom.json" api",
1986
- ],
1987
- "stage": "build",
1988
- "variables": {},
1989
- },
1990
- },
1991
- "stages": [
1992
- "setup",
1993
- "setup dev",
1994
- "setup review",
1995
- "setup stage",
1996
- "setup prod",
1997
- "setup local",
1998
- "test",
1999
- "test dev",
2000
- "test review",
2001
- "test stage",
2002
- "test prod",
2003
- "test local",
2004
- "build",
2005
- "build dev",
2006
- "build review",
2007
- "build stage",
2008
- "build prod",
2009
- "build local",
2010
- "deploy",
2011
- "deploy dev",
2012
- "deploy review",
2013
- "deploy stage",
2014
- "deploy prod",
2015
- "deploy local",
2016
- "verify",
2017
- "verify dev",
2018
- "verify review",
2019
- "verify stage",
2020
- "verify prod",
2021
- "verify local",
2022
- "rollback",
2023
- "rollback dev",
2024
- "rollback review",
2025
- "rollback stage",
2026
- "rollback prod",
2027
- "rollback local",
2028
- "stop",
2029
- "stop dev",
2030
- "stop review",
2031
- "stop stage",
2032
- "stop prod",
2033
- "stop local",
2034
- ],
2035
- "variables": {
2036
- "FF_USE_FASTZIP": "true",
2037
- },
2038
- "workflow": {
2039
- "rules": [
2040
- {
2041
- "if": "$CI_COMMIT_TAG",
2042
- },
2043
- {
2044
- "if": "$CI_COMMIT_MESSAGE =~ /^chore\\(release\\).*/",
2045
- "when": "never",
2046
- },
2047
- {
2048
- "if": "$CI_COMMIT_BRANCH =~ /^[0-9]+.([0-9]+|x).x$/",
2049
- },
2050
- {
2051
- "if": "$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH",
2052
- },
2053
- {
2054
- "if": "$CI_MERGE_REQUEST_ID",
2055
- },
2056
- ],
2057
- },
2058
- },
2059
- "taggedRelease": {
2060
- "image": "path/to/docker/jobs-default:the-version",
2061
- "jobs": {
2062
- "api 🔨 app | prod ": {
2063
- "artifacts": {
2064
- "expire_in": "1 day",
2065
- "paths": [
2066
- "api/__build_info.json",
2067
- "api/dist",
2068
- "api/.next",
2069
- ],
2070
- "reports": {
2071
- "junit": undefined,
2072
- },
2073
- },
2074
- "cache": [
2075
- {
2076
- "key": "api-yarn",
2077
- "paths": [
2078
- "api/.yarn",
2079
- ],
2080
- "policy": "pull-push",
2081
- },
2082
- {
2083
- "key": "api-node-modules",
2084
- "paths": [
2085
- "api/node_modules",
2086
- ],
2087
- "policy": "pull-push",
2088
- },
2089
- {
2090
- "key": "api-next-cache",
2091
- "paths": [
2092
- "api/.next/cache/",
2093
- ],
2094
- "policy": "pull-push",
2095
- },
2096
- ],
2097
- "image": "path/to/docker/jobs-default:the-version",
2098
- "interruptible": true,
2099
- "needs": [],
2100
- "retry": {
2101
- "max": 2,
2102
- "when": [
2103
- "runner_system_failure",
2104
- "stuck_or_timeout_failure",
2105
- ],
2106
- },
2107
- "script": [
2108
- "echo '{"id":"some-id","time":"01-01-2023 12:13:14"}' > api/__build_info.json",
2109
- "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
2110
- "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
2111
- "cd api",
2112
- "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
2113
- "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
2114
- "yarn install --immutable",
2115
- "yarn build",
2116
- ],
2117
- "stage": "build",
2118
- "variables": {
2119
- "APP_DIR": "api",
2120
- "BUILD_INFO_BUILD_TIME": "01-01-2023 12:13:14",
2121
- "BUILD_INFO_CURRENT_VERSION": "3.2.1",
2122
- "BUILD_INFO_ID": "some-id",
2123
- "CLOUD_SQL_INSTANCE_CONNECTION_NAME": "projectId:region:instancename",
2124
- "DATABASE_JDBC_URL": "jdbc:postgresql:///$DB_NAME?cloudSqlInstance=$CLOUD_SQL_INSTANCE_CONNECTION_NAME&socketFactory=com.google.cloud.sql.postgres.SocketFactory&user=$DB_USER&password=$DB_PASSWORD",
2125
- "DATABASE_URL": "postgresql://$DB_USER:$DB_PASSWORD@localhost/$DB_NAME?host=/cloudsql/$CLOUD_SQL_INSTANCE_CONNECTION_NAME",
2126
- "DB_NAME": "pan-test-app-prod-api",
2127
- "DB_PASSWORD": "$CL_prod_api_DB_PASSWORD",
2128
- "DB_USER": "my-user",
2129
- "ENV_SHORT": "prod",
2130
- "ENV_TYPE": "prod",
2131
- "GCLOUD_DEPLOY_credentialsKey": "$CL_prod_api_GCLOUD_DEPLOY_credentialsKey",
2132
- "GCLOUD_RUN_canonicalHostSuffix": "$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix",
2133
- "HOST": "pan-test-app-prod-api-unknown-host.example.com",
2134
- "HOST_CANONICAL": "pan-test-app-prod-api-unknown-host.example.com",
2135
- "KUBERNETES_CPU_LIMIT": "2",
2136
- "KUBERNETES_CPU_REQUEST": "0.5",
2137
- "KUBERNETES_MEMORY_LIMIT": "4Gi",
2138
- "KUBERNETES_MEMORY_REQUEST": "2Gi",
2139
- "ROOT_URL": "https://pan-test-app-prod-api-unknown-host.example.com",
2140
- "_ALL_ENV_VAR_KEYS": "["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","HOST_CANONICAL","CLOUD_SQL_INSTANCE_CONNECTION_NAME","DB_NAME","DB_USER","DB_PASSWORD","DATABASE_URL","DATABASE_JDBC_URL","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]",
2141
- },
2142
- },
2143
- "api 🔨 app | stage ": {
2144
- "artifacts": {
2145
- "expire_in": "1 day",
2146
- "paths": [
2147
- "api/__build_info.json",
2148
- "api/dist",
2149
- "api/.next",
2150
- ],
2151
- "reports": {
2152
- "junit": undefined,
2153
- },
2154
- },
2155
- "cache": [
2156
- {
2157
- "key": "api-yarn",
2158
- "paths": [
2159
- "api/.yarn",
2160
- ],
2161
- "policy": "pull-push",
2162
- },
2163
- {
2164
- "key": "api-node-modules",
2165
- "paths": [
2166
- "api/node_modules",
2167
- ],
2168
- "policy": "pull-push",
2169
- },
2170
- {
2171
- "key": "api-next-cache",
2172
- "paths": [
2173
- "api/.next/cache/",
2174
- ],
2175
- "policy": "pull-push",
2176
- },
2177
- ],
2178
- "image": "path/to/docker/jobs-default:the-version",
2179
- "interruptible": true,
2180
- "needs": [],
2181
- "retry": {
2182
- "max": 2,
2183
- "when": [
2184
- "runner_system_failure",
2185
- "stuck_or_timeout_failure",
2186
- ],
2187
- },
2188
- "script": [
2189
- "echo '{"id":"some-id","time":"01-01-2023 12:13:14"}' > api/__build_info.json",
2190
- "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
2191
- "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
2192
- "cd api",
2193
- "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
2194
- "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
2195
- "yarn install --immutable",
2196
- "yarn build",
2197
- ],
2198
- "stage": "build",
2199
- "variables": {
2200
- "APP_DIR": "api",
2201
- "BUILD_INFO_BUILD_TIME": "01-01-2023 12:13:14",
2202
- "BUILD_INFO_CURRENT_VERSION": "3.2.1",
2203
- "BUILD_INFO_ID": "some-id",
2204
- "CLOUD_SQL_INSTANCE_CONNECTION_NAME": "projectId:region:instancename",
2205
- "DATABASE_JDBC_URL": "jdbc:postgresql:///$DB_NAME?cloudSqlInstance=$CLOUD_SQL_INSTANCE_CONNECTION_NAME&socketFactory=com.google.cloud.sql.postgres.SocketFactory&user=$DB_USER&password=$DB_PASSWORD",
2206
- "DATABASE_URL": "postgresql://$DB_USER:$DB_PASSWORD@localhost/$DB_NAME?host=/cloudsql/$CLOUD_SQL_INSTANCE_CONNECTION_NAME",
2207
- "DB_NAME": "pan-test-app-stage-api",
2208
- "DB_PASSWORD": "$CL_stage_api_DB_PASSWORD",
2209
- "DB_USER": "my-user",
2210
- "ENV_SHORT": "stage",
2211
- "ENV_TYPE": "stage",
2212
- "GCLOUD_DEPLOY_credentialsKey": "$CL_stage_api_GCLOUD_DEPLOY_credentialsKey",
2213
- "GCLOUD_RUN_canonicalHostSuffix": "$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix",
2214
- "HOST": "pan-test-app-stage-api-unknown-host.example.com",
2215
- "HOST_CANONICAL": "pan-test-app-stage-api-unknown-host.example.com",
2216
- "KUBERNETES_CPU_LIMIT": "2",
2217
- "KUBERNETES_CPU_REQUEST": "0.5",
2218
- "KUBERNETES_MEMORY_LIMIT": "4Gi",
2219
- "KUBERNETES_MEMORY_REQUEST": "2Gi",
2220
- "ROOT_URL": "https://pan-test-app-stage-api-unknown-host.example.com",
2221
- "_ALL_ENV_VAR_KEYS": "["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","HOST_CANONICAL","CLOUD_SQL_INSTANCE_CONNECTION_NAME","DB_NAME","DB_USER","DB_PASSWORD","DATABASE_URL","DATABASE_JDBC_URL","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]",
2222
- },
2223
- },
2224
- "api 🔨 docker | prod ": {
2225
- "cache": [
2226
- {
2227
- "key": "api-yarn",
2228
- "paths": [
2229
- "api/.yarn",
2230
- ],
2231
- "policy": "pull",
2232
- },
2233
- ],
2234
- "image": "path/to/docker/docker-build:the-version",
2235
- "interruptible": true,
2236
- "needs": [
2237
- "api 🔨 app | prod ",
2238
- ],
2239
- "retry": {
2240
- "max": 2,
2241
- "when": [
2242
- "runner_system_failure",
2243
- "stuck_or_timeout_failure",
2244
- ],
2245
- },
2246
- "script": [
2247
- "ensureNodeDockerfile",
2248
- "docker login --username gitlab-ci-token --password $CI_JOB_TOKEN $CI_REGISTRY",
2249
- "docker version",
2250
- "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",
2251
- "docker push $DOCKER_IMAGE:$DOCKER_IMAGE_TAG",
2252
- "docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG $DOCKER_CACHE_IMAGE",
2253
- "docker push $DOCKER_CACHE_IMAGE",
2254
- ],
2255
- "services": [
2256
- {
2257
- "command": [
2258
- "--tls=false",
2259
- ],
2260
- "name": "docker:20-dind",
2261
- },
2262
- ],
2263
- "stage": "build",
2264
- "variables": {
2265
- "APP_DIR": "api",
2266
- "DOCKERFILE_ADDITIONS": undefined,
2267
- "DOCKERFILE_ADDITIONS_END": undefined,
2268
- "DOCKER_BUILDKIT": "1",
2269
- "DOCKER_CACHE_IMAGE": "$DOCKER_REGISTRY_IMAGE_PATH/caches/api",
2270
- "DOCKER_COPY_AND_INSTALL_APP": "COPY --chown=node:node $APP_DIR .
2271
- RUN yarn plugin import workspace-tools
2272
- RUN yarn workspaces focus --production && yarn rebuild",
2273
- "DOCKER_COPY_WORKSPACE_FILES": "COPY --chown=node:node api/package.json /app/api/package.json
2274
- COPY --chown=node:node api/yarn.lock /app/api/yarn.lock
2275
- COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
2276
- COPY --chown=node:node .yarn /app/.yarn",
2277
- "DOCKER_DIR": ".",
2278
- "DOCKER_DRIVER": "overlay2",
2279
- "DOCKER_HOST": "tcp://0.0.0.0:2375",
2280
- "DOCKER_IMAGE": "$DOCKER_REGISTRY_IMAGE_PATH/$DOCKER_IMAGE_NAME",
2281
- "DOCKER_IMAGE_NAME": "prod/api",
2282
- "DOCKER_IMAGE_TAG": "$CI_COMMIT_SHA",
2283
- "DOCKER_REGISTRY": "$CI_REGISTRY",
2284
- "DOCKER_REGISTRY_IMAGE_PATH": "$CI_REGISTRY_IMAGE",
2285
- "DOCKER_TLS_CERTDIR": "",
2286
- "KUBERNETES_CPU_LIMIT": "1",
2287
- "KUBERNETES_CPU_REQUEST": "0.5",
2288
- "KUBERNETES_MEMORY_LIMIT": "2Gi",
2289
- "KUBERNETES_MEMORY_REQUEST": "1Gi",
2290
- },
2291
- },
2292
- "api 🔨 docker | stage ": {
2293
- "cache": [
2294
- {
2295
- "key": "api-yarn",
2296
- "paths": [
2297
- "api/.yarn",
2298
- ],
2299
- "policy": "pull",
2300
- },
2301
- ],
2302
- "image": "path/to/docker/docker-build:the-version",
2303
- "interruptible": true,
2304
- "needs": [
2305
- "api 🔨 app | stage ",
2306
- ],
2307
- "retry": {
2308
- "max": 2,
2309
- "when": [
2310
- "runner_system_failure",
2311
- "stuck_or_timeout_failure",
2312
- ],
2313
- },
2314
- "script": [
2315
- "ensureNodeDockerfile",
2316
- "docker login --username gitlab-ci-token --password $CI_JOB_TOKEN $CI_REGISTRY",
2317
- "docker version",
2318
- "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",
2319
- "docker push $DOCKER_IMAGE:$DOCKER_IMAGE_TAG",
2320
- "docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG $DOCKER_CACHE_IMAGE",
2321
- "docker push $DOCKER_CACHE_IMAGE",
2322
- ],
2323
- "services": [
2324
- {
2325
- "command": [
2326
- "--tls=false",
2327
- ],
2328
- "name": "docker:20-dind",
2329
- },
2330
- ],
2331
- "stage": "build",
2332
- "variables": {
2333
- "APP_DIR": "api",
2334
- "DOCKERFILE_ADDITIONS": undefined,
2335
- "DOCKERFILE_ADDITIONS_END": undefined,
2336
- "DOCKER_BUILDKIT": "1",
2337
- "DOCKER_CACHE_IMAGE": "$DOCKER_REGISTRY_IMAGE_PATH/caches/api",
2338
- "DOCKER_COPY_AND_INSTALL_APP": "COPY --chown=node:node $APP_DIR .
2339
- RUN yarn plugin import workspace-tools
2340
- RUN yarn workspaces focus --production && yarn rebuild",
2341
- "DOCKER_COPY_WORKSPACE_FILES": "COPY --chown=node:node api/package.json /app/api/package.json
2342
- COPY --chown=node:node api/yarn.lock /app/api/yarn.lock
2343
- COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
2344
- COPY --chown=node:node .yarn /app/.yarn",
2345
- "DOCKER_DIR": ".",
2346
- "DOCKER_DRIVER": "overlay2",
2347
- "DOCKER_HOST": "tcp://0.0.0.0:2375",
2348
- "DOCKER_IMAGE": "$DOCKER_REGISTRY_IMAGE_PATH/$DOCKER_IMAGE_NAME",
2349
- "DOCKER_IMAGE_NAME": "stage/api",
2350
- "DOCKER_IMAGE_TAG": "$CI_COMMIT_SHA",
2351
- "DOCKER_REGISTRY": "$CI_REGISTRY",
2352
- "DOCKER_REGISTRY_IMAGE_PATH": "$CI_REGISTRY_IMAGE",
2353
- "DOCKER_TLS_CERTDIR": "",
2354
- "KUBERNETES_CPU_LIMIT": "1",
2355
- "KUBERNETES_CPU_REQUEST": "0.5",
2356
- "KUBERNETES_MEMORY_LIMIT": "2Gi",
2357
- "KUBERNETES_MEMORY_REQUEST": "1Gi",
2358
- },
2359
- },
2360
- "api 🚀 Deploy | prod ": {
2361
- "allow_failure": true,
2362
- "artifacts": {
2363
- "paths": [
2364
- "____envvars.yaml",
2365
- ],
2366
- },
2367
- "environment": {
2368
- "auto_stop_in": undefined,
2369
- "name": "prod/api",
2370
- "on_stop": "api 🛑 Stop ⚠️ | prod ",
2371
- "url": "https://pan-test-app-prod-api-unknown-host.example.com",
2372
- },
2373
- "image": "path/to/docker/gcloud:the-version",
2374
- "interruptible": true,
2375
- "needs": [
2376
- {
2377
- "artifacts": false,
2378
- "job": "api 🔨 app | prod ",
2379
- },
2380
- {
2381
- "artifacts": false,
2382
- "job": "api 🔨 docker | prod ",
2383
- },
2384
- {
2385
- "artifacts": true,
2386
- "job": "api 🧾 sbom | prod ",
2387
- },
2388
- ],
2389
- "retry": {
2390
- "max": 2,
2391
- "when": [
2392
- "runner_system_failure",
2393
- "stuck_or_timeout_failure",
2394
- ],
2395
- },
2396
- "rules": [
2397
- {
2398
- "when": "manual",
2399
- },
2400
- ],
2401
- "script": [
2402
- "echo -e "\\e[0Ksection_start:$(date +%s):prepare[collapsed=true]\\r\\e[0KPrepare..."",
2403
- "echo $CL_prod_api_GCLOUD_DEPLOY_credentialsKey > ./____keyfile.json
2404
- ",
2405
- "gcloud auth activate-service-account --key-file="./____keyfile.json"",
2406
- "export GCLOUD_PROJECT_NUMBER=$(gcloud projects describe google-project-id --format="value(projectNumber)")",
2407
- "echo "GCLOUD_PROJECT_NUMBER: $GCLOUD_PROJECT_NUMBER"",
2408
- "echo -e "\\e[0Ksection_end:$(date +%s):prepare\\r\\e[0K"",
2409
- "echo -e "\\e[0Ksection_start:$(date +%s):pushToArtifactRegistry[collapsed=true]\\r\\e[0KPushing image to artifacts registry"",
2410
- "docker login --username gitlab-ci-token --password $CI_JOB_TOKEN $CI_REGISTRY",
2411
- "gcloud auth configure-docker europe-west6-docker.pkg.dev",
2412
- "docker pull $DOCKER_IMAGE:$DOCKER_IMAGE_TAG",
2413
- "docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/prod/api:$DOCKER_IMAGE_TAG",
2414
- "docker push europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/prod/api:$DOCKER_IMAGE_TAG",
2415
- "echo -e "\\e[0Ksection_end:$(date +%s):pushToArtifactRegistry\\r\\e[0K"",
2416
- "echo -e "\\e[0Ksection_start:$(date +%s):deploy[collapsed=true]\\r\\e[0KDeploy to cloud run"",
2417
- "echo "$ENV_VARS" > ____envvars.yaml",
2418
- "set +e",
2419
- "echo "ensuring Database..."",
2420
- "gcloud sql databases create pan-test-app-prod-api --instance=instancename --project projectId",
2421
- "set -e",
2422
- "gcloud run deploy pan-test-app-prod-api --command="yarn,start" --image=europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/prod/api:$DOCKER_IMAGE_TAG --project=google-project-id --region=europe-west6 --set-cloudsql-instances=projectId:region:instancename --labels=customer-name=pan,component-name=api,app-name=test-app,env-type=prod,env-name=prod,build-type=node --env-vars-file=____envvars.yaml --min-instances=0 --max-instances=100 --cpu-throttling --allow-unauthenticated --cpu-boost",
2423
- "echo -e "\\e[0Ksection_end:$(date +%s):deploy\\r\\e[0K"",
2424
- "docker image rm europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/prod/api:$DOCKER_IMAGE_TAG",
2425
- "echo Uploading SBOM to Dependency Track",
2426
- "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/api" "https://pan-test-app-prod-api-unknown-host.example.com" "__sbom.json" vex.json || true",
2427
- ],
2428
- "services": [
2429
- {
2430
- "command": [
2431
- "--tls=false",
2432
- ],
2433
- "name": "docker:20-dind",
2434
- },
2435
- ],
2436
- "stage": "deploy prod",
2437
- "variables": {
2438
- "APP_DIR": "api",
2439
- "BUILD_INFO_BUILD_TIME": "01-01-2023 12:13:14",
2440
- "BUILD_INFO_CURRENT_VERSION": "3.2.1",
2441
- "BUILD_INFO_ID": "some-id",
2442
- "CLOUDSDK_CORE_DISABLE_PROMPTS": "1",
2443
- "CLOUD_SQL_INSTANCE_CONNECTION_NAME": "projectId:region:instancename",
2444
- "DATABASE_JDBC_URL": "jdbc:postgresql:///$DB_NAME?cloudSqlInstance=$CLOUD_SQL_INSTANCE_CONNECTION_NAME&socketFactory=com.google.cloud.sql.postgres.SocketFactory&user=$DB_USER&password=$DB_PASSWORD",
2445
- "DATABASE_URL": "postgresql://$DB_USER:$DB_PASSWORD@localhost/$DB_NAME?host=/cloudsql/$CLOUD_SQL_INSTANCE_CONNECTION_NAME",
2446
- "DB_NAME": "pan-test-app-prod-api",
2447
- "DB_PASSWORD": "$CL_prod_api_DB_PASSWORD",
2448
- "DB_USER": "my-user",
2449
- "DOCKER_BUILDKIT": "1",
2450
- "DOCKER_CACHE_IMAGE": "$DOCKER_REGISTRY_IMAGE_PATH/caches/api",
2451
- "DOCKER_DRIVER": "overlay2",
2452
- "DOCKER_HOST": "tcp://0.0.0.0:2375",
2453
- "DOCKER_IMAGE": "$DOCKER_REGISTRY_IMAGE_PATH/$DOCKER_IMAGE_NAME",
2454
- "DOCKER_IMAGE_NAME": "prod/api",
2455
- "DOCKER_IMAGE_TAG": "$CI_COMMIT_SHA",
2456
- "DOCKER_REGISTRY": "$CI_REGISTRY",
2457
- "DOCKER_REGISTRY_IMAGE_PATH": "$CI_REGISTRY_IMAGE",
2458
- "DOCKER_TLS_CERTDIR": "",
2459
- "ENV_SHORT": "prod",
2460
- "ENV_TYPE": "prod",
2461
- "ENV_VARS": "ENV_SHORT: 'prod'
2462
- APP_DIR: 'api'
2463
- ENV_TYPE: 'prod'
2464
- BUILD_INFO_ID: 'some-id'
2465
- BUILD_INFO_BUILD_TIME: '01-01-2023 12:13:14'
2466
- BUILD_INFO_CURRENT_VERSION: '3.2.1'
2467
- HOST: 'pan-test-app-prod-api-unknown-host.example.com'
2468
- ROOT_URL: 'https://pan-test-app-prod-api-unknown-host.example.com'
2469
- HOST_CANONICAL: 'pan-test-app-prod-api-unknown-host.example.com'
2470
- CLOUD_SQL_INSTANCE_CONNECTION_NAME: 'projectId:region:instancename'
2471
- DB_NAME: 'pan-test-app-prod-api'
2472
- DB_USER: 'my-user'
2473
- DB_PASSWORD: '$CL_prod_api_DB_PASSWORD'
2474
- DATABASE_URL: 'postgresql://$DB_USER:$DB_PASSWORD@localhost/$DB_NAME?host=/cloudsql/$CLOUD_SQL_INSTANCE_CONNECTION_NAME'
2475
- DATABASE_JDBC_URL: 'jdbc:postgresql:///$DB_NAME?cloudSqlInstance=$CLOUD_SQL_INSTANCE_CONNECTION_NAME&socketFactory=com.google.cloud.sql.postgres.SocketFactory&user=$DB_USER&password=$DB_PASSWORD'
2476
- GCLOUD_RUN_canonicalHostSuffix: '$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix'
2477
- _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","HOST_CANONICAL","CLOUD_SQL_INSTANCE_CONNECTION_NAME","DB_NAME","DB_USER","DB_PASSWORD","DATABASE_URL","DATABASE_JDBC_URL","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]'
2478
- ",
2479
- "GCLOUD_DEPLOY_credentialsKey": "$CL_prod_api_GCLOUD_DEPLOY_credentialsKey",
2480
- "GCLOUD_RUN_canonicalHostSuffix": "$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix",
2481
- "HOST": "pan-test-app-prod-api-unknown-host.example.com",
2482
- "HOST_CANONICAL": "pan-test-app-prod-api-unknown-host.example.com",
2483
- "KUBERNETES_CPU_LIMIT": "1",
2484
- "KUBERNETES_CPU_REQUEST": "0.5",
2485
- "KUBERNETES_MEMORY_LIMIT": "400Mi",
2486
- "KUBERNETES_MEMORY_REQUEST": "200Mi",
2487
- "ROOT_URL": "https://pan-test-app-prod-api-unknown-host.example.com",
2488
- "_ALL_ENV_VAR_KEYS": "["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","HOST_CANONICAL","CLOUD_SQL_INSTANCE_CONNECTION_NAME","DB_NAME","DB_USER","DB_PASSWORD","DATABASE_URL","DATABASE_JDBC_URL","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]",
2489
- },
2490
- },
2491
- "api 🚀 Deploy | stage ": {
2492
- "allow_failure": false,
2493
- "artifacts": {
2494
- "paths": [
2495
- "____envvars.yaml",
2496
- ],
2497
- },
2498
- "environment": {
2499
- "auto_stop_in": undefined,
2500
- "name": "stage/api",
2501
- "on_stop": "api 🛑 Stop ⚠️ | stage ",
2502
- "url": "https://pan-test-app-stage-api-unknown-host.example.com",
2503
- },
2504
- "image": "path/to/docker/gcloud:the-version",
2505
- "interruptible": true,
2506
- "needs": [
2507
- {
2508
- "artifacts": false,
2509
- "job": "api 🔨 app | stage ",
2510
- },
2511
- {
2512
- "artifacts": false,
2513
- "job": "api 🔨 docker | stage ",
2514
- },
2515
- {
2516
- "artifacts": true,
2517
- "job": "api 🧾 sbom | stage ",
2518
- },
2519
- ],
2520
- "retry": {
2521
- "max": 2,
2522
- "when": [
2523
- "runner_system_failure",
2524
- "stuck_or_timeout_failure",
2525
- ],
2526
- },
2527
- "rules": [
2528
- {
2529
- "when": "on_success",
2530
- },
2531
- ],
2532
- "script": [
2533
- "echo -e "\\e[0Ksection_start:$(date +%s):prepare[collapsed=true]\\r\\e[0KPrepare..."",
2534
- "echo $CL_stage_api_GCLOUD_DEPLOY_credentialsKey > ./____keyfile.json
2535
- ",
2536
- "gcloud auth activate-service-account --key-file="./____keyfile.json"",
2537
- "export GCLOUD_PROJECT_NUMBER=$(gcloud projects describe google-project-id --format="value(projectNumber)")",
2538
- "echo "GCLOUD_PROJECT_NUMBER: $GCLOUD_PROJECT_NUMBER"",
2539
- "echo -e "\\e[0Ksection_end:$(date +%s):prepare\\r\\e[0K"",
2540
- "echo -e "\\e[0Ksection_start:$(date +%s):pushToArtifactRegistry[collapsed=true]\\r\\e[0KPushing image to artifacts registry"",
2541
- "docker login --username gitlab-ci-token --password $CI_JOB_TOKEN $CI_REGISTRY",
2542
- "gcloud auth configure-docker europe-west6-docker.pkg.dev",
2543
- "docker pull $DOCKER_IMAGE:$DOCKER_IMAGE_TAG",
2544
- "docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/stage/api:$DOCKER_IMAGE_TAG",
2545
- "docker push europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/stage/api:$DOCKER_IMAGE_TAG",
2546
- "echo -e "\\e[0Ksection_end:$(date +%s):pushToArtifactRegistry\\r\\e[0K"",
2547
- "echo -e "\\e[0Ksection_start:$(date +%s):deploy[collapsed=true]\\r\\e[0KDeploy to cloud run"",
2548
- "echo "$ENV_VARS" > ____envvars.yaml",
2549
- "set +e",
2550
- "echo "ensuring Database..."",
2551
- "gcloud sql databases create pan-test-app-stage-api --instance=instancename --project projectId",
2552
- "set -e",
2553
- "gcloud run deploy pan-test-app-stage-api --command="yarn,start" --image=europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/stage/api:$DOCKER_IMAGE_TAG --project=google-project-id --region=europe-west6 --set-cloudsql-instances=projectId:region:instancename --labels=customer-name=pan,component-name=api,app-name=test-app,env-type=stage,env-name=stage,build-type=node --env-vars-file=____envvars.yaml --min-instances=0 --max-instances=100 --cpu-throttling --allow-unauthenticated --cpu-boost",
2554
- "echo -e "\\e[0Ksection_end:$(date +%s):deploy\\r\\e[0K"",
2555
- "docker image rm europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/stage/api:$DOCKER_IMAGE_TAG",
2556
- "echo Uploading SBOM to Dependency Track",
2557
- "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/api" "https://pan-test-app-stage-api-unknown-host.example.com" "__sbom.json" vex.json || true",
2558
- ],
2559
- "services": [
2560
- {
2561
- "command": [
2562
- "--tls=false",
2563
- ],
2564
- "name": "docker:20-dind",
2565
- },
2566
- ],
2567
- "stage": "deploy stage",
2568
- "variables": {
2569
- "APP_DIR": "api",
2570
- "BUILD_INFO_BUILD_TIME": "01-01-2023 12:13:14",
2571
- "BUILD_INFO_CURRENT_VERSION": "3.2.1",
2572
- "BUILD_INFO_ID": "some-id",
2573
- "CLOUDSDK_CORE_DISABLE_PROMPTS": "1",
2574
- "CLOUD_SQL_INSTANCE_CONNECTION_NAME": "projectId:region:instancename",
2575
- "DATABASE_JDBC_URL": "jdbc:postgresql:///$DB_NAME?cloudSqlInstance=$CLOUD_SQL_INSTANCE_CONNECTION_NAME&socketFactory=com.google.cloud.sql.postgres.SocketFactory&user=$DB_USER&password=$DB_PASSWORD",
2576
- "DATABASE_URL": "postgresql://$DB_USER:$DB_PASSWORD@localhost/$DB_NAME?host=/cloudsql/$CLOUD_SQL_INSTANCE_CONNECTION_NAME",
2577
- "DB_NAME": "pan-test-app-stage-api",
2578
- "DB_PASSWORD": "$CL_stage_api_DB_PASSWORD",
2579
- "DB_USER": "my-user",
2580
- "DOCKER_BUILDKIT": "1",
2581
- "DOCKER_CACHE_IMAGE": "$DOCKER_REGISTRY_IMAGE_PATH/caches/api",
2582
- "DOCKER_DRIVER": "overlay2",
2583
- "DOCKER_HOST": "tcp://0.0.0.0:2375",
2584
- "DOCKER_IMAGE": "$DOCKER_REGISTRY_IMAGE_PATH/$DOCKER_IMAGE_NAME",
2585
- "DOCKER_IMAGE_NAME": "stage/api",
2586
- "DOCKER_IMAGE_TAG": "$CI_COMMIT_SHA",
2587
- "DOCKER_REGISTRY": "$CI_REGISTRY",
2588
- "DOCKER_REGISTRY_IMAGE_PATH": "$CI_REGISTRY_IMAGE",
2589
- "DOCKER_TLS_CERTDIR": "",
2590
- "ENV_SHORT": "stage",
2591
- "ENV_TYPE": "stage",
2592
- "ENV_VARS": "ENV_SHORT: 'stage'
2593
- APP_DIR: 'api'
2594
- ENV_TYPE: 'stage'
2595
- BUILD_INFO_ID: 'some-id'
2596
- BUILD_INFO_BUILD_TIME: '01-01-2023 12:13:14'
2597
- BUILD_INFO_CURRENT_VERSION: '3.2.1'
2598
- HOST: 'pan-test-app-stage-api-unknown-host.example.com'
2599
- ROOT_URL: 'https://pan-test-app-stage-api-unknown-host.example.com'
2600
- HOST_CANONICAL: 'pan-test-app-stage-api-unknown-host.example.com'
2601
- CLOUD_SQL_INSTANCE_CONNECTION_NAME: 'projectId:region:instancename'
2602
- DB_NAME: 'pan-test-app-stage-api'
2603
- DB_USER: 'my-user'
2604
- DB_PASSWORD: '$CL_stage_api_DB_PASSWORD'
2605
- DATABASE_URL: 'postgresql://$DB_USER:$DB_PASSWORD@localhost/$DB_NAME?host=/cloudsql/$CLOUD_SQL_INSTANCE_CONNECTION_NAME'
2606
- DATABASE_JDBC_URL: 'jdbc:postgresql:///$DB_NAME?cloudSqlInstance=$CLOUD_SQL_INSTANCE_CONNECTION_NAME&socketFactory=com.google.cloud.sql.postgres.SocketFactory&user=$DB_USER&password=$DB_PASSWORD'
2607
- GCLOUD_RUN_canonicalHostSuffix: '$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix'
2608
- _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","HOST_CANONICAL","CLOUD_SQL_INSTANCE_CONNECTION_NAME","DB_NAME","DB_USER","DB_PASSWORD","DATABASE_URL","DATABASE_JDBC_URL","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]'
2609
- ",
2610
- "GCLOUD_DEPLOY_credentialsKey": "$CL_stage_api_GCLOUD_DEPLOY_credentialsKey",
2611
- "GCLOUD_RUN_canonicalHostSuffix": "$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix",
2612
- "HOST": "pan-test-app-stage-api-unknown-host.example.com",
2613
- "HOST_CANONICAL": "pan-test-app-stage-api-unknown-host.example.com",
2614
- "KUBERNETES_CPU_LIMIT": "1",
2615
- "KUBERNETES_CPU_REQUEST": "0.5",
2616
- "KUBERNETES_MEMORY_LIMIT": "400Mi",
2617
- "KUBERNETES_MEMORY_REQUEST": "200Mi",
2618
- "ROOT_URL": "https://pan-test-app-stage-api-unknown-host.example.com",
2619
- "_ALL_ENV_VAR_KEYS": "["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","HOST_CANONICAL","CLOUD_SQL_INSTANCE_CONNECTION_NAME","DB_NAME","DB_USER","DB_PASSWORD","DATABASE_URL","DATABASE_JDBC_URL","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]",
2620
- },
2621
- },
2622
- "api 🛑 Stop ⚠️ | prod ": {
2623
- "environment": {
2624
- "action": "stop",
2625
- "name": "prod/api",
2626
- "url": "https://pan-test-app-prod-api-unknown-host.example.com",
2627
- },
2628
- "image": "path/to/docker/gcloud:the-version",
2629
- "interruptible": true,
2630
- "needs": [],
2631
- "retry": {
2632
- "max": 2,
2633
- "when": [
2634
- "runner_system_failure",
2635
- "stuck_or_timeout_failure",
2636
- ],
2637
- },
2638
- "rules": [
2639
- {
2640
- "allow_failure": true,
2641
- "if": "$CI_COMMIT_BRANCH =~ /^[0-9]+\\.([0-9]+|x)\\.x$/",
2642
- "when": "on_success",
2643
- },
2644
- {
2645
- "allow_failure": true,
2646
- "when": "manual",
2647
- },
2648
- ],
2649
- "script": [
2650
- "set +e",
2651
- "echo $CL_prod_api_GCLOUD_DEPLOY_credentialsKey > ./____keyfile.json
2652
- ",
2653
- "gcloud auth activate-service-account --key-file="./____keyfile.json"",
2654
- "gcloud run services delete pan-test-app-prod-api --project=google-project-id --region=europe-west6",
2655
- "echo Disabling component in Dependency Track",
2656
- "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" disable "pan-test-app/api" "https://pan-test-app-prod-api-unknown-host.example.com" || true",
2657
- "set -e",
2658
- ],
2659
- "stage": "stop prod",
2660
- "variables": {
2661
- "CLOUDSDK_CORE_DISABLE_PROMPTS": "1",
2662
- "GIT_STRATEGY": "none",
2663
- "KUBERNETES_CPU_LIMIT": "1",
2664
- "KUBERNETES_CPU_REQUEST": "0.5",
2665
- "KUBERNETES_MEMORY_LIMIT": "400Mi",
2666
- "KUBERNETES_MEMORY_REQUEST": "200Mi",
2667
- },
2668
- },
2669
- "api 🛑 Stop ⚠️ | stage ": {
2670
- "environment": {
2671
- "action": "stop",
2672
- "name": "stage/api",
2673
- "url": "https://pan-test-app-stage-api-unknown-host.example.com",
2674
- },
2675
- "image": "path/to/docker/gcloud:the-version",
2676
- "interruptible": true,
2677
- "needs": [],
2678
- "retry": {
2679
- "max": 2,
2680
- "when": [
2681
- "runner_system_failure",
2682
- "stuck_or_timeout_failure",
2683
- ],
2684
- },
2685
- "rules": [
2686
- {
2687
- "allow_failure": true,
2688
- "if": "$CI_COMMIT_BRANCH =~ /^[0-9]+\\.([0-9]+|x)\\.x$/",
2689
- "when": "on_success",
2690
- },
2691
- {
2692
- "allow_failure": true,
2693
- "when": "manual",
2694
- },
2695
- ],
2696
- "script": [
2697
- "set +e",
2698
- "echo $CL_stage_api_GCLOUD_DEPLOY_credentialsKey > ./____keyfile.json
2699
- ",
2700
- "gcloud auth activate-service-account --key-file="./____keyfile.json"",
2701
- "gcloud run services delete pan-test-app-stage-api --project=google-project-id --region=europe-west6",
2702
- "echo Disabling component in Dependency Track",
2703
- "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" disable "pan-test-app/api" "https://pan-test-app-stage-api-unknown-host.example.com" || true",
2704
- "set -e",
2705
- ],
2706
- "stage": "stop stage",
2707
- "variables": {
2708
- "CLOUDSDK_CORE_DISABLE_PROMPTS": "1",
2709
- "GIT_STRATEGY": "none",
2710
- "KUBERNETES_CPU_LIMIT": "1",
2711
- "KUBERNETES_CPU_REQUEST": "0.5",
2712
- "KUBERNETES_MEMORY_LIMIT": "400Mi",
2713
- "KUBERNETES_MEMORY_REQUEST": "200Mi",
2714
- },
2715
- },
2716
- "api 🧾 sbom | prod ": {
2717
- "allow_failure": true,
2718
- "artifacts": {
2719
- "paths": [
2720
- "__sbom.json",
2721
- ],
2722
- },
2723
- "image": "aquasec/trivy:0.38.3",
2724
- "interruptible": true,
2725
- "needs": [],
2726
- "retry": {
2727
- "max": 2,
2728
- "when": [
2729
- "runner_system_failure",
2730
- "stuck_or_timeout_failure",
2731
- ],
2732
- },
2733
- "script": [
2734
- "trivy fs --quiet --format cyclonedx --output "__sbom.json" api",
2735
- ],
2736
- "stage": "build",
2737
- "variables": {},
2738
- },
2739
- "api 🧾 sbom | stage ": {
2740
- "allow_failure": true,
2741
- "artifacts": {
2742
- "paths": [
2743
- "__sbom.json",
2744
- ],
2745
- },
2746
- "image": "aquasec/trivy:0.38.3",
2747
- "interruptible": true,
2748
- "needs": [],
2749
- "retry": {
2750
- "max": 2,
2751
- "when": [
2752
- "runner_system_failure",
2753
- "stuck_or_timeout_failure",
2754
- ],
2755
- },
2756
- "script": [
2757
- "trivy fs --quiet --format cyclonedx --output "__sbom.json" api",
2758
- ],
2759
- "stage": "build",
2760
- "variables": {},
2761
- },
2762
- "worker 🔨 app | prod ": {
2763
- "artifacts": {
2764
- "expire_in": "1 day",
2765
- "paths": [
2766
- "api/__build_info.json",
2767
- "api/dist",
2768
- "api/.next",
2769
- ],
2770
- "reports": {
2771
- "junit": undefined,
2772
- },
2773
- },
2774
- "cache": [
2775
- {
2776
- "key": "api-yarn",
2777
- "paths": [
2778
- "api/.yarn",
2779
- ],
2780
- "policy": "pull-push",
2781
- },
2782
- {
2783
- "key": "api-node-modules",
2784
- "paths": [
2785
- "api/node_modules",
2786
- ],
2787
- "policy": "pull-push",
2788
- },
2789
- {
2790
- "key": "worker-next-cache",
2791
- "paths": [
2792
- "api/.next/cache/",
2793
- ],
2794
- "policy": "pull-push",
2795
- },
2796
- ],
2797
- "image": "path/to/docker/jobs-default:the-version",
2798
- "interruptible": true,
2799
- "needs": [],
2800
- "retry": {
2801
- "max": 2,
2802
- "when": [
2803
- "runner_system_failure",
2804
- "stuck_or_timeout_failure",
2805
- ],
2806
- },
2807
- "script": [
2808
- "echo '{"id":"some-id","time":"01-01-2023 12:13:14"}' > api/__build_info.json",
2809
- "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
2810
- "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
2811
- "cd api",
2812
- "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
2813
- "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
2814
- "yarn install --immutable",
2815
- "yarn build:worker",
2816
- ],
2817
- "stage": "build",
2818
- "variables": {
2819
- "APP_DIR": "api",
2820
- "BUILD_INFO_BUILD_TIME": "01-01-2023 12:13:14",
2821
- "BUILD_INFO_CURRENT_VERSION": "3.2.1",
2822
- "BUILD_INFO_ID": "some-id",
2823
- "CLOUD_SQL_INSTANCE_CONNECTION_NAME": "projectId:region:instancename",
2824
- "DATABASE_JDBC_URL": "jdbc:postgresql:///$DB_NAME?cloudSqlInstance=$CLOUD_SQL_INSTANCE_CONNECTION_NAME&socketFactory=com.google.cloud.sql.postgres.SocketFactory&user=$DB_USER&password=$DB_PASSWORD",
2825
- "DATABASE_URL": "postgresql://$DB_USER:$DB_PASSWORD@localhost/$DB_NAME?host=/cloudsql/$CLOUD_SQL_INSTANCE_CONNECTION_NAME",
2826
- "DB_NAME": "pan-test-app-prod-api",
2827
- "DB_PASSWORD": "$CL_prod_api_DB_PASSWORD",
2828
- "DB_USER": "my-user",
2829
- "ENV_SHORT": "prod",
2830
- "ENV_TYPE": "prod",
2831
- "GCLOUD_DEPLOY_credentialsKey": "$CL_prod_worker_GCLOUD_DEPLOY_credentialsKey",
2832
- "GCLOUD_RUN_canonicalHostSuffix": "$CL_prod_worker_GCLOUD_RUN_canonicalHostSuffix",
2833
- "HOST": "pan-test-app-prod-worker-unknown-host.example.com",
2834
- "HOST_CANONICAL": "pan-test-app-prod-worker-unknown-host.example.com",
2835
- "KUBERNETES_CPU_LIMIT": "2",
2836
- "KUBERNETES_CPU_REQUEST": "0.5",
2837
- "KUBERNETES_MEMORY_LIMIT": "4Gi",
2838
- "KUBERNETES_MEMORY_REQUEST": "2Gi",
2839
- "ROOT_URL": "https://pan-test-app-prod-worker-unknown-host.example.com",
2840
- "_ALL_ENV_VAR_KEYS": "["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","HOST_CANONICAL","CLOUD_SQL_INSTANCE_CONNECTION_NAME","DB_NAME","DB_USER","DB_PASSWORD","DATABASE_URL","DATABASE_JDBC_URL","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]",
2841
- },
2842
- },
2843
- "worker 🔨 app | stage ": {
2844
- "artifacts": {
2845
- "expire_in": "1 day",
2846
- "paths": [
2847
- "api/__build_info.json",
2848
- "api/dist",
2849
- "api/.next",
2850
- ],
2851
- "reports": {
2852
- "junit": undefined,
2853
- },
2854
- },
2855
- "cache": [
2856
- {
2857
- "key": "api-yarn",
2858
- "paths": [
2859
- "api/.yarn",
2860
- ],
2861
- "policy": "pull-push",
2862
- },
2863
- {
2864
- "key": "api-node-modules",
2865
- "paths": [
2866
- "api/node_modules",
2867
- ],
2868
- "policy": "pull-push",
2869
- },
2870
- {
2871
- "key": "worker-next-cache",
2872
- "paths": [
2873
- "api/.next/cache/",
2874
- ],
2875
- "policy": "pull-push",
2876
- },
2877
- ],
2878
- "image": "path/to/docker/jobs-default:the-version",
2879
- "interruptible": true,
2880
- "needs": [],
2881
- "retry": {
2882
- "max": 2,
2883
- "when": [
2884
- "runner_system_failure",
2885
- "stuck_or_timeout_failure",
2886
- ],
2887
- },
2888
- "script": [
2889
- "echo '{"id":"some-id","time":"01-01-2023 12:13:14"}' > api/__build_info.json",
2890
- "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
2891
- "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
2892
- "cd api",
2893
- "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
2894
- "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
2895
- "yarn install --immutable",
2896
- "yarn build:worker",
2897
- ],
2898
- "stage": "build",
2899
- "variables": {
2900
- "APP_DIR": "api",
2901
- "BUILD_INFO_BUILD_TIME": "01-01-2023 12:13:14",
2902
- "BUILD_INFO_CURRENT_VERSION": "3.2.1",
2903
- "BUILD_INFO_ID": "some-id",
2904
- "CLOUD_SQL_INSTANCE_CONNECTION_NAME": "projectId:region:instancename",
2905
- "DATABASE_JDBC_URL": "jdbc:postgresql:///$DB_NAME?cloudSqlInstance=$CLOUD_SQL_INSTANCE_CONNECTION_NAME&socketFactory=com.google.cloud.sql.postgres.SocketFactory&user=$DB_USER&password=$DB_PASSWORD",
2906
- "DATABASE_URL": "postgresql://$DB_USER:$DB_PASSWORD@localhost/$DB_NAME?host=/cloudsql/$CLOUD_SQL_INSTANCE_CONNECTION_NAME",
2907
- "DB_NAME": "pan-test-app-stage-api",
2908
- "DB_PASSWORD": "$CL_stage_api_DB_PASSWORD",
2909
- "DB_USER": "my-user",
2910
- "ENV_SHORT": "stage",
2911
- "ENV_TYPE": "stage",
2912
- "GCLOUD_DEPLOY_credentialsKey": "$CL_stage_worker_GCLOUD_DEPLOY_credentialsKey",
2913
- "GCLOUD_RUN_canonicalHostSuffix": "$CL_stage_worker_GCLOUD_RUN_canonicalHostSuffix",
2914
- "HOST": "pan-test-app-stage-worker-unknown-host.example.com",
2915
- "HOST_CANONICAL": "pan-test-app-stage-worker-unknown-host.example.com",
2916
- "KUBERNETES_CPU_LIMIT": "2",
2917
- "KUBERNETES_CPU_REQUEST": "0.5",
2918
- "KUBERNETES_MEMORY_LIMIT": "4Gi",
2919
- "KUBERNETES_MEMORY_REQUEST": "2Gi",
2920
- "ROOT_URL": "https://pan-test-app-stage-worker-unknown-host.example.com",
2921
- "_ALL_ENV_VAR_KEYS": "["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","HOST_CANONICAL","CLOUD_SQL_INSTANCE_CONNECTION_NAME","DB_NAME","DB_USER","DB_PASSWORD","DATABASE_URL","DATABASE_JDBC_URL","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]",
2922
- },
2923
- },
2924
- "worker 🔨 docker | prod ": {
2925
- "cache": [
2926
- {
2927
- "key": "api-yarn",
2928
- "paths": [
2929
- "api/.yarn",
2930
- ],
2931
- "policy": "pull",
2932
- },
2933
- ],
2934
- "image": "path/to/docker/docker-build:the-version",
2935
- "interruptible": true,
2936
- "needs": [
2937
- "worker 🔨 app | prod ",
2938
- ],
2939
- "retry": {
2940
- "max": 2,
2941
- "when": [
2942
- "runner_system_failure",
2943
- "stuck_or_timeout_failure",
2944
- ],
2945
- },
2946
- "script": [
2947
- "ensureNodeDockerfile",
2948
- "docker login --username gitlab-ci-token --password $CI_JOB_TOKEN $CI_REGISTRY",
2949
- "docker version",
2950
- "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",
2951
- "docker push $DOCKER_IMAGE:$DOCKER_IMAGE_TAG",
2952
- "docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG $DOCKER_CACHE_IMAGE",
2953
- "docker push $DOCKER_CACHE_IMAGE",
2954
- ],
2955
- "services": [
2956
- {
2957
- "command": [
2958
- "--tls=false",
2959
- ],
2960
- "name": "docker:20-dind",
2961
- },
2962
- ],
2963
- "stage": "build",
2964
- "variables": {
2965
- "APP_DIR": "api",
2966
- "DOCKERFILE_ADDITIONS": undefined,
2967
- "DOCKERFILE_ADDITIONS_END": undefined,
2968
- "DOCKER_BUILDKIT": "1",
2969
- "DOCKER_CACHE_IMAGE": "$DOCKER_REGISTRY_IMAGE_PATH/caches/worker",
2970
- "DOCKER_COPY_AND_INSTALL_APP": "COPY --chown=node:node $APP_DIR .
2971
- RUN yarn plugin import workspace-tools
2972
- RUN yarn workspaces focus --production && yarn rebuild",
2973
- "DOCKER_COPY_WORKSPACE_FILES": "COPY --chown=node:node api/package.json /app/api/package.json
2974
- COPY --chown=node:node api/yarn.lock /app/api/yarn.lock
2975
- COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
2976
- COPY --chown=node:node .yarn /app/.yarn",
2977
- "DOCKER_DIR": ".",
2978
- "DOCKER_DRIVER": "overlay2",
2979
- "DOCKER_HOST": "tcp://0.0.0.0:2375",
2980
- "DOCKER_IMAGE": "$DOCKER_REGISTRY_IMAGE_PATH/$DOCKER_IMAGE_NAME",
2981
- "DOCKER_IMAGE_NAME": "prod/worker",
2982
- "DOCKER_IMAGE_TAG": "$CI_COMMIT_SHA",
2983
- "DOCKER_REGISTRY": "$CI_REGISTRY",
2984
- "DOCKER_REGISTRY_IMAGE_PATH": "$CI_REGISTRY_IMAGE",
2985
- "DOCKER_TLS_CERTDIR": "",
2986
- "KUBERNETES_CPU_LIMIT": "1",
2987
- "KUBERNETES_CPU_REQUEST": "0.5",
2988
- "KUBERNETES_MEMORY_LIMIT": "2Gi",
2989
- "KUBERNETES_MEMORY_REQUEST": "1Gi",
2990
- },
2991
- },
2992
- "worker 🔨 docker | stage ": {
2993
- "cache": [
2994
- {
2995
- "key": "api-yarn",
2996
- "paths": [
2997
- "api/.yarn",
2998
- ],
2999
- "policy": "pull",
3000
- },
3001
- ],
3002
- "image": "path/to/docker/docker-build:the-version",
3003
- "interruptible": true,
3004
- "needs": [
3005
- "worker 🔨 app | stage ",
3006
- ],
3007
- "retry": {
3008
- "max": 2,
3009
- "when": [
3010
- "runner_system_failure",
3011
- "stuck_or_timeout_failure",
3012
- ],
3013
- },
3014
- "script": [
3015
- "ensureNodeDockerfile",
3016
- "docker login --username gitlab-ci-token --password $CI_JOB_TOKEN $CI_REGISTRY",
3017
- "docker version",
3018
- "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",
3019
- "docker push $DOCKER_IMAGE:$DOCKER_IMAGE_TAG",
3020
- "docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG $DOCKER_CACHE_IMAGE",
3021
- "docker push $DOCKER_CACHE_IMAGE",
3022
- ],
3023
- "services": [
3024
- {
3025
- "command": [
3026
- "--tls=false",
3027
- ],
3028
- "name": "docker:20-dind",
3029
- },
3030
- ],
3031
- "stage": "build",
3032
- "variables": {
3033
- "APP_DIR": "api",
3034
- "DOCKERFILE_ADDITIONS": undefined,
3035
- "DOCKERFILE_ADDITIONS_END": undefined,
3036
- "DOCKER_BUILDKIT": "1",
3037
- "DOCKER_CACHE_IMAGE": "$DOCKER_REGISTRY_IMAGE_PATH/caches/worker",
3038
- "DOCKER_COPY_AND_INSTALL_APP": "COPY --chown=node:node $APP_DIR .
3039
- RUN yarn plugin import workspace-tools
3040
- RUN yarn workspaces focus --production && yarn rebuild",
3041
- "DOCKER_COPY_WORKSPACE_FILES": "COPY --chown=node:node api/package.json /app/api/package.json
3042
- COPY --chown=node:node api/yarn.lock /app/api/yarn.lock
3043
- COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
3044
- COPY --chown=node:node .yarn /app/.yarn",
3045
- "DOCKER_DIR": ".",
3046
- "DOCKER_DRIVER": "overlay2",
3047
- "DOCKER_HOST": "tcp://0.0.0.0:2375",
3048
- "DOCKER_IMAGE": "$DOCKER_REGISTRY_IMAGE_PATH/$DOCKER_IMAGE_NAME",
3049
- "DOCKER_IMAGE_NAME": "stage/worker",
3050
- "DOCKER_IMAGE_TAG": "$CI_COMMIT_SHA",
3051
- "DOCKER_REGISTRY": "$CI_REGISTRY",
3052
- "DOCKER_REGISTRY_IMAGE_PATH": "$CI_REGISTRY_IMAGE",
3053
- "DOCKER_TLS_CERTDIR": "",
3054
- "KUBERNETES_CPU_LIMIT": "1",
3055
- "KUBERNETES_CPU_REQUEST": "0.5",
3056
- "KUBERNETES_MEMORY_LIMIT": "2Gi",
3057
- "KUBERNETES_MEMORY_REQUEST": "1Gi",
3058
- },
3059
- },
3060
- "worker 🚀 Deploy | prod ": {
3061
- "allow_failure": true,
3062
- "artifacts": {
3063
- "paths": [
3064
- "____envvars.yaml",
3065
- ],
3066
- },
3067
- "environment": {
3068
- "auto_stop_in": undefined,
3069
- "name": "prod/worker",
3070
- "on_stop": "worker 🛑 Stop ⚠️ | prod ",
3071
- "url": "https://pan-test-app-prod-worker-unknown-host.example.com",
3072
- },
3073
- "image": "path/to/docker/gcloud:the-version",
3074
- "interruptible": true,
3075
- "needs": [
3076
- {
3077
- "artifacts": false,
3078
- "job": "worker 🔨 app | prod ",
3079
- },
3080
- {
3081
- "artifacts": false,
3082
- "job": "worker 🔨 docker | prod ",
3083
- },
3084
- {
3085
- "artifacts": true,
3086
- "job": "worker 🧾 sbom | prod ",
3087
- },
3088
- ],
3089
- "retry": {
3090
- "max": 2,
3091
- "when": [
3092
- "runner_system_failure",
3093
- "stuck_or_timeout_failure",
3094
- ],
3095
- },
3096
- "rules": [
3097
- {
3098
- "when": "manual",
3099
- },
3100
- ],
3101
- "script": [
3102
- "echo -e "\\e[0Ksection_start:$(date +%s):prepare[collapsed=true]\\r\\e[0KPrepare..."",
3103
- "echo $CL_prod_worker_GCLOUD_DEPLOY_credentialsKey > ./____keyfile.json
3104
- ",
3105
- "gcloud auth activate-service-account --key-file="./____keyfile.json"",
3106
- "export GCLOUD_PROJECT_NUMBER=$(gcloud projects describe google-project-id --format="value(projectNumber)")",
3107
- "echo "GCLOUD_PROJECT_NUMBER: $GCLOUD_PROJECT_NUMBER"",
3108
- "echo -e "\\e[0Ksection_end:$(date +%s):prepare\\r\\e[0K"",
3109
- "echo -e "\\e[0Ksection_start:$(date +%s):pushToArtifactRegistry[collapsed=true]\\r\\e[0KPushing image to artifacts registry"",
3110
- "docker login --username gitlab-ci-token --password $CI_JOB_TOKEN $CI_REGISTRY",
3111
- "gcloud auth configure-docker europe-west6-docker.pkg.dev",
3112
- "docker pull $DOCKER_IMAGE:$DOCKER_IMAGE_TAG",
3113
- "docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/prod/worker:$DOCKER_IMAGE_TAG",
3114
- "docker push europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/prod/worker:$DOCKER_IMAGE_TAG",
3115
- "echo -e "\\e[0Ksection_end:$(date +%s):pushToArtifactRegistry\\r\\e[0K"",
3116
- "echo -e "\\e[0Ksection_start:$(date +%s):deploy[collapsed=true]\\r\\e[0KDeploy to cloud run"",
3117
- "echo "$ENV_VARS" > ____envvars.yaml",
3118
- "set +e",
3119
- "echo "ensuring Database..."",
3120
- "gcloud sql databases create pan-test-app-prod-api --instance=instancename --project projectId",
3121
- "set -e",
3122
- "gcloud run deploy pan-test-app-prod-worker --command="yarn,start" --image=europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/prod/worker:$DOCKER_IMAGE_TAG --project=google-project-id --region=europe-west6 --set-cloudsql-instances=projectId:region:instancename --labels=customer-name=pan,component-name=worker,app-name=test-app,env-type=prod,env-name=prod,build-type=node --env-vars-file=____envvars.yaml --min-instances=0 --max-instances=100 --cpu-throttling --allow-unauthenticated --cpu-boost",
3123
- "echo -e "\\e[0Ksection_end:$(date +%s):deploy\\r\\e[0K"",
3124
- "docker image rm europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/prod/worker:$DOCKER_IMAGE_TAG",
3125
- "echo Uploading SBOM to Dependency Track",
3126
- "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/worker" "https://pan-test-app-prod-worker-unknown-host.example.com" "__sbom.json" vex.json || true",
3127
- ],
3128
- "services": [
3129
- {
3130
- "command": [
3131
- "--tls=false",
3132
- ],
3133
- "name": "docker:20-dind",
3134
- },
3135
- ],
3136
- "stage": "deploy prod",
3137
- "variables": {
3138
- "APP_DIR": "api",
3139
- "BUILD_INFO_BUILD_TIME": "01-01-2023 12:13:14",
3140
- "BUILD_INFO_CURRENT_VERSION": "3.2.1",
3141
- "BUILD_INFO_ID": "some-id",
3142
- "CLOUDSDK_CORE_DISABLE_PROMPTS": "1",
3143
- "CLOUD_SQL_INSTANCE_CONNECTION_NAME": "projectId:region:instancename",
3144
- "DATABASE_JDBC_URL": "jdbc:postgresql:///$DB_NAME?cloudSqlInstance=$CLOUD_SQL_INSTANCE_CONNECTION_NAME&socketFactory=com.google.cloud.sql.postgres.SocketFactory&user=$DB_USER&password=$DB_PASSWORD",
3145
- "DATABASE_URL": "postgresql://$DB_USER:$DB_PASSWORD@localhost/$DB_NAME?host=/cloudsql/$CLOUD_SQL_INSTANCE_CONNECTION_NAME",
3146
- "DB_NAME": "pan-test-app-prod-api",
3147
- "DB_PASSWORD": "$CL_prod_api_DB_PASSWORD",
3148
- "DB_USER": "my-user",
3149
- "DOCKER_BUILDKIT": "1",
3150
- "DOCKER_CACHE_IMAGE": "$DOCKER_REGISTRY_IMAGE_PATH/caches/worker",
3151
- "DOCKER_DRIVER": "overlay2",
3152
- "DOCKER_HOST": "tcp://0.0.0.0:2375",
3153
- "DOCKER_IMAGE": "$DOCKER_REGISTRY_IMAGE_PATH/$DOCKER_IMAGE_NAME",
3154
- "DOCKER_IMAGE_NAME": "prod/worker",
3155
- "DOCKER_IMAGE_TAG": "$CI_COMMIT_SHA",
3156
- "DOCKER_REGISTRY": "$CI_REGISTRY",
3157
- "DOCKER_REGISTRY_IMAGE_PATH": "$CI_REGISTRY_IMAGE",
3158
- "DOCKER_TLS_CERTDIR": "",
3159
- "ENV_SHORT": "prod",
3160
- "ENV_TYPE": "prod",
3161
- "ENV_VARS": "ENV_SHORT: 'prod'
3162
- APP_DIR: 'api'
3163
- ENV_TYPE: 'prod'
3164
- BUILD_INFO_ID: 'some-id'
3165
- BUILD_INFO_BUILD_TIME: '01-01-2023 12:13:14'
3166
- BUILD_INFO_CURRENT_VERSION: '3.2.1'
3167
- HOST: 'pan-test-app-prod-worker-unknown-host.example.com'
3168
- ROOT_URL: 'https://pan-test-app-prod-worker-unknown-host.example.com'
3169
- HOST_CANONICAL: 'pan-test-app-prod-worker-unknown-host.example.com'
3170
- CLOUD_SQL_INSTANCE_CONNECTION_NAME: 'projectId:region:instancename'
3171
- DB_NAME: 'pan-test-app-prod-api'
3172
- DB_USER: 'my-user'
3173
- DB_PASSWORD: '$CL_prod_api_DB_PASSWORD'
3174
- DATABASE_URL: 'postgresql://$DB_USER:$DB_PASSWORD@localhost/$DB_NAME?host=/cloudsql/$CLOUD_SQL_INSTANCE_CONNECTION_NAME'
3175
- DATABASE_JDBC_URL: 'jdbc:postgresql:///$DB_NAME?cloudSqlInstance=$CLOUD_SQL_INSTANCE_CONNECTION_NAME&socketFactory=com.google.cloud.sql.postgres.SocketFactory&user=$DB_USER&password=$DB_PASSWORD'
3176
- GCLOUD_RUN_canonicalHostSuffix: '$CL_prod_worker_GCLOUD_RUN_canonicalHostSuffix'
3177
- _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","HOST_CANONICAL","CLOUD_SQL_INSTANCE_CONNECTION_NAME","DB_NAME","DB_USER","DB_PASSWORD","DATABASE_URL","DATABASE_JDBC_URL","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]'
3178
- ",
3179
- "GCLOUD_DEPLOY_credentialsKey": "$CL_prod_worker_GCLOUD_DEPLOY_credentialsKey",
3180
- "GCLOUD_RUN_canonicalHostSuffix": "$CL_prod_worker_GCLOUD_RUN_canonicalHostSuffix",
3181
- "HOST": "pan-test-app-prod-worker-unknown-host.example.com",
3182
- "HOST_CANONICAL": "pan-test-app-prod-worker-unknown-host.example.com",
3183
- "KUBERNETES_CPU_LIMIT": "1",
3184
- "KUBERNETES_CPU_REQUEST": "0.5",
3185
- "KUBERNETES_MEMORY_LIMIT": "400Mi",
3186
- "KUBERNETES_MEMORY_REQUEST": "200Mi",
3187
- "ROOT_URL": "https://pan-test-app-prod-worker-unknown-host.example.com",
3188
- "_ALL_ENV_VAR_KEYS": "["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","HOST_CANONICAL","CLOUD_SQL_INSTANCE_CONNECTION_NAME","DB_NAME","DB_USER","DB_PASSWORD","DATABASE_URL","DATABASE_JDBC_URL","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]",
3189
- },
3190
- },
3191
- "worker 🚀 Deploy | stage ": {
3192
- "allow_failure": false,
3193
- "artifacts": {
3194
- "paths": [
3195
- "____envvars.yaml",
3196
- ],
3197
- },
3198
- "environment": {
3199
- "auto_stop_in": undefined,
3200
- "name": "stage/worker",
3201
- "on_stop": "worker 🛑 Stop ⚠️ | stage ",
3202
- "url": "https://pan-test-app-stage-worker-unknown-host.example.com",
3203
- },
3204
- "image": "path/to/docker/gcloud:the-version",
3205
- "interruptible": true,
3206
- "needs": [
3207
- {
3208
- "artifacts": false,
3209
- "job": "worker 🔨 app | stage ",
3210
- },
3211
- {
3212
- "artifacts": false,
3213
- "job": "worker 🔨 docker | stage ",
3214
- },
3215
- {
3216
- "artifacts": true,
3217
- "job": "worker 🧾 sbom | stage ",
3218
- },
3219
- ],
3220
- "retry": {
3221
- "max": 2,
3222
- "when": [
3223
- "runner_system_failure",
3224
- "stuck_or_timeout_failure",
3225
- ],
3226
- },
3227
- "rules": [
3228
- {
3229
- "when": "on_success",
3230
- },
3231
- ],
3232
- "script": [
3233
- "echo -e "\\e[0Ksection_start:$(date +%s):prepare[collapsed=true]\\r\\e[0KPrepare..."",
3234
- "echo $CL_stage_worker_GCLOUD_DEPLOY_credentialsKey > ./____keyfile.json
3235
- ",
3236
- "gcloud auth activate-service-account --key-file="./____keyfile.json"",
3237
- "export GCLOUD_PROJECT_NUMBER=$(gcloud projects describe google-project-id --format="value(projectNumber)")",
3238
- "echo "GCLOUD_PROJECT_NUMBER: $GCLOUD_PROJECT_NUMBER"",
3239
- "echo -e "\\e[0Ksection_end:$(date +%s):prepare\\r\\e[0K"",
3240
- "echo -e "\\e[0Ksection_start:$(date +%s):pushToArtifactRegistry[collapsed=true]\\r\\e[0KPushing image to artifacts registry"",
3241
- "docker login --username gitlab-ci-token --password $CI_JOB_TOKEN $CI_REGISTRY",
3242
- "gcloud auth configure-docker europe-west6-docker.pkg.dev",
3243
- "docker pull $DOCKER_IMAGE:$DOCKER_IMAGE_TAG",
3244
- "docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/stage/worker:$DOCKER_IMAGE_TAG",
3245
- "docker push europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/stage/worker:$DOCKER_IMAGE_TAG",
3246
- "echo -e "\\e[0Ksection_end:$(date +%s):pushToArtifactRegistry\\r\\e[0K"",
3247
- "echo -e "\\e[0Ksection_start:$(date +%s):deploy[collapsed=true]\\r\\e[0KDeploy to cloud run"",
3248
- "echo "$ENV_VARS" > ____envvars.yaml",
3249
- "set +e",
3250
- "echo "ensuring Database..."",
3251
- "gcloud sql databases create pan-test-app-stage-api --instance=instancename --project projectId",
3252
- "set -e",
3253
- "gcloud run deploy pan-test-app-stage-worker --command="yarn,start" --image=europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/stage/worker:$DOCKER_IMAGE_TAG --project=google-project-id --region=europe-west6 --set-cloudsql-instances=projectId:region:instancename --labels=customer-name=pan,component-name=worker,app-name=test-app,env-type=stage,env-name=stage,build-type=node --env-vars-file=____envvars.yaml --min-instances=0 --max-instances=100 --cpu-throttling --allow-unauthenticated --cpu-boost",
3254
- "echo -e "\\e[0Ksection_end:$(date +%s):deploy\\r\\e[0K"",
3255
- "docker image rm europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/stage/worker:$DOCKER_IMAGE_TAG",
3256
- "echo Uploading SBOM to Dependency Track",
3257
- "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/worker" "https://pan-test-app-stage-worker-unknown-host.example.com" "__sbom.json" vex.json || true",
3258
- ],
3259
- "services": [
3260
- {
3261
- "command": [
3262
- "--tls=false",
3263
- ],
3264
- "name": "docker:20-dind",
3265
- },
3266
- ],
3267
- "stage": "deploy stage",
3268
- "variables": {
3269
- "APP_DIR": "api",
3270
- "BUILD_INFO_BUILD_TIME": "01-01-2023 12:13:14",
3271
- "BUILD_INFO_CURRENT_VERSION": "3.2.1",
3272
- "BUILD_INFO_ID": "some-id",
3273
- "CLOUDSDK_CORE_DISABLE_PROMPTS": "1",
3274
- "CLOUD_SQL_INSTANCE_CONNECTION_NAME": "projectId:region:instancename",
3275
- "DATABASE_JDBC_URL": "jdbc:postgresql:///$DB_NAME?cloudSqlInstance=$CLOUD_SQL_INSTANCE_CONNECTION_NAME&socketFactory=com.google.cloud.sql.postgres.SocketFactory&user=$DB_USER&password=$DB_PASSWORD",
3276
- "DATABASE_URL": "postgresql://$DB_USER:$DB_PASSWORD@localhost/$DB_NAME?host=/cloudsql/$CLOUD_SQL_INSTANCE_CONNECTION_NAME",
3277
- "DB_NAME": "pan-test-app-stage-api",
3278
- "DB_PASSWORD": "$CL_stage_api_DB_PASSWORD",
3279
- "DB_USER": "my-user",
3280
- "DOCKER_BUILDKIT": "1",
3281
- "DOCKER_CACHE_IMAGE": "$DOCKER_REGISTRY_IMAGE_PATH/caches/worker",
3282
- "DOCKER_DRIVER": "overlay2",
3283
- "DOCKER_HOST": "tcp://0.0.0.0:2375",
3284
- "DOCKER_IMAGE": "$DOCKER_REGISTRY_IMAGE_PATH/$DOCKER_IMAGE_NAME",
3285
- "DOCKER_IMAGE_NAME": "stage/worker",
3286
- "DOCKER_IMAGE_TAG": "$CI_COMMIT_SHA",
3287
- "DOCKER_REGISTRY": "$CI_REGISTRY",
3288
- "DOCKER_REGISTRY_IMAGE_PATH": "$CI_REGISTRY_IMAGE",
3289
- "DOCKER_TLS_CERTDIR": "",
3290
- "ENV_SHORT": "stage",
3291
- "ENV_TYPE": "stage",
3292
- "ENV_VARS": "ENV_SHORT: 'stage'
3293
- APP_DIR: 'api'
3294
- ENV_TYPE: 'stage'
3295
- BUILD_INFO_ID: 'some-id'
3296
- BUILD_INFO_BUILD_TIME: '01-01-2023 12:13:14'
3297
- BUILD_INFO_CURRENT_VERSION: '3.2.1'
3298
- HOST: 'pan-test-app-stage-worker-unknown-host.example.com'
3299
- ROOT_URL: 'https://pan-test-app-stage-worker-unknown-host.example.com'
3300
- HOST_CANONICAL: 'pan-test-app-stage-worker-unknown-host.example.com'
3301
- CLOUD_SQL_INSTANCE_CONNECTION_NAME: 'projectId:region:instancename'
3302
- DB_NAME: 'pan-test-app-stage-api'
3303
- DB_USER: 'my-user'
3304
- DB_PASSWORD: '$CL_stage_api_DB_PASSWORD'
3305
- DATABASE_URL: 'postgresql://$DB_USER:$DB_PASSWORD@localhost/$DB_NAME?host=/cloudsql/$CLOUD_SQL_INSTANCE_CONNECTION_NAME'
3306
- DATABASE_JDBC_URL: 'jdbc:postgresql:///$DB_NAME?cloudSqlInstance=$CLOUD_SQL_INSTANCE_CONNECTION_NAME&socketFactory=com.google.cloud.sql.postgres.SocketFactory&user=$DB_USER&password=$DB_PASSWORD'
3307
- GCLOUD_RUN_canonicalHostSuffix: '$CL_stage_worker_GCLOUD_RUN_canonicalHostSuffix'
3308
- _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","HOST_CANONICAL","CLOUD_SQL_INSTANCE_CONNECTION_NAME","DB_NAME","DB_USER","DB_PASSWORD","DATABASE_URL","DATABASE_JDBC_URL","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]'
3309
- ",
3310
- "GCLOUD_DEPLOY_credentialsKey": "$CL_stage_worker_GCLOUD_DEPLOY_credentialsKey",
3311
- "GCLOUD_RUN_canonicalHostSuffix": "$CL_stage_worker_GCLOUD_RUN_canonicalHostSuffix",
3312
- "HOST": "pan-test-app-stage-worker-unknown-host.example.com",
3313
- "HOST_CANONICAL": "pan-test-app-stage-worker-unknown-host.example.com",
3314
- "KUBERNETES_CPU_LIMIT": "1",
3315
- "KUBERNETES_CPU_REQUEST": "0.5",
3316
- "KUBERNETES_MEMORY_LIMIT": "400Mi",
3317
- "KUBERNETES_MEMORY_REQUEST": "200Mi",
3318
- "ROOT_URL": "https://pan-test-app-stage-worker-unknown-host.example.com",
3319
- "_ALL_ENV_VAR_KEYS": "["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","HOST_CANONICAL","CLOUD_SQL_INSTANCE_CONNECTION_NAME","DB_NAME","DB_USER","DB_PASSWORD","DATABASE_URL","DATABASE_JDBC_URL","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]",
3320
- },
3321
- },
3322
- "worker 🛑 Stop ⚠️ | prod ": {
3323
- "environment": {
3324
- "action": "stop",
3325
- "name": "prod/worker",
3326
- "url": "https://pan-test-app-prod-worker-unknown-host.example.com",
3327
- },
3328
- "image": "path/to/docker/gcloud:the-version",
3329
- "interruptible": true,
3330
- "needs": [],
3331
- "retry": {
3332
- "max": 2,
3333
- "when": [
3334
- "runner_system_failure",
3335
- "stuck_or_timeout_failure",
3336
- ],
3337
- },
3338
- "rules": [
3339
- {
3340
- "allow_failure": true,
3341
- "if": "$CI_COMMIT_BRANCH =~ /^[0-9]+\\.([0-9]+|x)\\.x$/",
3342
- "when": "on_success",
3343
- },
3344
- {
3345
- "allow_failure": true,
3346
- "when": "manual",
3347
- },
3348
- ],
3349
- "script": [
3350
- "set +e",
3351
- "echo $CL_prod_worker_GCLOUD_DEPLOY_credentialsKey > ./____keyfile.json
3352
- ",
3353
- "gcloud auth activate-service-account --key-file="./____keyfile.json"",
3354
- "gcloud run services delete pan-test-app-prod-worker --project=google-project-id --region=europe-west6",
3355
- "echo Disabling component in Dependency Track",
3356
- "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" disable "pan-test-app/worker" "https://pan-test-app-prod-worker-unknown-host.example.com" || true",
3357
- "set -e",
3358
- ],
3359
- "stage": "stop prod",
3360
- "variables": {
3361
- "CLOUDSDK_CORE_DISABLE_PROMPTS": "1",
3362
- "GIT_STRATEGY": "none",
3363
- "KUBERNETES_CPU_LIMIT": "1",
3364
- "KUBERNETES_CPU_REQUEST": "0.5",
3365
- "KUBERNETES_MEMORY_LIMIT": "400Mi",
3366
- "KUBERNETES_MEMORY_REQUEST": "200Mi",
3367
- },
3368
- },
3369
- "worker 🛑 Stop ⚠️ | stage ": {
3370
- "environment": {
3371
- "action": "stop",
3372
- "name": "stage/worker",
3373
- "url": "https://pan-test-app-stage-worker-unknown-host.example.com",
3374
- },
3375
- "image": "path/to/docker/gcloud:the-version",
3376
- "interruptible": true,
3377
- "needs": [],
3378
- "retry": {
3379
- "max": 2,
3380
- "when": [
3381
- "runner_system_failure",
3382
- "stuck_or_timeout_failure",
3383
- ],
3384
- },
3385
- "rules": [
3386
- {
3387
- "allow_failure": true,
3388
- "if": "$CI_COMMIT_BRANCH =~ /^[0-9]+\\.([0-9]+|x)\\.x$/",
3389
- "when": "on_success",
3390
- },
3391
- {
3392
- "allow_failure": true,
3393
- "when": "manual",
3394
- },
3395
- ],
3396
- "script": [
3397
- "set +e",
3398
- "echo $CL_stage_worker_GCLOUD_DEPLOY_credentialsKey > ./____keyfile.json
3399
- ",
3400
- "gcloud auth activate-service-account --key-file="./____keyfile.json"",
3401
- "gcloud run services delete pan-test-app-stage-worker --project=google-project-id --region=europe-west6",
3402
- "echo Disabling component in Dependency Track",
3403
- "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" disable "pan-test-app/worker" "https://pan-test-app-stage-worker-unknown-host.example.com" || true",
3404
- "set -e",
3405
- ],
3406
- "stage": "stop stage",
3407
- "variables": {
3408
- "CLOUDSDK_CORE_DISABLE_PROMPTS": "1",
3409
- "GIT_STRATEGY": "none",
3410
- "KUBERNETES_CPU_LIMIT": "1",
3411
- "KUBERNETES_CPU_REQUEST": "0.5",
3412
- "KUBERNETES_MEMORY_LIMIT": "400Mi",
3413
- "KUBERNETES_MEMORY_REQUEST": "200Mi",
3414
- },
3415
- },
3416
- "worker 🧾 sbom | prod ": {
3417
- "allow_failure": true,
3418
- "artifacts": {
3419
- "paths": [
3420
- "__sbom.json",
3421
- ],
3422
- },
3423
- "image": "aquasec/trivy:0.38.3",
3424
- "interruptible": true,
3425
- "needs": [],
3426
- "retry": {
3427
- "max": 2,
3428
- "when": [
3429
- "runner_system_failure",
3430
- "stuck_or_timeout_failure",
3431
- ],
3432
- },
3433
- "script": [
3434
- "trivy fs --quiet --format cyclonedx --output "__sbom.json" api",
3435
- ],
3436
- "stage": "build",
3437
- "variables": {},
3438
- },
3439
- "worker 🧾 sbom | stage ": {
3440
- "allow_failure": true,
3441
- "artifacts": {
3442
- "paths": [
3443
- "__sbom.json",
3444
- ],
3445
- },
3446
- "image": "aquasec/trivy:0.38.3",
3447
- "interruptible": true,
3448
- "needs": [],
3449
- "retry": {
3450
- "max": 2,
3451
- "when": [
3452
- "runner_system_failure",
3453
- "stuck_or_timeout_failure",
3454
- ],
3455
- },
3456
- "script": [
3457
- "trivy fs --quiet --format cyclonedx --output "__sbom.json" api",
3458
- ],
3459
- "stage": "build",
3460
- "variables": {},
3461
- },
3462
- },
3463
- "stages": [
3464
- "setup",
3465
- "setup dev",
3466
- "setup review",
3467
- "setup stage",
3468
- "setup prod",
3469
- "setup local",
3470
- "test",
3471
- "test dev",
3472
- "test review",
3473
- "test stage",
3474
- "test prod",
3475
- "test local",
3476
- "build",
3477
- "build dev",
3478
- "build review",
3479
- "build stage",
3480
- "build prod",
3481
- "build local",
3482
- "deploy",
3483
- "deploy dev",
3484
- "deploy review",
3485
- "deploy stage",
3486
- "deploy prod",
3487
- "deploy local",
3488
- "verify",
3489
- "verify dev",
3490
- "verify review",
3491
- "verify stage",
3492
- "verify prod",
3493
- "verify local",
3494
- "rollback",
3495
- "rollback dev",
3496
- "rollback review",
3497
- "rollback stage",
3498
- "rollback prod",
3499
- "rollback local",
3500
- "stop",
3501
- "stop dev",
3502
- "stop review",
3503
- "stop stage",
3504
- "stop prod",
3505
- "stop local",
3506
- ],
3507
- "variables": {
3508
- "FF_USE_FASTZIP": "true",
3509
- },
3510
- "workflow": {
3511
- "rules": [
3512
- {
3513
- "if": "$CI_COMMIT_TAG",
3514
- },
3515
- {
3516
- "if": "$CI_COMMIT_MESSAGE =~ /^chore\\(release\\).*/",
3517
- "when": "never",
3518
- },
3519
- {
3520
- "if": "$CI_COMMIT_BRANCH =~ /^[0-9]+.([0-9]+|x).x$/",
3521
- },
3522
- {
3523
- "if": "$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH",
3524
- },
3525
- {
3526
- "if": "$CI_MERGE_REQUEST_ID",
3527
- },
3528
- ],
3529
- },
3530
- },
3531
- }
3532
- `;