@catladder/pipeline 0.0.0-refactore-catenv-command-validates-argument-78d05852 → 0.0.0-reference-database-url-1befbbee

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 (639) hide show
  1. package/README.md +15 -1
  2. package/dist/bash/BashExpression.d.ts +36 -0
  3. package/dist/bash/BashExpression.js +114 -0
  4. package/dist/bash/bashEscape.d.ts +37 -0
  5. package/dist/bash/bashEscape.js +119 -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.js +4 -2
  18. package/dist/build/base/createAppBuildJob.d.ts +5 -3
  19. package/dist/build/base/createAppBuildJob.js +18 -15
  20. package/dist/build/base/createArtifactsConfig.d.ts +1 -1
  21. package/dist/build/base/createArtifactsConfig.js +3 -1
  22. package/dist/build/base/createBuildJobDefinition.d.ts +6 -0
  23. package/dist/build/base/createBuildJobDefinition.js +58 -0
  24. package/dist/build/base/index.d.ts +6 -4
  25. package/dist/build/base/index.js +17 -6
  26. package/dist/build/base/writeBuildInfo.d.ts +2 -2
  27. package/dist/build/base/writeBuildInfo.js +4 -3
  28. package/dist/build/base/writeDotEnv.d.ts +3 -2
  29. package/dist/build/base/writeDotEnv.js +30 -6
  30. package/dist/build/cache/createJobCache.d.ts +7 -0
  31. package/dist/build/cache/createJobCache.js +115 -0
  32. package/dist/build/cache/getAllCacheConfigsFromConfig.d.ts +3 -0
  33. package/dist/build/cache/getAllCacheConfigsFromConfig.js +64 -0
  34. package/dist/build/cache/transformLegacyJobCache.d.ts +3 -0
  35. package/dist/build/cache/transformLegacyJobCache.js +29 -0
  36. package/dist/build/custom/__tests__/testJob.test.js +15 -16
  37. package/dist/build/custom/buildJob.d.ts +2 -2
  38. package/dist/build/custom/buildJob.js +8 -66
  39. package/dist/build/custom/index.d.ts +2 -2
  40. package/dist/build/custom/index.js +3 -1
  41. package/dist/build/custom/testJob.d.ts +4 -4
  42. package/dist/build/custom/testJob.js +25 -20
  43. package/dist/build/docker.d.ts +37 -46
  44. package/dist/build/docker.js +65 -34
  45. package/dist/build/index.d.ts +14 -7
  46. package/dist/build/index.js +44 -17
  47. package/dist/build/node/buildJob.d.ts +8 -2
  48. package/dist/build/node/buildJob.js +39 -52
  49. package/dist/build/node/cache.d.ts +4 -5
  50. package/dist/build/node/cache.js +18 -24
  51. package/dist/build/node/constants.js +5 -3
  52. package/dist/build/node/index.d.ts +4 -4
  53. package/dist/build/node/index.js +3 -1
  54. package/dist/build/node/meteor.d.ts +2 -2
  55. package/dist/build/node/meteor.js +10 -12
  56. package/dist/build/node/testJob.d.ts +3 -2
  57. package/dist/build/node/testJob.js +29 -19
  58. package/dist/build/node/yarn.d.ts +4 -3
  59. package/dist/build/node/yarn.js +11 -12
  60. package/dist/build/rails/build.d.ts +2 -2
  61. package/dist/build/rails/build.js +13 -6
  62. package/dist/build/rails/index.d.ts +2 -2
  63. package/dist/build/rails/index.js +3 -1
  64. package/dist/build/rails/test.d.ts +2 -2
  65. package/dist/build/rails/test.js +30 -11
  66. package/dist/build/sbom.d.ts +2 -2
  67. package/dist/build/sbom.js +13 -7
  68. package/dist/build/types.d.ts +160 -47
  69. package/dist/build/types.js +10 -2
  70. package/dist/catladder-gitlab.js +129 -49
  71. package/dist/config/__tests__/configruedEnvs.test.js +3 -1
  72. package/dist/config/__tests__/getAllEnvs.test.js +79 -0
  73. package/dist/config/__tests__/getAllEnvsInAllComponents.test.d.ts +1 -0
  74. package/dist/config/__tests__/getAllEnvsInAllComponents.test.js +73 -0
  75. package/dist/config/configruedEnvs.js +3 -1
  76. package/dist/config/index.js +13 -7
  77. package/dist/config/readConfig.d.ts +2 -2
  78. package/dist/config/readConfig.js +191 -40
  79. package/dist/constants.js +5 -3
  80. package/dist/context/createAllComponentsContext.d.ts +12 -0
  81. package/dist/{pipeline/commitInfo/getCommitInfo.js → context/createAllComponentsContext.js} +35 -19
  82. package/dist/context/createComponentContext.d.ts +11 -0
  83. package/dist/context/createComponentContext.js +262 -0
  84. package/dist/context/createWorkspaceContext.d.ts +16 -0
  85. package/dist/context/createWorkspaceContext.js +173 -0
  86. package/dist/context/getBuildInfoVariables.d.ts +6 -0
  87. package/dist/context/getBuildInfoVariables.js +55 -0
  88. package/dist/context/getEnvConfig.js +21 -4
  89. package/dist/context/getEnvType.js +3 -1
  90. package/dist/context/getEnvironment.d.ts +3 -3
  91. package/dist/context/getEnvironment.js +11 -12
  92. package/dist/context/getEnvironmentContext.d.ts +7 -3
  93. package/dist/context/getEnvironmentContext.js +21 -11
  94. package/dist/context/getEnvironmentVariables.d.ts +22 -5
  95. package/dist/context/getEnvironmentVariables.js +79 -53
  96. package/dist/context/getLabels.d.ts +2 -2
  97. package/dist/context/getLabels.js +9 -7
  98. package/dist/context/getReviewSlug.d.ts +4 -0
  99. package/dist/context/getReviewSlug.js +21 -0
  100. package/dist/context/index.d.ts +2 -4
  101. package/dist/context/index.js +15 -162
  102. package/dist/context/transformJobOnlyVars.d.ts +5 -2
  103. package/dist/context/transformJobOnlyVars.js +4 -2
  104. package/dist/context/utils/envVars.d.ts +1 -1
  105. package/dist/context/utils/envVars.js +5 -2
  106. package/dist/defaults/index.js +3 -1
  107. package/dist/deploy/base/deploy.d.ts +3 -3
  108. package/dist/deploy/base/deploy.js +37 -21
  109. package/dist/deploy/base/index.d.ts +3 -5
  110. package/dist/deploy/base/index.js +3 -1
  111. package/dist/deploy/base/rollback.d.ts +3 -3
  112. package/dist/deploy/base/rollback.js +13 -9
  113. package/dist/deploy/base/stop.d.ts +3 -3
  114. package/dist/deploy/base/stop.js +16 -11
  115. package/dist/deploy/base/types.d.ts +1 -1
  116. package/dist/deploy/base/types.js +3 -1
  117. package/dist/deploy/base/variables.js +4 -2
  118. package/dist/deploy/cloudRun/artifactsRegistry.d.ts +8 -11
  119. package/dist/deploy/cloudRun/artifactsRegistry.js +15 -14
  120. package/dist/deploy/cloudRun/cleanup.d.ts +2 -2
  121. package/dist/deploy/cloudRun/cleanup.js +3 -1
  122. package/dist/deploy/cloudRun/cloudRunRevisions.d.ts +2 -2
  123. package/dist/deploy/cloudRun/cloudRunRevisions.js +7 -6
  124. package/dist/deploy/cloudRun/createJobs/cloudRunJobs.d.ts +8 -6
  125. package/dist/deploy/cloudRun/createJobs/cloudRunJobs.js +57 -106
  126. package/dist/deploy/cloudRun/createJobs/cloudRunServices.d.ts +3 -3
  127. package/dist/deploy/cloudRun/createJobs/cloudRunServices.js +79 -15
  128. package/dist/deploy/cloudRun/createJobs/common.d.ts +7 -7
  129. package/dist/deploy/cloudRun/createJobs/common.js +6 -3
  130. package/dist/deploy/cloudRun/createJobs/constants.d.ts +1 -0
  131. package/dist/deploy/cloudRun/createJobs/constants.js +7 -0
  132. package/dist/deploy/cloudRun/createJobs/execute/onDeploy.d.ts +3 -0
  133. package/dist/deploy/cloudRun/createJobs/execute/onDeploy.js +115 -0
  134. package/dist/deploy/cloudRun/createJobs/execute/schedules.d.ts +3 -0
  135. package/dist/deploy/cloudRun/createJobs/execute/schedules.js +173 -0
  136. package/dist/deploy/cloudRun/createJobs/getCloudRunDeployScripts.d.ts +2 -2
  137. package/dist/deploy/cloudRun/createJobs/getCloudRunDeployScripts.js +13 -5
  138. package/dist/deploy/cloudRun/createJobs/getCloudRunStopScripts.d.ts +2 -2
  139. package/dist/deploy/cloudRun/createJobs/getCloudRunStopScripts.js +7 -3
  140. package/dist/deploy/cloudRun/createJobs/healthCheck.d.ts +5 -0
  141. package/dist/deploy/cloudRun/createJobs/healthCheck.js +82 -0
  142. package/dist/deploy/cloudRun/createJobs/index.d.ts +2 -2
  143. package/dist/deploy/cloudRun/createJobs/index.js +26 -12
  144. package/dist/deploy/cloudRun/createJobs/volumes.d.ts +3 -0
  145. package/dist/deploy/cloudRun/createJobs/volumes.js +58 -0
  146. package/dist/deploy/cloudRun/index.d.ts +2 -2
  147. package/dist/deploy/cloudRun/index.js +25 -13
  148. package/dist/deploy/cloudRun/utils/cloudRunExecutionUrl.d.ts +10 -0
  149. package/dist/deploy/cloudRun/utils/cloudRunExecutionUrl.js +16 -0
  150. package/dist/deploy/cloudRun/utils/createArgsString.d.ts +2 -2
  151. package/dist/deploy/cloudRun/utils/createArgsString.js +3 -1
  152. package/dist/deploy/cloudRun/utils/database.d.ts +25 -4
  153. package/dist/deploy/cloudRun/utils/database.js +49 -15
  154. package/dist/deploy/cloudRun/utils/gcloudServiceAccountLoginCommands.d.ts +2 -2
  155. package/dist/deploy/cloudRun/utils/gcloudServiceAccountLoginCommands.js +3 -1
  156. package/dist/deploy/cloudRun/utils/getJobOrServiceArgs.d.ts +2 -0
  157. package/dist/deploy/cloudRun/utils/getJobOrServiceArgs.js +12 -0
  158. package/dist/deploy/cloudRun/utils/getServiceName.d.ts +2 -2
  159. package/dist/deploy/cloudRun/utils/getServiceName.js +3 -1
  160. package/dist/deploy/cloudRun/utils/jobName.d.ts +6 -1
  161. package/dist/deploy/cloudRun/utils/jobName.js +18 -4
  162. package/dist/deploy/cloudRun/utils/removeFirstLinesFromCommandOutput.js +3 -1
  163. package/dist/deploy/cloudSql/utils.d.ts +2 -1
  164. package/dist/deploy/cloudSql/utils.js +7 -2
  165. package/dist/deploy/custom/deployJob.d.ts +2 -2
  166. package/dist/deploy/custom/deployJob.js +10 -9
  167. package/dist/deploy/custom/index.d.ts +2 -2
  168. package/dist/deploy/custom/index.js +3 -1
  169. package/dist/deploy/dockerTag/deployJob.d.ts +2 -2
  170. package/dist/deploy/dockerTag/deployJob.js +6 -6
  171. package/dist/deploy/dockerTag/index.d.ts +2 -2
  172. package/dist/deploy/dockerTag/index.js +3 -1
  173. package/dist/deploy/index.d.ts +10 -9
  174. package/dist/deploy/index.js +13 -7
  175. package/dist/deploy/kubernetes/additionalSecretKeys.d.ts +3 -1
  176. package/dist/deploy/kubernetes/additionalSecretKeys.js +3 -1
  177. package/dist/deploy/kubernetes/cloudSql/index.d.ts +6 -5
  178. package/dist/deploy/kubernetes/cloudSql/index.js +14 -21
  179. package/dist/deploy/kubernetes/deployJob.d.ts +2 -2
  180. package/dist/deploy/kubernetes/deployJob.js +23 -22
  181. package/dist/deploy/kubernetes/index.d.ts +2 -2
  182. package/dist/deploy/kubernetes/index.js +52 -15
  183. package/dist/deploy/kubernetes/kubeEnv.d.ts +5 -4
  184. package/dist/deploy/kubernetes/kubeEnv.js +9 -5
  185. package/dist/deploy/kubernetes/kubeValues.d.ts +5 -6
  186. package/dist/deploy/kubernetes/kubeValues.js +17 -19
  187. package/dist/deploy/kubernetes/mongodb.d.ts +2 -2
  188. package/dist/deploy/kubernetes/mongodb.js +14 -12
  189. package/dist/deploy/sbom.d.ts +4 -4
  190. package/dist/deploy/sbom.js +8 -4
  191. package/dist/deploy/types/base.d.ts +5 -5
  192. package/dist/deploy/types/base.js +3 -1
  193. package/dist/deploy/types/custom.d.ts +3 -7
  194. package/dist/deploy/types/custom.js +3 -1
  195. package/dist/deploy/types/dockerTag.d.ts +1 -1
  196. package/dist/deploy/types/dockerTag.js +3 -1
  197. package/dist/deploy/types/googleCloudRun.d.ts +291 -16
  198. package/dist/deploy/types/googleCloudRun.js +28 -1
  199. package/dist/deploy/types/index.d.ts +8 -7
  200. package/dist/deploy/types/index.js +21 -10
  201. package/dist/deploy/types/kubernetes.d.ts +21 -54
  202. package/dist/deploy/types/kubernetes.js +3 -1
  203. package/dist/deploy/utils.d.ts +2 -2
  204. package/dist/deploy/utils.js +5 -2
  205. package/dist/globalScriptFunctions/index.d.ts +14 -0
  206. package/dist/globalScriptFunctions/index.js +37 -0
  207. package/dist/index.d.ts +5 -2
  208. package/dist/index.js +18 -9
  209. package/dist/packageInfos.d.ts +4 -0
  210. package/dist/packageInfos.js +20 -0
  211. package/dist/pipeline/__tests__/getPipelineStages.test.d.ts +1 -0
  212. package/dist/pipeline/__tests__/getPipelineStages.test.js +73 -0
  213. package/dist/pipeline/createAllJobs.d.ts +16 -6
  214. package/dist/pipeline/createAllJobs.js +99 -27
  215. package/dist/pipeline/createJobsForComponent.d.ts +2 -2
  216. package/dist/pipeline/createJobsForComponent.js +9 -149
  217. package/dist/pipeline/createJobsForWorkspace.d.ts +3 -0
  218. package/dist/pipeline/createJobsForWorkspace.js +12 -0
  219. package/dist/pipeline/createMainPipeline.d.ts +3 -0
  220. package/dist/pipeline/createMainPipeline.js +283 -0
  221. package/dist/pipeline/generatePipelineFiles.d.ts +7 -0
  222. package/dist/pipeline/generatePipelineFiles.js +305 -0
  223. package/dist/pipeline/getPipelineStages.d.ts +7 -0
  224. package/dist/pipeline/getPipelineStages.js +56 -0
  225. package/dist/pipeline/gitlab/createGitlabJobs.d.ts +11 -14
  226. package/dist/pipeline/gitlab/createGitlabJobs.js +264 -74
  227. package/dist/pipeline/gitlab/createGitlabPipeline.d.ts +9 -0
  228. package/dist/pipeline/gitlab/createGitlabPipeline.js +77 -0
  229. package/dist/pipeline/gitlab/gitlabReleaseJobs.d.ts +33 -0
  230. package/dist/pipeline/gitlab/gitlabReleaseJobs.js +25 -0
  231. package/dist/pipeline/gitlab/sortGitLabJobDefProps.d.ts +7 -0
  232. package/dist/pipeline/gitlab/sortGitLabJobDefProps.js +27 -0
  233. package/dist/pipeline/index.d.ts +3 -2
  234. package/dist/pipeline/index.js +16 -9
  235. package/dist/pipeline/packageManager.d.ts +4 -2
  236. package/dist/pipeline/packageManager.js +56 -19
  237. package/dist/pipeline/yarn/yarnUtils.d.ts +2 -2
  238. package/dist/pipeline/yarn/yarnUtils.js +18 -15
  239. package/dist/rules/index.d.ts +10 -3
  240. package/dist/rules/index.js +35 -17
  241. package/dist/runner/index.d.ts +1 -1
  242. package/dist/runner/index.js +3 -1
  243. package/dist/tsconfig.tsbuildinfo +1 -1
  244. package/dist/types/config.d.ts +54 -36
  245. package/dist/types/config.js +5 -2
  246. package/dist/types/context.d.ts +123 -38
  247. package/dist/types/context.js +12 -1
  248. package/dist/types/environmentContext.d.ts +15 -12
  249. package/dist/types/environmentContext.js +3 -1
  250. package/dist/types/gitlab-ci-yml.d.ts +30 -30
  251. package/dist/types/gitlab-ci-yml.js +3 -2
  252. package/dist/types/gitlab-types.d.ts +8 -8
  253. package/dist/types/gitlab-types.js +3 -1
  254. package/dist/types/index.d.ts +3 -1
  255. package/dist/types/index.js +16 -8
  256. package/dist/types/jobDefinition.d.ts +11 -0
  257. package/dist/types/jobDefinition.js +5 -0
  258. package/dist/types/jobs.d.ts +30 -15
  259. package/dist/types/jobs.js +3 -1
  260. package/dist/types/pipeline.d.ts +3 -3
  261. package/dist/types/pipeline.js +3 -1
  262. package/dist/types/utils.d.ts +1 -1
  263. package/dist/types/utils.js +3 -1
  264. package/dist/utils/gitlab.js +7 -2
  265. package/dist/utils/index.d.ts +2 -1
  266. package/dist/utils/index.js +10 -3
  267. package/dist/utils/jsonParse.d.ts +1 -0
  268. package/dist/utils/jsonParse.js +14 -0
  269. package/dist/utils/removeUndefined.d.ts +1 -0
  270. package/dist/utils/removeUndefined.js +36 -0
  271. package/dist/utils/writeFiles.d.ts +11 -0
  272. package/dist/{pipeline/commitInfo/getBuildId.js → utils/writeFiles.js} +39 -22
  273. package/dist/variables/VariableValue.d.ts +3 -0
  274. package/dist/variables/VariableValue.js +5 -0
  275. package/dist/variables/VariableValueContainingReferences.d.ts +24 -0
  276. package/dist/variables/VariableValueContainingReferences.js +97 -0
  277. package/dist/variables/__tests__/resolveAllReferences.test.d.ts +1 -0
  278. package/dist/variables/__tests__/resolveAllReferences.test.js +218 -0
  279. package/dist/variables/__tests__/resolveAllReferencesOnce.test.d.ts +1 -0
  280. package/dist/variables/__tests__/resolveAllReferencesOnce.test.js +171 -0
  281. package/dist/variables/__tests__/resolveReferencesOnce.test.d.ts +1 -0
  282. package/dist/variables/__tests__/resolveReferencesOnce.test.js +199 -0
  283. package/dist/variables/__tests__/variableValue.test.d.ts +1 -0
  284. package/dist/variables/__tests__/variableValue.test.js +36 -0
  285. package/dist/variables/resolveAllReferences.d.ts +3 -0
  286. package/dist/{pipeline/createChildPipeline.js → variables/resolveAllReferences.js} +44 -48
  287. package/dist/variables/resolveAllReferencesOnce.d.ts +5 -0
  288. package/dist/variables/resolveAllReferencesOnce.js +191 -0
  289. package/dist/variables/resolveReferencesOnce.d.ts +8 -0
  290. package/dist/variables/resolveReferencesOnce.js +22 -0
  291. package/examples/.test-gen-ignore +1 -0
  292. package/examples/__snapshots__/cloud-run-health-check-defaults.test.ts.snap +1394 -0
  293. package/examples/__snapshots__/cloud-run-health-check-only-startup.test.ts.snap +1394 -0
  294. package/examples/__snapshots__/cloud-run-health-check.test.ts.snap +1394 -0
  295. package/examples/__snapshots__/cloud-run-http2.test.ts.snap +1394 -0
  296. package/examples/__snapshots__/cloud-run-llama.test.ts.snap +624 -0
  297. package/examples/__snapshots__/cloud-run-memory-limit.test.ts.snap +1394 -0
  298. package/examples/__snapshots__/cloud-run-meteor-with-worker.test.ts.snap +1394 -0
  299. package/examples/__snapshots__/cloud-run-nextjs.test.ts.snap +1410 -0
  300. package/examples/__snapshots__/cloud-run-no-cpu-throttling.test.ts.snap +1394 -0
  301. package/examples/__snapshots__/cloud-run-no-service.test.ts.snap +1502 -0
  302. package/examples/__snapshots__/cloud-run-non-public.test.ts.snap +1394 -0
  303. package/examples/__snapshots__/cloud-run-post-stop-job.test.ts.snap +1412 -0
  304. package/examples/__snapshots__/cloud-run-service-custom-vpc-connector.test.ts.snap +1462 -0
  305. package/examples/__snapshots__/cloud-run-service-custom-vpc.test.ts.snap +1462 -0
  306. package/examples/__snapshots__/cloud-run-service-gen2.test.ts.snap +1394 -0
  307. package/examples/__snapshots__/cloud-run-service-increase-timout.test.ts.snap +1394 -0
  308. package/examples/__snapshots__/cloud-run-service-with-volumes.test.ts.snap +1466 -0
  309. package/examples/__snapshots__/cloud-run-storybook.test.ts.snap +1284 -0
  310. package/examples/__snapshots__/cloud-run-with-gpu.test.ts.snap +1394 -0
  311. package/examples/__snapshots__/cloud-run-with-ngnix.test.ts.snap +1394 -0
  312. package/examples/__snapshots__/cloud-run-with-sql-legacy-jobs.test.ts.snap +1709 -0
  313. package/examples/__snapshots__/cloud-run-with-sql-multiple-dbs.test.ts.snap +4515 -0
  314. package/examples/__snapshots__/cloud-run-with-sql-reuse-db.test.ts.snap +2950 -0
  315. package/examples/__snapshots__/cloud-run-with-sql.test.ts.snap +1772 -0
  316. package/examples/__snapshots__/cloud-run-with-worker.test.ts.snap +1402 -0
  317. package/examples/__snapshots__/custom-build-job-with-tests.test.ts.snap +1261 -0
  318. package/examples/__snapshots__/custom-build-job.test.ts.snap +1156 -0
  319. package/examples/__snapshots__/custom-deploy.test.ts.snap +1059 -0
  320. package/examples/__snapshots__/custom-envs.test.ts.snap +786 -0
  321. package/examples/__snapshots__/custom-sbom-java.test.ts.snap +1152 -0
  322. package/examples/__snapshots__/custom-verify-job.test.ts.snap +1606 -0
  323. package/examples/__snapshots__/git-submodule.test.ts.snap +1395 -0
  324. package/examples/__snapshots__/kubernetes-application-customization.test.ts.snap +1713 -0
  325. package/examples/__snapshots__/kubernetes-with-cloud-sql.test.ts.snap +1733 -0
  326. package/examples/__snapshots__/kubernetes-with-jobs.test.ts.snap +3265 -0
  327. package/examples/__snapshots__/kubernetes-with-mongodb.test.ts.snap +1837 -0
  328. package/examples/__snapshots__/local-dot-env.test.ts.snap +1318 -0
  329. package/examples/__snapshots__/meteor-kubernetes.test.ts.snap +1790 -0
  330. package/examples/__snapshots__/multiline-var.test.ts.snap +5585 -0
  331. package/examples/__snapshots__/native-app.test.ts.snap +2210 -0
  332. package/examples/__snapshots__/node-build-with-custom-image.test.ts.snap +1394 -0
  333. package/examples/__snapshots__/node-build-with-docker-additions.test.ts.snap +1402 -0
  334. package/examples/__snapshots__/override-secrets.test.ts.snap +1419 -0
  335. package/examples/__snapshots__/rails-k8s-with-worker-dockerfile.test.ts.snap +1464 -0
  336. package/examples/__snapshots__/rails-k8s-with-worker.test.ts.snap +1444 -0
  337. package/examples/__snapshots__/referencing-other-vars.test.ts.snap +4645 -0
  338. package/examples/__snapshots__/wait-for-other-deploy.test.ts.snap +1424 -0
  339. package/examples/__snapshots__/workspace-api-www-turbo-cache.test.ts.snap +2298 -0
  340. package/examples/__snapshots__/workspace-api-www.test.ts.snap +2290 -0
  341. package/examples/__utils__/helpers.ts +9 -12
  342. package/examples/cloud-run-health-check-defaults.test.ts +11 -0
  343. package/examples/cloud-run-health-check-defaults.ts +28 -0
  344. package/examples/cloud-run-health-check-only-startup.test.ts +11 -0
  345. package/examples/cloud-run-health-check-only-startup.ts +38 -0
  346. package/examples/cloud-run-health-check.test.ts +11 -0
  347. package/examples/cloud-run-health-check.ts +45 -0
  348. package/examples/cloud-run-http2.test.ts +11 -0
  349. package/examples/cloud-run-http2.ts +29 -0
  350. package/examples/cloud-run-llama.test.ts +11 -0
  351. package/examples/cloud-run-llama.ts +40 -0
  352. package/examples/cloud-run-memory-limit.test.ts +11 -0
  353. package/examples/cloud-run-memory-limit.ts +12 -7
  354. package/examples/cloud-run-meteor-with-worker.test.ts +11 -0
  355. package/examples/cloud-run-meteor-with-worker.ts +13 -7
  356. package/examples/cloud-run-nextjs.test.ts +11 -0
  357. package/examples/cloud-run-nextjs.ts +28 -0
  358. package/examples/cloud-run-no-cpu-throttling.test.ts +11 -0
  359. package/examples/cloud-run-no-cpu-throttling.ts +8 -6
  360. package/examples/cloud-run-no-service.test.ts +11 -0
  361. package/examples/cloud-run-no-service.ts +39 -0
  362. package/examples/cloud-run-non-public.test.ts +11 -0
  363. package/examples/cloud-run-non-public.ts +7 -6
  364. package/examples/cloud-run-post-stop-job.test.ts +11 -0
  365. package/examples/cloud-run-post-stop-job.ts +15 -6
  366. package/examples/cloud-run-service-custom-vpc-connector.test.ts +11 -0
  367. package/examples/cloud-run-service-custom-vpc-connector.ts +37 -0
  368. package/examples/cloud-run-service-custom-vpc.test.ts +11 -0
  369. package/examples/cloud-run-service-custom-vpc.ts +39 -0
  370. package/examples/cloud-run-service-gen2.test.ts +11 -0
  371. package/examples/cloud-run-service-gen2.ts +8 -6
  372. package/examples/cloud-run-service-increase-timout.test.ts +11 -0
  373. package/examples/cloud-run-service-increase-timout.ts +29 -0
  374. package/examples/cloud-run-service-with-volumes.test.ts +11 -0
  375. package/examples/cloud-run-service-with-volumes.ts +64 -0
  376. package/examples/cloud-run-storybook.test.ts +11 -0
  377. package/examples/cloud-run-storybook.ts +33 -0
  378. package/examples/cloud-run-with-gpu.test.ts +11 -0
  379. package/examples/cloud-run-with-gpu.ts +30 -0
  380. package/examples/cloud-run-with-ngnix.test.ts +11 -0
  381. package/examples/cloud-run-with-ngnix.ts +29 -0
  382. package/examples/cloud-run-with-sql-legacy-jobs.test.ts +11 -0
  383. package/examples/cloud-run-with-sql-legacy-jobs.ts +49 -0
  384. package/examples/cloud-run-with-sql-multiple-dbs.test.ts +11 -0
  385. package/examples/cloud-run-with-sql-multiple-dbs.ts +87 -0
  386. package/examples/cloud-run-with-sql-reuse-db.test.ts +11 -0
  387. package/examples/cloud-run-with-sql-reuse-db.ts +7 -6
  388. package/examples/cloud-run-with-sql.test.ts +11 -0
  389. package/examples/cloud-run-with-sql.ts +45 -24
  390. package/examples/cloud-run-with-worker.test.ts +11 -0
  391. package/examples/cloud-run-with-worker.ts +8 -6
  392. package/examples/custom-build-job-with-tests.test.ts +11 -0
  393. package/examples/custom-build-job-with-tests.ts +7 -6
  394. package/examples/custom-build-job.test.ts +11 -0
  395. package/examples/custom-build-job.ts +7 -6
  396. package/examples/custom-deploy.test.ts +11 -0
  397. package/examples/custom-deploy.ts +22 -14
  398. package/examples/custom-envs.test.ts +11 -0
  399. package/examples/custom-envs.ts +7 -6
  400. package/examples/custom-sbom-java.test.ts +11 -0
  401. package/examples/custom-sbom-java.ts +12 -8
  402. package/examples/custom-verify-job.test.ts +11 -0
  403. package/examples/custom-verify-job.ts +65 -0
  404. package/examples/git-submodule.test.ts +11 -0
  405. package/examples/git-submodule.ts +30 -0
  406. package/examples/kubernetes-application-customization.test.ts +11 -0
  407. package/examples/kubernetes-application-customization.ts +9 -6
  408. package/examples/kubernetes-with-cloud-sql.test.ts +11 -0
  409. package/examples/kubernetes-with-cloud-sql.ts +9 -6
  410. package/examples/kubernetes-with-jobs.test.ts +11 -0
  411. package/examples/kubernetes-with-jobs.ts +9 -6
  412. package/examples/kubernetes-with-mongodb.test.ts +11 -0
  413. package/examples/kubernetes-with-mongodb.ts +9 -6
  414. package/examples/local-dot-env.test.ts +11 -0
  415. package/examples/local-dot-env.ts +27 -0
  416. package/examples/meteor-kubernetes.test.ts +11 -0
  417. package/examples/meteor-kubernetes.ts +6 -7
  418. package/examples/multiline-var.test.ts +11 -0
  419. package/examples/multiline-var.ts +107 -0
  420. package/examples/native-app.test.ts +11 -0
  421. package/examples/native-app.ts +24 -19
  422. package/examples/node-build-with-custom-image.test.ts +11 -0
  423. package/examples/node-build-with-custom-image.ts +7 -6
  424. package/examples/node-build-with-docker-additions.test.ts +11 -0
  425. package/examples/node-build-with-docker-additions.ts +7 -6
  426. package/examples/override-secrets.test.ts +11 -0
  427. package/examples/override-secrets.ts +44 -0
  428. package/examples/rails-k8s-with-worker-dockerfile.test.ts +33 -0
  429. package/examples/rails-k8s-with-worker.test.ts +11 -0
  430. package/examples/rails-k8s-with-worker.ts +13 -13
  431. package/examples/referencing-other-vars.test.ts +11 -0
  432. package/examples/referencing-other-vars.ts +83 -0
  433. package/examples/wait-for-other-deploy.test.ts +11 -0
  434. package/examples/wait-for-other-deploy.ts +6 -5
  435. package/examples/workspace-api-www-turbo-cache.test.ts +11 -0
  436. package/examples/workspace-api-www-turbo-cache.ts +52 -0
  437. package/examples/workspace-api-www.test.ts +11 -0
  438. package/examples/workspace-api-www.ts +46 -0
  439. package/package.json +23 -26
  440. package/scripts/generate-examples-test.ts +84 -0
  441. package/scripts/generate-gitlab-ci-types.ts +2 -2
  442. package/scripts/tsconfig.json +7 -0
  443. package/src/bash/BashExpression.ts +78 -0
  444. package/src/bash/bashEscape.ts +164 -0
  445. package/src/bash/bashExpressionPerPipelineType.ts +16 -0
  446. package/src/bash/bashYaml.ts +80 -0
  447. package/src/bash/getInjectVarsScript.ts +21 -0
  448. package/src/bash/index.ts +2 -0
  449. package/src/build/artifacts/createBuildJobArtifact.ts +63 -0
  450. package/src/build/base/__tests__/createArtifactsConfig.test.ts +3 -3
  451. package/src/build/base/constants.ts +1 -1
  452. package/src/build/base/createAppBuildJob.ts +40 -24
  453. package/src/build/base/createArtifactsConfig.ts +2 -2
  454. package/src/build/base/createBuildJobDefinition.ts +37 -0
  455. package/src/build/base/index.ts +40 -8
  456. package/src/build/base/writeBuildInfo.ts +3 -3
  457. package/src/build/base/writeDotEnv.ts +25 -6
  458. package/src/build/cache/createJobCache.ts +83 -0
  459. package/src/build/cache/getAllCacheConfigsFromConfig.ts +29 -0
  460. package/src/build/cache/transformLegacyJobCache.ts +14 -0
  461. package/src/build/custom/__tests__/testJob.test.ts +10 -13
  462. package/src/build/custom/buildJob.ts +11 -37
  463. package/src/build/custom/index.ts +4 -2
  464. package/src/build/custom/testJob.ts +24 -21
  465. package/src/build/docker.ts +110 -49
  466. package/src/build/index.ts +45 -11
  467. package/src/build/node/buildJob.ts +68 -69
  468. package/src/build/node/cache.ts +28 -34
  469. package/src/build/node/constants.ts +2 -2
  470. package/src/build/node/index.ts +13 -4
  471. package/src/build/node/meteor.ts +19 -24
  472. package/src/build/node/testJob.ts +44 -25
  473. package/src/build/node/yarn.ts +22 -15
  474. package/src/build/rails/build.ts +15 -9
  475. package/src/build/rails/index.ts +4 -2
  476. package/src/build/rails/test.ts +41 -12
  477. package/src/build/sbom.ts +21 -11
  478. package/src/build/types.ts +198 -47
  479. package/src/catladder-gitlab.ts +7 -56
  480. package/src/config/__tests__/__snapshots__/getAllEnvs.test.ts.snap +31 -0
  481. package/src/config/__tests__/__snapshots__/getAllEnvsInAllComponents.test.ts.snap +15 -0
  482. package/src/config/__tests__/getAllEnvs.test.ts +71 -0
  483. package/src/config/__tests__/getAllEnvsInAllComponents.test.ts +63 -0
  484. package/src/config/configruedEnvs.ts +6 -6
  485. package/src/config/readConfig.ts +15 -22
  486. package/src/constants.ts +5 -2
  487. package/src/context/createAllComponentsContext.ts +31 -0
  488. package/src/context/createComponentContext.ts +148 -0
  489. package/src/context/createWorkspaceContext.ts +56 -0
  490. package/src/context/getBuildInfoVariables.ts +36 -0
  491. package/src/context/getEnvConfig.ts +25 -5
  492. package/src/context/getEnvType.ts +1 -1
  493. package/src/context/getEnvironment.ts +8 -24
  494. package/src/context/getEnvironmentContext.ts +25 -29
  495. package/src/context/getEnvironmentVariables.ts +101 -83
  496. package/src/context/getLabels.ts +8 -5
  497. package/src/context/getReviewSlug.ts +27 -0
  498. package/src/context/index.ts +1 -65
  499. package/src/context/transformJobOnlyVars.ts +6 -3
  500. package/src/context/utils/envVars.ts +5 -4
  501. package/src/deploy/base/deploy.ts +63 -47
  502. package/src/deploy/base/index.ts +11 -6
  503. package/src/deploy/base/rollback.ts +11 -16
  504. package/src/deploy/base/stop.ts +11 -15
  505. package/src/deploy/base/variables.ts +1 -1
  506. package/src/deploy/cloudRun/artifactsRegistry.ts +32 -28
  507. package/src/deploy/cloudRun/cleanup.ts +5 -5
  508. package/src/deploy/cloudRun/cloudRunRevisions.ts +9 -11
  509. package/src/deploy/cloudRun/createJobs/cloudRunJobs.ts +71 -153
  510. package/src/deploy/cloudRun/createJobs/cloudRunServices.ts +65 -26
  511. package/src/deploy/cloudRun/createJobs/common.ts +7 -7
  512. package/src/deploy/cloudRun/createJobs/constants.ts +1 -0
  513. package/src/deploy/cloudRun/createJobs/execute/onDeploy.ts +102 -0
  514. package/src/deploy/cloudRun/createJobs/execute/schedules.ts +186 -0
  515. package/src/deploy/cloudRun/createJobs/getCloudRunDeployScripts.ts +27 -16
  516. package/src/deploy/cloudRun/createJobs/getCloudRunStopScripts.ts +9 -11
  517. package/src/deploy/cloudRun/createJobs/healthCheck.ts +64 -0
  518. package/src/deploy/cloudRun/createJobs/index.ts +20 -14
  519. package/src/deploy/cloudRun/createJobs/volumes.ts +23 -0
  520. package/src/deploy/cloudRun/index.ts +94 -60
  521. package/src/deploy/cloudRun/utils/cloudRunExecutionUrl.ts +20 -0
  522. package/src/deploy/cloudRun/utils/createArgsString.ts +6 -2
  523. package/src/deploy/cloudRun/utils/database.ts +116 -9
  524. package/src/deploy/cloudRun/utils/gcloudServiceAccountLoginCommands.ts +5 -3
  525. package/src/deploy/cloudRun/utils/getJobOrServiceArgs.ts +18 -0
  526. package/src/deploy/cloudRun/utils/getServiceName.ts +2 -2
  527. package/src/deploy/cloudRun/utils/jobName.ts +22 -2
  528. package/src/deploy/cloudRun/utils/removeFirstLinesFromCommandOutput.ts +1 -1
  529. package/src/deploy/cloudSql/utils.ts +13 -10
  530. package/src/deploy/custom/deployJob.ts +15 -10
  531. package/src/deploy/custom/index.ts +2 -2
  532. package/src/deploy/dockerTag/deployJob.ts +6 -7
  533. package/src/deploy/dockerTag/index.ts +8 -7
  534. package/src/deploy/index.ts +15 -12
  535. package/src/deploy/kubernetes/additionalSecretKeys.ts +3 -1
  536. package/src/deploy/kubernetes/cloudSql/index.ts +16 -25
  537. package/src/deploy/kubernetes/deployJob.ts +30 -21
  538. package/src/deploy/kubernetes/index.ts +43 -35
  539. package/src/deploy/kubernetes/kubeEnv.ts +12 -10
  540. package/src/deploy/kubernetes/kubeValues.ts +25 -20
  541. package/src/deploy/kubernetes/mongodb.ts +15 -15
  542. package/src/deploy/sbom.ts +20 -10
  543. package/src/deploy/types/base.ts +3 -3
  544. package/src/deploy/types/custom.ts +3 -7
  545. package/src/deploy/types/googleCloudRun.ts +359 -2
  546. package/src/deploy/types/index.ts +9 -2
  547. package/src/deploy/types/kubernetes.ts +1 -36
  548. package/src/deploy/utils.ts +5 -5
  549. package/src/globalScriptFunctions/index.ts +30 -0
  550. package/src/index.ts +4 -1
  551. package/src/packageInfos.ts +14 -0
  552. package/src/pipeline/__tests__/__snapshots__/getPipelineStages.test.ts.snap +69 -0
  553. package/src/pipeline/__tests__/getPipelineStages.test.ts +63 -0
  554. package/src/pipeline/createAllJobs.ts +67 -33
  555. package/src/pipeline/createJobsForComponent.ts +17 -37
  556. package/src/pipeline/createJobsForWorkspace.ts +12 -0
  557. package/src/pipeline/createMainPipeline.ts +118 -0
  558. package/src/pipeline/generatePipelineFiles.ts +100 -0
  559. package/src/pipeline/getPipelineStages.ts +23 -0
  560. package/src/pipeline/gitlab/createGitlabJobs.ts +398 -108
  561. package/src/pipeline/gitlab/createGitlabPipeline.ts +35 -0
  562. package/src/pipeline/gitlab/gitlabReleaseJobs.ts +23 -0
  563. package/src/pipeline/gitlab/sortGitLabJobDefProps.ts +59 -0
  564. package/src/pipeline/index.ts +2 -1
  565. package/src/pipeline/packageManager.ts +42 -18
  566. package/src/pipeline/yarn/yarnUtils.ts +15 -12
  567. package/src/rules/index.ts +41 -18
  568. package/src/runner/index.ts +0 -1
  569. package/src/types/config.ts +62 -23
  570. package/src/types/context.ts +167 -36
  571. package/src/types/environmentContext.ts +18 -13
  572. package/src/types/gitlab-ci-yml.ts +0 -1
  573. package/src/types/gitlab-types.ts +10 -7
  574. package/src/types/index.ts +2 -0
  575. package/src/types/jobDefinition.ts +34 -0
  576. package/src/types/jobs.ts +31 -15
  577. package/src/types/utils.ts +4 -4
  578. package/src/utils/gitlab.ts +20 -3
  579. package/src/utils/index.ts +6 -3
  580. package/src/utils/jsonParse.ts +7 -0
  581. package/src/utils/removeUndefined.ts +4 -0
  582. package/src/utils/writeFiles.ts +52 -0
  583. package/src/variables/VariableValue.ts +6 -0
  584. package/src/variables/VariableValueContainingReferences.ts +89 -0
  585. package/src/variables/__tests__/resolveAllReferences.test.ts +110 -0
  586. package/src/variables/__tests__/resolveAllReferencesOnce.test.ts +64 -0
  587. package/src/variables/__tests__/resolveReferencesOnce.test.ts +117 -0
  588. package/src/variables/__tests__/variableValue.test.ts +73 -0
  589. package/src/variables/resolveAllReferences.ts +46 -0
  590. package/src/variables/resolveAllReferencesOnce.ts +44 -0
  591. package/src/variables/resolveReferencesOnce.ts +29 -0
  592. package/bin/catladder-gitlab-dev.js +0 -3
  593. package/bin/catladder-gitlab.js +0 -3
  594. package/dist/bundles/catladder-gitlab/index.js +0 -34559
  595. package/dist/context/__tests__/resolveReferences.test.js +0 -336
  596. package/dist/context/resolveReferences.d.ts +0 -4
  597. package/dist/context/resolveReferences.js +0 -254
  598. package/dist/deploy/cloudRun/createJobs/variables.d.ts +0 -5
  599. package/dist/deploy/cloudRun/createJobs/variables.js +0 -19
  600. package/dist/deploy/kubernetes/processSecretsAsFiles.d.ts +0 -84
  601. package/dist/deploy/kubernetes/processSecretsAsFiles.js +0 -31
  602. package/dist/pipeline/commitInfo/getBuildId.d.ts +0 -6
  603. package/dist/pipeline/commitInfo/getCommitInfo.d.ts +0 -2
  604. package/dist/pipeline/createChildPipeline.d.ts +0 -3
  605. package/examples/__snapshots__/cloud-run-memory-limit.ts.snap +0 -1839
  606. package/examples/__snapshots__/cloud-run-meteor-with-worker.ts.snap +0 -1807
  607. package/examples/__snapshots__/cloud-run-no-cpu-throttling.ts.snap +0 -1839
  608. package/examples/__snapshots__/cloud-run-non-public.ts.snap +0 -1839
  609. package/examples/__snapshots__/cloud-run-post-stop-job.ts.snap +0 -1849
  610. package/examples/__snapshots__/cloud-run-service-gen2.ts.snap +0 -1839
  611. package/examples/__snapshots__/cloud-run-with-sql-reuse-db.ts.snap +0 -3647
  612. package/examples/__snapshots__/cloud-run-with-sql.ts.snap +0 -3658
  613. package/examples/__snapshots__/cloud-run-with-worker.ts.snap +0 -1847
  614. package/examples/__snapshots__/custom-build-job-with-tests.ts.snap +0 -1663
  615. package/examples/__snapshots__/custom-build-job.ts.snap +0 -1375
  616. package/examples/__snapshots__/custom-deploy.ts.snap +0 -1625
  617. package/examples/__snapshots__/custom-envs.ts.snap +0 -1127
  618. package/examples/__snapshots__/custom-sbom-java.ts.snap +0 -1383
  619. package/examples/__snapshots__/kubernetes-application-customization.ts.snap +0 -2573
  620. package/examples/__snapshots__/kubernetes-with-cloud-sql-legacy.ts.snap +0 -2533
  621. package/examples/__snapshots__/kubernetes-with-cloud-sql.ts.snap +0 -2545
  622. package/examples/__snapshots__/kubernetes-with-jobs.ts.snap +0 -4660
  623. package/examples/__snapshots__/kubernetes-with-mongodb.ts.snap +0 -2737
  624. package/examples/__snapshots__/meteor-kubernetes.ts.snap +0 -2658
  625. package/examples/__snapshots__/native-app.ts.snap +0 -3007
  626. package/examples/__snapshots__/node-build-with-custom-image.ts.snap +0 -1839
  627. package/examples/__snapshots__/node-build-with-docker-additions.ts.snap +0 -1839
  628. package/examples/__snapshots__/rails-k8s-with-worker.ts.snap +0 -4291
  629. package/examples/__snapshots__/wait-for-other-deploy.ts.snap +0 -2049
  630. package/examples/kubernetes-with-cloud-sql-legacy.ts +0 -33
  631. package/scripts/bundle +0 -2
  632. package/src/context/__tests__/resolveReferences.test.ts +0 -143
  633. package/src/context/resolveReferences.ts +0 -70
  634. package/src/deploy/cloudRun/createJobs/variables.ts +0 -21
  635. package/src/deploy/kubernetes/processSecretsAsFiles.ts +0 -34
  636. package/src/pipeline/commitInfo/getBuildId.ts +0 -17
  637. package/src/pipeline/commitInfo/getCommitInfo.ts +0 -15
  638. package/src/pipeline/createChildPipeline.ts +0 -46
  639. /package/dist/{context/__tests__/resolveReferences.test.d.ts → config/__tests__/getAllEnvs.test.d.ts} +0 -0
@@ -0,0 +1,46 @@
1
+ import type { Config, DeployConfig } from "../src";
2
+
3
+ const DEPLOY_CONFIG: DeployConfig = {
4
+ type: "google-cloudrun",
5
+ projectId: "google-project-id",
6
+ region: "europe-west6",
7
+ };
8
+ const config = {
9
+ appName: "test-app",
10
+ customerName: "pan",
11
+ builds: {
12
+ myWorkspace: {
13
+ type: "node",
14
+ },
15
+ },
16
+ components: {
17
+ api: {
18
+ dir: "api",
19
+ build: {
20
+ from: "myWorkspace",
21
+ },
22
+ deploy: DEPLOY_CONFIG,
23
+ },
24
+ www: {
25
+ dir: "www",
26
+ build: {
27
+ from: "myWorkspace",
28
+ cache: {
29
+ paths: [".next/cache"],
30
+ },
31
+ },
32
+ deploy: DEPLOY_CONFIG,
33
+ vars: {
34
+ public: {
35
+ API_URL: "${api:ROOT_URL}/graphql",
36
+ },
37
+ },
38
+ },
39
+ },
40
+ } satisfies Config;
41
+
42
+ export default config;
43
+
44
+ export const information = {
45
+ title: "Workspace API and WWW",
46
+ };
package/package.json CHANGED
@@ -1,8 +1,9 @@
1
1
  {
2
2
  "name": "@catladder/pipeline",
3
- "description": "CI/CD and Devops-Workflow",
4
- "homepage": "https://git.panter.ch/catladder/catladder/#readme",
3
+ "description": "Panter workflow for cloud CI/CD and DevOps",
4
+ "homepage": "https://catladder.git.panter.biz/catladder/docs",
5
5
  "bugs": "https://git.panter.ch/catladder/catladder/issues",
6
+ "readme": "https://git.panter.ch/catladder/catladder/-/blob/main/pipeline/README.md",
6
7
  "repository": {
7
8
  "type": "git",
8
9
  "url": "git+https://git.panter.ch/catladder/catladder.git",
@@ -52,48 +53,44 @@
52
53
  }
53
54
  ],
54
55
  "license": "MIT",
55
- "version": "0.0.0-refactore-catenv-command-validates-argument-78d05852",
56
+ "version": "0.0.0-reference-database-url-1befbbee",
56
57
  "stableVersion": "0.1.0",
57
58
  "scripts": {
58
59
  "build:tsc": "yarn tsc",
59
- "build": "yarn build:compile && yarn build:inline-variables && yarn build:bundle",
60
- "build:bundle": "./scripts/bundle",
60
+ "build": "yarn build:compile && yarn build:inline-variables",
61
61
  "build:compile": "yarn tsc",
62
62
  "build:inline-variables": "yarn babel --keep-file-extension --extensions \".ts,.js\" --config-file ./babel-inline.json dist --out-dir dist",
63
63
  "build:watch": "yarn tsc -w",
64
64
  "lint": "eslint \"src/**/*.ts\"",
65
65
  "lint:fix": "eslint \"src/**/*.ts\" --fix",
66
- "generate:gitlab-ci-yml-types": "ts-node ./scripts/generate-gitlab-ci-types.ts"
66
+ "generate:gitlab-ci-yml-types": "ts-node ./scripts/generate-gitlab-ci-types.ts",
67
+ "generate:examples-test": "tsx scripts/generate-examples-test.ts"
67
68
  },
68
69
  "types": "dist/index.d.ts",
69
70
  "main": "dist/index.js",
70
71
  "sideEffects": false,
71
- "bin": {
72
- "catladder-gitlab": "./bin/catladder-gitlab.js"
73
- },
74
72
  "devDependencies": {
75
- "@babel/cli": "^7.16.0",
76
- "@babel/core": "^7.0.0-0",
77
- "@babel/plugin-syntax-typescript": "^7.16.7",
78
- "@babel/preset-typescript": "^7.16.5",
79
- "@jest/globals": "^29.3.1",
80
- "@types/child-process-promise": "^2.2.2",
81
- "@types/jest": "^27.4.0",
82
- "@types/lodash": "^4.14.185",
83
- "@types/node": "^17.0.10",
73
+ "@babel/cli": "^7.24.8",
74
+ "@babel/core": "^7.25.2",
75
+ "@babel/plugin-syntax-typescript": "^7.25.4",
76
+ "@babel/preset-typescript": "^7.24.7",
77
+ "@jest/globals": "^29.7.0",
78
+ "@types/child-process-promise": "^2.2.6",
79
+ "@types/jest": "^29.5.12",
80
+ "@types/lodash": "^4.17.7",
81
+ "@types/node": "^22.5.1",
84
82
  "babel-plugin-transform-inline-environment-variables": "^0.4.3",
85
83
  "child-process-promise": "^2.2.1",
86
- "eslint": "^8.7.0",
87
- "js-yaml": "^4.1.0",
84
+ "glob": "^11.0.0",
88
85
  "json-schema-to-typescript": "^13.0.2",
89
86
  "lodash": "^4.17.21",
90
- "memoizee": "^0.4.15",
91
- "path-equal": "1.1.3",
92
- "slugify": "^1.6.3"
87
+ "memoizee": "^0.4.17",
88
+ "path-equal": "1.2.5",
89
+ "slugify": "^1.6.6",
90
+ "typescript": "^5.4.5",
91
+ "yaml": "^2.5.0"
93
92
  },
94
93
  "dependencies": {
95
- "string-replace-async": "^2.0.0",
96
- "ts-node": "^10.4.0",
97
- "typescript": "^4.5.4"
94
+ "tsx": "^4.19.0"
98
95
  }
99
96
  }
@@ -0,0 +1,84 @@
1
+ import { glob } from "glob";
2
+ import { resolve, join, basename } from "path";
3
+ import { existsSync } from "fs";
4
+ import { readFile, writeFile, rm } from "fs/promises";
5
+ import { format } from "prettier";
6
+
7
+ const pipelineWorkspaceRoot = resolve(__dirname, "..");
8
+ const examplesPath = join(pipelineWorkspaceRoot, "examples");
9
+ const exampleIgnoresPath = join(examplesPath, ".test-gen-ignore");
10
+
11
+ const defaultExampleIgnores = ["*.test.ts"];
12
+
13
+ async function getExampleIgnores(): Promise<string[]> {
14
+ if (!existsSync(exampleIgnoresPath)) {
15
+ await writeFile(exampleIgnoresPath, defaultExampleIgnores.join("\n"));
16
+ }
17
+ try {
18
+ const ignoresFile = await readFile(exampleIgnoresPath, {
19
+ encoding: "utf-8",
20
+ });
21
+ return [
22
+ ...new Set([
23
+ ...defaultExampleIgnores,
24
+ ...ignoresFile
25
+ .split("\n")
26
+ .filter((line) => !line.match(/^\s*# [\s\w]*/))
27
+ .map((line) => line.trim())
28
+ .filter(Boolean),
29
+ ]),
30
+ ];
31
+ } catch (error) {
32
+ console.error(
33
+ `Error reading example ignores file: ${exampleIgnoresPath}`,
34
+ error,
35
+ );
36
+ return defaultExampleIgnores;
37
+ }
38
+ }
39
+
40
+ async function main() {
41
+ const exampleIgnores = await getExampleIgnores();
42
+ const [exampleFiles, existingTestFiles] = await Promise.all([
43
+ glob("*.ts", {
44
+ ignore: exampleIgnores,
45
+ cwd: examplesPath,
46
+ }),
47
+ glob("*.test.ts", {
48
+ ignore: ["rails-k8s-with-worker-dockerfile.test.ts"],
49
+ cwd: examplesPath,
50
+ }),
51
+ ]);
52
+ await Promise.all(
53
+ existingTestFiles.map((testFile) => rm(join(examplesPath, testFile))),
54
+ );
55
+ await Promise.all(
56
+ exampleFiles.map(async (exampleFile) => {
57
+ const kebabName = basename(exampleFile, ".ts");
58
+ const testFileContent = [
59
+ `import { createYamlLocalPipeline } from "./__utils__/helpers";`,
60
+ `import config from "./${kebabName}";`,
61
+ `\n/**`,
62
+ ` * This test is auto-generated.`,
63
+ ` * Modifications will be overwritten on every \`yarn test\` run!`,
64
+ ` */\n`,
65
+
66
+ `it("matches snapshot for ${kebabName} local pipeline YAML", async () => {`,
67
+ ` expect(await createYamlLocalPipeline(config)).toMatchSnapshot();`,
68
+ `});\n`,
69
+ ].join("\n");
70
+ const formattedTest = await format(testFileContent, {
71
+ parser: "typescript",
72
+ });
73
+ await writeFile(
74
+ join(examplesPath, `${kebabName}.test.ts`),
75
+ formattedTest,
76
+ {
77
+ encoding: "utf-8",
78
+ },
79
+ );
80
+ }),
81
+ );
82
+ }
83
+
84
+ main().catch(console.error);
@@ -8,7 +8,7 @@ const typeOutputPath = join(rootPath, "src/types/gitlab-ci-yml.ts");
8
8
 
9
9
  export const generateFromCurrentSchema = async () => {
10
10
  const response = await fetch(
11
- "https://gitlab.com/gitlab-org/gitlab/-/raw/master/app/assets/javascripts/editor/schema/ci.json"
11
+ "https://gitlab.com/gitlab-org/gitlab/-/raw/master/app/assets/javascripts/editor/schema/ci.json",
12
12
  );
13
13
  const gitLabCiJsonSchema = await response.json();
14
14
  const schema = await compile(gitLabCiJsonSchema, "GitlabCiYml", {
@@ -40,7 +40,7 @@ export const generateFromCurrentSchema = async () => {
40
40
  const sanitizedSchenma = schema.replace(
41
41
  // eslint-disable-next-line no-useless-escape
42
42
  /export interface HttpsGitlabComGitlabCiYml \{\n[ a-zA-Z0-9?$:;\n_!"\{\}\/*@\[\],.|\(\)]*\[k\: string\]: Job;\n\}/m,
43
- ""
43
+ "",
44
44
  );
45
45
  if (existsSync(typeOutputPath)) {
46
46
  await rm(typeOutputPath);
@@ -0,0 +1,7 @@
1
+ {
2
+ "extends": "../tsconfig.json",
3
+ "compilerOptions": {
4
+ "target": "ES2020"
5
+ },
6
+ "include": ["**/*.ts"]
7
+ }
@@ -0,0 +1,78 @@
1
+ /**
2
+ * this class represents a string that can be evaluated in bash scripts.
3
+ *
4
+ * you can do basic transforms like lowercase, but that does not return you a lowercase string, but instead an experssion represeting a lowercase string
5
+ */
6
+ export class BashExpression {
7
+ constructor(private value: string | BashExpression) {}
8
+ public toJSON(): string {
9
+ return this.toString();
10
+ }
11
+ public toString(): string {
12
+ return this.value.toString();
13
+ }
14
+
15
+ public replace(
16
+ searchValue: any,
17
+
18
+ replacer: (substring: string, ...args: any[]) => string,
19
+ ) {
20
+ return new BashExpression(
21
+ this.value.toString().replace(searchValue, replacer),
22
+ );
23
+ }
24
+
25
+ /**
26
+ *
27
+ * @returns a bash expression to lowercase the string
28
+ */
29
+ public toLowerCase(): BashExpression {
30
+ return this.transformWithCommand("awk '{print tolower($0)}'");
31
+ }
32
+ /**
33
+ * concats a value to this one and returns a new BashExpression
34
+ * @param value
35
+ * @returns
36
+ */
37
+ public concat(...values: Array<string | BashExpression>): BashExpression {
38
+ return new BashExpression(
39
+ this.toString().concat(...values.map((v) => v.toString())),
40
+ );
41
+ }
42
+
43
+ public transformWithCommand(command: string): BashExpression {
44
+ return new BashExpression(
45
+ // see https://stackoverflow.com/a/2264537
46
+ `$(printf %s "${this.toString()}" | ${command})`,
47
+ );
48
+ }
49
+ }
50
+
51
+ export type StringOrBashExpression = string | BashExpression;
52
+
53
+ export const getBashVariable = (name: string) => new BashExpression(`$${name}`);
54
+
55
+ /**
56
+ * joins bash expressions together with a joiner
57
+ * returns a bash expression if any of the parts is a bash expression
58
+ * returns a string otherwise
59
+ *
60
+ * @param parts
61
+ * @param joiner
62
+ * @returns
63
+ */
64
+ export const joinBashExpressions = (
65
+ parts: Array<StringOrBashExpression>,
66
+ joiner = "",
67
+ ): StringOrBashExpression => {
68
+ const anyIsBashExpression = parts.some((p) => p instanceof BashExpression);
69
+ if (anyIsBashExpression) {
70
+ return new BashExpression(
71
+ parts
72
+ .map((p) => (p instanceof BashExpression ? p.toString() : p))
73
+ .join(joiner),
74
+ );
75
+ } else {
76
+ return parts.join(joiner);
77
+ }
78
+ };
@@ -0,0 +1,164 @@
1
+ import { registerGlobalScriptFunction } from "../globalScriptFunctions";
2
+ import type { VariableValue } from "../variables/VariableValue";
3
+ import { VariableValueContainingReferences } from "../variables/VariableValueContainingReferences";
4
+ import { BashExpression } from "./BashExpression";
5
+
6
+ export type QuotesEscapeMode = "single" | "double";
7
+
8
+ export type EscapeOptions = {
9
+ quotes?: QuotesEscapeMode | false;
10
+ };
11
+ /**
12
+ * escapes a string or bash expression for bash
13
+ * it either can escape single or double quotes (double is default)
14
+ */
15
+ export const bashEscape = (
16
+ value: VariableValue | any,
17
+ options: EscapeOptions = {
18
+ quotes: "double",
19
+ },
20
+ ) => {
21
+ if (value instanceof BashExpression) {
22
+ // no need to escape
23
+ return escapeBashExpression(value, options);
24
+ }
25
+ if (value instanceof VariableValueContainingReferences) {
26
+ return value.toString(options);
27
+ }
28
+ return escapeString(value, options);
29
+ };
30
+
31
+ export const escapeString = (
32
+ value: string | null | undefined,
33
+ { quotes }: EscapeOptions = {
34
+ quotes: "double",
35
+ },
36
+ ) => {
37
+ const quoteEscaped = quotes
38
+ ? quotes === "single"
39
+ ? escapeSingleQuotes(value)
40
+ : escapeDoubleQuotes(value)
41
+ : value;
42
+
43
+ return quoteEscaped;
44
+ };
45
+
46
+ export const escapeBashExpression = (
47
+ value: BashExpression,
48
+ options: EscapeOptions,
49
+ ) => {
50
+ // no need to escape, we just return the string
51
+ return value;
52
+ };
53
+
54
+ export const escapeDoubleQuotes = (value: string | null | undefined) =>
55
+ value?.toString().replace(/"/g, '\\"');
56
+
57
+ export const escapeSingleQuotes = (value: string | null | undefined) =>
58
+ value?.toString().replace(/'/g, "\\'");
59
+
60
+ export type EscapeForDotEnvOptions = {
61
+ quoteMode: "auto" | "always";
62
+ };
63
+ /**
64
+ *
65
+ * escape env vars for .env files.
66
+ * unfortunatly, the format has many limitations. In order to be very forgiving, we need to do some magic here:
67
+ *
68
+ * - when the value contains no newlines, we are fine
69
+ * - if the value contains newlines, we need to wrap it in quotes. And thats where the problem begins:
70
+ * - you can't escape quotes. this is a limitation of dotenv and node
71
+ * - you can have inner quotes, but they break in node.js (not in dotenv though), see https://github.com/nodejs/node/issues/54134
72
+ * - so we need to quote cleverly
73
+ * - to make things worse, we need to check whether we have a simple stirng or a bash expression, that needs to be evalulated first...
74
+ *
75
+ * what an absolute nightmare.
76
+ *
77
+ * - other languages are currently only partially supported, since most .env implementations are slightly different
78
+ */
79
+ export const escapeForDotEnv = (
80
+ value: VariableValue | undefined | null,
81
+ options: EscapeForDotEnvOptions = {
82
+ quoteMode: "auto",
83
+ },
84
+ ): string => {
85
+ if (value === undefined || value === null) {
86
+ return "";
87
+ }
88
+ if (typeof value === "string") {
89
+ // if string contains newlines, we need to wrap it in quotes
90
+ // we additionaly escape newlines, that give best compatibility
91
+ if (options.quoteMode === "always" || value.includes("\n")) {
92
+ const newlinesReplaces = value.replace(/\n/g, "\\n");
93
+
94
+ // default to ", but if this is not possible, we try to use ' or `
95
+ const quote = value.includes(`"`)
96
+ ? value.includes(`'`)
97
+ ? value.includes("`")
98
+ ? // If all quote types are present, default to double quotes. This works in dotenv, but not in node.js because of the bug mentioned abouve
99
+ '"'
100
+ : "`"
101
+ : "'"
102
+ : '"';
103
+
104
+ // if we found a quote, we can wrap the string in it
105
+ return `${quote}${newlinesReplaces}${quote}`;
106
+ } else {
107
+ // otherwise we can return as is
108
+ return value;
109
+ }
110
+ } else if (value instanceof BashExpression) {
111
+ return escapeBashExpressionForDotEnv(value);
112
+ } else if (value instanceof VariableValueContainingReferences) {
113
+ // instead of doing it part-wise, we just do it all at once
114
+
115
+ const containsAnyBashExpression = value.parts.some(
116
+ (part) => part instanceof BashExpression,
117
+ );
118
+ if (!containsAnyBashExpression) {
119
+ return escapeForDotEnv(
120
+ value.toString({
121
+ quotes: "double",
122
+ }),
123
+ );
124
+ } else {
125
+ const result = escapeBashExpressionForDotEnv(
126
+ new BashExpression(
127
+ value.toString({
128
+ quotes: "double",
129
+ }),
130
+ ),
131
+ );
132
+
133
+ return result;
134
+ }
135
+ } else {
136
+ return value;
137
+ }
138
+ };
139
+ // basically the same thing as above for bash
140
+ // thx chatgpt for this
141
+ const escapeForDotEnvScript = registerGlobalScriptFunction(
142
+ "escapeForDotEnv",
143
+ `
144
+ input="\${1:-$(cat)}"
145
+ input="\${input//$'\\n'/\\\\n}"
146
+ if [[ "$input" == *\\\\n* ]]; then
147
+ if [[ "$input" == *\\"* && "$input" == *\\'* && "$input" == *\\\`* ]]; then
148
+ printf "\\"%s\\"\\n" "$input" ${/* fallback to double quotes */ ""}
149
+ elif [[ "$input" == *\\"* && "$input" == *\\'* ]]; then
150
+ printf "\`%s\`\\n" "$input"
151
+ elif [[ "$input" == *\\"* ]]; then
152
+ printf "'%s'\\n" "$input"
153
+ else
154
+ printf "\\"%s\\"\\n" "$input"
155
+ fi
156
+ else
157
+ printf "%s\\n" "$input"
158
+ fi
159
+ `,
160
+ );
161
+
162
+ const escapeBashExpressionForDotEnv = (value: BashExpression) => {
163
+ return value.transformWithCommand(escapeForDotEnvScript.name).toString();
164
+ };
@@ -0,0 +1,16 @@
1
+ import type { PipelineType } from "../types/pipeline";
2
+ import type { BashExpression } from "./BashExpression";
3
+
4
+ export type BashExpressionPerPipelineType = {
5
+ [type in PipelineType]?: BashExpression | string;
6
+ } & {
7
+ default: BashExpression | string;
8
+ };
9
+
10
+ export const getBashExpressionPerPipelineType = (
11
+ definition: BashExpressionPerPipelineType,
12
+ pipelineType?: PipelineType,
13
+ ) => {
14
+ if (!pipelineType) return definition.default;
15
+ return definition[pipelineType] || definition.default;
16
+ };
@@ -0,0 +1,80 @@
1
+ import type { ScalarTag } from "yaml";
2
+ import { stringify } from "yaml";
3
+ import { BashExpression } from "./BashExpression";
4
+ import { VariableValueContainingReferences } from "../variables/VariableValueContainingReferences";
5
+
6
+ const bashExpressionType: ScalarTag = {
7
+ tag: "",
8
+ resolve: (str) => {
9
+ // not really needed,but let's make typescript happy
10
+ return new BashExpression(str);
11
+ },
12
+ stringify(node: any, ctx: any) {
13
+ // we create a BLOCK_LITERAL
14
+ // but because bash will interpret the value, it may resolve to a multiline string
15
+ // so we need to indent every line using sed
16
+ return (
17
+ "|-\n" +
18
+ ctx.indent +
19
+ indentNewlinesInBashExpression(node.value, ctx.indent)
20
+ );
21
+ },
22
+
23
+ identify: (v: any) => v instanceof BashExpression,
24
+ };
25
+
26
+ const indentNewlinesInBashExpression = (
27
+ expression: BashExpression,
28
+ indent: string,
29
+ ) => {
30
+ return expression.transformWithCommand(`sed '1!s/^/${indent}/'`);
31
+ };
32
+
33
+ const variableContainingReferences: ScalarTag = {
34
+ tag: "",
35
+ resolve: (str) => {
36
+ // not really needed,but let's make typescript happy
37
+ return new VariableValueContainingReferences(str);
38
+ },
39
+ stringify(node: any, ctx: any) {
40
+ const value: VariableValueContainingReferences = node.value;
41
+ const stringified = value.parts
42
+ .map((part) =>
43
+ part instanceof BashExpression
44
+ ? indentNewlinesInBashExpression(part, ctx.indent)
45
+ : // indent every new line
46
+ part.toString().replace(/\n/g, `\n${ctx.indent}`),
47
+ )
48
+ .join("");
49
+ return "|-\n" + ctx.indent + stringified;
50
+ },
51
+
52
+ identify: (v: any) => v instanceof VariableValueContainingReferences,
53
+ };
54
+
55
+ /***
56
+ * creates a yaml string that can be used in bash scripts
57
+ * it handles BashExpressions correctly so that they can be evaluated in bash
58
+ */
59
+ export const yamlBashString = (value: any) => {
60
+ return stringify(value, {
61
+ defaultStringType: "BLOCK_LITERAL",
62
+ defaultKeyType: "PLAIN",
63
+ customTags: [bashExpressionType, variableContainingReferences],
64
+ aliasDuplicateObjects: false,
65
+ lineWidth: 0,
66
+ });
67
+ };
68
+
69
+ /**
70
+ * creates a bash script that writes a yaml string to a file
71
+ * @param value the yaml value to write, it supports BashExpressions
72
+ */
73
+ export const writeBashYamlToFileScript = (value: any, filename: string) => {
74
+ return [
75
+ `cat > ${filename} <<EOF
76
+ ${yamlBashString(value)}
77
+ EOF
78
+ `,
79
+ ];
80
+ };
@@ -0,0 +1,21 @@
1
+ import type { UnspecifiedEnvVars } from "../types";
2
+ import { isNil } from "lodash";
3
+ import { bashEscape } from "./bashEscape";
4
+
5
+ export const getInjectVarsScript = (vars?: UnspecifiedEnvVars) => {
6
+ if (!vars) return [];
7
+ // filter out null and undefined values
8
+ return Object.entries(vars)
9
+ .filter(([, value]) => !isNil(value))
10
+
11
+ .map(
12
+ ([key, value]) =>
13
+ `export ${key}="${
14
+ value
15
+ ? bashEscape(value, {
16
+ quotes: "double",
17
+ })
18
+ : ""
19
+ }"`,
20
+ );
21
+ };
@@ -0,0 +1,2 @@
1
+ export * from "./bashEscape";
2
+ export * from "./BashExpression";
@@ -0,0 +1,63 @@
1
+ import { join } from "path";
2
+ import {
3
+ componentContextIsStandaloneBuild,
4
+ type ComponentContext,
5
+ type Context,
6
+ } from "../../types";
7
+ import type { CatladderJob } from "../../types/jobs";
8
+ import { uniq } from "lodash";
9
+ import { componentContextNeedsBuildTimeDotEnv } from "../base/writeDotEnv";
10
+
11
+ export const createBuildJobArtifacts = (
12
+ context: Context,
13
+ ): CatladderJob["artifacts"] => {
14
+ const paths =
15
+ context.type === "workspace"
16
+ ? context.components.flatMap((c) => getArtifactsPathForComponent(c))
17
+ : getArtifactsPathForComponent(context, ["__build_info.json"]);
18
+ // esxclude .env files if generated
19
+ const exclude =
20
+ context.type === "workspace"
21
+ ? context.components.flatMap((c) => getDotEnvPathsForComponent(c))
22
+ : getDotEnvPathsForComponent(context);
23
+ return {
24
+ paths: uniq(paths).sort((a, b) => a.localeCompare(b)),
25
+ ...(exclude.length > 0 ? { exclude } : {}),
26
+ expire_in: "1 day",
27
+ when: "always",
28
+ reports:
29
+ // TODO: support for junit reports in other builds
30
+ context.type === "component" && componentContextIsStandaloneBuild(context)
31
+ ? {
32
+ junit: context.build.config.artifactsReports?.junit?.map((p) =>
33
+ join(context.build.dir, p),
34
+ ),
35
+ }
36
+ : {},
37
+ };
38
+ };
39
+ const getArtifactsPathForComponent = (
40
+ c: ComponentContext,
41
+ additionalPaths?: string[],
42
+ ): string[] => {
43
+ return [
44
+ ...(c.build.type !== "disabled"
45
+ ? (c.build.config.artifactsPaths ?? [])
46
+ : []),
47
+ ...(additionalPaths ?? []),
48
+ ]?.flatMap((artifact) =>
49
+ c.build
50
+ // in theory, we only need "direct",
51
+ // but in some cases project may have packages in the workspace that create build artifacts, which aren't components
52
+ // this highly depends on the build tool. To be safe, we get all
53
+ .getComponentDirs("all")
54
+ .flatMap((cDir) => join(cDir, artifact)),
55
+ );
56
+ };
57
+
58
+ const getDotEnvPathsForComponent = (c: ComponentContext): string[] => {
59
+ if (componentContextNeedsBuildTimeDotEnv(c)) {
60
+ return [join(c.build.dir, ".env")];
61
+ }
62
+ return [];
63
+ };