@catladder/pipeline 0.0.0-mongodb-tolerations-bc2a3387 → 0.0.0-multiple-gitlab-includes-1a40efc0

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 (608) 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 +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 +10 -0
  20. package/dist/build/base/{createBuildJob.js → createAppBuildJob.js} +22 -18
  21. package/dist/build/base/createArtifactsConfig.d.ts +4 -0
  22. package/dist/build/base/createArtifactsConfig.js +65 -0
  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 +11 -0
  26. package/dist/build/base/index.js +68 -0
  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 +8 -0
  30. package/dist/build/base/writeDotEnv.js +67 -0
  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.d.ts +1 -0
  38. package/dist/build/custom/__tests__/testJob.test.js +36 -0
  39. package/dist/build/custom/buildJob.d.ts +2 -2
  40. package/dist/build/custom/buildJob.js +12 -71
  41. package/dist/build/custom/index.d.ts +2 -2
  42. package/dist/build/custom/index.js +3 -1
  43. package/dist/build/custom/testJob.d.ts +6 -2
  44. package/dist/build/custom/testJob.js +27 -22
  45. package/dist/build/docker.d.ts +51 -36
  46. package/dist/build/docker.js +92 -50
  47. package/dist/build/index.d.ts +14 -7
  48. package/dist/build/index.js +44 -16
  49. package/dist/build/node/buildJob.d.ts +6 -2
  50. package/dist/build/node/buildJob.js +37 -47
  51. package/dist/build/node/cache.d.ts +4 -5
  52. package/dist/build/node/cache.js +18 -23
  53. package/dist/build/node/constants.d.ts +0 -1
  54. package/dist/build/node/constants.js +5 -4
  55. package/dist/build/node/index.d.ts +4 -4
  56. package/dist/build/node/index.js +3 -1
  57. package/dist/build/node/meteor.d.ts +2 -2
  58. package/dist/build/node/meteor.js +22 -24
  59. package/dist/build/node/testJob.d.ts +3 -2
  60. package/dist/build/node/testJob.js +33 -19
  61. package/dist/build/node/yarn.d.ts +5 -5
  62. package/dist/build/node/yarn.js +35 -20
  63. package/dist/build/rails/build.d.ts +2 -2
  64. package/dist/build/rails/build.js +49 -10
  65. package/dist/build/rails/index.d.ts +2 -2
  66. package/dist/build/rails/index.js +3 -1
  67. package/dist/build/rails/test.d.ts +2 -2
  68. package/dist/build/rails/test.js +20 -12
  69. package/dist/build/sbom.d.ts +5 -0
  70. package/dist/build/sbom.js +32 -0
  71. package/dist/build/types.d.ts +214 -67
  72. package/dist/build/types.js +10 -2
  73. package/dist/catladder-gitlab.js +129 -49
  74. package/dist/config/__tests__/configruedEnvs.test.js +3 -1
  75. package/dist/config/__tests__/getAllEnvs.test.d.ts +1 -0
  76. package/dist/config/__tests__/getAllEnvs.test.js +79 -0
  77. package/dist/config/__tests__/getAllEnvsInAllComponents.test.d.ts +1 -0
  78. package/dist/config/__tests__/getAllEnvsInAllComponents.test.js +73 -0
  79. package/dist/config/configruedEnvs.js +3 -1
  80. package/dist/config/index.js +13 -7
  81. package/dist/config/readConfig.d.ts +2 -2
  82. package/dist/config/readConfig.js +191 -40
  83. package/dist/constants.js +5 -3
  84. package/dist/context/createAllComponentsContext.d.ts +12 -0
  85. package/dist/{pipeline/commitInfo/getCommitInfo.js → context/createAllComponentsContext.js} +35 -16
  86. package/dist/context/createComponentContext.d.ts +11 -0
  87. package/dist/context/createComponentContext.js +255 -0
  88. package/dist/context/createWorkspaceContext.d.ts +16 -0
  89. package/dist/context/createWorkspaceContext.js +173 -0
  90. package/dist/context/getBuildInfoVariables.d.ts +6 -0
  91. package/dist/context/getBuildInfoVariables.js +55 -0
  92. package/dist/context/getEnvConfig.js +5 -2
  93. package/dist/context/getEnvType.js +3 -1
  94. package/dist/context/getEnvironment.d.ts +3 -3
  95. package/dist/context/getEnvironment.js +26 -21
  96. package/dist/context/getEnvironmentContext.d.ts +7 -3
  97. package/dist/context/getEnvironmentContext.js +21 -11
  98. package/dist/context/getEnvironmentVariables.d.ts +22 -10
  99. package/dist/context/getEnvironmentVariables.js +85 -54
  100. package/dist/context/getLabels.d.ts +3 -2
  101. package/dist/context/getLabels.js +9 -6
  102. package/dist/context/getReviewSlug.d.ts +4 -0
  103. package/dist/context/getReviewSlug.js +21 -0
  104. package/dist/context/index.d.ts +2 -4
  105. package/dist/context/index.js +15 -162
  106. package/dist/context/transformJobOnlyVars.d.ts +13 -0
  107. package/dist/{pipeline/commitInfo/getBuildId.js → context/transformJobOnlyVars.js} +41 -14
  108. package/dist/context/utils/envVars.d.ts +8 -0
  109. package/dist/context/utils/envVars.js +55 -0
  110. package/dist/defaults/index.js +3 -1
  111. package/dist/deploy/base/deploy.d.ts +5 -0
  112. package/dist/deploy/base/deploy.js +122 -0
  113. package/dist/deploy/base/index.d.ts +8 -0
  114. package/dist/deploy/base/index.js +44 -0
  115. package/dist/deploy/base/rollback.d.ts +5 -0
  116. package/dist/deploy/base/rollback.js +41 -0
  117. package/dist/deploy/base/stop.d.ts +5 -0
  118. package/dist/deploy/base/stop.js +46 -0
  119. package/dist/deploy/base/types.d.ts +2 -0
  120. package/dist/deploy/base/types.js +5 -0
  121. package/dist/deploy/base/variables.d.ts +5 -0
  122. package/dist/deploy/base/variables.js +11 -0
  123. package/dist/deploy/cloudRun/artifactsRegistry.d.ts +19 -0
  124. package/dist/deploy/cloudRun/artifactsRegistry.js +125 -0
  125. package/dist/deploy/cloudRun/cleanup.d.ts +2 -0
  126. package/dist/deploy/cloudRun/cleanup.js +53 -0
  127. package/dist/deploy/cloudRun/cloudRunRevisions.d.ts +2 -0
  128. package/dist/deploy/cloudRun/cloudRunRevisions.js +62 -0
  129. package/dist/deploy/cloudRun/createJobs/cloudRunJobs.d.ts +7 -0
  130. package/dist/deploy/cloudRun/createJobs/cloudRunJobs.js +207 -0
  131. package/dist/deploy/cloudRun/createJobs/cloudRunServices.d.ts +4 -0
  132. package/dist/deploy/cloudRun/createJobs/cloudRunServices.js +96 -0
  133. package/dist/deploy/cloudRun/createJobs/common.d.ts +18 -0
  134. package/dist/deploy/cloudRun/createJobs/common.js +93 -0
  135. package/dist/deploy/cloudRun/createJobs/constants.d.ts +1 -0
  136. package/dist/deploy/cloudRun/createJobs/constants.js +7 -0
  137. package/dist/deploy/cloudRun/createJobs/getCloudRunDeployScripts.d.ts +2 -0
  138. package/dist/deploy/cloudRun/createJobs/getCloudRunDeployScripts.js +62 -0
  139. package/dist/deploy/cloudRun/createJobs/getCloudRunStopScripts.d.ts +2 -0
  140. package/dist/deploy/cloudRun/createJobs/getCloudRunStopScripts.js +54 -0
  141. package/dist/deploy/cloudRun/createJobs/index.d.ts +3 -0
  142. package/dist/deploy/cloudRun/createJobs/index.js +57 -0
  143. package/dist/deploy/cloudRun/createJobs/volumes.d.ts +3 -0
  144. package/dist/deploy/cloudRun/createJobs/volumes.js +58 -0
  145. package/dist/deploy/cloudRun/index.d.ts +2 -2
  146. package/dist/deploy/cloudRun/index.js +17 -10
  147. package/dist/deploy/cloudRun/utils/createArgsString.d.ts +3 -1
  148. package/dist/deploy/cloudRun/utils/createArgsString.js +25 -17
  149. package/dist/deploy/cloudRun/utils/database.d.ts +6 -4
  150. package/dist/deploy/cloudRun/utils/database.js +28 -15
  151. package/dist/deploy/cloudRun/utils/gcloudServiceAccountLoginCommands.d.ts +2 -2
  152. package/dist/deploy/cloudRun/utils/gcloudServiceAccountLoginCommands.js +4 -2
  153. package/dist/deploy/cloudRun/utils/getServiceName.d.ts +2 -0
  154. package/dist/deploy/cloudRun/utils/getServiceName.js +10 -0
  155. package/dist/deploy/cloudRun/utils/jobName.d.ts +2 -1
  156. package/dist/deploy/cloudRun/utils/jobName.js +4 -2
  157. package/dist/deploy/cloudRun/utils/removeFirstLinesFromCommandOutput.d.ts +9 -0
  158. package/dist/deploy/cloudRun/utils/removeFirstLinesFromCommandOutput.js +18 -0
  159. package/dist/deploy/cloudSql/utils.d.ts +2 -1
  160. package/dist/deploy/cloudSql/utils.js +7 -2
  161. package/dist/deploy/custom/deployJob.d.ts +2 -2
  162. package/dist/deploy/custom/deployJob.js +24 -16
  163. package/dist/deploy/custom/index.d.ts +2 -2
  164. package/dist/deploy/custom/index.js +3 -1
  165. package/dist/deploy/dockerTag/deployJob.d.ts +2 -2
  166. package/dist/deploy/dockerTag/deployJob.js +51 -10
  167. package/dist/deploy/dockerTag/index.d.ts +2 -2
  168. package/dist/deploy/dockerTag/index.js +3 -1
  169. package/dist/deploy/index.d.ts +10 -9
  170. package/dist/deploy/index.js +13 -7
  171. package/dist/deploy/kubernetes/additionalSecretKeys.d.ts +3 -1
  172. package/dist/deploy/kubernetes/additionalSecretKeys.js +3 -1
  173. package/dist/deploy/kubernetes/cloudSql/index.d.ts +6 -5
  174. package/dist/deploy/kubernetes/cloudSql/index.js +14 -21
  175. package/dist/deploy/kubernetes/deployJob.d.ts +2 -2
  176. package/dist/deploy/kubernetes/deployJob.js +35 -45
  177. package/dist/deploy/kubernetes/index.d.ts +2 -2
  178. package/dist/deploy/kubernetes/index.js +52 -15
  179. package/dist/deploy/kubernetes/kubeEnv.d.ts +5 -4
  180. package/dist/deploy/kubernetes/kubeEnv.js +9 -5
  181. package/dist/deploy/kubernetes/kubeValues.d.ts +6 -9
  182. package/dist/deploy/kubernetes/kubeValues.js +16 -18
  183. package/dist/deploy/kubernetes/mongodb.d.ts +2 -2
  184. package/dist/deploy/kubernetes/mongodb.js +19 -16
  185. package/dist/deploy/sbom.d.ts +4 -0
  186. package/dist/deploy/sbom.js +20 -0
  187. package/dist/deploy/types/base.d.ts +18 -2
  188. package/dist/deploy/types/base.js +3 -1
  189. package/dist/deploy/types/custom.d.ts +3 -7
  190. package/dist/deploy/types/custom.js +3 -1
  191. package/dist/deploy/types/dockerTag.d.ts +3 -1
  192. package/dist/deploy/types/dockerTag.js +3 -1
  193. package/dist/deploy/types/googleCloudRun.d.ts +133 -24
  194. package/dist/deploy/types/googleCloudRun.js +3 -1
  195. package/dist/deploy/types/index.d.ts +6 -6
  196. package/dist/deploy/types/index.js +14 -8
  197. package/dist/deploy/types/kubernetes.d.ts +41 -55
  198. package/dist/deploy/types/kubernetes.js +3 -1
  199. package/dist/deploy/utils.d.ts +2 -2
  200. package/dist/deploy/utils.js +5 -2
  201. package/dist/globalScriptFunctions/index.d.ts +14 -0
  202. package/dist/globalScriptFunctions/index.js +37 -0
  203. package/dist/index.d.ts +5 -2
  204. package/dist/index.js +18 -9
  205. package/dist/packageInfos.d.ts +4 -0
  206. package/dist/packageInfos.js +20 -0
  207. package/dist/pipeline/__tests__/getPipelineStages.test.d.ts +1 -0
  208. package/dist/pipeline/__tests__/getPipelineStages.test.js +73 -0
  209. package/dist/pipeline/createAllJobs.d.ts +16 -6
  210. package/dist/pipeline/createAllJobs.js +99 -27
  211. package/dist/pipeline/createJobsForComponent.d.ts +2 -2
  212. package/dist/pipeline/createJobsForComponent.js +10 -152
  213. package/dist/pipeline/createJobsForWorkspace.d.ts +3 -0
  214. package/dist/pipeline/createJobsForWorkspace.js +12 -0
  215. package/dist/pipeline/createMainPipeline.d.ts +3 -0
  216. package/dist/pipeline/createMainPipeline.js +283 -0
  217. package/dist/pipeline/generatePipelineFiles.d.ts +7 -0
  218. package/dist/pipeline/generatePipelineFiles.js +304 -0
  219. package/dist/pipeline/getPipelineStages.d.ts +7 -0
  220. package/dist/pipeline/getPipelineStages.js +56 -0
  221. package/dist/pipeline/gitlab/createGitlabJobs.d.ts +11 -12
  222. package/dist/pipeline/gitlab/createGitlabJobs.js +259 -60
  223. package/dist/pipeline/gitlab/createGitlabPipeline.d.ts +9 -0
  224. package/dist/pipeline/gitlab/createGitlabPipeline.js +77 -0
  225. package/dist/pipeline/gitlab/gitlabReleaseJobs.d.ts +33 -0
  226. package/dist/pipeline/gitlab/gitlabReleaseJobs.js +25 -0
  227. package/dist/pipeline/gitlab/sortGitLabJobDefProps.d.ts +7 -0
  228. package/dist/pipeline/gitlab/sortGitLabJobDefProps.js +27 -0
  229. package/dist/pipeline/index.d.ts +3 -2
  230. package/dist/pipeline/index.js +16 -9
  231. package/dist/pipeline/packageManager.d.ts +3 -2
  232. package/dist/pipeline/packageManager.js +52 -26
  233. package/dist/pipeline/yarn/yarnUtils.d.ts +3 -2
  234. package/dist/pipeline/yarn/yarnUtils.js +65 -17
  235. package/dist/rules/index.d.ts +7 -2
  236. package/dist/rules/index.js +34 -16
  237. package/dist/runner/index.d.ts +1 -1
  238. package/dist/runner/index.js +3 -1
  239. package/dist/tsconfig.tsbuildinfo +1 -1
  240. package/dist/types/config.d.ts +52 -25
  241. package/dist/types/config.js +5 -2
  242. package/dist/types/context.d.ts +132 -37
  243. package/dist/types/context.js +12 -1
  244. package/dist/types/environmentContext.d.ts +15 -12
  245. package/dist/types/environmentContext.js +3 -1
  246. package/dist/types/gitlab-ci-yml.d.ts +769 -0
  247. package/dist/types/gitlab-ci-yml.js +10 -0
  248. package/dist/types/gitlab-types.d.ts +15 -96
  249. package/dist/types/gitlab-types.js +3 -1
  250. package/dist/types/index.d.ts +1 -0
  251. package/dist/types/index.js +14 -7
  252. package/dist/types/jobDefinition.d.ts +11 -0
  253. package/dist/types/jobDefinition.js +5 -0
  254. package/dist/types/jobs.d.ts +35 -16
  255. package/dist/types/jobs.js +3 -1
  256. package/dist/types/pipeline.d.ts +3 -3
  257. package/dist/types/pipeline.js +3 -1
  258. package/dist/types/utils.d.ts +1 -1
  259. package/dist/types/utils.js +3 -1
  260. package/dist/utils/gitlab.d.ts +2 -1
  261. package/dist/utils/gitlab.js +14 -3
  262. package/dist/utils/index.d.ts +2 -1
  263. package/dist/utils/index.js +10 -3
  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 +172 -0
  270. package/dist/variables/VariableValue.d.ts +3 -0
  271. package/dist/variables/VariableValue.js +5 -0
  272. package/dist/variables/VariableValueContainingReferences.d.ts +24 -0
  273. package/dist/variables/VariableValueContainingReferences.js +97 -0
  274. package/dist/variables/__tests__/resolveAllReferences.test.d.ts +1 -0
  275. package/dist/variables/__tests__/resolveAllReferences.test.js +218 -0
  276. package/dist/variables/__tests__/resolveAllReferencesOnce.test.d.ts +1 -0
  277. package/dist/variables/__tests__/resolveAllReferencesOnce.test.js +171 -0
  278. package/dist/variables/__tests__/resolveReferencesOnce.test.d.ts +1 -0
  279. package/dist/variables/__tests__/resolveReferencesOnce.test.js +199 -0
  280. package/dist/variables/__tests__/variableValue.test.d.ts +1 -0
  281. package/dist/variables/__tests__/variableValue.test.js +36 -0
  282. package/dist/variables/resolveAllReferences.d.ts +3 -0
  283. package/dist/{pipeline/createChildPipeline.js → variables/resolveAllReferences.js} +44 -47
  284. package/dist/variables/resolveAllReferencesOnce.d.ts +5 -0
  285. package/dist/variables/resolveAllReferencesOnce.js +191 -0
  286. package/dist/variables/resolveReferencesOnce.d.ts +8 -0
  287. package/dist/variables/resolveReferencesOnce.js +22 -0
  288. package/examples/.test-gen-ignore +1 -0
  289. package/examples/__snapshots__/cloud-run-http2.test.ts.snap +1418 -0
  290. package/examples/__snapshots__/cloud-run-memory-limit.test.ts.snap +1418 -0
  291. package/examples/__snapshots__/cloud-run-meteor-with-worker.test.ts.snap +1418 -0
  292. package/examples/__snapshots__/cloud-run-nextjs.test.ts.snap +1434 -0
  293. package/examples/__snapshots__/cloud-run-no-cpu-throttling.test.ts.snap +1418 -0
  294. package/examples/__snapshots__/cloud-run-no-service.test.ts.snap +1526 -0
  295. package/examples/__snapshots__/cloud-run-non-public.test.ts.snap +1418 -0
  296. package/examples/__snapshots__/cloud-run-post-stop-job.test.ts.snap +1436 -0
  297. package/examples/__snapshots__/cloud-run-service-custom-vpc-connector.test.ts.snap +1418 -0
  298. package/examples/__snapshots__/cloud-run-service-custom-vpc.test.ts.snap +1418 -0
  299. package/examples/__snapshots__/cloud-run-service-gen2.test.ts.snap +1418 -0
  300. package/examples/__snapshots__/cloud-run-service-increase-timout.test.ts.snap +1418 -0
  301. package/examples/__snapshots__/cloud-run-service-with-volumes.test.ts.snap +1490 -0
  302. package/examples/__snapshots__/cloud-run-storybook.test.ts.snap +1302 -0
  303. package/examples/__snapshots__/cloud-run-with-ngnix.test.ts.snap +1418 -0
  304. package/examples/__snapshots__/cloud-run-with-sql-reuse-db.test.ts.snap +2998 -0
  305. package/examples/__snapshots__/cloud-run-with-sql.test.ts.snap +1733 -0
  306. package/examples/__snapshots__/cloud-run-with-worker.test.ts.snap +1426 -0
  307. package/examples/__snapshots__/custom-build-job-with-tests.test.ts.snap +1285 -0
  308. package/examples/__snapshots__/custom-build-job.test.ts.snap +1174 -0
  309. package/examples/__snapshots__/custom-deploy.test.ts.snap +1168 -0
  310. package/examples/__snapshots__/custom-envs.test.ts.snap +798 -0
  311. package/examples/__snapshots__/custom-sbom-java.test.ts.snap +1182 -0
  312. package/examples/__snapshots__/git-submodule.test.ts.snap +1419 -0
  313. package/examples/__snapshots__/kubernetes-application-customization.test.ts.snap +1759 -0
  314. package/examples/__snapshots__/kubernetes-with-cloud-sql.test.ts.snap +1779 -0
  315. package/examples/__snapshots__/kubernetes-with-jobs.test.ts.snap +3357 -0
  316. package/examples/__snapshots__/kubernetes-with-mongodb.test.ts.snap +1883 -0
  317. package/examples/__snapshots__/local-dot-env.test.ts.snap +1342 -0
  318. package/examples/__snapshots__/meteor-kubernetes.test.ts.snap +1836 -0
  319. package/examples/__snapshots__/multiline-var.test.ts.snap +5679 -0
  320. package/examples/__snapshots__/native-app.test.ts.snap +2206 -0
  321. package/examples/__snapshots__/node-build-with-custom-image.test.ts.snap +1418 -0
  322. package/examples/__snapshots__/node-build-with-docker-additions.test.ts.snap +1426 -0
  323. package/examples/__snapshots__/rails-k8s-with-worker-dockerfile.test.ts.snap +1487 -0
  324. package/examples/__snapshots__/rails-k8s-with-worker.test.ts.snap +1471 -0
  325. package/examples/__snapshots__/referencing-other-vars.test.ts.snap +4739 -0
  326. package/examples/__snapshots__/wait-for-other-deploy.test.ts.snap +1368 -0
  327. package/examples/__snapshots__/workspace-api-www-turbo-cache.test.ts.snap +2338 -0
  328. package/examples/__snapshots__/workspace-api-www.test.ts.snap +2330 -0
  329. package/examples/__utils__/helpers.ts +9 -12
  330. package/examples/cloud-run-http2.test.ts +11 -0
  331. package/examples/cloud-run-http2.ts +29 -0
  332. package/examples/cloud-run-memory-limit.test.ts +11 -0
  333. package/examples/cloud-run-memory-limit.ts +10 -5
  334. package/examples/cloud-run-meteor-with-worker.test.ts +11 -0
  335. package/examples/cloud-run-meteor-with-worker.ts +37 -0
  336. package/examples/cloud-run-nextjs.test.ts +11 -0
  337. package/examples/cloud-run-nextjs.ts +28 -0
  338. package/examples/cloud-run-no-cpu-throttling.test.ts +11 -0
  339. package/examples/cloud-run-no-cpu-throttling.ts +6 -4
  340. package/examples/cloud-run-no-service.test.ts +11 -0
  341. package/examples/cloud-run-no-service.ts +33 -0
  342. package/examples/cloud-run-non-public.test.ts +11 -0
  343. package/examples/cloud-run-non-public.ts +5 -4
  344. package/examples/cloud-run-post-stop-job.test.ts +11 -0
  345. package/examples/cloud-run-post-stop-job.ts +42 -0
  346. package/examples/cloud-run-service-custom-vpc-connector.test.ts +11 -0
  347. package/examples/cloud-run-service-custom-vpc-connector.ts +30 -0
  348. package/examples/cloud-run-service-custom-vpc.test.ts +11 -0
  349. package/examples/cloud-run-service-custom-vpc.ts +31 -0
  350. package/examples/cloud-run-service-gen2.test.ts +11 -0
  351. package/examples/cloud-run-service-gen2.ts +29 -0
  352. package/examples/cloud-run-service-increase-timout.test.ts +11 -0
  353. package/examples/cloud-run-service-increase-timout.ts +29 -0
  354. package/examples/cloud-run-service-with-volumes.test.ts +11 -0
  355. package/examples/cloud-run-service-with-volumes.ts +56 -0
  356. package/examples/cloud-run-storybook.test.ts +11 -0
  357. package/examples/cloud-run-storybook.ts +33 -0
  358. package/examples/cloud-run-with-ngnix.test.ts +11 -0
  359. package/examples/cloud-run-with-ngnix.ts +29 -0
  360. package/examples/cloud-run-with-sql-reuse-db.test.ts +11 -0
  361. package/examples/cloud-run-with-sql-reuse-db.ts +5 -4
  362. package/examples/cloud-run-with-sql.test.ts +11 -0
  363. package/examples/cloud-run-with-sql.ts +7 -20
  364. package/examples/cloud-run-with-worker.test.ts +11 -0
  365. package/examples/cloud-run-with-worker.ts +37 -0
  366. package/examples/custom-build-job-with-tests.test.ts +11 -0
  367. package/examples/custom-build-job-with-tests.ts +14 -4
  368. package/examples/custom-build-job.test.ts +11 -0
  369. package/examples/custom-build-job.ts +5 -4
  370. package/examples/custom-deploy.test.ts +11 -0
  371. package/examples/custom-deploy.ts +15 -4
  372. package/examples/custom-envs.test.ts +11 -0
  373. package/examples/custom-envs.ts +5 -4
  374. package/examples/custom-sbom-java.test.ts +11 -0
  375. package/examples/custom-sbom-java.ts +10 -6
  376. package/examples/git-submodule.test.ts +11 -0
  377. package/examples/git-submodule.ts +30 -0
  378. package/examples/kubernetes-application-customization.test.ts +11 -0
  379. package/examples/kubernetes-application-customization.ts +7 -4
  380. package/examples/kubernetes-with-cloud-sql.test.ts +11 -0
  381. package/examples/kubernetes-with-cloud-sql.ts +7 -4
  382. package/examples/kubernetes-with-jobs.test.ts +11 -0
  383. package/examples/kubernetes-with-jobs.ts +7 -4
  384. package/examples/kubernetes-with-mongodb.test.ts +11 -0
  385. package/examples/kubernetes-with-mongodb.ts +7 -4
  386. package/examples/local-dot-env.test.ts +11 -0
  387. package/examples/local-dot-env.ts +27 -0
  388. package/examples/meteor-kubernetes.test.ts +11 -0
  389. package/examples/meteor-kubernetes.ts +64 -0
  390. package/examples/multiline-var.test.ts +11 -0
  391. package/examples/multiline-var.ts +107 -0
  392. package/examples/native-app.test.ts +11 -0
  393. package/examples/native-app.ts +86 -0
  394. package/examples/node-build-with-custom-image.test.ts +11 -0
  395. package/examples/node-build-with-custom-image.ts +26 -0
  396. package/examples/node-build-with-docker-additions.test.ts +11 -0
  397. package/examples/node-build-with-docker-additions.ts +29 -0
  398. package/examples/rails-k8s-with-worker-dockerfile.test.ts +33 -0
  399. package/examples/rails-k8s-with-worker.test.ts +11 -0
  400. package/examples/rails-k8s-with-worker.ts +23 -17
  401. package/examples/referencing-other-vars.test.ts +11 -0
  402. package/examples/referencing-other-vars.ts +83 -0
  403. package/examples/wait-for-other-deploy.test.ts +11 -0
  404. package/examples/wait-for-other-deploy.ts +5 -4
  405. package/examples/workspace-api-www-turbo-cache.test.ts +11 -0
  406. package/examples/workspace-api-www-turbo-cache.ts +52 -0
  407. package/examples/workspace-api-www.test.ts +11 -0
  408. package/examples/workspace-api-www.ts +46 -0
  409. package/package.json +77 -26
  410. package/scripts/generate-examples-test.ts +84 -0
  411. package/scripts/generate-gitlab-ci-types.ts +51 -0
  412. package/scripts/tsconfig.json +7 -0
  413. package/src/bash/BashExpression.ts +78 -0
  414. package/src/bash/bashEscape.ts +158 -0
  415. package/src/bash/bashExpressionPerPipelineType.ts +16 -0
  416. package/src/bash/bashYaml.ts +80 -0
  417. package/src/bash/getInjectVarsScript.ts +21 -0
  418. package/src/bash/index.ts +2 -0
  419. package/src/build/artifacts/createBuildJobArtifact.ts +61 -0
  420. package/src/build/base/__tests__/__snapshots__/createArtifactsConfig.test.ts.snap +49 -0
  421. package/src/build/base/__tests__/createArtifactsConfig.test.ts +41 -0
  422. package/src/build/base/constants.ts +2 -2
  423. package/src/build/base/createAppBuildJob.ts +70 -0
  424. package/src/build/base/createArtifactsConfig.ts +34 -0
  425. package/src/build/base/createBuildJobDefinition.ts +37 -0
  426. package/src/build/base/index.ts +64 -0
  427. package/src/build/base/writeBuildInfo.ts +3 -3
  428. package/src/build/base/writeDotEnv.ts +40 -0
  429. package/src/build/cache/createJobCache.ts +83 -0
  430. package/src/build/cache/getAllCacheConfigsFromConfig.ts +28 -0
  431. package/src/build/cache/transformLegacyJobCache.ts +14 -0
  432. package/src/build/custom/__tests__/testJob.test.ts +29 -0
  433. package/src/build/custom/buildJob.ts +18 -53
  434. package/src/build/custom/index.ts +2 -2
  435. package/src/build/custom/testJob.ts +40 -14
  436. package/src/build/docker.ts +149 -63
  437. package/src/build/index.ts +42 -10
  438. package/src/build/node/buildJob.ts +68 -69
  439. package/src/build/node/cache.ts +30 -35
  440. package/src/build/node/constants.ts +2 -3
  441. package/src/build/node/index.ts +8 -4
  442. package/src/build/node/meteor.ts +37 -47
  443. package/src/build/node/testJob.ts +61 -22
  444. package/src/build/node/yarn.ts +72 -27
  445. package/src/build/rails/build.ts +42 -12
  446. package/src/build/rails/index.ts +2 -2
  447. package/src/build/rails/test.ts +31 -15
  448. package/src/build/sbom.ts +48 -0
  449. package/src/build/types.ts +262 -79
  450. package/src/catladder-gitlab.ts +7 -56
  451. package/src/config/__tests__/__snapshots__/getAllEnvs.test.ts.snap +31 -0
  452. package/src/config/__tests__/__snapshots__/getAllEnvsInAllComponents.test.ts.snap +15 -0
  453. package/src/config/__tests__/getAllEnvs.test.ts +71 -0
  454. package/src/config/__tests__/getAllEnvsInAllComponents.test.ts +63 -0
  455. package/src/config/configruedEnvs.ts +6 -6
  456. package/src/config/readConfig.ts +15 -22
  457. package/src/constants.ts +5 -2
  458. package/src/context/createAllComponentsContext.ts +31 -0
  459. package/src/context/createComponentContext.ts +134 -0
  460. package/src/context/createWorkspaceContext.ts +56 -0
  461. package/src/context/getBuildInfoVariables.ts +36 -0
  462. package/src/context/getEnvConfig.ts +3 -3
  463. package/src/context/getEnvType.ts +1 -1
  464. package/src/context/getEnvironment.ts +9 -23
  465. package/src/context/getEnvironmentContext.ts +25 -29
  466. package/src/context/getEnvironmentVariables.ts +127 -84
  467. package/src/context/getLabels.ts +5 -4
  468. package/src/context/getReviewSlug.ts +27 -0
  469. package/src/context/index.ts +1 -65
  470. package/src/context/transformJobOnlyVars.ts +45 -0
  471. package/src/context/utils/envVars.ts +27 -0
  472. package/src/deploy/base/deploy.ts +130 -0
  473. package/src/deploy/base/index.ts +27 -0
  474. package/src/deploy/base/rollback.ts +35 -0
  475. package/src/deploy/base/stop.ts +40 -0
  476. package/src/deploy/base/types.ts +3 -0
  477. package/src/deploy/base/variables.ts +5 -0
  478. package/src/deploy/cloudRun/artifactsRegistry.ts +126 -0
  479. package/src/deploy/cloudRun/cleanup.ts +30 -0
  480. package/src/deploy/cloudRun/cloudRunRevisions.ts +65 -0
  481. package/src/deploy/cloudRun/createJobs/cloudRunJobs.ts +227 -0
  482. package/src/deploy/cloudRun/createJobs/cloudRunServices.ts +86 -0
  483. package/src/deploy/cloudRun/createJobs/common.ts +59 -0
  484. package/src/deploy/cloudRun/createJobs/constants.ts +1 -0
  485. package/src/deploy/cloudRun/createJobs/getCloudRunDeployScripts.ts +71 -0
  486. package/src/deploy/cloudRun/createJobs/getCloudRunStopScripts.ts +34 -0
  487. package/src/deploy/cloudRun/createJobs/index.ts +51 -0
  488. package/src/deploy/cloudRun/createJobs/volumes.ts +23 -0
  489. package/src/deploy/cloudRun/index.ts +85 -59
  490. package/src/deploy/cloudRun/utils/createArgsString.ts +21 -13
  491. package/src/deploy/cloudRun/utils/database.ts +31 -9
  492. package/src/deploy/cloudRun/utils/gcloudServiceAccountLoginCommands.ts +9 -11
  493. package/src/deploy/cloudRun/utils/getServiceName.ts +3 -0
  494. package/src/deploy/cloudRun/utils/jobName.ts +7 -2
  495. package/src/deploy/cloudRun/utils/removeFirstLinesFromCommandOutput.ts +12 -0
  496. package/src/deploy/cloudSql/utils.ts +13 -10
  497. package/src/deploy/custom/deployJob.ts +35 -25
  498. package/src/deploy/custom/index.ts +2 -2
  499. package/src/deploy/dockerTag/deployJob.ts +12 -14
  500. package/src/deploy/dockerTag/index.ts +8 -7
  501. package/src/deploy/index.ts +15 -12
  502. package/src/deploy/kubernetes/additionalSecretKeys.ts +3 -1
  503. package/src/deploy/kubernetes/cloudSql/index.ts +16 -25
  504. package/src/deploy/kubernetes/deployJob.ts +52 -51
  505. package/src/deploy/kubernetes/index.ts +43 -35
  506. package/src/deploy/kubernetes/kubeEnv.ts +12 -10
  507. package/src/deploy/kubernetes/kubeValues.ts +15 -19
  508. package/src/deploy/kubernetes/mongodb.ts +17 -16
  509. package/src/deploy/sbom.ts +32 -0
  510. package/src/deploy/types/base.ts +20 -0
  511. package/src/deploy/types/custom.ts +3 -7
  512. package/src/deploy/types/dockerTag.ts +2 -0
  513. package/src/deploy/types/googleCloudRun.ts +140 -10
  514. package/src/deploy/types/index.ts +2 -2
  515. package/src/deploy/types/kubernetes.ts +24 -37
  516. package/src/deploy/utils.ts +5 -5
  517. package/src/globalScriptFunctions/index.ts +30 -0
  518. package/src/index.ts +4 -1
  519. package/src/packageInfos.ts +14 -0
  520. package/src/pipeline/__tests__/__snapshots__/getPipelineStages.test.ts.snap +69 -0
  521. package/src/pipeline/__tests__/getPipelineStages.test.ts +63 -0
  522. package/src/pipeline/createAllJobs.ts +67 -33
  523. package/src/pipeline/createJobsForComponent.ts +11 -41
  524. package/src/pipeline/createJobsForWorkspace.ts +12 -0
  525. package/src/pipeline/createMainPipeline.ts +119 -0
  526. package/src/pipeline/generatePipelineFiles.ts +100 -0
  527. package/src/pipeline/getPipelineStages.ts +23 -0
  528. package/src/pipeline/gitlab/createGitlabJobs.ts +391 -98
  529. package/src/pipeline/gitlab/createGitlabPipeline.ts +35 -0
  530. package/src/pipeline/gitlab/gitlabReleaseJobs.ts +23 -0
  531. package/src/pipeline/gitlab/sortGitLabJobDefProps.ts +59 -0
  532. package/src/pipeline/index.ts +2 -1
  533. package/src/pipeline/packageManager.ts +50 -31
  534. package/src/pipeline/yarn/yarnUtils.ts +39 -10
  535. package/src/rules/index.ts +36 -9
  536. package/src/runner/index.ts +0 -1
  537. package/src/types/config.ts +52 -12
  538. package/src/types/context.ts +176 -35
  539. package/src/types/environmentContext.ts +18 -13
  540. package/src/types/gitlab-ci-yml.ts +891 -0
  541. package/src/types/gitlab-types.ts +54 -87
  542. package/src/types/index.ts +1 -0
  543. package/src/types/jobDefinition.ts +34 -0
  544. package/src/types/jobs.ts +37 -17
  545. package/src/types/utils.ts +4 -4
  546. package/src/utils/gitlab.ts +28 -1
  547. package/src/utils/index.ts +6 -3
  548. package/src/utils/jsonParse.ts +7 -0
  549. package/src/utils/removeUndefined.ts +4 -0
  550. package/src/utils/writeFiles.ts +52 -0
  551. package/src/variables/VariableValue.ts +6 -0
  552. package/src/variables/VariableValueContainingReferences.ts +89 -0
  553. package/src/variables/__tests__/resolveAllReferences.test.ts +110 -0
  554. package/src/variables/__tests__/resolveAllReferencesOnce.test.ts +64 -0
  555. package/src/variables/__tests__/resolveReferencesOnce.test.ts +117 -0
  556. package/src/variables/__tests__/variableValue.test.ts +73 -0
  557. package/src/variables/resolveAllReferences.ts +46 -0
  558. package/src/variables/resolveAllReferencesOnce.ts +44 -0
  559. package/src/variables/resolveReferencesOnce.ts +29 -0
  560. package/tsconfig.json +1 -1
  561. package/bin/catladder-gitlab-dev.js +0 -3
  562. package/bin/catladder-gitlab.js +0 -3
  563. package/dist/build/base/createBuildJob.d.ts +0 -7
  564. package/dist/bundles/catladder-gitlab/index.js +0 -33200
  565. package/dist/context/__tests__/resolveReferences.test.js +0 -336
  566. package/dist/context/resolveReferences.d.ts +0 -4
  567. package/dist/context/resolveReferences.js +0 -254
  568. package/dist/deploy/base.d.ts +0 -10
  569. package/dist/deploy/base.js +0 -112
  570. package/dist/deploy/cloudRun/deployJob.d.ts +0 -3
  571. package/dist/deploy/cloudRun/deployJob.js +0 -242
  572. package/dist/deploy/kubernetes/processSecretsAsFiles.d.ts +0 -86
  573. package/dist/deploy/kubernetes/processSecretsAsFiles.js +0 -31
  574. package/dist/pipeline/commitInfo/getBuildId.d.ts +0 -1
  575. package/dist/pipeline/commitInfo/getCommitInfo.d.ts +0 -2
  576. package/dist/pipeline/createChildPipeline.d.ts +0 -3
  577. package/dist/verify/reporting.d.ts +0 -3
  578. package/dist/verify/reporting.js +0 -48
  579. package/examples/__snapshots__/cloud-run-memory-limit.ts.snap +0 -1776
  580. package/examples/__snapshots__/cloud-run-no-cpu-throttling.ts.snap +0 -1776
  581. package/examples/__snapshots__/cloud-run-non-public.ts.snap +0 -1776
  582. package/examples/__snapshots__/cloud-run-with-sql-reuse-db.ts.snap +0 -3524
  583. package/examples/__snapshots__/cloud-run-with-sql.ts.snap +0 -3535
  584. package/examples/__snapshots__/custom-build-job-with-tests.ts.snap +0 -1630
  585. package/examples/__snapshots__/custom-build-job.ts.snap +0 -1378
  586. package/examples/__snapshots__/custom-deploy.ts.snap +0 -1580
  587. package/examples/__snapshots__/custom-envs.ts.snap +0 -1164
  588. package/examples/__snapshots__/custom-sbom-java.ts.snap +0 -1386
  589. package/examples/__snapshots__/kubernetes-application-customization.ts.snap +0 -2476
  590. package/examples/__snapshots__/kubernetes-with-cloud-sql-legacy.ts.snap +0 -2436
  591. package/examples/__snapshots__/kubernetes-with-cloud-sql.ts.snap +0 -2448
  592. package/examples/__snapshots__/kubernetes-with-jobs.ts.snap +0 -4469
  593. package/examples/__snapshots__/kubernetes-with-mongodb.ts.snap +0 -2640
  594. package/examples/__snapshots__/rails-k8s-with-worker.ts.snap +0 -2143
  595. package/examples/__snapshots__/wait-for-other-deploy.ts.snap +0 -2018
  596. package/examples/kubernetes-with-cloud-sql-legacy.ts +0 -33
  597. package/scripts/bundle +0 -2
  598. package/src/build/base/createBuildJob.ts +0 -50
  599. package/src/context/__tests__/resolveReferences.test.ts +0 -143
  600. package/src/context/resolveReferences.ts +0 -70
  601. package/src/deploy/base.ts +0 -144
  602. package/src/deploy/cloudRun/deployJob.ts +0 -275
  603. package/src/deploy/kubernetes/processSecretsAsFiles.ts +0 -34
  604. package/src/pipeline/commitInfo/getBuildId.ts +0 -6
  605. package/src/pipeline/commitInfo/getCommitInfo.ts +0 -12
  606. package/src/pipeline/createChildPipeline.ts +0 -45
  607. package/src/verify/reporting.ts +0 -69
  608. /package/dist/{context/__tests__/resolveReferences.test.d.ts → build/base/__tests__/createArtifactsConfig.test.d.ts} +0 -0
@@ -1,104 +1,71 @@
1
- export type Artifacts = {
2
- paths: string[];
3
- expire_in?: string;
4
- when?: "always" | "on_success" | "on_failure";
5
- reports?: ArtifactReports;
6
- };
7
- // Reports won't show up on MRs until https://gitlab.com/groups/gitlab-org/-/epics/8205
8
- export type ArtifactReports =
9
- | { accessibility: string | string[] }
10
- | { coverage_report: { coverage_format: string; path: string } }
11
- | { codequality: string | string[] }
12
- | { cyclonedx: string | string[] }
13
- | { dotenv: string | string[] }
14
- | { junit: string | string[] }
15
- | { sast: string }
16
- | { secret_detection: string }
17
- | { terraform: string };
18
- export type GitlabJobCache = {
19
- key: GitlabJobCacheKey;
20
- policy?: string;
21
- paths: string[];
22
- };
23
- export type GitlabJobCacheKey =
24
- | string
25
- | {
26
- files: string[];
27
- prefix?: string;
28
- };
29
- export type GitlabRule = {
30
- if?: string;
31
- when?: "always" | "on_success" | "manual" | "never"; // todo
32
- allow_failure?: boolean;
33
- };
34
- export type Retry = {
35
- max: number;
36
- when: string[];
37
- };
1
+ import type { GitlabJobWithContext } from "../pipeline/gitlab/createGitlabJobs";
2
+ import type {
3
+ Artifacts as GitlabCiArtifacts,
4
+ JobTemplate,
5
+ Cache as GitlabJobCache,
6
+ Rules,
7
+ } from "./gitlab-ci-yml";
38
8
 
39
- export type GitlabJobService = {
40
- name: string;
41
- command?: string[];
42
- entrypoint?: string[];
43
- alias?: string;
44
- };
9
+ export { Retry, Image as GitlabJobImage } from "./gitlab-ci-yml";
45
10
 
46
- export type GitlabJobImage =
47
- | string
48
- | {
49
- name: string;
50
- entrypoint?: string[];
51
- };
11
+ // Reports won't show up on MRs until https://gitlab.com/groups/gitlab-org/-/epics/8205
12
+ export type Artifacts = GitlabCiArtifacts;
13
+ export type { GitlabJobCache };
14
+ export type GitlabRule = Exclude<
15
+ Exclude<Rules, null>[number],
16
+ string | string[] // we only use the object version
17
+ >;
18
+ export type GitlabEnvironment = Omit<
19
+ Exclude<JobTemplate["environment"], undefined | string>,
20
+ "deployment_tier"
21
+ >;
52
22
 
53
- export type GitlabEnvironment = {
54
- url: string;
55
- name: string;
56
- kubernetes?: {
57
- namespace?: string;
58
- };
59
- action?: "stop" | "start" | "prepare" | "access"; // defaults to start
60
- on_stop?: string; // other job to run on stop
61
- auto_stop_in?: string;
62
- };
63
- export type GitlabJobDef = {
64
- stage: string;
65
- before_script?: string[];
66
- script: (string | undefined)[];
67
- interruptible?: boolean;
68
- needs?: Array<string | { job: string; artifacts: boolean }>;
23
+ export interface GitlabJobDef
24
+ extends Pick<
25
+ JobTemplate,
26
+ | "after_script"
27
+ | "allow_failure"
28
+ | "artifacts"
29
+ | "before_script"
30
+ | "coverage"
31
+ | "dependencies"
32
+ | "environment"
33
+ | "except"
34
+ | "hooks"
35
+ | "image"
36
+ | "interruptible"
37
+ | "needs"
38
+ | "only"
39
+ | "parallel"
40
+ | "release"
41
+ | "resource_group"
42
+ | "retry"
43
+ | "rules"
44
+ | "script"
45
+ | "services"
46
+ | "stage"
47
+ | "tags"
48
+ | "trigger"
49
+ | "variables"
50
+ > {
51
+ stage: JobTemplate["stage"];
69
52
  rules?: GitlabRule[];
70
53
  cache?: GitlabJobCache | GitlabJobCache[];
71
54
  artifacts?: Artifacts;
72
- retry?: Retry;
73
- services?: GitlabJobService[];
74
- image?: GitlabJobImage;
75
- variables?: GitlabVariables;
76
- dependencies?: string[];
77
- environment?: GitlabEnvironment;
78
- allow_failure?: boolean;
79
- parallel?: number;
80
- trigger?: {
81
- strategy: "depend";
82
- include: Array<{
83
- artifact: string;
84
- job: string;
85
- }>;
86
- };
87
- };
88
-
89
- export type GitlabVariables = Record<string, string | undefined>;
55
+ tags?: string[];
56
+ }
90
57
 
91
58
  /**
92
59
  * this is not precicily the type of a gitlab-pipeline
93
60
  * the jobs nee to be merge into the object.
94
61
  * Problem is, that this type cannot be represented properly with typescript, see https://github.com/microsoft/TypeScript/issues/17867
95
62
  */
96
- export type GitlabPipeline = {
63
+ export interface GitlabPipeline extends Pick<JobTemplate, "variables"> {
97
64
  image: string;
98
- variables: GitlabVariables;
99
65
  workflow?: {
100
66
  rules: GitlabRule[];
101
67
  };
102
68
  stages: string[];
103
- jobs: Record<string, GitlabJobDef>;
104
- };
69
+ jobs: Record<string, GitlabJobWithContext>;
70
+ before_script?: string[];
71
+ }
@@ -1,4 +1,5 @@
1
1
  export * from "./config";
2
2
  export * from "./gitlab-types";
3
3
  export * from "./context";
4
+ export * from "./jobDefinition";
4
5
  export * from "./pipeline";
@@ -0,0 +1,34 @@
1
+ import type { CacheConfig } from "../build";
2
+ import type { CatladderJob } from "./jobs";
3
+
4
+ // new intermediate types. Currently not widely used, but we will built a bit more abstraction on top of this
5
+
6
+ export type AppBuildJobDefinition = Partial<
7
+ Omit<CatladderJob, "artifacts" | "cache">
8
+ > & {
9
+ cache?: CacheConfig[];
10
+ };
11
+
12
+ export type DockerBuildJobDefinition = AppBuildJobDefinition; // currently the same
13
+
14
+ export type DeployJobDefinition = Pick<
15
+ CatladderJob,
16
+ | "script"
17
+ | "variables"
18
+ | "image"
19
+ | "artifacts"
20
+ | "services"
21
+ | "runnerVariables"
22
+ > & {
23
+ cache?: CacheConfig[];
24
+ };
25
+
26
+ export type StopJobDefinition = Pick<
27
+ CatladderJob,
28
+ "script" | "variables" | "image" | "runnerVariables"
29
+ >;
30
+
31
+ export type RollbackJobDefinition = Pick<
32
+ CatladderJob,
33
+ "script" | "variables" | "runnerVariables" | "image"
34
+ >;
package/src/types/jobs.ts CHANGED
@@ -1,13 +1,14 @@
1
+ import type { UnspecifiedEnvVars } from "..";
1
2
  import type {
2
3
  Artifacts,
3
4
  GitlabEnvironment,
4
5
  GitlabJobCache,
5
- GitlabRule,
6
- GitlabVariables,
7
- GitlabJobService,
6
+ GitlabJobDef,
8
7
  GitlabJobImage,
8
+ GitlabRule,
9
9
  } from "./gitlab-types";
10
10
 
11
+ export type CatladderJobCache = GitlabJobCache;
11
12
  export const BASE_STAGES = [
12
13
  "setup",
13
14
  "test",
@@ -17,11 +18,18 @@ export const BASE_STAGES = [
17
18
  "rollback",
18
19
  "stop",
19
20
  ] as const;
20
- export type BaseStage = typeof BASE_STAGES[number];
21
+ export type BaseStage = (typeof BASE_STAGES)[number];
21
22
 
22
23
  export type CatladderJobNeed =
23
24
  | string
24
- | { job: string; artifacts: boolean; componentName?: string };
25
+ | { job: string; artifacts: boolean; componentName?: string }
26
+ | { job: string; artifacts: boolean; workspaceName: string };
27
+
28
+ export type CatladderJobEnvironmentConfig = {
29
+ action?: GitlabEnvironment["action"];
30
+ on_stop?: GitlabEnvironment["on_stop"];
31
+ auto_stop_in?: string;
32
+ };
25
33
  export type CatladderJob<S = BaseStage> = {
26
34
  /**
27
35
  * the name of the job (without any env or app prefix and suffix)
@@ -51,6 +59,7 @@ export type CatladderJob<S = BaseStage> = {
51
59
  needsStages?: {
52
60
  stage: S;
53
61
  artifacts?: boolean;
62
+ workspaceName?: string;
54
63
  }[];
55
64
 
56
65
  /**
@@ -61,18 +70,10 @@ export type CatladderJob<S = BaseStage> = {
61
70
  */
62
71
  needs?: Array<CatladderJobNeed>;
63
72
 
64
- /**
65
- * @deprecated set `componentName` to `needs` if you want to wait for a job from another component
66
- */
67
- needsOtherComponent?: Array<{
68
- componentName: string;
69
- job: string;
70
- artifacts: boolean;
71
- }>;
72
73
  /**
73
74
  * cache config, we use here the same shape as gitlab itself
74
75
  */
75
- cache?: GitlabJobCache | GitlabJobCache[];
76
+ cache?: CatladderJobCache | CatladderJobCache[];
76
77
 
77
78
  /**
78
79
  * job artifacts, we also use gitlab shape here
@@ -82,7 +83,7 @@ export type CatladderJob<S = BaseStage> = {
82
83
  /**
83
84
  * additional services, mainly used for docker
84
85
  */
85
- services?: GitlabJobService[];
86
+ services?: GitlabJobDef["services"];
86
87
 
87
88
  /**
88
89
  * image to use
@@ -92,14 +93,28 @@ export type CatladderJob<S = BaseStage> = {
92
93
  /**
93
94
  * variables to pass
94
95
  */
95
- variables: GitlabVariables;
96
+ variables: UnspecifiedEnvVars | undefined;
97
+
98
+ /**
99
+ * additional vars only for the runner.
100
+ * Also if you use services: that require env vars, you need to set them here.
101
+ *
102
+ */
103
+ runnerVariables?: Record<string, string>;
96
104
 
97
105
  /**
98
106
  * whether failures are allowed
99
107
  */
100
108
  allow_failure?: boolean;
101
109
 
102
- environment?: GitlabEnvironment;
110
+ /**
111
+ * gitlab environment config, subject to change
112
+ */
113
+ environment?: CatladderJobEnvironmentConfig;
114
+
115
+ /** */
116
+
117
+ when?: GitlabRule["when"];
103
118
 
104
119
  rules?: GitlabRule[];
105
120
 
@@ -109,4 +124,9 @@ export type CatladderJob<S = BaseStage> = {
109
124
  * We use the same shape as GitLab itself.
110
125
  */
111
126
  parallel?: number;
127
+
128
+ /**
129
+ * tags for the underlying job runner (e.g gitlab)
130
+ */
131
+ jobTags?: string[];
112
132
  };
@@ -1,7 +1,7 @@
1
1
  export type PartialDeep<T> = T extends any[]
2
2
  ? T
3
3
  : T extends Record<string, any>
4
- ? {
5
- [P in keyof T]?: PartialDeep<T[P]>;
6
- }
7
- : T;
4
+ ? {
5
+ [P in keyof T]?: PartialDeep<T[P]>;
6
+ }
7
+ : T;
@@ -1,3 +1,5 @@
1
+ import { registerGlobalScriptFunction } from "../globalScriptFunctions";
2
+
1
3
  export const allowFailureInScripts = (script: string[]): string[] => [
2
4
  "set +e", // disable fail job on error
3
5
  ...script,
@@ -11,7 +13,7 @@ export const repeatOnFailure = (
11
13
  command: string,
12
14
  options: {
13
15
  pauseInSeconds: number;
14
- }
16
+ },
15
17
  ): string => {
16
18
  return `
17
19
  until ${command}
@@ -21,3 +23,28 @@ export const repeatOnFailure = (
21
23
  done
22
24
  `;
23
25
  };
26
+
27
+ const start = registerGlobalScriptFunction(
28
+ "collapseable_section_start",
29
+ `local section_title="\${1}"
30
+ local section_description="\${2:-$section_title}"
31
+ echo -e "section_start:\`date +%s\`:\${section_title}[collapsed=true]\\r\\e[0K$\{section_description}"
32
+ `,
33
+ );
34
+
35
+ const end = registerGlobalScriptFunction(
36
+ "collapseable_section_end",
37
+ `local section_title="\${1}"
38
+ echo -e "section_end:\`date +%s\`:\${section_title}\\r\\e[0K"
39
+ `,
40
+ );
41
+
42
+ export const collapseableSection =
43
+ (name: string, header: string) =>
44
+ (commands: string[]): string[] => {
45
+ return [
46
+ start.invoke(`"${name}"`, `"${header}"`),
47
+ ...commands,
48
+ end.invoke(`"${name}"`),
49
+ ];
50
+ };
@@ -1,19 +1,22 @@
1
1
  import { isNil, mergeWith } from "lodash";
2
2
 
3
3
  export function notNil<TValue>(
4
- value: TValue | null | undefined
4
+ value: TValue | null | undefined,
5
5
  ): value is TValue {
6
6
  return value !== null && value !== undefined;
7
7
  }
8
8
 
9
- export const ensureArray = <T>(s: T | T[]): T[] | null =>
9
+ export const ensureArrayOrNull = <T>(s: undefined | T | T[]): T[] | null =>
10
10
  isNil(s) ? null : Array.isArray(s) ? s : [s];
11
11
 
12
+ export const ensureArray = <T>(s: undefined | T | T[]): T[] =>
13
+ ensureArrayOrNull(s) ?? [];
14
+
12
15
  // see https://github.com/lodash/lodash/issues/5384
13
16
  export const mergeWithMergingArrays = <A, B>(obj1: A, obj2: B): A & B => {
14
17
  return mergeWith({}, obj1, obj2, (prop1, prop2) =>
15
18
  Array.isArray(prop1) && Array.isArray(prop2)
16
19
  ? [...prop1, ...prop2]
17
- : undefined
20
+ : undefined,
18
21
  );
19
22
  };
@@ -0,0 +1,7 @@
1
+ export const jsonParseOrThrow = (str: string): any => {
2
+ try {
3
+ return JSON.parse(str);
4
+ } catch (e) {
5
+ throw new Error(`could not parse json: ${str}`);
6
+ }
7
+ };
@@ -0,0 +1,4 @@
1
+ export const removeUndefined = <T extends object>(obj: T): T =>
2
+ Object.fromEntries(
3
+ Object.entries(obj).filter(([, value]) => value !== undefined),
4
+ ) as T;
@@ -0,0 +1,52 @@
1
+ import { writeFile } from "fs/promises";
2
+ import { stringify } from "yaml";
3
+
4
+ export const getAutoGeneratedHeader = (commentChar: string) => {
5
+ return [
6
+ "-------------------------------------------------",
7
+ `🐱 🔨 This file is generated by catladder`,
8
+ `🚨 Do not edit this file manually 🚨`,
9
+ "-------------------------------------------------",
10
+ ]
11
+ .map((line) => `${commentChar} ${line}`)
12
+ .join("\n")
13
+ .concat("\n");
14
+ };
15
+
16
+ export const writeGeneratedFile = async (
17
+ path: string,
18
+ content: string,
19
+ {
20
+ commentChar,
21
+ }: {
22
+ commentChar: string;
23
+ },
24
+ ) => {
25
+ await writeFile(
26
+ path,
27
+ // need to spread out the jobs, forgot why
28
+ [getAutoGeneratedHeader(commentChar), content].join("\n"),
29
+ {
30
+ encoding: "utf-8",
31
+ },
32
+ );
33
+ };
34
+
35
+ type StringifyOptions = Exclude<
36
+ Parameters<typeof stringify>[2],
37
+ null | undefined | string | number
38
+ >;
39
+ export const yamlStringifyOptions: StringifyOptions = {
40
+ // prevents colapsing long command statements into multiple lines
41
+ lineWidth: 0,
42
+ // represent multi line commands as single line json strings
43
+ doubleQuotedAsJSON: true,
44
+ // Better readability when bash commands most often use double quotes
45
+ singleQuote: true,
46
+ };
47
+
48
+ export const writeYamlfile = async (path: string, data: any) => {
49
+ await writeGeneratedFile(path, stringify(data, yamlStringifyOptions), {
50
+ commentChar: "#",
51
+ });
52
+ };
@@ -0,0 +1,6 @@
1
+ import type { BashExpression } from "../bash/BashExpression";
2
+ import type { VariableValueContainingReferences } from "./VariableValueContainingReferences";
3
+ export type VariableValue =
4
+ | VariableValueContainingReferences
5
+ | BashExpression
6
+ | string;
@@ -0,0 +1,89 @@
1
+ import { BashExpression } from "../bash/BashExpression";
2
+ import type { EscapeOptions } from "../bash/bashEscape";
3
+ import { escapeBashExpression, escapeString } from "../bash/bashEscape";
4
+
5
+ export class UnresolvableReference {
6
+ constructor(public reference: VariableReference) {}
7
+ public toString() {
8
+ return `Unresolvable reference: ${this.reference.toString()}`;
9
+ }
10
+ }
11
+ export class VariableReference {
12
+ public componentName: string;
13
+ public variableName: string;
14
+
15
+ constructor(componentName: string, variableName: string) {
16
+ this.componentName = componentName;
17
+ this.variableName = variableName;
18
+ }
19
+
20
+ public toString() {
21
+ return `\${${this.componentName}:${this.variableName}}`;
22
+ }
23
+ }
24
+
25
+ type VariableValuePart =
26
+ | string
27
+ | BashExpression
28
+ | VariableReference
29
+ | UnresolvableReference;
30
+
31
+ type MaybeArray<T> = T | T[];
32
+ export class VariableValueContainingReferences {
33
+ public parts: VariableValuePart[];
34
+ constructor(
35
+ parts: MaybeArray<VariableValuePart | VariableValueContainingReferences>,
36
+ ) {
37
+ this.parts = (Array.isArray(parts) ? parts : [parts]).flatMap((part) =>
38
+ part instanceof VariableValueContainingReferences
39
+ ? part.parts
40
+ : part === ""
41
+ ? []
42
+ : [part],
43
+ );
44
+ }
45
+
46
+ public toString(
47
+ options: EscapeOptions = {
48
+ quotes: false,
49
+ },
50
+ ) {
51
+ return this.parts
52
+ .map((part) => {
53
+ if (typeof part === "string") {
54
+ return escapeString(part, options);
55
+ } else if (part instanceof BashExpression) {
56
+ return escapeBashExpression(part, options);
57
+ } else {
58
+ return part.toString();
59
+ }
60
+ })
61
+ .join("");
62
+ }
63
+ }
64
+
65
+ // regex to resolve references in catladder variables
66
+ // those expressions have the pattern ${componentName:variableName}
67
+ const REGEX = /\$\{(([^:}]+):)?([^}]+)}/gm;
68
+ export const createVariableValueContainingReferencesFromString = (
69
+ value: string,
70
+ options: { componentName: string },
71
+ ) => {
72
+ const parts: Array<VariableValuePart> = [];
73
+ let match: any;
74
+ let lastIndex = 0;
75
+ while ((match = REGEX.exec(value)) !== null) {
76
+ const [fullMatch, _, otherComponentName, variableName] = match;
77
+
78
+ parts.push(value.slice(lastIndex, match.index));
79
+ parts.push(
80
+ new VariableReference(
81
+ otherComponentName || options.componentName,
82
+ variableName,
83
+ ),
84
+ );
85
+ lastIndex = REGEX.lastIndex;
86
+ }
87
+ parts.push(value.slice(lastIndex));
88
+ return new VariableValueContainingReferences(parts);
89
+ };
@@ -0,0 +1,110 @@
1
+ import {
2
+ VariableValueContainingReferences,
3
+ createVariableValueContainingReferencesFromString,
4
+ } from "../VariableValueContainingReferences";
5
+ import { resolveAllReferences } from "../resolveAllReferences";
6
+
7
+ describe("replaceAllReferences", () => {
8
+ it("should replace all references recursivly", async () => {
9
+ const values = {
10
+ myVar: createVariableValueContainingReferencesFromString(
11
+ "the 2nd component has ${component2:variable1} and self reference ${variable2}",
12
+ {
13
+ componentName: "component1",
14
+ },
15
+ ),
16
+ myOtherVar: createVariableValueContainingReferencesFromString(
17
+ "the third component has ${component3:variable1}, isn't that cool?",
18
+ {
19
+ componentName: "component1",
20
+ },
21
+ ),
22
+ myThirdVar: createVariableValueContainingReferencesFromString(
23
+ "value from component3: ${component3:variable3}",
24
+ {
25
+ componentName: "component1",
26
+ },
27
+ ),
28
+ };
29
+
30
+ const getEnvVars = async (componentName: string) => {
31
+ return {
32
+ variable1: createVariableValueContainingReferencesFromString(
33
+ `i am variable1 from ${componentName}`,
34
+ { componentName },
35
+ ),
36
+ variable2: createVariableValueContainingReferencesFromString(
37
+ `foo from ${componentName}`,
38
+ {
39
+ componentName,
40
+ },
41
+ ),
42
+ variable3: createVariableValueContainingReferencesFromString(
43
+ `i am referencing \${component1:variable1}`,
44
+ { componentName },
45
+ ),
46
+ };
47
+ };
48
+
49
+ const result = await resolveAllReferences(values, getEnvVars);
50
+ expect(result).toEqual({
51
+ myVar: new VariableValueContainingReferences([
52
+ "the 2nd component has ",
53
+ "i am variable1 from component2",
54
+ " and self reference ",
55
+ "foo from component1",
56
+ ]),
57
+ myOtherVar: new VariableValueContainingReferences([
58
+ "the third component has ",
59
+ "i am variable1 from component3",
60
+ ", isn't that cool?",
61
+ ]),
62
+ myThirdVar: new VariableValueContainingReferences([
63
+ "value from component3: ",
64
+ "i am referencing ",
65
+ "i am variable1 from component1",
66
+ ]),
67
+ });
68
+ });
69
+
70
+ it("detects infinte loop", async () => {
71
+ const values = {
72
+ myVar: createVariableValueContainingReferencesFromString(
73
+ "i am referencing ${component2:variable1}",
74
+ {
75
+ componentName: "component1",
76
+ },
77
+ ),
78
+ };
79
+
80
+ const getEnvVars = async (componentName: string) => {
81
+ if (componentName === "component2") {
82
+ return {
83
+ variable1: createVariableValueContainingReferencesFromString(
84
+ `i am referencing \${component3:variable1}`,
85
+ { componentName },
86
+ ),
87
+ };
88
+ } else if (componentName === "component3") {
89
+ return {
90
+ variable1: createVariableValueContainingReferencesFromString(
91
+ `i am referencing \${component1:variable1}`,
92
+ { componentName },
93
+ ),
94
+ };
95
+ } else {
96
+ return {
97
+ variable1: createVariableValueContainingReferencesFromString(
98
+ `i am referencing \${component2:variable1}`,
99
+ { componentName },
100
+ ),
101
+ };
102
+ }
103
+ };
104
+
105
+ // expect to throw an error
106
+ await expect(resolveAllReferences(values, getEnvVars)).rejects.toThrow(
107
+ "Infinite loop detected in these variables: myVar (last reference: ${component1:variable1})",
108
+ );
109
+ });
110
+ });