@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,33 +0,0 @@
1
- import type { Config } from "../src";
2
- import { createAllPipelines } from "./__utils__/helpers";
3
- const config: Config = {
4
- appName: "test-app",
5
- customerName: "pan",
6
- components: {
7
- api: {
8
- dir: "api",
9
- build: {
10
- type: "node",
11
- },
12
- deploy: {
13
- type: "kubernetes",
14
- cluster: {
15
- name: "some-cluster-name",
16
- region: "europe-west6",
17
- projectId: "some-project-id",
18
- type: "gcloud",
19
- domainCanonical: "panter.cloud",
20
- },
21
- values: {
22
- cloudsql: {
23
- enabled: true,
24
- },
25
- },
26
- },
27
- },
28
- },
29
- };
30
-
31
- it("matches snapshot", async () => {
32
- expect(await createAllPipelines(config)).toMatchSnapshot();
33
- });
package/scripts/bundle DELETED
@@ -1,2 +0,0 @@
1
- #!/bin/bash
2
- ncc build dist/catladder-gitlab.js -o dist/bundles/catladder-gitlab -e 'ts-node' $( ((SHOULD_MINIFY == 1)) && printf %s '-m')
@@ -1,143 +0,0 @@
1
- import {
2
- resolveReferences,
3
- translateLegacyFromComponents,
4
- } from "../resolveReferences";
5
-
6
- describe("resolveReferences", () => {
7
- it("replaces occurences of ${componentName:VARIABLE_NAME}", async () => {
8
- const variables = {
9
- a: "hello world",
10
- b: "a replaced value looks like this: '${api:FOO}', nice!",
11
- };
12
- const otherVariables: Record<string, Record<string, string>> = {
13
- api: {
14
- FOO: "foo from api",
15
- },
16
- frontend: {
17
- FOO: "foo from frontend",
18
- },
19
- };
20
- const result = await resolveReferences(variables, async (componentName) => {
21
- return otherVariables[componentName];
22
- });
23
-
24
- expect(result).toEqual({
25
- a: "hello world",
26
- b: "a replaced value looks like this: 'foo from api', nice!",
27
- });
28
- });
29
-
30
- it("replaces self references with structure ${VARIABLE_NAME}", async () => {
31
- const variables = {
32
- FOO: "hello world",
33
- BAR: "this: ${FOO}!",
34
- };
35
- const result = await resolveReferences(variables);
36
-
37
- expect(result).toEqual({
38
- FOO: "hello world",
39
- BAR: "this: hello world!",
40
- });
41
- });
42
-
43
- it("replaces self references mixed with other vars", async () => {
44
- const variables = {
45
- FOO: "hello from ${api:FOO}",
46
- BAR: "this: ${FOO}!",
47
- };
48
- const otherVariables: Record<string, Record<string, string>> = {
49
- api: {
50
- FOO: "foo from api",
51
- },
52
- };
53
- const result = await resolveReferences(variables, async (componentName) => {
54
- return otherVariables[componentName];
55
- });
56
-
57
- expect(result).toEqual({
58
- FOO: "hello from foo from api",
59
- BAR: "this: hello from foo from api!",
60
- });
61
- });
62
-
63
- it("keeps variables as is if not found (when null is returned)", async () => {
64
- const variables = {
65
- a: "hello world",
66
- b: "a not found value looks like this: '${api:FOO}'",
67
- };
68
- const otherVariables: Record<string, Record<string, string>> = {};
69
- const result = await resolveReferences(variables, async (componentName) => {
70
- return otherVariables[componentName];
71
- });
72
-
73
- expect(result).toEqual({
74
- a: "hello world",
75
- b: "a not found value looks like this: '${api:FOO}'",
76
- });
77
- });
78
-
79
- it("replaces mulitple levels deep", async () => {
80
- const variables = {
81
- a: "value is ${frontend:FOO}!",
82
- };
83
- const otherVariables: Record<string, Record<string, string>> = {
84
- api: {
85
- FOO: "foo from api",
86
- },
87
- frontend: {
88
- FOO: "hi, ${api:FOO}",
89
- },
90
- };
91
- const result = await resolveReferences(variables, async (componentName) => {
92
- return otherVariables[componentName];
93
- });
94
-
95
- expect(result).toEqual({
96
- a: "value is hi, foo from api!",
97
- });
98
- });
99
-
100
- it("prevents endless loops", async () => {
101
- const variables = {
102
- a: "value is ${frontend:FOO}!",
103
- };
104
- const otherVariables: Record<string, Record<string, string>> = {
105
- api: {
106
- FOO: "api ${frontend:FOO}",
107
- },
108
- frontend: {
109
- FOO: "frontend ${api:FOO}",
110
- },
111
- };
112
- const result = await resolveReferences(variables, async (componentName) => {
113
- return otherVariables[componentName];
114
- });
115
-
116
- expect(result).toEqual({
117
- a: "value is frontend api ${frontend:FOO}!",
118
- });
119
- });
120
- });
121
-
122
- describe("translateLegacyFromComponents", () => {
123
- it("translatetes the old `fromComponents` approach to ${componentName:variableName}", () => {
124
- const fromComponents = {
125
- api: {
126
- API_FOO: "FOO",
127
- API_BAR: "BAR",
128
- },
129
- www: {
130
- WWW_X: "X",
131
- WWW_Y: "Y",
132
- },
133
- };
134
-
135
- const result = translateLegacyFromComponents(fromComponents);
136
- expect(result).toEqual({
137
- API_FOO: "${api:FOO}",
138
- API_BAR: "${api:BAR}",
139
- WWW_X: "${www:X}",
140
- WWW_Y: "${www:Y}",
141
- });
142
- });
143
- });
@@ -1,70 +0,0 @@
1
- import { merge } from "lodash";
2
- import replaceAsync from "string-replace-async";
3
-
4
- const REGEX = /\$\{(([^:]+):)?([^}]+)}/gm;
5
-
6
- export const resolveReferences = async (
7
- vars: Record<string, string>,
8
- getOtherVariables?: (
9
- componentName: string,
10
- alreadyVisited: Record<string, Record<string, boolean>>
11
- ) => Promise<Record<string, string | null>>,
12
- alreadyVisitedBase: Record<string, Record<string, boolean>> = {}
13
- ) => {
14
- const replaceSingleValue = async (
15
- value: string,
16
- alreadyVisited: Record<string, Record<string, boolean>> = alreadyVisitedBase
17
- ): Promise<string> => {
18
- if (REGEX.test(value)) {
19
- return await replaceAsync(
20
- value,
21
- REGEX,
22
- async (match, _, componentName, variableName) => {
23
- if (alreadyVisited[componentName]?.[variableName]) {
24
- return match; // prevent endless loop
25
- }
26
- const newAlreadyVisited = merge({}, alreadyVisited, {
27
- [componentName]: {
28
- [variableName]: true,
29
- },
30
- });
31
- const result = componentName
32
- ? (await getOtherVariables?.(componentName, newAlreadyVisited).then(
33
- (r) => r?.[variableName]
34
- )) ?? null
35
- : vars[variableName]; // is self reference
36
-
37
- const replaced =
38
- result !== null && result !== undefined
39
- ? await replaceSingleValue(result, newAlreadyVisited)
40
- : match;
41
-
42
- return replaced;
43
- }
44
- );
45
- } else {
46
- return value;
47
- }
48
- };
49
-
50
- return Object.fromEntries(
51
- await Promise.all(
52
- Object.entries(vars).map(async ([key, value]) => {
53
- return [key, await replaceSingleValue(value)];
54
- })
55
- )
56
- ) as Record<string, string>;
57
- };
58
-
59
- export const translateLegacyFromComponents = (
60
- fromComponents: Record<string, Record<string, string>>
61
- ) => {
62
- return Object.fromEntries(
63
- Object.entries(fromComponents).flatMap(([componentName, variables]) => {
64
- return Object.entries(variables).map(([ourName, otherName]) => [
65
- ourName,
66
- "${" + componentName + ":" + otherName + "}",
67
- ]);
68
- })
69
- );
70
- };
@@ -1,301 +0,0 @@
1
- import { dump } from "js-yaml";
2
- import { merge, omit } from "lodash";
3
- import { GCLOUD_DEPLOY_CREDENTIALS_KEY } from ".";
4
- import { getDockerJobBaseProps, gitlabDockerLogin } from "../../build/docker";
5
- import { getLabels } from "../../context/getLabels";
6
- import { getRunnerImage } from "../../runner";
7
- import type { Context } from "../../types/context";
8
- import type { CatladderJob } from "../../types/jobs";
9
- import { allowFailureInScripts, collapseableSection } from "../../utils/gitlab";
10
- import { createDeployementJobs } from "../base";
11
- import {
12
- getDependencyTrackDeleteScript,
13
- getDependencyTrackUploadScript,
14
- } from "../sbom";
15
- import type {
16
- DeployConfigCloudRun,
17
- DeployConfigCloudRunJob,
18
- DeployConfigCloudRunJobWithSchedule,
19
- DeployConfigCloudRunService,
20
- } from "../types";
21
- import { isOfDeployType } from "../types";
22
- import { createArgsString } from "./utils/createArgsString";
23
- import {
24
- getDatabaseCreateScript,
25
- getDatabaseDeleteScript,
26
- } from "./utils/database";
27
- import { gcloudServiceAccountLoginCommands } from "./utils/gcloudServiceAccountLoginCommands";
28
- import { getCloudRunJobName } from "./utils/jobName";
29
-
30
- const setExtraVarsScripts = (deployConfig: DeployConfigCloudRun) => [
31
- `export GCLOUD_PROJECT_NUMBER=$(gcloud projects describe ${deployConfig.projectId} --format="value(projectNumber)")`,
32
- `echo "GCLOUD_PROJECT_NUMBER: $GCLOUD_PROJECT_NUMBER"`,
33
- ];
34
-
35
- export const createGoogleCloudRunDeployJobs = (
36
- context: Context
37
- ): CatladderJob[] => {
38
- const deployConfig = context.componentConfig.deploy;
39
- if (deployConfig === false) {
40
- return [];
41
- }
42
- if (!isOfDeployType(deployConfig, "google-cloudrun")) {
43
- // should not happen
44
- throw new Error("deploy config is wrong");
45
- }
46
-
47
- const fullAppName = `${context.fullConfig.customerName}-${context.fullConfig.appName}`;
48
- const dockerUrl = `${deployConfig.region}-docker.pkg.dev/${deployConfig.projectId}/catladder-deploy/${fullAppName}`;
49
- const gcloudImagePath = [
50
- dockerUrl,
51
- context.environment.shortName,
52
- context.componentName,
53
-
54
- ...(context.environment.envType === "review"
55
- ? [context.commitInfo?.reviewSlug]
56
- : []),
57
- ];
58
- const gcloudImageName = `${gcloudImagePath.join("/")}:$DOCKER_IMAGE_TAG`;
59
-
60
- const pushImageToArtifactsRegistry = [
61
- gitlabDockerLogin,
62
- `gcloud auth configure-docker ${deployConfig.region}-docker.pkg.dev`,
63
- `docker pull $DOCKER_IMAGE:$DOCKER_IMAGE_TAG`,
64
- `docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG ${gcloudImageName}`,
65
- `docker push ${gcloudImageName}`,
66
- ];
67
- const allEnvVars = omit(
68
- context.environment.envVars,
69
- GCLOUD_DEPLOY_CREDENTIALS_KEY
70
- );
71
-
72
- const labelsString = Object.entries(getLabels(context))
73
- .map(([key, value]) => `${key}=${value}`)
74
- .join(",");
75
-
76
- const commonArgs = {
77
- project: deployConfig.projectId,
78
- region: deployConfig.region,
79
- };
80
-
81
- const commonDeployArgs = {
82
- image: gcloudImageName,
83
- ...commonArgs,
84
- "set-cloudsql-instances": deployConfig.cloudSql
85
- ? deployConfig.cloudSql.instanceConnectionName
86
- : undefined,
87
- labels: labelsString,
88
- };
89
-
90
- const serviceName = context.environment.fullName.toLowerCase();
91
-
92
- const getFullJobName = (name: string) =>
93
- getCloudRunJobName(context.environment.fullName, name);
94
-
95
- const jobsWithNames = Object.entries(deployConfig.jobs ?? {})
96
- // filter out disabled jobs
97
- .filter((entry): entry is [string, DeployConfigCloudRunJob] =>
98
- Boolean(entry[1])
99
- )
100
- .map(([name, job]) => ({
101
- jobName: getFullJobName(name),
102
- job,
103
- }));
104
- const jobsWithSchedule = jobsWithNames
105
- .filter(
106
- (
107
- entry
108
- ): entry is {
109
- jobName: string;
110
- job: DeployConfigCloudRunJobWithSchedule;
111
- } => entry.job.when === "schedule"
112
- )
113
- .map(({ job, jobName }) => ({
114
- job,
115
- jobName,
116
- schedulerName: jobName + "-scheduler",
117
- }));
118
-
119
- const getServiceDeployScript = (
120
- service: DeployConfigCloudRunService | true | undefined,
121
- nameSuffix?: string
122
- ) => {
123
- const customConfig = service !== true ? service : undefined;
124
- const command =
125
- service !== true
126
- ? service?.command ?? context.componentConfig.build.startCommand
127
- : undefined;
128
-
129
- const argsString = createArgsString({
130
- // command as empty string resets it to default (uses the image's entrypoint)
131
- command: command ? '"' + command.split(" ").join(",") + '"' : '""',
132
- ...commonDeployArgs,
133
- "env-vars-file": "____envvars.yaml",
134
- "min-instances": customConfig?.minInstances ?? 0,
135
- "max-instances": customConfig?.maxInstances ?? 100,
136
- "cpu-throttling": customConfig?.noCpuThrottling !== true,
137
- memory: customConfig?.memory,
138
- "allow-unauthenticated": customConfig?.allowUnauthenticated ?? true,
139
- "cpu-boost": true,
140
- });
141
-
142
- return `gcloud run deploy ${serviceName}${nameSuffix ?? ""} ${argsString}`;
143
- };
144
-
145
- const getJobCreateScriptsForJob = (
146
- jobName: string,
147
- job: DeployConfigCloudRunJob
148
- ) => {
149
- // due to some oversight from google, jobs create does not accept `--env-vars-file` 🤦
150
- // lucky, update on the other hand accepts it... so let's just imediatly update it
151
-
152
- // also we cannot upsert a job, so we have to create it and catch the error and then update
153
- const commonDeployArgsString = createArgsString({
154
- command: '"' + job.command.split(" ").join(",") + '"',
155
- ...commonDeployArgs,
156
- memory: job.memory || "512Mi",
157
- "task-timeout": job.timeout || "10m",
158
- });
159
-
160
- const argsString = `${jobName} ${commonDeployArgsString}`;
161
- return [
162
- ...allowFailureInScripts([`gcloud beta run jobs create ${argsString}`]),
163
- `gcloud beta run jobs update ${argsString} --env-vars-file=____envvars.yaml`,
164
- ];
165
- };
166
-
167
- const commonArgsString = createArgsString(commonArgs);
168
-
169
- const getJobCreateScripts = () =>
170
- jobsWithNames
171
- .map(({ job, jobName }) => getJobCreateScriptsForJob(jobName, job))
172
- .flat();
173
-
174
- const getJobRunScriptForJob = (jobName: string) => {
175
- return `gcloud beta run jobs execute ${jobName} ${commonArgsString}`;
176
- };
177
-
178
- const getJobRunScripts = (when: DeployConfigCloudRunJob["when"]) =>
179
- jobsWithNames
180
- .filter(({ job }) => job.when === when)
181
- .map(({ jobName }) => getJobRunScriptForJob(jobName));
182
-
183
- const getCreateScheduleScripts = () => {
184
- return jobsWithSchedule
185
- .map(({ job, jobName, schedulerName }) => {
186
- const argsString = createArgsString({
187
- project: deployConfig.projectId,
188
- location: deployConfig.region,
189
- schedule: `"${job.schedule}"`,
190
- "max-retry-attempts": job.maxRetryAttempts ?? 0,
191
-
192
- uri: `"https://${deployConfig.region}-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/${deployConfig.projectId}/jobs/${jobName}:run"`,
193
- "http-method": "POST",
194
- "oauth-service-account-email":
195
- "$GCLOUD_PROJECT_NUMBER-compute@developer.gserviceaccount.com",
196
- });
197
- const commonArgs = `http ${schedulerName} ${argsString}`;
198
- return [
199
- ...allowFailureInScripts([
200
- `gcloud scheduler jobs create ${commonArgs}`,
201
- ]),
202
- `gcloud scheduler jobs update ${commonArgs}`,
203
- ];
204
- })
205
- .flat();
206
- };
207
-
208
- const getDeleteSchedulesScripts = () => {
209
- const argsString = createArgsString({
210
- project: deployConfig.projectId,
211
- location: deployConfig.region,
212
- });
213
- return jobsWithSchedule
214
- .map(({ schedulerName }) => {
215
- return [`gcloud scheduler jobs delete ${schedulerName} ${argsString}`];
216
- })
217
- .flat();
218
- };
219
-
220
- const getDeleteJobsScripts = () =>
221
- jobsWithNames.flatMap(({ jobName }) => [
222
- // first delete all job executions. Otherwise delete might fail if one of those is still running
223
- `gcloud beta run jobs executions list ${commonArgsString} --job ${jobName} --format="value(name)" | xargs -I {} gcloud beta run jobs executions delete {} --quiet ${commonArgsString}`,
224
- `gcloud beta run jobs delete ${jobName} ${commonArgsString}`,
225
- ]);
226
-
227
- const deployScripts = [
228
- ...collapseableSection(
229
- "prepare",
230
- "Prepare..."
231
- )([
232
- ...gcloudServiceAccountLoginCommands(context),
233
- ...setExtraVarsScripts(deployConfig),
234
- ]),
235
- ...collapseableSection(
236
- "pushToArtifactRegistry",
237
- "Pushing image to artifacts registry"
238
- )(pushImageToArtifactsRegistry),
239
- ...collapseableSection(
240
- "deploy",
241
- "Deploy to cloud run"
242
- )([
243
- `echo "$ENV_VARS" > ____envvars.yaml`, // TODO: split secrets out
244
- ...(deployConfig.cloudSql
245
- ? getDatabaseCreateScript(context, deployConfig) // we create the db, so that we can also delete it afterwards
246
- : []),
247
- ...getCreateScheduleScripts(),
248
- ...getJobCreateScripts(),
249
- ...getJobRunScripts("preDeploy"),
250
-
251
- ...(deployConfig.service !== false
252
- ? [getServiceDeployScript(deployConfig.service)]
253
- : []),
254
- ...Object.entries(deployConfig.additionalServices ?? {}).map(
255
- ([name, service]) => getServiceDeployScript(service, "-" + name)
256
- ),
257
- ...getJobRunScripts("postDeploy"),
258
- ]),
259
- `docker image rm ${gcloudImageName}`,
260
- ...getDependencyTrackUploadScript(context),
261
- ];
262
-
263
- const stopScripts = [
264
- ...gcloudServiceAccountLoginCommands(context),
265
- ...(deployConfig.service !== false
266
- ? [`gcloud run services delete ${serviceName} ${commonArgsString}`]
267
- : []),
268
- ...Object.entries(deployConfig.additionalServices ?? {}).map(
269
- ([name]) =>
270
- `gcloud run services delete ${serviceName}-${name} ${commonArgsString}`
271
- ),
272
- ...getDeleteSchedulesScripts(),
273
- ...getDeleteJobsScripts(),
274
- ...(deployConfig.cloudSql && deployConfig.cloudSql.deleteDatabaseOnStop
275
- ? getDatabaseDeleteScript(context, deployConfig)
276
- : []),
277
- ...getDependencyTrackDeleteScript(context),
278
- ];
279
- return createDeployementJobs(context, {
280
- deploy: merge(getDockerJobBaseProps(context), {
281
- artifacts: { paths: ["____envvars.yaml"] },
282
- variables: {
283
- CLOUDSDK_CORE_DISABLE_PROMPTS: "1",
284
- ENV_VARS: dump(allEnvVars, {
285
- lineWidth: -1,
286
- quotingType: "'",
287
- forceQuotes: true,
288
- }),
289
- },
290
- image: getRunnerImage("gcloud"),
291
- script: deployScripts,
292
- }),
293
- stop: {
294
- image: getRunnerImage("gcloud"),
295
- variables: {
296
- CLOUDSDK_CORE_DISABLE_PROMPTS: "1",
297
- },
298
- script: allowFailureInScripts(stopScripts),
299
- },
300
- });
301
- };
@@ -1,34 +0,0 @@
1
- import { omit } from "lodash";
2
- import type { DeployConfigKubernetesValues } from "../types";
3
-
4
- export const processSecretsAsFiles = <
5
- T extends {
6
- env: {
7
- secret: Record<string, string>;
8
- };
9
- } & DeployConfigKubernetesValues
10
- >(
11
- values: T
12
- ): T => {
13
- if (!values.secretsAsFile || values.secretsAsFile.length === 0) {
14
- return values;
15
- }
16
- // the initial idea was that we "shadow" secrets that we mount as files,
17
- // but there is a weird kubernetes issue with that (https://github.com/kubernetes/kubernetes/issues/46861),
18
- // so instead we rename the secrets and append _content, so that inside kuberentes, we can use the original name to contain the path and name+_content as the actual content
19
- return {
20
- ...values,
21
- env: {
22
- ...values.env,
23
- secret: {
24
- ...omit(values.env.secret, values.secretsAsFile),
25
- ...Object.fromEntries(
26
- values.secretsAsFile.map((key) => [
27
- key + "_content",
28
- values.env.secret[key],
29
- ])
30
- ),
31
- },
32
- },
33
- };
34
- };
@@ -1,17 +0,0 @@
1
- import { exec } from "child-process-promise";
2
-
3
- export const getBuildId = async () =>
4
- await exec("git describe --tags || git rev-parse HEAD").then((s) =>
5
- s.stdout.trim()
6
- );
7
-
8
- // thx chat gpt
9
- /**
10
- * returns the last tagged version string Major.minor.patch
11
- * returns 0.0.0 if there is no tag
12
- */
13
- export const getCurrentVersionString = async () => {
14
- return await exec(
15
- 'latest_tag=$(git describe --tags --abbrev=0 2>/dev/null); if [ -z "$latest_tag" ]; then echo "0.0.0"; else echo "${latest_tag#v}"; fi | cut -d "." -f 1-3'
16
- ).then((s) => s.stdout.trim());
17
- };
@@ -1,15 +0,0 @@
1
- import type { CommitInfo } from "../../types";
2
- import { getBuildId, getCurrentVersionString } from "./getBuildId";
3
- export const getBaseCommitInfo = async (): Promise<
4
- Omit<CommitInfo, "trigger">
5
- > => ({
6
- refName: process.env.CI_COMMIT_REF_NAME ?? "unknown",
7
- reviewSlug: process.env.CI_MERGE_REQUEST_IID
8
- ? `mr${process.env.CI_MERGE_REQUEST_IID}`
9
- : process.env.CI_COMMIT_REF_SLUG
10
- ? `hf${process.env.CI_COMMIT_REF_SLUG}`
11
- : "unknown",
12
- buildTime: new Date().toISOString(),
13
- buildId: await getBuildId(),
14
- currentVersion: await getCurrentVersionString(),
15
- });
@@ -1,45 +0,0 @@
1
- import { getAllEnvsInAllComponents } from "../config";
2
- import { RULES_ALWAYS } from "../rules";
3
- import { getRunnerImage } from "../runner";
4
- import type { GitlabPipeline, Pipeline, PipelineType } from "../types";
5
- import type { Config, PipelineTrigger } from "../types/config";
6
- import { BASE_STAGES } from "../types/jobs";
7
- import { createAllJobs } from "./createAllJobs";
8
- import { createGitlabJobs } from "./gitlab/createGitlabJobs";
9
-
10
- export const createChildPipeline = async <T extends PipelineType>(
11
- type: T,
12
- trigger: PipelineTrigger,
13
- config: Config
14
- ): Promise<Pipeline<T>> => {
15
- const jobs = await createAllJobs(config, trigger);
16
-
17
- // while technically not required, we group different envs in its own stage
18
- // each job from `createJobs` that is defined as `envMode: "stagePerEnv"` will have `deploy dev`, etc. instead of just `deploy`
19
- // this is just so that it looks nicer in gitlab and makes running mutliple manual tasks more easy to use
20
-
21
- const allEnvs = getAllEnvsInAllComponents(config);
22
- const stages = BASE_STAGES.reduce<string[]>(
23
- (acc, baseStage) => [
24
- ...acc,
25
- baseStage,
26
- ...allEnvs.map((e) => `${baseStage} ${e}`),
27
- ],
28
- []
29
- );
30
- if (type === "gitlab") {
31
- const pipeline: GitlabPipeline = {
32
- image: getRunnerImage("jobs-default"), // default image
33
- variables: {
34
- FF_USE_FASTZIP: "true",
35
- },
36
- workflow: {
37
- rules: RULES_ALWAYS,
38
- },
39
- stages,
40
- jobs: await createGitlabJobs(jobs),
41
- };
42
- return pipeline as Pipeline<T>;
43
- }
44
- throw new Error(`${type} is not supported`);
45
- };