@catladder/pipeline 0.0.0-more-collapse-deeb54d7 → 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 (597) hide show
  1. package/README.md +17 -0
  2. package/dist/bash/BashExpression.d.ts +36 -0
  3. package/dist/bash/BashExpression.js +114 -0
  4. package/dist/bash/bashEscape.d.ts +34 -0
  5. package/dist/bash/bashEscape.js +114 -0
  6. package/dist/bash/bashExpressionPerPipelineType.d.ts +6 -0
  7. package/dist/bash/bashExpressionPerPipelineType.js +11 -0
  8. package/dist/bash/bashYaml.d.ts +10 -0
  9. package/dist/bash/bashYaml.js +69 -0
  10. package/dist/bash/getInjectVarsScript.d.ts +2 -0
  11. package/dist/bash/getInjectVarsScript.js +47 -0
  12. package/dist/bash/index.d.ts +2 -0
  13. package/dist/bash/index.js +26 -0
  14. package/dist/build/artifacts/createBuildJobArtifact.d.ts +3 -0
  15. package/dist/build/artifacts/createBuildJobArtifact.js +97 -0
  16. package/dist/build/base/__tests__/createArtifactsConfig.test.js +3 -1
  17. package/dist/build/base/constants.d.ts +0 -1
  18. package/dist/build/base/constants.js +4 -3
  19. package/dist/build/base/createAppBuildJob.d.ts +5 -3
  20. package/dist/build/base/createAppBuildJob.js +18 -15
  21. package/dist/build/base/createArtifactsConfig.d.ts +1 -1
  22. package/dist/build/base/createArtifactsConfig.js +3 -1
  23. package/dist/build/base/createBuildJobDefinition.d.ts +6 -0
  24. package/dist/build/base/createBuildJobDefinition.js +58 -0
  25. package/dist/build/base/index.d.ts +7 -4
  26. package/dist/build/base/index.js +17 -6
  27. package/dist/build/base/writeBuildInfo.d.ts +2 -2
  28. package/dist/build/base/writeBuildInfo.js +4 -3
  29. package/dist/build/base/writeDotEnv.d.ts +3 -2
  30. package/dist/build/base/writeDotEnv.js +30 -6
  31. package/dist/build/cache/createJobCache.d.ts +7 -0
  32. package/dist/build/cache/createJobCache.js +115 -0
  33. package/dist/build/cache/getAllCacheConfigsFromConfig.d.ts +3 -0
  34. package/dist/build/cache/getAllCacheConfigsFromConfig.js +64 -0
  35. package/dist/build/cache/transformLegacyJobCache.d.ts +3 -0
  36. package/dist/build/cache/transformLegacyJobCache.js +29 -0
  37. package/dist/build/custom/__tests__/testJob.test.js +15 -16
  38. package/dist/build/custom/buildJob.d.ts +2 -2
  39. package/dist/build/custom/buildJob.js +8 -67
  40. package/dist/build/custom/index.d.ts +2 -2
  41. package/dist/build/custom/index.js +3 -1
  42. package/dist/build/custom/testJob.d.ts +4 -4
  43. package/dist/build/custom/testJob.js +25 -21
  44. package/dist/build/docker.d.ts +48 -39
  45. package/dist/build/docker.js +112 -37
  46. package/dist/build/index.d.ts +14 -7
  47. package/dist/build/index.js +44 -16
  48. package/dist/build/node/buildJob.d.ts +6 -2
  49. package/dist/build/node/buildJob.js +39 -48
  50. package/dist/build/node/cache.d.ts +4 -5
  51. package/dist/build/node/cache.js +18 -23
  52. package/dist/build/node/constants.d.ts +0 -1
  53. package/dist/build/node/constants.js +5 -4
  54. package/dist/build/node/index.d.ts +4 -4
  55. package/dist/build/node/index.js +3 -1
  56. package/dist/build/node/meteor.d.ts +2 -2
  57. package/dist/build/node/meteor.js +10 -12
  58. package/dist/build/node/testJob.d.ts +3 -2
  59. package/dist/build/node/testJob.js +29 -19
  60. package/dist/build/node/yarn.d.ts +3 -2
  61. package/dist/build/node/yarn.js +13 -13
  62. package/dist/build/rails/build.d.ts +2 -2
  63. package/dist/build/rails/build.js +24 -8
  64. package/dist/build/rails/index.d.ts +2 -2
  65. package/dist/build/rails/index.js +3 -1
  66. package/dist/build/rails/test.d.ts +2 -2
  67. package/dist/build/rails/test.js +20 -12
  68. package/dist/build/sbom.d.ts +2 -2
  69. package/dist/build/sbom.js +9 -6
  70. package/dist/build/types.d.ts +152 -47
  71. package/dist/build/types.js +10 -2
  72. package/dist/catladder-gitlab.js +129 -49
  73. package/dist/config/__tests__/configruedEnvs.test.js +3 -1
  74. package/dist/config/__tests__/getAllEnvs.test.js +79 -0
  75. package/dist/config/__tests__/getAllEnvsInAllComponents.test.d.ts +1 -0
  76. package/dist/config/__tests__/getAllEnvsInAllComponents.test.js +73 -0
  77. package/dist/config/configruedEnvs.js +3 -1
  78. package/dist/config/index.js +13 -7
  79. package/dist/config/readConfig.d.ts +2 -2
  80. package/dist/config/readConfig.js +191 -40
  81. package/dist/constants.js +5 -3
  82. package/dist/context/createAllComponentsContext.d.ts +12 -0
  83. package/dist/{pipeline/commitInfo/getCommitInfo.js → context/createAllComponentsContext.js} +35 -19
  84. package/dist/context/createComponentContext.d.ts +11 -0
  85. package/dist/context/createComponentContext.js +255 -0
  86. package/dist/context/createWorkspaceContext.d.ts +16 -0
  87. package/dist/context/createWorkspaceContext.js +173 -0
  88. package/dist/context/getBuildInfoVariables.d.ts +6 -0
  89. package/dist/context/getBuildInfoVariables.js +55 -0
  90. package/dist/context/getEnvConfig.js +5 -2
  91. package/dist/context/getEnvType.js +3 -1
  92. package/dist/context/getEnvironment.d.ts +3 -3
  93. package/dist/context/getEnvironment.js +11 -12
  94. package/dist/context/getEnvironmentContext.d.ts +7 -3
  95. package/dist/context/getEnvironmentContext.js +21 -11
  96. package/dist/context/getEnvironmentVariables.d.ts +22 -5
  97. package/dist/context/getEnvironmentVariables.js +81 -49
  98. package/dist/context/getLabels.d.ts +2 -2
  99. package/dist/context/getLabels.js +9 -7
  100. package/dist/context/getReviewSlug.d.ts +4 -0
  101. package/dist/context/getReviewSlug.js +21 -0
  102. package/dist/context/index.d.ts +2 -4
  103. package/dist/context/index.js +15 -162
  104. package/dist/context/transformJobOnlyVars.d.ts +5 -2
  105. package/dist/context/transformJobOnlyVars.js +4 -2
  106. package/dist/context/utils/envVars.d.ts +1 -1
  107. package/dist/context/utils/envVars.js +5 -2
  108. package/dist/defaults/index.js +3 -1
  109. package/dist/deploy/base/deploy.d.ts +3 -3
  110. package/dist/deploy/base/deploy.js +38 -22
  111. package/dist/deploy/base/index.d.ts +3 -5
  112. package/dist/deploy/base/index.js +3 -1
  113. package/dist/deploy/base/rollback.d.ts +3 -3
  114. package/dist/deploy/base/rollback.js +13 -9
  115. package/dist/deploy/base/stop.d.ts +3 -3
  116. package/dist/deploy/base/stop.js +16 -11
  117. package/dist/deploy/base/types.d.ts +1 -1
  118. package/dist/deploy/base/types.js +3 -1
  119. package/dist/deploy/base/variables.d.ts +0 -1
  120. package/dist/deploy/base/variables.js +4 -3
  121. package/dist/deploy/cloudRun/artifactsRegistry.d.ts +19 -0
  122. package/dist/deploy/cloudRun/artifactsRegistry.js +125 -0
  123. package/dist/deploy/cloudRun/cleanup.d.ts +2 -0
  124. package/dist/deploy/cloudRun/cleanup.js +53 -0
  125. package/dist/deploy/cloudRun/cloudRunRevisions.d.ts +2 -0
  126. package/dist/deploy/cloudRun/cloudRunRevisions.js +62 -0
  127. package/dist/deploy/cloudRun/createJobs/cloudRunJobs.d.ts +7 -0
  128. package/dist/deploy/cloudRun/createJobs/cloudRunJobs.js +207 -0
  129. package/dist/deploy/cloudRun/createJobs/cloudRunServices.d.ts +4 -0
  130. package/dist/deploy/cloudRun/createJobs/cloudRunServices.js +96 -0
  131. package/dist/deploy/cloudRun/createJobs/common.d.ts +18 -0
  132. package/dist/deploy/cloudRun/createJobs/common.js +93 -0
  133. package/dist/deploy/cloudRun/createJobs/constants.d.ts +1 -0
  134. package/dist/deploy/cloudRun/createJobs/constants.js +7 -0
  135. package/dist/deploy/cloudRun/createJobs/getCloudRunDeployScripts.d.ts +2 -0
  136. package/dist/deploy/cloudRun/createJobs/getCloudRunDeployScripts.js +62 -0
  137. package/dist/deploy/cloudRun/createJobs/getCloudRunStopScripts.d.ts +2 -0
  138. package/dist/deploy/cloudRun/createJobs/getCloudRunStopScripts.js +54 -0
  139. package/dist/deploy/cloudRun/createJobs/index.d.ts +3 -0
  140. package/dist/deploy/cloudRun/createJobs/index.js +57 -0
  141. package/dist/deploy/cloudRun/createJobs/volumes.d.ts +3 -0
  142. package/dist/deploy/cloudRun/createJobs/volumes.js +58 -0
  143. package/dist/deploy/cloudRun/index.d.ts +2 -2
  144. package/dist/deploy/cloudRun/index.js +17 -10
  145. package/dist/deploy/cloudRun/utils/createArgsString.d.ts +3 -1
  146. package/dist/deploy/cloudRun/utils/createArgsString.js +25 -17
  147. package/dist/deploy/cloudRun/utils/database.d.ts +6 -4
  148. package/dist/deploy/cloudRun/utils/database.js +28 -15
  149. package/dist/deploy/cloudRun/utils/gcloudServiceAccountLoginCommands.d.ts +2 -2
  150. package/dist/deploy/cloudRun/utils/gcloudServiceAccountLoginCommands.js +4 -2
  151. package/dist/deploy/cloudRun/utils/getServiceName.d.ts +2 -0
  152. package/dist/deploy/cloudRun/utils/getServiceName.js +10 -0
  153. package/dist/deploy/cloudRun/utils/jobName.d.ts +2 -1
  154. package/dist/deploy/cloudRun/utils/jobName.js +4 -2
  155. package/dist/deploy/cloudRun/utils/removeFirstLinesFromCommandOutput.d.ts +9 -0
  156. package/dist/deploy/cloudRun/utils/removeFirstLinesFromCommandOutput.js +18 -0
  157. package/dist/deploy/cloudSql/utils.d.ts +2 -1
  158. package/dist/deploy/cloudSql/utils.js +7 -2
  159. package/dist/deploy/custom/deployJob.d.ts +2 -2
  160. package/dist/deploy/custom/deployJob.js +10 -9
  161. package/dist/deploy/custom/index.d.ts +2 -2
  162. package/dist/deploy/custom/index.js +3 -1
  163. package/dist/deploy/dockerTag/deployJob.d.ts +2 -2
  164. package/dist/deploy/dockerTag/deployJob.js +38 -7
  165. package/dist/deploy/dockerTag/index.d.ts +2 -2
  166. package/dist/deploy/dockerTag/index.js +3 -1
  167. package/dist/deploy/index.d.ts +10 -9
  168. package/dist/deploy/index.js +13 -7
  169. package/dist/deploy/kubernetes/additionalSecretKeys.d.ts +3 -1
  170. package/dist/deploy/kubernetes/additionalSecretKeys.js +3 -1
  171. package/dist/deploy/kubernetes/cloudSql/index.d.ts +6 -5
  172. package/dist/deploy/kubernetes/cloudSql/index.js +14 -21
  173. package/dist/deploy/kubernetes/deployJob.d.ts +2 -2
  174. package/dist/deploy/kubernetes/deployJob.js +23 -22
  175. package/dist/deploy/kubernetes/index.d.ts +2 -2
  176. package/dist/deploy/kubernetes/index.js +52 -15
  177. package/dist/deploy/kubernetes/kubeEnv.d.ts +5 -4
  178. package/dist/deploy/kubernetes/kubeEnv.js +9 -5
  179. package/dist/deploy/kubernetes/kubeValues.d.ts +5 -6
  180. package/dist/deploy/kubernetes/kubeValues.js +16 -18
  181. package/dist/deploy/kubernetes/mongodb.d.ts +2 -2
  182. package/dist/deploy/kubernetes/mongodb.js +14 -12
  183. package/dist/deploy/sbom.d.ts +4 -4
  184. package/dist/deploy/sbom.js +7 -4
  185. package/dist/deploy/types/base.d.ts +5 -5
  186. package/dist/deploy/types/base.js +3 -1
  187. package/dist/deploy/types/custom.d.ts +3 -7
  188. package/dist/deploy/types/custom.js +3 -1
  189. package/dist/deploy/types/dockerTag.d.ts +3 -1
  190. package/dist/deploy/types/dockerTag.js +3 -1
  191. package/dist/deploy/types/googleCloudRun.d.ts +127 -24
  192. package/dist/deploy/types/googleCloudRun.js +3 -1
  193. package/dist/deploy/types/index.d.ts +6 -6
  194. package/dist/deploy/types/index.js +14 -8
  195. package/dist/deploy/types/kubernetes.d.ts +25 -54
  196. package/dist/deploy/types/kubernetes.js +3 -1
  197. package/dist/deploy/utils.d.ts +2 -2
  198. package/dist/deploy/utils.js +5 -2
  199. package/dist/globalScriptFunctions/index.d.ts +14 -0
  200. package/dist/globalScriptFunctions/index.js +37 -0
  201. package/dist/index.d.ts +5 -2
  202. package/dist/index.js +18 -9
  203. package/dist/packageInfos.d.ts +4 -0
  204. package/dist/packageInfos.js +20 -0
  205. package/dist/pipeline/__tests__/getPipelineStages.test.d.ts +1 -0
  206. package/dist/pipeline/__tests__/getPipelineStages.test.js +73 -0
  207. package/dist/pipeline/createAllJobs.d.ts +16 -6
  208. package/dist/pipeline/createAllJobs.js +99 -27
  209. package/dist/pipeline/createJobsForComponent.d.ts +2 -2
  210. package/dist/pipeline/createJobsForComponent.js +9 -149
  211. package/dist/pipeline/createJobsForWorkspace.d.ts +3 -0
  212. package/dist/pipeline/createJobsForWorkspace.js +12 -0
  213. package/dist/pipeline/createMainPipeline.d.ts +3 -0
  214. package/dist/pipeline/createMainPipeline.js +283 -0
  215. package/dist/pipeline/generatePipelineFiles.d.ts +7 -0
  216. package/dist/pipeline/generatePipelineFiles.js +304 -0
  217. package/dist/pipeline/getPipelineStages.d.ts +7 -0
  218. package/dist/pipeline/getPipelineStages.js +56 -0
  219. package/dist/pipeline/gitlab/createGitlabJobs.d.ts +11 -14
  220. package/dist/pipeline/gitlab/createGitlabJobs.js +258 -74
  221. package/dist/pipeline/gitlab/createGitlabPipeline.d.ts +9 -0
  222. package/dist/pipeline/gitlab/createGitlabPipeline.js +77 -0
  223. package/dist/pipeline/gitlab/gitlabReleaseJobs.d.ts +33 -0
  224. package/dist/pipeline/gitlab/gitlabReleaseJobs.js +25 -0
  225. package/dist/pipeline/gitlab/sortGitLabJobDefProps.d.ts +7 -0
  226. package/dist/pipeline/gitlab/sortGitLabJobDefProps.js +27 -0
  227. package/dist/pipeline/index.d.ts +3 -2
  228. package/dist/pipeline/index.js +16 -9
  229. package/dist/pipeline/packageManager.d.ts +3 -2
  230. package/dist/pipeline/packageManager.js +50 -24
  231. package/dist/pipeline/yarn/yarnUtils.d.ts +3 -2
  232. package/dist/pipeline/yarn/yarnUtils.js +65 -17
  233. package/dist/rules/index.d.ts +7 -2
  234. package/dist/rules/index.js +34 -16
  235. package/dist/runner/index.d.ts +1 -1
  236. package/dist/runner/index.js +3 -1
  237. package/dist/tsconfig.tsbuildinfo +1 -1
  238. package/dist/types/config.d.ts +44 -29
  239. package/dist/types/config.js +5 -2
  240. package/dist/types/context.d.ts +124 -40
  241. package/dist/types/context.js +12 -1
  242. package/dist/types/environmentContext.d.ts +15 -12
  243. package/dist/types/environmentContext.js +3 -1
  244. package/dist/types/gitlab-ci-yml.d.ts +30 -30
  245. package/dist/types/gitlab-ci-yml.js +3 -2
  246. package/dist/types/gitlab-types.d.ts +8 -8
  247. package/dist/types/gitlab-types.js +3 -1
  248. package/dist/types/index.d.ts +1 -0
  249. package/dist/types/index.js +14 -7
  250. package/dist/types/jobDefinition.d.ts +11 -0
  251. package/dist/types/jobDefinition.js +5 -0
  252. package/dist/types/jobs.d.ts +30 -15
  253. package/dist/types/jobs.js +3 -1
  254. package/dist/types/pipeline.d.ts +3 -3
  255. package/dist/types/pipeline.js +3 -1
  256. package/dist/types/utils.d.ts +1 -1
  257. package/dist/types/utils.js +3 -1
  258. package/dist/utils/gitlab.js +7 -2
  259. package/dist/utils/index.d.ts +2 -1
  260. package/dist/utils/index.js +10 -3
  261. package/dist/utils/jsonParse.d.ts +1 -0
  262. package/dist/utils/jsonParse.js +14 -0
  263. package/dist/utils/removeUndefined.d.ts +1 -0
  264. package/dist/utils/removeUndefined.js +36 -0
  265. package/dist/utils/writeFiles.d.ts +11 -0
  266. package/dist/{pipeline/commitInfo/getBuildId.js → utils/writeFiles.js} +39 -22
  267. package/dist/variables/VariableValue.d.ts +3 -0
  268. package/dist/variables/VariableValue.js +5 -0
  269. package/dist/variables/VariableValueContainingReferences.d.ts +24 -0
  270. package/dist/variables/VariableValueContainingReferences.js +97 -0
  271. package/dist/variables/__tests__/resolveAllReferences.test.d.ts +1 -0
  272. package/dist/variables/__tests__/resolveAllReferences.test.js +218 -0
  273. package/dist/variables/__tests__/resolveAllReferencesOnce.test.d.ts +1 -0
  274. package/dist/variables/__tests__/resolveAllReferencesOnce.test.js +171 -0
  275. package/dist/variables/__tests__/resolveReferencesOnce.test.d.ts +1 -0
  276. package/dist/variables/__tests__/resolveReferencesOnce.test.js +199 -0
  277. package/dist/variables/__tests__/variableValue.test.d.ts +1 -0
  278. package/dist/variables/__tests__/variableValue.test.js +36 -0
  279. package/dist/variables/resolveAllReferences.d.ts +3 -0
  280. package/dist/{pipeline/createChildPipeline.js → variables/resolveAllReferences.js} +44 -47
  281. package/dist/variables/resolveAllReferencesOnce.d.ts +5 -0
  282. package/dist/variables/resolveAllReferencesOnce.js +191 -0
  283. package/dist/variables/resolveReferencesOnce.d.ts +8 -0
  284. package/dist/variables/resolveReferencesOnce.js +22 -0
  285. package/examples/.test-gen-ignore +1 -0
  286. package/examples/__snapshots__/cloud-run-http2.test.ts.snap +1418 -0
  287. package/examples/__snapshots__/cloud-run-memory-limit.test.ts.snap +1418 -0
  288. package/examples/__snapshots__/cloud-run-meteor-with-worker.test.ts.snap +1418 -0
  289. package/examples/__snapshots__/cloud-run-nextjs.test.ts.snap +1434 -0
  290. package/examples/__snapshots__/cloud-run-no-cpu-throttling.test.ts.snap +1418 -0
  291. package/examples/__snapshots__/cloud-run-no-service.test.ts.snap +1526 -0
  292. package/examples/__snapshots__/cloud-run-non-public.test.ts.snap +1418 -0
  293. package/examples/__snapshots__/cloud-run-post-stop-job.test.ts.snap +1436 -0
  294. package/examples/__snapshots__/cloud-run-service-custom-vpc-connector.test.ts.snap +1418 -0
  295. package/examples/__snapshots__/cloud-run-service-custom-vpc.test.ts.snap +1418 -0
  296. package/examples/__snapshots__/cloud-run-service-gen2.test.ts.snap +1418 -0
  297. package/examples/__snapshots__/cloud-run-service-increase-timout.test.ts.snap +1418 -0
  298. package/examples/__snapshots__/cloud-run-service-with-volumes.test.ts.snap +1490 -0
  299. package/examples/__snapshots__/cloud-run-storybook.test.ts.snap +1302 -0
  300. package/examples/__snapshots__/cloud-run-with-ngnix.test.ts.snap +1418 -0
  301. package/examples/__snapshots__/cloud-run-with-sql-reuse-db.test.ts.snap +2998 -0
  302. package/examples/__snapshots__/cloud-run-with-sql.test.ts.snap +1733 -0
  303. package/examples/__snapshots__/cloud-run-with-worker.test.ts.snap +1426 -0
  304. package/examples/__snapshots__/custom-build-job-with-tests.test.ts.snap +1285 -0
  305. package/examples/__snapshots__/custom-build-job.test.ts.snap +1174 -0
  306. package/examples/__snapshots__/custom-deploy.test.ts.snap +1168 -0
  307. package/examples/__snapshots__/custom-envs.test.ts.snap +798 -0
  308. package/examples/__snapshots__/custom-sbom-java.test.ts.snap +1182 -0
  309. package/examples/__snapshots__/git-submodule.test.ts.snap +1419 -0
  310. package/examples/__snapshots__/kubernetes-application-customization.test.ts.snap +1759 -0
  311. package/examples/__snapshots__/kubernetes-with-cloud-sql.test.ts.snap +1779 -0
  312. package/examples/__snapshots__/kubernetes-with-jobs.test.ts.snap +3357 -0
  313. package/examples/__snapshots__/kubernetes-with-mongodb.test.ts.snap +1883 -0
  314. package/examples/__snapshots__/local-dot-env.test.ts.snap +1342 -0
  315. package/examples/__snapshots__/meteor-kubernetes.test.ts.snap +1836 -0
  316. package/examples/__snapshots__/multiline-var.test.ts.snap +5679 -0
  317. package/examples/__snapshots__/native-app.test.ts.snap +2206 -0
  318. package/examples/__snapshots__/node-build-with-custom-image.test.ts.snap +1418 -0
  319. package/examples/__snapshots__/node-build-with-docker-additions.test.ts.snap +1426 -0
  320. package/examples/__snapshots__/rails-k8s-with-worker-dockerfile.test.ts.snap +1487 -0
  321. package/examples/__snapshots__/rails-k8s-with-worker.test.ts.snap +1471 -0
  322. package/examples/__snapshots__/referencing-other-vars.test.ts.snap +4739 -0
  323. package/examples/__snapshots__/wait-for-other-deploy.test.ts.snap +1368 -0
  324. package/examples/__snapshots__/workspace-api-www-turbo-cache.test.ts.snap +2338 -0
  325. package/examples/__snapshots__/workspace-api-www.test.ts.snap +2330 -0
  326. package/examples/__utils__/helpers.ts +9 -12
  327. package/examples/cloud-run-http2.test.ts +11 -0
  328. package/examples/cloud-run-http2.ts +29 -0
  329. package/examples/cloud-run-memory-limit.test.ts +11 -0
  330. package/examples/cloud-run-memory-limit.ts +10 -5
  331. package/examples/cloud-run-meteor-with-worker.test.ts +11 -0
  332. package/examples/cloud-run-meteor-with-worker.ts +37 -0
  333. package/examples/cloud-run-nextjs.test.ts +11 -0
  334. package/examples/cloud-run-nextjs.ts +28 -0
  335. package/examples/cloud-run-no-cpu-throttling.test.ts +11 -0
  336. package/examples/cloud-run-no-cpu-throttling.ts +6 -4
  337. package/examples/cloud-run-no-service.test.ts +11 -0
  338. package/examples/cloud-run-no-service.ts +33 -0
  339. package/examples/cloud-run-non-public.test.ts +11 -0
  340. package/examples/cloud-run-non-public.ts +5 -4
  341. package/examples/cloud-run-post-stop-job.test.ts +11 -0
  342. package/examples/cloud-run-post-stop-job.ts +42 -0
  343. package/examples/cloud-run-service-custom-vpc-connector.test.ts +11 -0
  344. package/examples/cloud-run-service-custom-vpc-connector.ts +30 -0
  345. package/examples/cloud-run-service-custom-vpc.test.ts +11 -0
  346. package/examples/cloud-run-service-custom-vpc.ts +31 -0
  347. package/examples/cloud-run-service-gen2.test.ts +11 -0
  348. package/examples/cloud-run-service-gen2.ts +29 -0
  349. package/examples/cloud-run-service-increase-timout.test.ts +11 -0
  350. package/examples/cloud-run-service-increase-timout.ts +29 -0
  351. package/examples/cloud-run-service-with-volumes.test.ts +11 -0
  352. package/examples/cloud-run-service-with-volumes.ts +56 -0
  353. package/examples/cloud-run-storybook.test.ts +11 -0
  354. package/examples/cloud-run-storybook.ts +33 -0
  355. package/examples/cloud-run-with-ngnix.test.ts +11 -0
  356. package/examples/cloud-run-with-ngnix.ts +29 -0
  357. package/examples/cloud-run-with-sql-reuse-db.test.ts +11 -0
  358. package/examples/cloud-run-with-sql-reuse-db.ts +5 -4
  359. package/examples/cloud-run-with-sql.test.ts +11 -0
  360. package/examples/cloud-run-with-sql.ts +6 -20
  361. package/examples/cloud-run-with-worker.test.ts +11 -0
  362. package/examples/cloud-run-with-worker.ts +37 -0
  363. package/examples/custom-build-job-with-tests.test.ts +11 -0
  364. package/examples/custom-build-job-with-tests.ts +5 -4
  365. package/examples/custom-build-job.test.ts +11 -0
  366. package/examples/custom-build-job.ts +5 -4
  367. package/examples/custom-deploy.test.ts +11 -0
  368. package/examples/custom-deploy.ts +12 -4
  369. package/examples/custom-envs.test.ts +11 -0
  370. package/examples/custom-envs.ts +5 -4
  371. package/examples/custom-sbom-java.test.ts +11 -0
  372. package/examples/custom-sbom-java.ts +10 -6
  373. package/examples/git-submodule.test.ts +11 -0
  374. package/examples/git-submodule.ts +30 -0
  375. package/examples/kubernetes-application-customization.test.ts +11 -0
  376. package/examples/kubernetes-application-customization.ts +7 -4
  377. package/examples/kubernetes-with-cloud-sql.test.ts +11 -0
  378. package/examples/kubernetes-with-cloud-sql.ts +7 -4
  379. package/examples/kubernetes-with-jobs.test.ts +11 -0
  380. package/examples/kubernetes-with-jobs.ts +7 -4
  381. package/examples/kubernetes-with-mongodb.test.ts +11 -0
  382. package/examples/kubernetes-with-mongodb.ts +7 -4
  383. package/examples/local-dot-env.test.ts +11 -0
  384. package/examples/local-dot-env.ts +27 -0
  385. package/examples/meteor-kubernetes.test.ts +11 -0
  386. package/examples/meteor-kubernetes.ts +4 -5
  387. package/examples/multiline-var.test.ts +11 -0
  388. package/examples/multiline-var.ts +107 -0
  389. package/examples/native-app.test.ts +11 -0
  390. package/examples/native-app.ts +22 -17
  391. package/examples/node-build-with-custom-image.test.ts +11 -0
  392. package/examples/node-build-with-custom-image.ts +5 -4
  393. package/examples/node-build-with-docker-additions.test.ts +11 -0
  394. package/examples/node-build-with-docker-additions.ts +29 -0
  395. package/examples/rails-k8s-with-worker-dockerfile.test.ts +33 -0
  396. package/examples/rails-k8s-with-worker.test.ts +11 -0
  397. package/examples/rails-k8s-with-worker.ts +14 -11
  398. package/examples/referencing-other-vars.test.ts +11 -0
  399. package/examples/referencing-other-vars.ts +83 -0
  400. package/examples/wait-for-other-deploy.test.ts +11 -0
  401. package/examples/wait-for-other-deploy.ts +5 -4
  402. package/examples/workspace-api-www-turbo-cache.test.ts +11 -0
  403. package/examples/workspace-api-www-turbo-cache.ts +52 -0
  404. package/examples/workspace-api-www.test.ts +11 -0
  405. package/examples/workspace-api-www.ts +46 -0
  406. package/package.json +75 -26
  407. package/scripts/generate-examples-test.ts +84 -0
  408. package/scripts/generate-gitlab-ci-types.ts +2 -2
  409. package/scripts/tsconfig.json +7 -0
  410. package/src/bash/BashExpression.ts +78 -0
  411. package/src/bash/bashEscape.ts +158 -0
  412. package/src/bash/bashExpressionPerPipelineType.ts +16 -0
  413. package/src/bash/bashYaml.ts +80 -0
  414. package/src/bash/getInjectVarsScript.ts +21 -0
  415. package/src/bash/index.ts +2 -0
  416. package/src/build/artifacts/createBuildJobArtifact.ts +61 -0
  417. package/src/build/base/__tests__/createArtifactsConfig.test.ts +3 -3
  418. package/src/build/base/constants.ts +2 -2
  419. package/src/build/base/createAppBuildJob.ts +40 -24
  420. package/src/build/base/createArtifactsConfig.ts +2 -2
  421. package/src/build/base/createBuildJobDefinition.ts +37 -0
  422. package/src/build/base/index.ts +37 -8
  423. package/src/build/base/writeBuildInfo.ts +3 -3
  424. package/src/build/base/writeDotEnv.ts +25 -6
  425. package/src/build/cache/createJobCache.ts +83 -0
  426. package/src/build/cache/getAllCacheConfigsFromConfig.ts +28 -0
  427. package/src/build/cache/transformLegacyJobCache.ts +14 -0
  428. package/src/build/custom/__tests__/testJob.test.ts +10 -13
  429. package/src/build/custom/buildJob.ts +11 -37
  430. package/src/build/custom/index.ts +2 -2
  431. package/src/build/custom/testJob.ts +24 -22
  432. package/src/build/docker.ts +145 -49
  433. package/src/build/index.ts +42 -10
  434. package/src/build/node/buildJob.ts +65 -62
  435. package/src/build/node/cache.ts +30 -35
  436. package/src/build/node/constants.ts +2 -3
  437. package/src/build/node/index.ts +8 -4
  438. package/src/build/node/meteor.ts +16 -24
  439. package/src/build/node/testJob.ts +47 -26
  440. package/src/build/node/yarn.ts +32 -16
  441. package/src/build/rails/build.ts +21 -9
  442. package/src/build/rails/index.ts +2 -2
  443. package/src/build/rails/test.ts +22 -12
  444. package/src/build/sbom.ts +15 -10
  445. package/src/build/types.ts +190 -47
  446. package/src/catladder-gitlab.ts +7 -56
  447. package/src/config/__tests__/__snapshots__/getAllEnvs.test.ts.snap +31 -0
  448. package/src/config/__tests__/__snapshots__/getAllEnvsInAllComponents.test.ts.snap +15 -0
  449. package/src/config/__tests__/getAllEnvs.test.ts +71 -0
  450. package/src/config/__tests__/getAllEnvsInAllComponents.test.ts +63 -0
  451. package/src/config/configruedEnvs.ts +6 -6
  452. package/src/config/readConfig.ts +15 -22
  453. package/src/constants.ts +5 -2
  454. package/src/context/createAllComponentsContext.ts +31 -0
  455. package/src/context/createComponentContext.ts +134 -0
  456. package/src/context/createWorkspaceContext.ts +56 -0
  457. package/src/context/getBuildInfoVariables.ts +36 -0
  458. package/src/context/getEnvConfig.ts +3 -3
  459. package/src/context/getEnvType.ts +1 -1
  460. package/src/context/getEnvironment.ts +8 -24
  461. package/src/context/getEnvironmentContext.ts +25 -29
  462. package/src/context/getEnvironmentVariables.ts +104 -76
  463. package/src/context/getLabels.ts +5 -5
  464. package/src/context/getReviewSlug.ts +27 -0
  465. package/src/context/index.ts +1 -65
  466. package/src/context/transformJobOnlyVars.ts +6 -3
  467. package/src/context/utils/envVars.ts +5 -4
  468. package/src/deploy/base/deploy.ts +63 -47
  469. package/src/deploy/base/index.ts +11 -6
  470. package/src/deploy/base/rollback.ts +11 -16
  471. package/src/deploy/base/stop.ts +11 -15
  472. package/src/deploy/base/variables.ts +1 -2
  473. package/src/deploy/cloudRun/artifactsRegistry.ts +126 -0
  474. package/src/deploy/cloudRun/cleanup.ts +30 -0
  475. package/src/deploy/cloudRun/cloudRunRevisions.ts +65 -0
  476. package/src/deploy/cloudRun/createJobs/cloudRunJobs.ts +227 -0
  477. package/src/deploy/cloudRun/createJobs/cloudRunServices.ts +86 -0
  478. package/src/deploy/cloudRun/createJobs/common.ts +59 -0
  479. package/src/deploy/cloudRun/createJobs/constants.ts +1 -0
  480. package/src/deploy/cloudRun/createJobs/getCloudRunDeployScripts.ts +71 -0
  481. package/src/deploy/cloudRun/createJobs/getCloudRunStopScripts.ts +34 -0
  482. package/src/deploy/cloudRun/createJobs/index.ts +51 -0
  483. package/src/deploy/cloudRun/createJobs/volumes.ts +23 -0
  484. package/src/deploy/cloudRun/index.ts +85 -59
  485. package/src/deploy/cloudRun/utils/createArgsString.ts +21 -13
  486. package/src/deploy/cloudRun/utils/database.ts +31 -9
  487. package/src/deploy/cloudRun/utils/gcloudServiceAccountLoginCommands.ts +9 -11
  488. package/src/deploy/cloudRun/utils/getServiceName.ts +3 -0
  489. package/src/deploy/cloudRun/utils/jobName.ts +7 -2
  490. package/src/deploy/cloudRun/utils/removeFirstLinesFromCommandOutput.ts +12 -0
  491. package/src/deploy/cloudSql/utils.ts +13 -10
  492. package/src/deploy/custom/deployJob.ts +15 -10
  493. package/src/deploy/custom/index.ts +2 -2
  494. package/src/deploy/dockerTag/deployJob.ts +7 -8
  495. package/src/deploy/dockerTag/index.ts +8 -7
  496. package/src/deploy/index.ts +15 -12
  497. package/src/deploy/kubernetes/additionalSecretKeys.ts +3 -1
  498. package/src/deploy/kubernetes/cloudSql/index.ts +16 -25
  499. package/src/deploy/kubernetes/deployJob.ts +30 -21
  500. package/src/deploy/kubernetes/index.ts +43 -35
  501. package/src/deploy/kubernetes/kubeEnv.ts +12 -10
  502. package/src/deploy/kubernetes/kubeValues.ts +15 -19
  503. package/src/deploy/kubernetes/mongodb.ts +15 -15
  504. package/src/deploy/sbom.ts +18 -10
  505. package/src/deploy/types/base.ts +3 -3
  506. package/src/deploy/types/custom.ts +3 -7
  507. package/src/deploy/types/dockerTag.ts +2 -0
  508. package/src/deploy/types/googleCloudRun.ts +133 -10
  509. package/src/deploy/types/index.ts +2 -2
  510. package/src/deploy/types/kubernetes.ts +5 -36
  511. package/src/deploy/utils.ts +5 -5
  512. package/src/globalScriptFunctions/index.ts +30 -0
  513. package/src/index.ts +4 -1
  514. package/src/packageInfos.ts +14 -0
  515. package/src/pipeline/__tests__/__snapshots__/getPipelineStages.test.ts.snap +69 -0
  516. package/src/pipeline/__tests__/getPipelineStages.test.ts +63 -0
  517. package/src/pipeline/createAllJobs.ts +67 -33
  518. package/src/pipeline/createJobsForComponent.ts +10 -38
  519. package/src/pipeline/createJobsForWorkspace.ts +12 -0
  520. package/src/pipeline/createMainPipeline.ts +119 -0
  521. package/src/pipeline/generatePipelineFiles.ts +100 -0
  522. package/src/pipeline/getPipelineStages.ts +23 -0
  523. package/src/pipeline/gitlab/createGitlabJobs.ts +388 -108
  524. package/src/pipeline/gitlab/createGitlabPipeline.ts +35 -0
  525. package/src/pipeline/gitlab/gitlabReleaseJobs.ts +23 -0
  526. package/src/pipeline/gitlab/sortGitLabJobDefProps.ts +59 -0
  527. package/src/pipeline/index.ts +2 -1
  528. package/src/pipeline/packageManager.ts +44 -26
  529. package/src/pipeline/yarn/yarnUtils.ts +39 -10
  530. package/src/rules/index.ts +36 -9
  531. package/src/runner/index.ts +0 -1
  532. package/src/types/config.ts +43 -16
  533. package/src/types/context.ts +165 -37
  534. package/src/types/environmentContext.ts +18 -13
  535. package/src/types/gitlab-ci-yml.ts +0 -1
  536. package/src/types/gitlab-types.ts +10 -7
  537. package/src/types/index.ts +1 -0
  538. package/src/types/jobDefinition.ts +34 -0
  539. package/src/types/jobs.ts +31 -15
  540. package/src/types/utils.ts +4 -4
  541. package/src/utils/gitlab.ts +20 -3
  542. package/src/utils/index.ts +6 -3
  543. package/src/utils/jsonParse.ts +7 -0
  544. package/src/utils/removeUndefined.ts +4 -0
  545. package/src/utils/writeFiles.ts +52 -0
  546. package/src/variables/VariableValue.ts +6 -0
  547. package/src/variables/VariableValueContainingReferences.ts +89 -0
  548. package/src/variables/__tests__/resolveAllReferences.test.ts +110 -0
  549. package/src/variables/__tests__/resolveAllReferencesOnce.test.ts +64 -0
  550. package/src/variables/__tests__/resolveReferencesOnce.test.ts +117 -0
  551. package/src/variables/__tests__/variableValue.test.ts +73 -0
  552. package/src/variables/resolveAllReferences.ts +46 -0
  553. package/src/variables/resolveAllReferencesOnce.ts +44 -0
  554. package/src/variables/resolveReferencesOnce.ts +29 -0
  555. package/bin/catladder-gitlab-dev.js +0 -3
  556. package/bin/catladder-gitlab.js +0 -3
  557. package/dist/bundles/catladder-gitlab/index.js +0 -33838
  558. package/dist/context/__tests__/resolveReferences.test.js +0 -336
  559. package/dist/context/resolveReferences.d.ts +0 -4
  560. package/dist/context/resolveReferences.js +0 -254
  561. package/dist/deploy/cloudRun/deployJob.d.ts +0 -3
  562. package/dist/deploy/cloudRun/deployJob.js +0 -248
  563. package/dist/deploy/kubernetes/processSecretsAsFiles.d.ts +0 -84
  564. package/dist/deploy/kubernetes/processSecretsAsFiles.js +0 -31
  565. package/dist/pipeline/commitInfo/getBuildId.d.ts +0 -6
  566. package/dist/pipeline/commitInfo/getCommitInfo.d.ts +0 -2
  567. package/dist/pipeline/createChildPipeline.d.ts +0 -3
  568. package/examples/__snapshots__/cloud-run-memory-limit.ts.snap +0 -1780
  569. package/examples/__snapshots__/cloud-run-no-cpu-throttling.ts.snap +0 -1780
  570. package/examples/__snapshots__/cloud-run-non-public.ts.snap +0 -1780
  571. package/examples/__snapshots__/cloud-run-with-sql-reuse-db.ts.snap +0 -3532
  572. package/examples/__snapshots__/cloud-run-with-sql.ts.snap +0 -3543
  573. package/examples/__snapshots__/custom-build-job-with-tests.ts.snap +0 -1656
  574. package/examples/__snapshots__/custom-build-job.ts.snap +0 -1362
  575. package/examples/__snapshots__/custom-deploy.ts.snap +0 -1556
  576. package/examples/__snapshots__/custom-envs.ts.snap +0 -1050
  577. package/examples/__snapshots__/custom-sbom-java.ts.snap +0 -1370
  578. package/examples/__snapshots__/kubernetes-application-customization.ts.snap +0 -2468
  579. package/examples/__snapshots__/kubernetes-with-cloud-sql-legacy.ts.snap +0 -2428
  580. package/examples/__snapshots__/kubernetes-with-cloud-sql.ts.snap +0 -2440
  581. package/examples/__snapshots__/kubernetes-with-jobs.ts.snap +0 -4453
  582. package/examples/__snapshots__/kubernetes-with-mongodb.ts.snap +0 -2632
  583. package/examples/__snapshots__/meteor-kubernetes.ts.snap +0 -2557
  584. package/examples/__snapshots__/native-app.ts.snap +0 -2878
  585. package/examples/__snapshots__/node-build-with-custom-image.ts.snap +0 -1780
  586. package/examples/__snapshots__/rails-k8s-with-worker.ts.snap +0 -4189
  587. package/examples/__snapshots__/wait-for-other-deploy.ts.snap +0 -1922
  588. package/examples/kubernetes-with-cloud-sql-legacy.ts +0 -33
  589. package/scripts/bundle +0 -2
  590. package/src/context/__tests__/resolveReferences.test.ts +0 -143
  591. package/src/context/resolveReferences.ts +0 -70
  592. package/src/deploy/cloudRun/deployJob.ts +0 -301
  593. package/src/deploy/kubernetes/processSecretsAsFiles.ts +0 -34
  594. package/src/pipeline/commitInfo/getBuildId.ts +0 -17
  595. package/src/pipeline/commitInfo/getCommitInfo.ts +0 -15
  596. package/src/pipeline/createChildPipeline.ts +0 -45
  597. /package/dist/{context/__tests__/resolveReferences.test.d.ts → config/__tests__/getAllEnvs.test.d.ts} +0 -0
@@ -1,18 +1,20 @@
1
+ import type { GitlabJobWithContext } from "../pipeline/gitlab/createGitlabJobs";
1
2
  import type {
2
3
  Artifacts as GitlabCiArtifacts,
3
4
  JobTemplate,
4
- Cache,
5
+ Cache as GitlabJobCache,
5
6
  Rules,
6
7
  } from "./gitlab-ci-yml";
7
8
 
8
9
  export { Retry, Image as GitlabJobImage } from "./gitlab-ci-yml";
9
10
 
10
11
  // Reports won't show up on MRs until https://gitlab.com/groups/gitlab-org/-/epics/8205
11
- export interface Artifacts extends Omit<GitlabCiArtifacts, "paths"> {
12
- paths: string[];
13
- }
14
- export type GitlabJobCache = Cache;
15
- export type GitlabRule = Exclude<Rules, null>[number];
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
+ >;
16
18
  export type GitlabEnvironment = Omit<
17
19
  Exclude<JobTemplate["environment"], undefined | string>,
18
20
  "deployment_tier"
@@ -64,5 +66,6 @@ export interface GitlabPipeline extends Pick<JobTemplate, "variables"> {
64
66
  rules: GitlabRule[];
65
67
  };
66
68
  stages: string[];
67
- jobs: Record<string, GitlabJobDef>;
69
+ jobs: Record<string, GitlabJobWithContext>;
70
+ before_script?: string[];
68
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,12 +1,14 @@
1
+ import type { UnspecifiedEnvVars } from "..";
1
2
  import type {
2
3
  Artifacts,
3
4
  GitlabEnvironment,
4
5
  GitlabJobCache,
5
- GitlabRule,
6
- GitlabJobImage,
7
6
  GitlabJobDef,
7
+ GitlabJobImage,
8
+ GitlabRule,
8
9
  } from "./gitlab-types";
9
10
 
11
+ export type CatladderJobCache = GitlabJobCache;
10
12
  export const BASE_STAGES = [
11
13
  "setup",
12
14
  "test",
@@ -16,11 +18,18 @@ export const BASE_STAGES = [
16
18
  "rollback",
17
19
  "stop",
18
20
  ] as const;
19
- export type BaseStage = typeof BASE_STAGES[number];
21
+ export type BaseStage = (typeof BASE_STAGES)[number];
20
22
 
21
23
  export type CatladderJobNeed =
22
24
  | string
23
- | { 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
+ };
24
33
  export type CatladderJob<S = BaseStage> = {
25
34
  /**
26
35
  * the name of the job (without any env or app prefix and suffix)
@@ -50,6 +59,7 @@ export type CatladderJob<S = BaseStage> = {
50
59
  needsStages?: {
51
60
  stage: S;
52
61
  artifacts?: boolean;
62
+ workspaceName?: string;
53
63
  }[];
54
64
 
55
65
  /**
@@ -60,18 +70,10 @@ export type CatladderJob<S = BaseStage> = {
60
70
  */
61
71
  needs?: Array<CatladderJobNeed>;
62
72
 
63
- /**
64
- * @deprecated set `componentName` to `needs` if you want to wait for a job from another component
65
- */
66
- needsOtherComponent?: Array<{
67
- componentName: string;
68
- job: string;
69
- artifacts: boolean;
70
- }>;
71
73
  /**
72
74
  * cache config, we use here the same shape as gitlab itself
73
75
  */
74
- cache?: GitlabJobCache | GitlabJobCache[];
76
+ cache?: CatladderJobCache | CatladderJobCache[];
75
77
 
76
78
  /**
77
79
  * job artifacts, we also use gitlab shape here
@@ -91,14 +93,28 @@ export type CatladderJob<S = BaseStage> = {
91
93
  /**
92
94
  * variables to pass
93
95
  */
94
- variables: GitlabJobDef["variables"];
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>;
95
104
 
96
105
  /**
97
106
  * whether failures are allowed
98
107
  */
99
108
  allow_failure?: boolean;
100
109
 
101
- environment?: GitlabEnvironment;
110
+ /**
111
+ * gitlab environment config, subject to change
112
+ */
113
+ environment?: CatladderJobEnvironmentConfig;
114
+
115
+ /** */
116
+
117
+ when?: GitlabRule["when"];
102
118
 
103
119
  rules?: GitlabRule[];
104
120
 
@@ -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}
@@ -22,12 +24,27 @@ export const repeatOnFailure = (
22
24
  `;
23
25
  };
24
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
+
25
42
  export const collapseableSection =
26
43
  (name: string, header: string) =>
27
44
  (commands: string[]): string[] => {
28
45
  return [
29
- `echo -e "\\e[0Ksection_start:$(date +%s):${name}[collapsed=true]\\r\\e[0K${header}"`,
46
+ start.invoke(`"${name}"`, `"${header}"`),
30
47
  ...commands,
31
- `echo -e "\\e[0Ksection_end:$(date +%s):${name}\\r\\e[0K"`,
48
+ end.invoke(`"${name}"`),
32
49
  ];
33
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: undefined | 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
+ });
@@ -0,0 +1,64 @@
1
+ import {
2
+ VariableReference,
3
+ VariableValueContainingReferences,
4
+ createVariableValueContainingReferencesFromString,
5
+ } from "../VariableValueContainingReferences";
6
+ import { resolveAllReferencesOnce } from "../resolveAllReferencesOnce";
7
+
8
+ describe("resolveAllReferencesOnce", () => {
9
+ it("should replace all references", async () => {
10
+ const values = {
11
+ myVar: createVariableValueContainingReferencesFromString(
12
+ "the 2nd component has ${component2:variable1} and self reference ${variable2}",
13
+ { componentName: "component1" },
14
+ ),
15
+ myOtherVar: createVariableValueContainingReferencesFromString(
16
+ "the third component has ${component3:variable1}, isn't that cool?",
17
+ { componentName: "component1" },
18
+ ),
19
+ myThirdVar: createVariableValueContainingReferencesFromString(
20
+ "value from component3: ${component3:variable3}",
21
+ { componentName: "component1" },
22
+ ),
23
+ };
24
+
25
+ const getEnvVars = async (componentName: string) => {
26
+ return {
27
+ variable1: createVariableValueContainingReferencesFromString(
28
+ `i am variable1 from ${componentName}`,
29
+ { componentName },
30
+ ),
31
+ variable2: createVariableValueContainingReferencesFromString(
32
+ `foo from ${componentName}`,
33
+ {
34
+ componentName,
35
+ },
36
+ ),
37
+ variable3: createVariableValueContainingReferencesFromString(
38
+ `i am referencing \${component1:variable1}`,
39
+ { componentName },
40
+ ),
41
+ };
42
+ };
43
+
44
+ const result = await resolveAllReferencesOnce(values, getEnvVars);
45
+ expect(result).toEqual({
46
+ myVar: new VariableValueContainingReferences([
47
+ "the 2nd component has ",
48
+ "i am variable1 from component2",
49
+ " and self reference ",
50
+ "foo from component1",
51
+ ]),
52
+ myOtherVar: new VariableValueContainingReferences([
53
+ "the third component has ",
54
+ "i am variable1 from component3",
55
+ ", isn't that cool?",
56
+ ]),
57
+ myThirdVar: new VariableValueContainingReferences([
58
+ "value from component3: ",
59
+ "i am referencing ",
60
+ new VariableReference("component1", "variable1"),
61
+ ]),
62
+ });
63
+ });
64
+ });