@catladder/pipeline 0.0.0-node16-ddfae617 → 0.0.0-perf-cli-reduce-bundle-size-with-tsconfig-optimization-3556aaa4

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 (543) hide show
  1. package/README.md +17 -0
  2. package/bin/catladder-gitlab-dev.js +3 -0
  3. package/bin/catladder-gitlab.js +1 -1
  4. package/dist/bash/BashExpression.d.ts +40 -0
  5. package/dist/bash/BashExpression.js +124 -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 +46 -0
  10. package/dist/bash/getInjectVarsScript.d.ts +2 -0
  11. package/dist/bash/getInjectVarsScript.js +45 -0
  12. package/dist/bash/replaceAsync.d.ts +2 -0
  13. package/dist/bash/replaceAsync.js +171 -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 +42 -0
  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 +9 -0
  20. package/dist/build/base/createAppBuildJob.js +87 -0
  21. package/dist/build/base/createArtifactsConfig.d.ts +4 -0
  22. package/dist/build/base/createArtifactsConfig.js +65 -0
  23. package/dist/build/base/index.d.ts +12 -0
  24. package/dist/build/base/index.js +68 -0
  25. package/dist/build/base/writeBuildInfo.d.ts +2 -0
  26. package/dist/build/base/writeBuildInfo.js +10 -0
  27. package/dist/build/base/writeDotEnv.d.ts +8 -0
  28. package/dist/build/base/writeDotEnv.js +66 -0
  29. package/dist/build/custom/__tests__/testJob.test.js +36 -0
  30. package/dist/build/custom/buildJob.d.ts +3 -0
  31. package/dist/build/custom/buildJob.js +67 -0
  32. package/dist/build/custom/index.d.ts +3 -0
  33. package/dist/build/custom/index.js +43 -0
  34. package/dist/build/custom/testJob.d.ts +7 -0
  35. package/dist/build/custom/testJob.js +100 -0
  36. package/dist/build/docker.d.ts +61 -22
  37. package/dist/build/docker.js +110 -73
  38. package/dist/build/index.d.ts +16 -8
  39. package/dist/build/index.js +61 -19
  40. package/dist/build/node/buildJob.d.ts +8 -3
  41. package/dist/build/node/buildJob.js +48 -68
  42. package/dist/build/node/cache.d.ts +4 -3
  43. package/dist/build/node/cache.js +45 -32
  44. package/dist/build/node/constants.d.ts +0 -1
  45. package/dist/build/node/constants.js +5 -4
  46. package/dist/build/node/index.d.ts +5 -5
  47. package/dist/build/node/index.js +6 -17
  48. package/dist/build/node/meteor.d.ts +3 -3
  49. package/dist/build/node/meteor.js +26 -37
  50. package/dist/build/node/testJob.d.ts +4 -3
  51. package/dist/build/node/testJob.js +35 -36
  52. package/dist/build/node/yarn.d.ts +6 -6
  53. package/dist/build/node/yarn.js +40 -25
  54. package/dist/build/rails/build.d.ts +3 -0
  55. package/dist/build/rails/build.js +90 -0
  56. package/dist/build/rails/index.d.ts +3 -0
  57. package/dist/build/rails/index.js +43 -0
  58. package/dist/build/rails/test.d.ts +3 -0
  59. package/dist/build/rails/test.js +103 -0
  60. package/dist/build/sbom.d.ts +5 -0
  61. package/dist/build/sbom.js +32 -0
  62. package/dist/build/types.d.ts +251 -33
  63. package/dist/build/types.js +10 -6
  64. package/dist/bundles/catladder-gitlab/index.js +41626 -0
  65. package/dist/catladder-gitlab.js +130 -68
  66. package/dist/config/{configruedEnvs.test.js → __tests__/configruedEnvs.test.js} +13 -13
  67. package/dist/config/__tests__/getAllEnvs.test.js +79 -0
  68. package/dist/config/__tests__/getAllEnvsInAllComponents.test.d.ts +1 -0
  69. package/dist/config/__tests__/getAllEnvsInAllComponents.test.js +73 -0
  70. package/dist/config/configruedEnvs.d.ts +1 -1
  71. package/dist/config/configruedEnvs.js +10 -23
  72. package/dist/config/index.js +13 -11
  73. package/dist/config/readConfig.d.ts +3 -3
  74. package/dist/config/readConfig.js +193 -52
  75. package/dist/constants.js +5 -3
  76. package/dist/context/__tests__/resolveReferences.test.d.ts +1 -0
  77. package/dist/context/__tests__/resolveReferences.test.js +368 -0
  78. package/dist/context/createAllComponentsContext.d.ts +12 -0
  79. package/dist/context/createAllComponentsContext.js +159 -0
  80. package/dist/context/createComponentContext.d.ts +11 -0
  81. package/dist/context/createComponentContext.js +256 -0
  82. package/dist/context/createWorkspaceContext.d.ts +16 -0
  83. package/dist/context/createWorkspaceContext.js +173 -0
  84. package/dist/context/getBuildInfoVariables.d.ts +6 -0
  85. package/dist/context/getBuildInfoVariables.js +55 -0
  86. package/dist/context/getEnvConfig.d.ts +2 -0
  87. package/dist/context/getEnvConfig.js +20 -0
  88. package/dist/context/getEnvType.d.ts +4 -0
  89. package/dist/context/getEnvType.js +15 -0
  90. package/dist/context/getEnvironment.d.ts +3 -0
  91. package/dist/{pipeline/createChildPipeline.test.js → context/getEnvironment.js} +50 -86
  92. package/dist/context/getEnvironmentContext.d.ts +8 -0
  93. package/dist/context/getEnvironmentContext.js +43 -0
  94. package/dist/context/getEnvironmentVariables.d.ts +27 -0
  95. package/dist/context/getEnvironmentVariables.js +285 -0
  96. package/dist/context/getLabels.d.ts +9 -0
  97. package/dist/context/getLabels.js +41 -0
  98. package/dist/context/getReviewSlug.d.ts +4 -0
  99. package/dist/context/getReviewSlug.js +22 -0
  100. package/dist/context/index.d.ts +3 -6
  101. package/dist/context/index.js +22 -219
  102. package/dist/context/resolveReferences.d.ts +3 -3
  103. package/dist/context/resolveReferences.js +248 -55
  104. package/dist/context/transformJobOnlyVars.d.ts +13 -0
  105. package/dist/{build/tests/storybook.test.js → context/transformJobOnlyVars.js} +54 -106
  106. package/dist/context/utils/envVars.d.ts +8 -0
  107. package/dist/context/utils/envVars.js +55 -0
  108. package/dist/defaults/index.d.ts +1 -1
  109. package/dist/defaults/index.js +3 -1
  110. package/dist/deploy/base/deploy.d.ts +5 -0
  111. package/dist/deploy/base/deploy.js +121 -0
  112. package/dist/deploy/base/index.d.ts +10 -0
  113. package/dist/deploy/base/index.js +44 -0
  114. package/dist/deploy/base/rollback.d.ts +5 -0
  115. package/dist/deploy/base/rollback.js +41 -0
  116. package/dist/deploy/base/stop.d.ts +5 -0
  117. package/dist/deploy/base/stop.js +46 -0
  118. package/dist/deploy/base/types.d.ts +2 -0
  119. package/dist/deploy/base/types.js +5 -0
  120. package/dist/deploy/base/variables.d.ts +5 -0
  121. package/dist/deploy/base/variables.js +11 -0
  122. package/dist/deploy/cloudRun/artifactsRegistry.d.ts +19 -0
  123. package/dist/deploy/cloudRun/artifactsRegistry.js +125 -0
  124. package/dist/deploy/cloudRun/cleanup.d.ts +2 -0
  125. package/dist/deploy/cloudRun/cleanup.js +53 -0
  126. package/dist/deploy/cloudRun/cloudRunRevisions.d.ts +2 -0
  127. package/dist/deploy/cloudRun/cloudRunRevisions.js +62 -0
  128. package/dist/deploy/cloudRun/createJobs/cloudRunJobs.d.ts +7 -0
  129. package/dist/deploy/cloudRun/createJobs/cloudRunJobs.js +187 -0
  130. package/dist/deploy/cloudRun/createJobs/cloudRunServices.d.ts +4 -0
  131. package/dist/deploy/cloudRun/createJobs/cloudRunServices.js +93 -0
  132. package/dist/deploy/cloudRun/createJobs/common.d.ts +18 -0
  133. package/dist/deploy/cloudRun/createJobs/common.js +93 -0
  134. package/dist/deploy/cloudRun/createJobs/constants.d.ts +1 -0
  135. package/dist/deploy/cloudRun/createJobs/constants.js +7 -0
  136. package/dist/deploy/cloudRun/createJobs/getCloudRunDeployScripts.d.ts +2 -0
  137. package/dist/deploy/cloudRun/createJobs/getCloudRunDeployScripts.js +62 -0
  138. package/dist/deploy/cloudRun/createJobs/getCloudRunStopScripts.d.ts +2 -0
  139. package/dist/deploy/cloudRun/createJobs/getCloudRunStopScripts.js +54 -0
  140. package/dist/deploy/cloudRun/createJobs/index.d.ts +3 -0
  141. package/dist/deploy/cloudRun/createJobs/index.js +58 -0
  142. package/dist/deploy/cloudRun/createJobs/volumes.d.ts +3 -0
  143. package/dist/deploy/cloudRun/createJobs/volumes.js +58 -0
  144. package/dist/deploy/cloudRun/index.d.ts +4 -0
  145. package/dist/deploy/cloudRun/index.js +128 -0
  146. package/dist/deploy/cloudRun/utils/createArgsString.d.ts +13 -0
  147. package/dist/deploy/cloudRun/utils/createArgsString.js +63 -0
  148. package/dist/deploy/cloudRun/utils/database.d.ts +6 -0
  149. package/dist/deploy/cloudRun/utils/database.js +77 -0
  150. package/dist/deploy/cloudRun/utils/gcloudServiceAccountLoginCommands.d.ts +2 -0
  151. package/dist/deploy/cloudRun/utils/gcloudServiceAccountLoginCommands.js +12 -0
  152. package/dist/deploy/cloudRun/utils/getServiceName.d.ts +2 -0
  153. package/dist/deploy/cloudRun/utils/getServiceName.js +10 -0
  154. package/dist/deploy/cloudRun/utils/jobName.d.ts +2 -0
  155. package/dist/deploy/cloudRun/utils/jobName.js +10 -0
  156. package/dist/deploy/cloudRun/utils/removeFirstLinesFromCommandOutput.d.ts +9 -0
  157. package/dist/deploy/cloudRun/utils/removeFirstLinesFromCommandOutput.js +18 -0
  158. package/dist/deploy/cloudSql/utils.d.ts +4 -0
  159. package/dist/deploy/cloudSql/utils.js +14 -0
  160. package/dist/deploy/custom/deployJob.d.ts +3 -3
  161. package/dist/deploy/custom/deployJob.js +28 -25
  162. package/dist/deploy/custom/index.d.ts +2 -1
  163. package/dist/deploy/custom/index.js +16 -19
  164. package/dist/deploy/dockerTag/deployJob.d.ts +3 -0
  165. package/dist/deploy/dockerTag/deployJob.js +65 -0
  166. package/dist/deploy/dockerTag/index.d.ts +2 -0
  167. package/dist/deploy/dockerTag/index.js +19 -0
  168. package/dist/deploy/index.d.ts +15 -9
  169. package/dist/deploy/index.js +20 -27
  170. package/dist/deploy/kubernetes/additionalSecretKeys.d.ts +8 -0
  171. package/dist/deploy/kubernetes/additionalSecretKeys.js +30 -0
  172. package/dist/deploy/kubernetes/cloudSql/index.d.ts +14 -0
  173. package/dist/deploy/kubernetes/cloudSql/index.js +55 -0
  174. package/dist/deploy/kubernetes/deployJob.d.ts +3 -3
  175. package/dist/deploy/kubernetes/deployJob.js +43 -124
  176. package/dist/deploy/kubernetes/index.d.ts +3 -1
  177. package/dist/deploy/kubernetes/index.js +86 -11
  178. package/dist/deploy/kubernetes/kubeEnv.d.ts +10 -0
  179. package/dist/deploy/kubernetes/kubeEnv.js +76 -0
  180. package/dist/deploy/kubernetes/kubeValues.d.ts +90 -0
  181. package/dist/deploy/kubernetes/kubeValues.js +123 -0
  182. package/dist/deploy/kubernetes/mongodb.d.ts +19 -6
  183. package/dist/deploy/kubernetes/mongodb.js +100 -11
  184. package/dist/deploy/kubernetes/processSecretsAsFiles.d.ts +27 -29
  185. package/dist/deploy/kubernetes/processSecretsAsFiles.js +5 -11
  186. package/dist/deploy/sbom.d.ts +4 -0
  187. package/dist/deploy/sbom.js +20 -0
  188. package/dist/deploy/types/base.d.ts +36 -0
  189. package/dist/deploy/types/base.js +5 -0
  190. package/dist/deploy/types/custom.d.ts +33 -0
  191. package/dist/deploy/types/custom.js +5 -0
  192. package/dist/deploy/types/dockerTag.d.ts +12 -0
  193. package/dist/deploy/types/dockerTag.js +5 -0
  194. package/dist/deploy/types/googleCloudRun.d.ts +208 -0
  195. package/dist/deploy/types/googleCloudRun.js +5 -0
  196. package/dist/deploy/types/index.d.ts +22 -0
  197. package/dist/deploy/types/index.js +37 -0
  198. package/dist/deploy/types/kubernetes.d.ts +355 -0
  199. package/dist/deploy/types/kubernetes.js +5 -0
  200. package/dist/deploy/utils.d.ts +3 -3
  201. package/dist/deploy/utils.js +8 -12
  202. package/dist/index.d.ts +3 -2
  203. package/dist/index.js +16 -19
  204. package/dist/packageInfos.d.ts +4 -0
  205. package/dist/packageInfos.js +20 -0
  206. package/dist/pipeline/__tests__/getPipelineStages.test.d.ts +1 -0
  207. package/dist/pipeline/__tests__/getPipelineStages.test.js +73 -0
  208. package/dist/pipeline/createAllJobs.d.ts +18 -0
  209. package/dist/pipeline/createAllJobs.js +236 -0
  210. package/dist/pipeline/createChildPipeline.d.ts +3 -3
  211. package/dist/pipeline/createChildPipeline.js +45 -157
  212. package/dist/pipeline/createJobsForComponent.d.ts +3 -0
  213. package/dist/{build/base/createBuildJob.js → pipeline/createJobsForComponent.js} +32 -51
  214. package/dist/pipeline/createJobsForWorkspace.d.ts +3 -0
  215. package/dist/pipeline/createJobsForWorkspace.js +12 -0
  216. package/dist/pipeline/createMainPipeline.d.ts +3 -0
  217. package/dist/pipeline/createMainPipeline.js +269 -0
  218. package/dist/pipeline/generatePipelineFiles.d.ts +40 -0
  219. package/dist/pipeline/generatePipelineFiles.js +240 -0
  220. package/dist/pipeline/getPipelineStages.d.ts +7 -0
  221. package/dist/pipeline/getPipelineStages.js +56 -0
  222. package/dist/pipeline/gitlab/createGitlabJobs.d.ts +11 -0
  223. package/dist/pipeline/gitlab/createGitlabJobs.js +461 -0
  224. package/dist/pipeline/gitlab/createGitlabPipeline.d.ts +8 -0
  225. package/dist/pipeline/gitlab/createGitlabPipeline.js +41 -0
  226. package/dist/pipeline/gitlab/getPipelineTriggerForGitlabChildPipeline.d.ts +1 -0
  227. package/dist/pipeline/gitlab/getPipelineTriggerForGitlabChildPipeline.js +29 -0
  228. package/dist/pipeline/gitlab/gitlabReleaseJobs.d.ts +35 -0
  229. package/dist/pipeline/gitlab/gitlabReleaseJobs.js +27 -0
  230. package/dist/pipeline/gitlab/sortGitLabJobDefProps.d.ts +7 -0
  231. package/dist/pipeline/gitlab/sortGitLabJobDefProps.js +27 -0
  232. package/dist/pipeline/index.d.ts +3 -1
  233. package/dist/pipeline/index.js +16 -12
  234. package/dist/pipeline/packageManager.d.ts +3 -2
  235. package/dist/pipeline/packageManager.js +69 -196
  236. package/dist/pipeline/yarn/yarnUtils.d.ts +5 -0
  237. package/dist/pipeline/yarn/yarnUtils.js +241 -0
  238. package/dist/rules/index.d.ts +10 -2
  239. package/dist/rules/index.js +36 -16
  240. package/dist/runner/index.d.ts +2 -3
  241. package/dist/runner/index.js +3 -4
  242. package/dist/tsconfig.tsbuildinfo +1 -1
  243. package/dist/types/config.d.ts +56 -32
  244. package/dist/types/config.js +11 -18
  245. package/dist/types/context.d.ts +143 -27
  246. package/dist/types/context.js +12 -1
  247. package/dist/types/environmentContext.d.ts +31 -0
  248. package/dist/types/environmentContext.js +5 -0
  249. package/dist/types/gitlab-ci-yml.d.ts +769 -0
  250. package/dist/types/gitlab-ci-yml.js +10 -0
  251. package/dist/types/gitlab-types.d.ts +12 -60
  252. package/dist/types/gitlab-types.js +3 -1
  253. package/dist/types/index.js +13 -13
  254. package/dist/types/jobs.d.ts +55 -21
  255. package/dist/types/jobs.js +4 -2
  256. package/dist/types/pipeline.d.ts +5 -4
  257. package/dist/types/pipeline.js +3 -1
  258. package/dist/types/utils.d.ts +1 -0
  259. package/dist/types/utils.js +5 -0
  260. package/dist/utils/gitlab.d.ts +6 -0
  261. package/dist/utils/gitlab.js +56 -0
  262. package/dist/utils/index.d.ts +1 -1
  263. package/dist/utils/index.js +8 -16
  264. package/dist/utils/jsonParse.d.ts +1 -0
  265. package/dist/utils/jsonParse.js +14 -0
  266. package/dist/utils/removeUndefined.d.ts +1 -0
  267. package/dist/utils/removeUndefined.js +36 -0
  268. package/dist/utils/writeFiles.d.ts +11 -0
  269. package/dist/utils/writeFiles.js +180 -0
  270. package/examples/.test-gen-ignore +1 -0
  271. package/examples/__snapshots__/cloud-run-memory-limit.test.ts.snap +3300 -0
  272. package/examples/__snapshots__/cloud-run-meteor-with-worker.test.ts.snap +3260 -0
  273. package/examples/__snapshots__/cloud-run-no-cpu-throttling.test.ts.snap +3300 -0
  274. package/examples/__snapshots__/cloud-run-no-service.test.ts.snap +3404 -0
  275. package/examples/__snapshots__/cloud-run-non-public.test.ts.snap +3300 -0
  276. package/examples/__snapshots__/cloud-run-post-stop-job.test.ts.snap +3322 -0
  277. package/examples/__snapshots__/cloud-run-service-gen2.test.ts.snap +3300 -0
  278. package/examples/__snapshots__/cloud-run-service-increase-timout.test.ts.snap +3300 -0
  279. package/examples/__snapshots__/cloud-run-service-with-volumes.test.ts.snap +3388 -0
  280. package/examples/__snapshots__/cloud-run-storybook.test.ts.snap +2900 -0
  281. package/examples/__snapshots__/cloud-run-with-ngnix.test.ts.snap +3300 -0
  282. package/examples/__snapshots__/cloud-run-with-sql-reuse-db.test.ts.snap +6760 -0
  283. package/examples/__snapshots__/cloud-run-with-sql.test.ts.snap +6030 -0
  284. package/examples/__snapshots__/cloud-run-with-worker.test.ts.snap +3316 -0
  285. package/examples/__snapshots__/custom-build-job-with-tests.test.ts.snap +2983 -0
  286. package/examples/__snapshots__/custom-build-job.test.ts.snap +2572 -0
  287. package/examples/__snapshots__/custom-deploy.test.ts.snap +2824 -0
  288. package/examples/__snapshots__/custom-envs.test.ts.snap +1884 -0
  289. package/examples/__snapshots__/custom-sbom-java.test.ts.snap +2588 -0
  290. package/examples/__snapshots__/git-submodule.test.ts.snap +3304 -0
  291. package/examples/__snapshots__/kubernetes-application-customization.test.ts.snap +4228 -0
  292. package/examples/__snapshots__/kubernetes-with-cloud-sql-legacy.test.ts.snap +4252 -0
  293. package/examples/__snapshots__/kubernetes-with-cloud-sql.test.ts.snap +4268 -0
  294. package/examples/__snapshots__/kubernetes-with-jobs.test.ts.snap +7910 -0
  295. package/examples/__snapshots__/kubernetes-with-mongodb.test.ts.snap +4476 -0
  296. package/examples/__snapshots__/local-dot-env.test.ts.snap +3300 -0
  297. package/examples/__snapshots__/meteor-kubernetes.test.ts.snap +4342 -0
  298. package/examples/__snapshots__/multiline-var.test.ts.snap +7864 -0
  299. package/examples/__snapshots__/native-app.test.ts.snap +5316 -0
  300. package/examples/__snapshots__/node-build-with-custom-image.test.ts.snap +3300 -0
  301. package/examples/__snapshots__/node-build-with-docker-additions.test.ts.snap +3316 -0
  302. package/examples/__snapshots__/rails-k8s-with-worker-dockerfile.test.ts.snap +2011 -0
  303. package/examples/__snapshots__/rails-k8s-with-worker.test.ts.snap +3465 -0
  304. package/examples/__snapshots__/wait-for-other-deploy.test.ts.snap +3380 -0
  305. package/examples/__utils__/helpers.ts +27 -0
  306. package/examples/cloud-run-memory-limit.test.ts +18 -0
  307. package/examples/cloud-run-memory-limit.ts +33 -0
  308. package/examples/cloud-run-meteor-with-worker.test.ts +18 -0
  309. package/examples/cloud-run-meteor-with-worker.ts +37 -0
  310. package/examples/cloud-run-no-cpu-throttling.test.ts +18 -0
  311. package/examples/cloud-run-no-cpu-throttling.ts +35 -0
  312. package/examples/cloud-run-no-service.test.ts +18 -0
  313. package/examples/cloud-run-no-service.ts +33 -0
  314. package/examples/cloud-run-non-public.test.ts +18 -0
  315. package/examples/cloud-run-non-public.ts +28 -0
  316. package/examples/cloud-run-post-stop-job.test.ts +18 -0
  317. package/examples/cloud-run-post-stop-job.ts +42 -0
  318. package/examples/cloud-run-service-gen2.test.ts +18 -0
  319. package/examples/cloud-run-service-gen2.ts +29 -0
  320. package/examples/cloud-run-service-increase-timout.test.ts +18 -0
  321. package/examples/cloud-run-service-increase-timout.ts +29 -0
  322. package/examples/cloud-run-service-with-volumes.test.ts +18 -0
  323. package/examples/cloud-run-service-with-volumes.ts +56 -0
  324. package/examples/cloud-run-storybook.test.ts +18 -0
  325. package/examples/cloud-run-storybook.ts +33 -0
  326. package/examples/cloud-run-with-ngnix.test.ts +18 -0
  327. package/examples/cloud-run-with-ngnix.ts +29 -0
  328. package/examples/cloud-run-with-sql-reuse-db.test.ts +18 -0
  329. package/examples/cloud-run-with-sql-reuse-db.ts +55 -0
  330. package/examples/cloud-run-with-sql.test.ts +18 -0
  331. package/examples/cloud-run-with-sql.ts +71 -0
  332. package/examples/cloud-run-with-worker.test.ts +18 -0
  333. package/examples/cloud-run-with-worker.ts +37 -0
  334. package/examples/custom-build-job-with-tests.test.ts +18 -0
  335. package/examples/custom-build-job-with-tests.ts +56 -0
  336. package/examples/custom-build-job.test.ts +18 -0
  337. package/examples/custom-build-job.ts +29 -0
  338. package/examples/custom-deploy.test.ts +18 -0
  339. package/examples/custom-deploy.ts +36 -0
  340. package/examples/custom-envs.test.ts +18 -0
  341. package/examples/custom-envs.ts +32 -0
  342. package/examples/custom-sbom-java.test.ts +18 -0
  343. package/examples/custom-sbom-java.ts +38 -0
  344. package/examples/git-submodule.test.ts +18 -0
  345. package/examples/git-submodule.ts +30 -0
  346. package/examples/kubernetes-application-customization.test.ts +18 -0
  347. package/examples/kubernetes-application-customization.ts +59 -0
  348. package/examples/kubernetes-with-cloud-sql-legacy.test.ts +18 -0
  349. package/examples/kubernetes-with-cloud-sql-legacy.ts +35 -0
  350. package/examples/kubernetes-with-cloud-sql.test.ts +18 -0
  351. package/examples/kubernetes-with-cloud-sql.ts +37 -0
  352. package/examples/kubernetes-with-jobs.test.ts +18 -0
  353. package/examples/kubernetes-with-jobs.ts +70 -0
  354. package/examples/kubernetes-with-mongodb.test.ts +18 -0
  355. package/examples/kubernetes-with-mongodb.ts +51 -0
  356. package/examples/local-dot-env.test.ts +18 -0
  357. package/examples/local-dot-env.ts +27 -0
  358. package/examples/meteor-kubernetes.test.ts +18 -0
  359. package/examples/meteor-kubernetes.ts +64 -0
  360. package/examples/multiline-var.test.ts +18 -0
  361. package/examples/multiline-var.ts +65 -0
  362. package/examples/native-app.test.ts +18 -0
  363. package/examples/native-app.ts +83 -0
  364. package/examples/node-build-with-custom-image.test.ts +18 -0
  365. package/examples/node-build-with-custom-image.ts +26 -0
  366. package/examples/node-build-with-docker-additions.test.ts +18 -0
  367. package/examples/node-build-with-docker-additions.ts +29 -0
  368. package/examples/rails-k8s-with-worker-dockerfile.test.ts +9 -0
  369. package/examples/rails-k8s-with-worker.test.ts +18 -0
  370. package/examples/rails-k8s-with-worker.ts +95 -0
  371. package/examples/wait-for-other-deploy.test.ts +18 -0
  372. package/examples/wait-for-other-deploy.ts +37 -0
  373. package/package.json +76 -17
  374. package/scripts/bundle +2 -0
  375. package/scripts/generate-examples-test.ts +93 -0
  376. package/scripts/generate-gitlab-ci-types.ts +51 -0
  377. package/scripts/tsconfig.json +7 -0
  378. package/src/bash/BashExpression.ts +81 -0
  379. package/src/bash/bashExpressionPerPipelineType.ts +16 -0
  380. package/src/bash/bashYaml.ts +46 -0
  381. package/src/bash/getInjectVarsScript.ts +12 -0
  382. package/src/bash/replaceAsync.ts +50 -0
  383. package/src/build/artifacts/createBuildJobArtifact.ts +61 -0
  384. package/src/build/base/__tests__/__snapshots__/createArtifactsConfig.test.ts.snap +49 -0
  385. package/src/build/base/__tests__/createArtifactsConfig.test.ts +41 -0
  386. package/src/build/base/constants.ts +2 -2
  387. package/src/build/base/createAppBuildJob.ts +70 -0
  388. package/src/build/base/createArtifactsConfig.ts +34 -0
  389. package/src/build/base/index.ts +62 -0
  390. package/src/build/base/writeBuildInfo.ts +7 -0
  391. package/src/build/base/writeDotEnv.ts +40 -0
  392. package/src/build/custom/__tests__/testJob.test.ts +29 -0
  393. package/src/build/custom/buildJob.ts +41 -0
  394. package/src/build/custom/index.ts +8 -0
  395. package/src/build/custom/testJob.ts +93 -0
  396. package/src/build/docker.ts +173 -63
  397. package/src/build/index.ts +59 -8
  398. package/src/build/node/buildJob.ts +84 -64
  399. package/src/build/node/cache.ts +59 -24
  400. package/src/build/node/constants.ts +2 -3
  401. package/src/build/node/index.ts +9 -5
  402. package/src/build/node/meteor.ts +41 -44
  403. package/src/build/node/testJob.ts +57 -16
  404. package/src/build/node/yarn.ts +81 -25
  405. package/src/build/rails/build.ts +69 -0
  406. package/src/build/rails/index.ts +8 -0
  407. package/src/build/rails/test.ts +103 -0
  408. package/src/build/sbom.ts +48 -0
  409. package/src/build/types.ts +301 -27
  410. package/src/catladder-gitlab.ts +12 -52
  411. package/src/config/__tests__/__snapshots__/getAllEnvs.test.ts.snap +31 -0
  412. package/src/config/__tests__/__snapshots__/getAllEnvsInAllComponents.test.ts.snap +15 -0
  413. package/src/config/{configruedEnvs.test.ts → __tests__/configruedEnvs.test.ts} +3 -3
  414. package/src/config/__tests__/getAllEnvs.test.ts +71 -0
  415. package/src/config/__tests__/getAllEnvsInAllComponents.test.ts +63 -0
  416. package/src/config/configruedEnvs.ts +8 -13
  417. package/src/config/readConfig.ts +17 -23
  418. package/src/constants.ts +5 -2
  419. package/src/context/{resolveReferences.test.ts → __tests__/resolveReferences.test.ts} +34 -44
  420. package/src/context/createAllComponentsContext.ts +31 -0
  421. package/src/context/createComponentContext.ts +135 -0
  422. package/src/context/createWorkspaceContext.ts +56 -0
  423. package/src/context/getBuildInfoVariables.ts +36 -0
  424. package/src/context/getEnvConfig.ts +21 -0
  425. package/src/context/getEnvType.ts +17 -0
  426. package/src/context/getEnvironment.ts +26 -0
  427. package/src/context/getEnvironmentContext.ts +53 -0
  428. package/src/context/getEnvironmentVariables.ts +210 -0
  429. package/src/context/getLabels.ts +21 -0
  430. package/src/context/getReviewSlug.ts +27 -0
  431. package/src/context/index.ts +3 -232
  432. package/src/context/resolveReferences.ts +67 -40
  433. package/src/context/transformJobOnlyVars.ts +45 -0
  434. package/src/context/utils/envVars.ts +27 -0
  435. package/src/defaults/index.ts +1 -1
  436. package/src/deploy/base/deploy.ts +136 -0
  437. package/src/deploy/base/index.ts +22 -0
  438. package/src/deploy/base/rollback.ts +38 -0
  439. package/src/deploy/base/stop.ts +43 -0
  440. package/src/deploy/base/types.ts +3 -0
  441. package/src/deploy/base/variables.ts +5 -0
  442. package/src/deploy/cloudRun/artifactsRegistry.ts +126 -0
  443. package/src/deploy/cloudRun/cleanup.ts +30 -0
  444. package/src/deploy/cloudRun/cloudRunRevisions.ts +65 -0
  445. package/src/deploy/cloudRun/createJobs/cloudRunJobs.ts +198 -0
  446. package/src/deploy/cloudRun/createJobs/cloudRunServices.ts +86 -0
  447. package/src/deploy/cloudRun/createJobs/common.ts +59 -0
  448. package/src/deploy/cloudRun/createJobs/constants.ts +1 -0
  449. package/src/deploy/cloudRun/createJobs/getCloudRunDeployScripts.ts +79 -0
  450. package/src/deploy/cloudRun/createJobs/getCloudRunStopScripts.ts +34 -0
  451. package/src/deploy/cloudRun/createJobs/index.ts +51 -0
  452. package/src/deploy/cloudRun/createJobs/volumes.ts +23 -0
  453. package/src/deploy/cloudRun/index.ts +127 -0
  454. package/src/deploy/cloudRun/utils/createArgsString.ts +34 -0
  455. package/src/deploy/cloudRun/utils/database.ts +77 -0
  456. package/src/deploy/cloudRun/utils/gcloudServiceAccountLoginCommands.ts +12 -0
  457. package/src/deploy/cloudRun/utils/getServiceName.ts +3 -0
  458. package/src/deploy/cloudRun/utils/jobName.ts +7 -0
  459. package/src/deploy/cloudRun/utils/removeFirstLinesFromCommandOutput.ts +12 -0
  460. package/src/deploy/cloudSql/utils.ts +26 -0
  461. package/src/deploy/custom/deployJob.ts +41 -16
  462. package/src/deploy/custom/index.ts +9 -1
  463. package/src/deploy/dockerTag/deployJob.ts +29 -0
  464. package/src/deploy/dockerTag/index.ts +10 -0
  465. package/src/deploy/index.ts +32 -17
  466. package/src/deploy/kubernetes/additionalSecretKeys.ts +25 -0
  467. package/src/deploy/kubernetes/cloudSql/index.ts +76 -0
  468. package/src/deploy/kubernetes/deployJob.ts +61 -115
  469. package/src/deploy/kubernetes/index.ts +50 -1
  470. package/src/deploy/kubernetes/kubeEnv.ts +50 -0
  471. package/src/deploy/kubernetes/kubeValues.ts +100 -0
  472. package/src/deploy/kubernetes/mongodb.ts +106 -8
  473. package/src/deploy/kubernetes/processSecretsAsFiles.ts +6 -5
  474. package/src/deploy/sbom.ts +32 -0
  475. package/src/deploy/types/base.ts +43 -0
  476. package/src/deploy/types/custom.ts +36 -0
  477. package/src/deploy/types/dockerTag.ts +14 -0
  478. package/src/deploy/types/googleCloudRun.ts +282 -0
  479. package/src/deploy/types/index.ts +28 -0
  480. package/src/deploy/types/kubernetes.ts +390 -0
  481. package/src/deploy/utils.ts +10 -6
  482. package/src/index.ts +2 -1
  483. package/src/packageInfos.ts +14 -0
  484. package/src/pipeline/__tests__/__snapshots__/getPipelineStages.test.ts.snap +69 -0
  485. package/src/pipeline/__tests__/getPipelineStages.test.ts +63 -0
  486. package/src/pipeline/createAllJobs.ts +72 -0
  487. package/src/pipeline/createChildPipeline.ts +24 -43
  488. package/src/pipeline/createJobsForComponent.ts +35 -0
  489. package/src/pipeline/createJobsForWorkspace.ts +12 -0
  490. package/src/pipeline/createMainPipeline.ts +111 -0
  491. package/src/pipeline/generatePipelineFiles.ts +76 -0
  492. package/src/pipeline/getPipelineStages.ts +23 -0
  493. package/src/pipeline/gitlab/createGitlabJobs.ts +445 -0
  494. package/src/pipeline/gitlab/createGitlabPipeline.ts +28 -0
  495. package/src/pipeline/gitlab/getPipelineTriggerForGitlabChildPipeline.ts +46 -0
  496. package/src/pipeline/gitlab/gitlabReleaseJobs.ts +25 -0
  497. package/src/pipeline/gitlab/sortGitLabJobDefProps.ts +59 -0
  498. package/src/pipeline/index.ts +3 -1
  499. package/src/pipeline/packageManager.ts +47 -64
  500. package/src/pipeline/yarn/yarnUtils.ts +66 -0
  501. package/src/rules/index.ts +46 -13
  502. package/src/runner/index.ts +2 -1
  503. package/src/types/config.ts +72 -16
  504. package/src/types/context.ts +194 -25
  505. package/src/types/environmentContext.ts +38 -0
  506. package/src/types/gitlab-ci-yml.ts +891 -0
  507. package/src/types/gitlab-types.ts +52 -57
  508. package/src/types/jobs.ts +66 -11
  509. package/src/types/pipeline.ts +5 -1
  510. package/src/types/utils.ts +7 -0
  511. package/src/utils/gitlab.ts +33 -0
  512. package/src/utils/index.ts +3 -3
  513. package/src/utils/jsonParse.ts +7 -0
  514. package/src/utils/removeUndefined.ts +4 -0
  515. package/src/utils/writeFiles.ts +53 -0
  516. package/tsconfig.json +4 -2
  517. package/dist/build/base/createBuildJob.d.ts +0 -7
  518. package/dist/build/base/getBuildInfo.d.ts +0 -2
  519. package/dist/build/base/getBuildInfo.js +0 -12
  520. package/dist/context/resolveReferences.test.js +0 -141
  521. package/dist/deploy/base.d.ts +0 -8
  522. package/dist/deploy/base.js +0 -107
  523. package/dist/deploy/kubernetes/cloudsql.d.ts +0 -6
  524. package/dist/deploy/kubernetes/cloudsql.js +0 -16
  525. package/dist/deploy/types.d.ts +0 -196
  526. package/dist/deploy/types.js +0 -16
  527. package/dist/pipeline/createJobs.d.ts +0 -3
  528. package/dist/pipeline/createJobs.js +0 -383
  529. package/dist/pipeline/gitlab/makeGitlabJob.d.ts +0 -8
  530. package/dist/pipeline/gitlab/makeGitlabJob.js +0 -45
  531. package/src/build/base/createBuildJob.ts +0 -43
  532. package/src/build/base/getBuildInfo.ts +0 -7
  533. package/src/build/tests/storybook.test.ts +0 -54
  534. package/src/deploy/base.ts +0 -120
  535. package/src/deploy/kubernetes/cloudsql.ts +0 -12
  536. package/src/deploy/types.ts +0 -189
  537. package/src/pipeline/createChildPipeline.test.ts +0 -49
  538. package/src/pipeline/createJobs.ts +0 -195
  539. package/src/pipeline/gitlab/makeGitlabJob.ts +0 -16
  540. /package/dist/build/{tests/storybook.test.d.ts → base/__tests__/createArtifactsConfig.test.d.ts} +0 -0
  541. /package/dist/{config/configruedEnvs.test.d.ts → build/custom/__tests__/testJob.test.d.ts} +0 -0
  542. /package/dist/{context/resolveReferences.test.d.ts → config/__tests__/configruedEnvs.test.d.ts} +0 -0
  543. /package/dist/{pipeline/createChildPipeline.test.d.ts → config/__tests__/getAllEnvs.test.d.ts} +0 -0
@@ -1,8 +1,9 @@
1
- import { Config, Context } from "../types";
2
- import { DeployConfigKubernetesCluster, isOfDeployType } from "./types";
1
+ import type { Config, ComponentContext } from "../types";
2
+ import type { DeployConfigKubernetesCluster } from "./types";
3
+ import { isOfDeployType } from "./types";
3
4
 
4
5
  export const getFullKubernetesClusterName = (
5
- cluster: DeployConfigKubernetesCluster
6
+ cluster: DeployConfigKubernetesCluster,
6
7
  ) => {
7
8
  if (cluster.type === "gcloud") {
8
9
  return `gke_${cluster.projectId}_${cluster.region}_${cluster.name}`;
@@ -11,17 +12,20 @@ export const getFullKubernetesClusterName = (
11
12
 
12
13
  export const getKubernetesNamespace = (
13
14
  config: Pick<Config, "customerName" | "appName">,
14
- env: string
15
+ env: string,
15
16
  ) => {
16
17
  return `${config.customerName}-${config.appName}-${env}`;
17
18
  };
18
19
 
19
- export const contextIsStoppable = (context: Context) => {
20
- const deployConfig = context.componentConfig.deploy;
20
+ export const contextIsStoppable = (context: ComponentContext) => {
21
+ const deployConfig = context.deploy?.config;
21
22
  if (isOfDeployType(deployConfig, "kubernetes")) {
22
23
  return true;
23
24
  }
24
25
 
26
+ if (isOfDeployType(deployConfig, "google-cloudrun")) {
27
+ return true;
28
+ }
25
29
  if (isOfDeployType(deployConfig, "custom") && deployConfig.stopScript) {
26
30
  return true;
27
31
  }
package/src/index.ts CHANGED
@@ -1,4 +1,4 @@
1
- export * from "./pipeline/";
1
+ export * from "./pipeline";
2
2
  export * from "./types";
3
3
  export * from "./rules";
4
4
  export * from "./runner";
@@ -6,3 +6,4 @@ export * from "./config";
6
6
  export * from "./context";
7
7
  export * from "./build";
8
8
  export * from "./deploy";
9
+ export * from "./utils/writeFiles";
@@ -0,0 +1,14 @@
1
+ // we can't import the package.json directly, because the bundling process will inline it
2
+ // but the version is only set during deployement, when its already bundled
3
+ // instead we need to use require.main.path to get the path of the main module, which is actually the file in the bin
4
+ // this will point to the root package.json
5
+ let ownPkg = { version: "0.0.0" };
6
+ try {
7
+ const path = require.main?.path + "/../package.json";
8
+
9
+ ownPkg = require(path);
10
+ } catch (e) {
11
+ // ignore, currently in the gitlab-includes, this doesn't work
12
+ }
13
+
14
+ export default ownPkg;
@@ -0,0 +1,69 @@
1
+ // Jest Snapshot v1, https://goo.gl/fbAQLP
2
+
3
+ exports[`getPipelineStages() should return all envs for SIMPLE_CONFIG1 1`] = `
4
+ [
5
+ "setup",
6
+ "setup dev",
7
+ "setup review",
8
+ "setup stage",
9
+ "setup prod",
10
+ "setup dev2",
11
+ "setup review2",
12
+ "setup stage2",
13
+ "setup prod2",
14
+ "test",
15
+ "test dev",
16
+ "test review",
17
+ "test stage",
18
+ "test prod",
19
+ "test dev2",
20
+ "test review2",
21
+ "test stage2",
22
+ "test prod2",
23
+ "build",
24
+ "build dev",
25
+ "build review",
26
+ "build stage",
27
+ "build prod",
28
+ "build dev2",
29
+ "build review2",
30
+ "build stage2",
31
+ "build prod2",
32
+ "deploy",
33
+ "deploy dev",
34
+ "deploy review",
35
+ "deploy stage",
36
+ "deploy prod",
37
+ "deploy dev2",
38
+ "deploy review2",
39
+ "deploy stage2",
40
+ "deploy prod2",
41
+ "verify",
42
+ "verify dev",
43
+ "verify review",
44
+ "verify stage",
45
+ "verify prod",
46
+ "verify dev2",
47
+ "verify review2",
48
+ "verify stage2",
49
+ "verify prod2",
50
+ "rollback",
51
+ "rollback dev",
52
+ "rollback review",
53
+ "rollback stage",
54
+ "rollback prod",
55
+ "rollback dev2",
56
+ "rollback review2",
57
+ "rollback stage2",
58
+ "rollback prod2",
59
+ "stop",
60
+ "stop dev",
61
+ "stop review",
62
+ "stop stage",
63
+ "stop prod",
64
+ "stop dev2",
65
+ "stop review2",
66
+ "stop stage2",
67
+ "stop prod2",
68
+ ]
69
+ `;
@@ -0,0 +1,63 @@
1
+ import { type DeployConfigKubernetesCluster } from "../..";
2
+ import type { Config } from "../../types";
3
+ import { getPipelineStages } from "../getPipelineStages";
4
+
5
+ describe("getPipelineStages()", () => {
6
+ const cluster: DeployConfigKubernetesCluster = {
7
+ type: "gcloud",
8
+ name: "mega-cluster",
9
+ projectId: "super-google-project",
10
+ region: "ch-blabla",
11
+ };
12
+ const SIMPLE_CONFIG1: Config = {
13
+ appName: "my-app",
14
+ customerName: "pan",
15
+ components: {
16
+ app1: {
17
+ dir: "dir1",
18
+ build: {
19
+ type: "node",
20
+ },
21
+ deploy: { type: "kubernetes", cluster },
22
+ },
23
+ app2: {
24
+ dir: "dir2",
25
+ build: {
26
+ type: "node",
27
+ },
28
+ deploy: { type: "kubernetes", cluster },
29
+ env: {
30
+ dev2: {
31
+ type: "dev",
32
+ },
33
+ review2: {
34
+ type: "review",
35
+ },
36
+ stage2: {
37
+ type: "stage",
38
+ },
39
+ prod2: {
40
+ type: "prod",
41
+ },
42
+ },
43
+ },
44
+ app3: {
45
+ dir: "dir2",
46
+ build: {
47
+ type: "node",
48
+ },
49
+ deploy: { type: "kubernetes", cluster },
50
+ env: {
51
+ dev: false,
52
+ review: false,
53
+ stage: false,
54
+ prod: false,
55
+ },
56
+ },
57
+ },
58
+ };
59
+
60
+ it("should return all envs for SIMPLE_CONFIG1", () => {
61
+ expect(getPipelineStages(SIMPLE_CONFIG1)).toMatchSnapshot();
62
+ });
63
+ });
@@ -0,0 +1,72 @@
1
+ import type { CreateAllComponentsContextProps } from "../context/createAllComponentsContext";
2
+ import { createAllComponentsContext } from "../context/createAllComponentsContext";
3
+ import { createWorkspaceContext } from "../context/createWorkspaceContext";
4
+ import type { ComponentContext, WorkspaceContext } from "../types";
5
+ import { componentContextHasWorkspaceBuild } from "../types";
6
+ import type { CatladderJob } from "../types/jobs";
7
+ import { createJobsForComponentContext } from "./createJobsForComponent";
8
+ import { createJobsForWorkspace } from "./createJobsForWorkspace";
9
+
10
+ export type AllCatladderJobs = {
11
+ workspaces: Array<{
12
+ context: WorkspaceContext;
13
+ jobs: Array<CatladderJob>;
14
+ }>;
15
+ components: Array<{
16
+ context: ComponentContext;
17
+ jobs: Array<CatladderJob>;
18
+ }>;
19
+ };
20
+
21
+ export const createAllJobs = async ({
22
+ config,
23
+ trigger,
24
+ pipelineType,
25
+ }: CreateAllComponentsContextProps): Promise<AllCatladderJobs> => {
26
+ const allComponentsContext = await createAllComponentsContext({
27
+ config,
28
+ trigger,
29
+ pipelineType,
30
+ });
31
+
32
+ return {
33
+ workspaces: await Promise.all(
34
+ Object.keys(config.builds ?? {}).map(async (workspaceName) => {
35
+ const componentsInAllEnvs = allComponentsContext.filter(
36
+ (context) =>
37
+ componentContextHasWorkspaceBuild(context) &&
38
+ context.build.workspaceName === workspaceName,
39
+ );
40
+
41
+ const allEnvs = [...new Set(componentsInAllEnvs.map(({ env }) => env))];
42
+
43
+ return await Promise.all(
44
+ allEnvs.map(async (env) => {
45
+ const workspaceContext = await createWorkspaceContext({
46
+ components: componentsInAllEnvs.filter(
47
+ ({ env: componentEnv }) => componentEnv === env,
48
+ ),
49
+ workspaceName,
50
+ config,
51
+ trigger,
52
+ pipelineType,
53
+ env,
54
+ });
55
+
56
+ return {
57
+ context: workspaceContext,
58
+ jobs: createJobsForWorkspace(workspaceContext),
59
+ };
60
+ }),
61
+ );
62
+ }),
63
+ ).then((f) => f.flat()),
64
+
65
+ components: allComponentsContext.map((context) => {
66
+ return {
67
+ context,
68
+ jobs: createJobsForComponentContext(context),
69
+ };
70
+ }),
71
+ };
72
+ };
@@ -1,56 +1,37 @@
1
- import { getAllEnvsByTrigger, getAllEnvsInAllComponents } from "../config";
2
1
  import { RULES_ALWAYS } from "../rules";
3
- import { getRunnerImage } from "../runner";
4
- import { GitlabPipeline, Pipeline, PipelineJob, PipelineType } from "../types";
5
- import { Config, PipelineTrigger } from "../types/config";
6
- import { createJobs } from "./createJobs";
7
2
 
8
- const baseStages = ["setup", "test", "build", "deploy", "verify", "stop"];
3
+ import type { Pipeline, PipelineType } from "../types";
4
+ import type { Config, PipelineTrigger } from "../types/config";
5
+ import { createAllJobs } from "./createAllJobs";
6
+ import { getPipelineStages } from "./getPipelineStages";
7
+ import { createGitlabJobs } from "./gitlab/createGitlabJobs";
8
+ import { createGitlabPipelineWithDefaults } from "./gitlab/createGitlabPipeline";
9
+
9
10
  export const createChildPipeline = async <T extends PipelineType>(
10
- type: T,
11
+ pipelineType: T,
11
12
  trigger: PipelineTrigger,
12
- config: Config
13
+ config: Config,
13
14
  ): Promise<Pipeline<T>> => {
14
- const components = Object.keys(config.components);
15
-
16
- // 2. write the triggering pipeline
17
- const jobs = await components.reduce<Promise<Record<string, PipelineJob<T>>>>(
18
- async (acc, componentName) => {
19
- const envs = getAllEnvsByTrigger(config, componentName, trigger);
20
- return {
21
- ...(await acc),
22
- ...(await createJobs(type, envs, config, componentName, trigger)),
23
- };
24
- },
25
- Promise.resolve({})
26
- );
15
+ const jobs = await createAllJobs({
16
+ config,
17
+ trigger,
18
+ pipelineType,
19
+ });
27
20
 
28
- // while technically not required, we group different envs in its own stage
29
- // each job from `createJobs` that is defined as `envMode: "stagePerEnv"` will have `deploy dev`, etc. instead of just `deploy`
30
- // this is just so that it looks nicer in gitlab and makes running mutliple manual tasks more easy to use
21
+ const stages = getPipelineStages(config);
31
22
 
32
- const allEnvs = getAllEnvsInAllComponents(config);
33
- const stages = baseStages.reduce<string[]>(
34
- (acc, baseStage) => [
35
- ...acc,
36
- baseStage,
37
- ...allEnvs.map((e) => `${baseStage} ${e}`),
38
- ],
39
- []
40
- );
41
- if (type === "gitlab") {
42
- const pipeline: GitlabPipeline = {
43
- image: getRunnerImage("jobs-default"), // default image
44
- variables: {
45
- FF_USE_FASTZIP: "true",
46
- },
23
+ if (pipelineType === "gitlab") {
24
+ const gitlabJobs = await createGitlabJobs(jobs);
25
+ return createGitlabPipelineWithDefaults({
47
26
  workflow: {
48
27
  rules: RULES_ALWAYS,
49
28
  },
50
29
  stages,
51
- jobs,
52
- };
53
- return pipeline as Pipeline<T>;
30
+ jobs: Object.fromEntries(
31
+ gitlabJobs.map(({ gitlabJob, name }) => [name, gitlabJob]),
32
+ ),
33
+ variables: config.runnerVariables,
34
+ }) as Pipeline<T>;
54
35
  }
55
- throw new Error(`${type} is not supported`);
36
+ throw new Error(`${pipelineType} is not supported`);
56
37
  };
@@ -0,0 +1,35 @@
1
+ import { BUILD_TYPES } from "../build";
2
+ import { DEPLOY_TYPES } from "../deploy";
3
+ import type { ComponentContext } from "../types/context";
4
+ import type { CatladderJob } from "../types/jobs";
5
+
6
+ const injectDefaultVarsInCustomJobs = (
7
+ context: ComponentContext,
8
+ jobs: CatladderJob[],
9
+ ) =>
10
+ jobs.map(({ variables, ...job }) => ({
11
+ variables: {
12
+ ...(context.environment.envVars ?? {}),
13
+ ...(variables ?? {}),
14
+ },
15
+ ...job,
16
+ }));
17
+ const getCustomJobs = (context: ComponentContext) => {
18
+ if (!context.customJobs) {
19
+ return [];
20
+ }
21
+ const rawJobs = context.customJobs;
22
+ return injectDefaultVarsInCustomJobs(context, rawJobs);
23
+ };
24
+ export const createJobsForComponentContext = (
25
+ context: ComponentContext,
26
+ ): CatladderJob[] => {
27
+ const buildJobs = BUILD_TYPES[context.build.buildType].jobs(context);
28
+ const deployJobs =
29
+ context.componentConfig.deploy !== false
30
+ ? DEPLOY_TYPES[context.componentConfig.deploy.type].jobs(context)
31
+ : [];
32
+
33
+ const customJobs = getCustomJobs(context);
34
+ return [...buildJobs, ...deployJobs, ...customJobs];
35
+ };
@@ -0,0 +1,12 @@
1
+ import { WORKSPACE_BUILD_TYPES } from "../build";
2
+ import type { WorkspaceContext } from "../types/context";
3
+ import type { CatladderJob } from "../types/jobs";
4
+
5
+ export const createJobsForWorkspace = (
6
+ context: WorkspaceContext,
7
+ ): CatladderJob[] => {
8
+ const buildJobs =
9
+ WORKSPACE_BUILD_TYPES[context.build.buildType].jobs(context);
10
+
11
+ return buildJobs;
12
+ };
@@ -0,0 +1,111 @@
1
+ import {
2
+ RULE_IS_MAIN_BRANCH,
3
+ RULE_IS_MERGE_REQUEST,
4
+ RULE_IS_TAGGED_RELEASE,
5
+ RULE_NEVER_ON_RELEASE_COMMIT,
6
+ } from "../rules";
7
+ import type {
8
+ ComponentContext,
9
+ GitlabJobDef,
10
+ GitlabRule,
11
+ Pipeline,
12
+ PipelineTrigger,
13
+ PipelineType,
14
+ WorkspaceContext,
15
+ } from "../types";
16
+ import { ALL_PIPELINE_TRIGGERS, type Config } from "../types/config";
17
+ import { createAllJobs } from "./createAllJobs";
18
+ import { getPipelineStages } from "./getPipelineStages";
19
+ import { createGitlabJobs } from "./gitlab/createGitlabJobs";
20
+ import { createGitlabPipelineWithDefaults } from "./gitlab/createGitlabPipeline";
21
+ import { getGitlabReleaseJobs } from "./gitlab/gitlabReleaseJobs";
22
+
23
+ export const createMainPipeline = async <T extends PipelineType>(
24
+ pipelineType: T,
25
+ config: Config,
26
+ ): Promise<Pipeline<T>> => {
27
+ const stages = getPipelineStages(config);
28
+
29
+ if (pipelineType === "gitlab") {
30
+ // for all triggers create jobs and add base rules
31
+
32
+ const allJobsPerTrigger = await Promise.all(
33
+ ALL_PIPELINE_TRIGGERS.map(
34
+ async (trigger) =>
35
+ await createGitlabJobs(
36
+ await createAllJobs({ config, trigger, pipelineType }),
37
+ getGitlabRulesForTrigger(trigger),
38
+ ),
39
+ ),
40
+ ).then((j) => j.flat());
41
+
42
+ const allWorkspaceJobs = allJobsPerTrigger
43
+ .filter((j) => j.context.type === "workspace") // sort by componentName in the same order as they appear in the config
44
+ // this is purely for better readability in git diffs when you add new components
45
+ .sort((a, b) => {
46
+ const workspaceNames = Object.keys(config.builds ?? {});
47
+ const aIndex = workspaceNames.findIndex(
48
+ (c) => c === (a.context as WorkspaceContext).name,
49
+ );
50
+ const bIndex = workspaceNames.findIndex(
51
+ (c) => c === (b.context as WorkspaceContext).name,
52
+ );
53
+ return aIndex - bIndex;
54
+ });
55
+
56
+ const allComponentJobs = allJobsPerTrigger
57
+ .filter((j) => j.context.type === "component")
58
+ // sort by componentName in the same order as they appear in the config
59
+ // this is purely for better readability in git diffs when you add new components
60
+ .sort((a, b) => {
61
+ const componentNames = Object.keys(config.components);
62
+ const aIndex = componentNames.findIndex(
63
+ (c) => c === (a.context as ComponentContext).name,
64
+ );
65
+ const bIndex = componentNames.findIndex(
66
+ (c) => c === (b.context as ComponentContext).name,
67
+ );
68
+ return aIndex - bIndex;
69
+ });
70
+ const allJobs = [...allWorkspaceJobs, ...allComponentJobs].reduce(
71
+ (acc, { gitlabJob, name }) => {
72
+ // merge jobs, if a job is already there, merge the rules
73
+ // this is currently needed because of envMode: "none", which creates the same job for all triggers, so it can appear multiple times
74
+ if (acc[name]) {
75
+ acc[name].rules = [
76
+ ...(acc[name].rules ?? []),
77
+ ...(gitlabJob.rules ?? []),
78
+ ];
79
+ } else {
80
+ acc[name] = gitlabJob;
81
+ }
82
+
83
+ return acc;
84
+ },
85
+ {} as { [key: string]: GitlabJobDef },
86
+ );
87
+
88
+ return createGitlabPipelineWithDefaults({
89
+ stages: [...stages, "release"],
90
+ jobs: {
91
+ ...allJobs,
92
+ ...getGitlabReleaseJobs(),
93
+ },
94
+ variables: config.runnerVariables,
95
+ }) as Pipeline<T>;
96
+ }
97
+ throw new Error(`${pipelineType} is not supported`);
98
+ };
99
+ function getGitlabRulesForTrigger(trigger: PipelineTrigger): GitlabRule[] {
100
+ // mainBranch: on push to main branch
101
+ // mr: on merge request
102
+ // taggedRelease: on tag
103
+ switch (trigger) {
104
+ case "mainBranch":
105
+ return [RULE_NEVER_ON_RELEASE_COMMIT, RULE_IS_MAIN_BRANCH];
106
+ case "mr":
107
+ return [RULE_IS_MERGE_REQUEST];
108
+ case "taggedRelease":
109
+ return [RULE_IS_TAGGED_RELEASE];
110
+ }
111
+ }
@@ -0,0 +1,76 @@
1
+ import type { Config, PipelineMode, PipelineType } from "../types";
2
+ import { writeYamlfile } from "../utils/writeFiles";
3
+ import { createChildPipeline } from "./createChildPipeline";
4
+ import { createMainPipeline } from "./createMainPipeline";
5
+ import { getPipelineTriggerForGitlabChildPipeline } from "./gitlab/getPipelineTriggerForGitlabChildPipeline";
6
+ import { sortGitLabJobDefProps } from "./gitlab/sortGitLabJobDefProps";
7
+
8
+ export async function generateChildPipelineContent<T extends PipelineType>(
9
+ config: Config,
10
+ pipelineType: T,
11
+ ) {
12
+ const trigger = getPipelineTriggerForGitlabChildPipeline();
13
+ const { jobs, image, stages, variables, workflow, ...pipelineRest } =
14
+ await createChildPipeline(pipelineType, trigger, config);
15
+
16
+ const jobsWithSortedProps = Object.fromEntries(
17
+ Object.entries(jobs).map(([jobName, job]) => [
18
+ jobName,
19
+ sortGitLabJobDefProps(job),
20
+ ]),
21
+ );
22
+
23
+ return {
24
+ image,
25
+ stages,
26
+ variables,
27
+ workflow,
28
+ ...pipelineRest,
29
+ // jobs need to be spread into main YAML, because GitLab pipeline YAML has no jobs key - jobs are top level with their key as their name
30
+ ...jobsWithSortedProps,
31
+ };
32
+ }
33
+
34
+ export async function generateLocalPipelineContent<T extends PipelineType>(
35
+ config: Config,
36
+ pipelineType: T,
37
+ ) {
38
+ const { jobs, image, stages, variables, workflow, ...pipelineRest } =
39
+ await createMainPipeline(pipelineType, config);
40
+
41
+ const jobsWithSortedProps = Object.fromEntries(
42
+ Object.entries(jobs).map(([jobName, job]) => [
43
+ jobName,
44
+ sortGitLabJobDefProps(job),
45
+ ]),
46
+ );
47
+
48
+ return {
49
+ image,
50
+ stages,
51
+ variables,
52
+ workflow,
53
+ ...pipelineRest,
54
+ // jobs need to be spread into main YAML, because GitLab pipeline YAML has no jobs key - jobs are top level with their key as their name
55
+ ...jobsWithSortedProps,
56
+ };
57
+ }
58
+
59
+ export async function generatePipelineFiles<T extends PipelineType>(
60
+ config: Config,
61
+ pipelineType: T,
62
+ mode: PipelineMode<T>,
63
+ ) {
64
+ if (mode === "childpipeline") {
65
+ const pipelineContent = await generateChildPipelineContent(
66
+ config,
67
+ pipelineType,
68
+ );
69
+ return writeYamlfile(`__pipeline.yml`, pipelineContent);
70
+ }
71
+ const pipelineContent = await generateLocalPipelineContent(
72
+ config,
73
+ pipelineType,
74
+ );
75
+ return writeYamlfile(`.gitlab-ci.yml`, pipelineContent);
76
+ }
@@ -0,0 +1,23 @@
1
+ import { getAllEnvsInAllComponents } from "../config";
2
+ import type { Config } from "../types/config";
3
+ import { BASE_STAGES } from "../types/jobs";
4
+
5
+ /**
6
+ * while technically not required, we group different envs in its own stage
7
+ * each job from `createJobs` that is defined as `envMode: "stagePerEnv"` will have `deploy dev`, etc. instead of just `deploy`
8
+ * this is just so that it looks nicer in gitlab and makes running mutliple manual tasks more easy to use
9
+ */
10
+ export function getPipelineStages(config: Config) {
11
+ const allEnvs = getAllEnvsInAllComponents(config).filter(
12
+ (e) => e !== "local",
13
+ );
14
+ const stages = BASE_STAGES.reduce<string[]>(
15
+ (acc, baseStage) => [
16
+ ...acc,
17
+ baseStage,
18
+ ...allEnvs.map((e) => `${baseStage} ${e}`),
19
+ ],
20
+ [],
21
+ );
22
+ return stages;
23
+ }