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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (543) hide show
  1. package/README.md +17 -0
  2. package/bin/catladder-gitlab-dev.js +3 -0
  3. package/bin/catladder-gitlab.js +1 -1
  4. package/dist/bash/BashExpression.d.ts +40 -0
  5. package/dist/bash/BashExpression.js +124 -0
  6. package/dist/bash/bashExpressionPerPipelineType.d.ts +6 -0
  7. package/dist/bash/bashExpressionPerPipelineType.js +11 -0
  8. package/dist/bash/bashYaml.d.ts +10 -0
  9. package/dist/bash/bashYaml.js +46 -0
  10. package/dist/bash/getInjectVarsScript.d.ts +2 -0
  11. package/dist/bash/getInjectVarsScript.js +45 -0
  12. package/dist/bash/replaceAsync.d.ts +2 -0
  13. package/dist/bash/replaceAsync.js +171 -0
  14. package/dist/build/artifacts/createBuildJobArtifact.d.ts +3 -0
  15. package/dist/build/artifacts/createBuildJobArtifact.js +97 -0
  16. package/dist/build/base/__tests__/createArtifactsConfig.test.js +42 -0
  17. package/dist/build/base/constants.d.ts +0 -1
  18. package/dist/build/base/constants.js +4 -3
  19. package/dist/build/base/createAppBuildJob.d.ts +9 -0
  20. package/dist/build/base/createAppBuildJob.js +87 -0
  21. package/dist/build/base/createArtifactsConfig.d.ts +4 -0
  22. package/dist/build/base/createArtifactsConfig.js +65 -0
  23. package/dist/build/base/index.d.ts +12 -0
  24. package/dist/build/base/index.js +68 -0
  25. package/dist/build/base/writeBuildInfo.d.ts +2 -0
  26. package/dist/build/base/writeBuildInfo.js +10 -0
  27. package/dist/build/base/writeDotEnv.d.ts +8 -0
  28. package/dist/build/base/writeDotEnv.js +66 -0
  29. package/dist/build/custom/__tests__/testJob.test.js +36 -0
  30. package/dist/build/custom/buildJob.d.ts +3 -0
  31. package/dist/build/custom/buildJob.js +67 -0
  32. package/dist/build/custom/index.d.ts +3 -0
  33. package/dist/build/custom/index.js +43 -0
  34. package/dist/build/custom/testJob.d.ts +7 -0
  35. package/dist/build/custom/testJob.js +100 -0
  36. package/dist/build/docker.d.ts +61 -22
  37. package/dist/build/docker.js +110 -73
  38. package/dist/build/index.d.ts +16 -8
  39. package/dist/build/index.js +61 -19
  40. package/dist/build/node/buildJob.d.ts +8 -3
  41. package/dist/build/node/buildJob.js +48 -68
  42. package/dist/build/node/cache.d.ts +4 -3
  43. package/dist/build/node/cache.js +45 -32
  44. package/dist/build/node/constants.d.ts +0 -1
  45. package/dist/build/node/constants.js +5 -4
  46. package/dist/build/node/index.d.ts +5 -5
  47. package/dist/build/node/index.js +6 -17
  48. package/dist/build/node/meteor.d.ts +3 -3
  49. package/dist/build/node/meteor.js +26 -37
  50. package/dist/build/node/testJob.d.ts +4 -3
  51. package/dist/build/node/testJob.js +35 -36
  52. package/dist/build/node/yarn.d.ts +6 -6
  53. package/dist/build/node/yarn.js +40 -25
  54. package/dist/build/rails/build.d.ts +3 -0
  55. package/dist/build/rails/build.js +90 -0
  56. package/dist/build/rails/index.d.ts +3 -0
  57. package/dist/build/rails/index.js +43 -0
  58. package/dist/build/rails/test.d.ts +3 -0
  59. package/dist/build/rails/test.js +103 -0
  60. package/dist/build/sbom.d.ts +5 -0
  61. package/dist/build/sbom.js +32 -0
  62. package/dist/build/types.d.ts +251 -33
  63. package/dist/build/types.js +10 -6
  64. package/dist/bundles/catladder-gitlab/index.js +41626 -0
  65. package/dist/catladder-gitlab.js +130 -68
  66. package/dist/config/{configruedEnvs.test.js → __tests__/configruedEnvs.test.js} +13 -13
  67. package/dist/config/__tests__/getAllEnvs.test.js +79 -0
  68. package/dist/config/__tests__/getAllEnvsInAllComponents.test.d.ts +1 -0
  69. package/dist/config/__tests__/getAllEnvsInAllComponents.test.js +73 -0
  70. package/dist/config/configruedEnvs.d.ts +1 -1
  71. package/dist/config/configruedEnvs.js +10 -23
  72. package/dist/config/index.js +13 -11
  73. package/dist/config/readConfig.d.ts +3 -3
  74. package/dist/config/readConfig.js +193 -52
  75. package/dist/constants.js +5 -3
  76. package/dist/context/__tests__/resolveReferences.test.d.ts +1 -0
  77. package/dist/context/__tests__/resolveReferences.test.js +368 -0
  78. package/dist/context/createAllComponentsContext.d.ts +12 -0
  79. package/dist/context/createAllComponentsContext.js +159 -0
  80. package/dist/context/createComponentContext.d.ts +11 -0
  81. package/dist/context/createComponentContext.js +256 -0
  82. package/dist/context/createWorkspaceContext.d.ts +16 -0
  83. package/dist/context/createWorkspaceContext.js +173 -0
  84. package/dist/context/getBuildInfoVariables.d.ts +6 -0
  85. package/dist/context/getBuildInfoVariables.js +55 -0
  86. package/dist/context/getEnvConfig.d.ts +2 -0
  87. package/dist/context/getEnvConfig.js +20 -0
  88. package/dist/context/getEnvType.d.ts +4 -0
  89. package/dist/context/getEnvType.js +15 -0
  90. package/dist/context/getEnvironment.d.ts +3 -0
  91. package/dist/{pipeline/createChildPipeline.test.js → context/getEnvironment.js} +50 -86
  92. package/dist/context/getEnvironmentContext.d.ts +8 -0
  93. package/dist/context/getEnvironmentContext.js +43 -0
  94. package/dist/context/getEnvironmentVariables.d.ts +27 -0
  95. package/dist/context/getEnvironmentVariables.js +285 -0
  96. package/dist/context/getLabels.d.ts +9 -0
  97. package/dist/context/getLabels.js +41 -0
  98. package/dist/context/getReviewSlug.d.ts +4 -0
  99. package/dist/context/getReviewSlug.js +22 -0
  100. package/dist/context/index.d.ts +3 -6
  101. package/dist/context/index.js +22 -219
  102. package/dist/context/resolveReferences.d.ts +3 -3
  103. package/dist/context/resolveReferences.js +248 -55
  104. package/dist/context/transformJobOnlyVars.d.ts +13 -0
  105. package/dist/{build/tests/storybook.test.js → context/transformJobOnlyVars.js} +54 -106
  106. package/dist/context/utils/envVars.d.ts +8 -0
  107. package/dist/context/utils/envVars.js +55 -0
  108. package/dist/defaults/index.d.ts +1 -1
  109. package/dist/defaults/index.js +3 -1
  110. package/dist/deploy/base/deploy.d.ts +5 -0
  111. package/dist/deploy/base/deploy.js +121 -0
  112. package/dist/deploy/base/index.d.ts +10 -0
  113. package/dist/deploy/base/index.js +44 -0
  114. package/dist/deploy/base/rollback.d.ts +5 -0
  115. package/dist/deploy/base/rollback.js +41 -0
  116. package/dist/deploy/base/stop.d.ts +5 -0
  117. package/dist/deploy/base/stop.js +46 -0
  118. package/dist/deploy/base/types.d.ts +2 -0
  119. package/dist/deploy/base/types.js +5 -0
  120. package/dist/deploy/base/variables.d.ts +5 -0
  121. package/dist/deploy/base/variables.js +11 -0
  122. package/dist/deploy/cloudRun/artifactsRegistry.d.ts +19 -0
  123. package/dist/deploy/cloudRun/artifactsRegistry.js +125 -0
  124. package/dist/deploy/cloudRun/cleanup.d.ts +2 -0
  125. package/dist/deploy/cloudRun/cleanup.js +53 -0
  126. package/dist/deploy/cloudRun/cloudRunRevisions.d.ts +2 -0
  127. package/dist/deploy/cloudRun/cloudRunRevisions.js +62 -0
  128. package/dist/deploy/cloudRun/createJobs/cloudRunJobs.d.ts +7 -0
  129. package/dist/deploy/cloudRun/createJobs/cloudRunJobs.js +187 -0
  130. package/dist/deploy/cloudRun/createJobs/cloudRunServices.d.ts +4 -0
  131. package/dist/deploy/cloudRun/createJobs/cloudRunServices.js +93 -0
  132. package/dist/deploy/cloudRun/createJobs/common.d.ts +18 -0
  133. package/dist/deploy/cloudRun/createJobs/common.js +93 -0
  134. package/dist/deploy/cloudRun/createJobs/constants.d.ts +1 -0
  135. package/dist/deploy/cloudRun/createJobs/constants.js +7 -0
  136. package/dist/deploy/cloudRun/createJobs/getCloudRunDeployScripts.d.ts +2 -0
  137. package/dist/deploy/cloudRun/createJobs/getCloudRunDeployScripts.js +62 -0
  138. package/dist/deploy/cloudRun/createJobs/getCloudRunStopScripts.d.ts +2 -0
  139. package/dist/deploy/cloudRun/createJobs/getCloudRunStopScripts.js +54 -0
  140. package/dist/deploy/cloudRun/createJobs/index.d.ts +3 -0
  141. package/dist/deploy/cloudRun/createJobs/index.js +58 -0
  142. package/dist/deploy/cloudRun/createJobs/volumes.d.ts +3 -0
  143. package/dist/deploy/cloudRun/createJobs/volumes.js +58 -0
  144. package/dist/deploy/cloudRun/index.d.ts +4 -0
  145. package/dist/deploy/cloudRun/index.js +128 -0
  146. package/dist/deploy/cloudRun/utils/createArgsString.d.ts +13 -0
  147. package/dist/deploy/cloudRun/utils/createArgsString.js +63 -0
  148. package/dist/deploy/cloudRun/utils/database.d.ts +6 -0
  149. package/dist/deploy/cloudRun/utils/database.js +77 -0
  150. package/dist/deploy/cloudRun/utils/gcloudServiceAccountLoginCommands.d.ts +2 -0
  151. package/dist/deploy/cloudRun/utils/gcloudServiceAccountLoginCommands.js +12 -0
  152. package/dist/deploy/cloudRun/utils/getServiceName.d.ts +2 -0
  153. package/dist/deploy/cloudRun/utils/getServiceName.js +10 -0
  154. package/dist/deploy/cloudRun/utils/jobName.d.ts +2 -0
  155. package/dist/deploy/cloudRun/utils/jobName.js +10 -0
  156. package/dist/deploy/cloudRun/utils/removeFirstLinesFromCommandOutput.d.ts +9 -0
  157. package/dist/deploy/cloudRun/utils/removeFirstLinesFromCommandOutput.js +18 -0
  158. package/dist/deploy/cloudSql/utils.d.ts +4 -0
  159. package/dist/deploy/cloudSql/utils.js +14 -0
  160. package/dist/deploy/custom/deployJob.d.ts +3 -3
  161. package/dist/deploy/custom/deployJob.js +28 -25
  162. package/dist/deploy/custom/index.d.ts +2 -1
  163. package/dist/deploy/custom/index.js +16 -19
  164. package/dist/deploy/dockerTag/deployJob.d.ts +3 -0
  165. package/dist/deploy/dockerTag/deployJob.js +65 -0
  166. package/dist/deploy/dockerTag/index.d.ts +2 -0
  167. package/dist/deploy/dockerTag/index.js +19 -0
  168. package/dist/deploy/index.d.ts +15 -9
  169. package/dist/deploy/index.js +20 -27
  170. package/dist/deploy/kubernetes/additionalSecretKeys.d.ts +8 -0
  171. package/dist/deploy/kubernetes/additionalSecretKeys.js +30 -0
  172. package/dist/deploy/kubernetes/cloudSql/index.d.ts +14 -0
  173. package/dist/deploy/kubernetes/cloudSql/index.js +55 -0
  174. package/dist/deploy/kubernetes/deployJob.d.ts +3 -3
  175. package/dist/deploy/kubernetes/deployJob.js +43 -124
  176. package/dist/deploy/kubernetes/index.d.ts +3 -1
  177. package/dist/deploy/kubernetes/index.js +86 -11
  178. package/dist/deploy/kubernetes/kubeEnv.d.ts +10 -0
  179. package/dist/deploy/kubernetes/kubeEnv.js +76 -0
  180. package/dist/deploy/kubernetes/kubeValues.d.ts +90 -0
  181. package/dist/deploy/kubernetes/kubeValues.js +123 -0
  182. package/dist/deploy/kubernetes/mongodb.d.ts +19 -6
  183. package/dist/deploy/kubernetes/mongodb.js +100 -11
  184. package/dist/deploy/kubernetes/processSecretsAsFiles.d.ts +27 -29
  185. package/dist/deploy/kubernetes/processSecretsAsFiles.js +5 -11
  186. package/dist/deploy/sbom.d.ts +4 -0
  187. package/dist/deploy/sbom.js +20 -0
  188. package/dist/deploy/types/base.d.ts +36 -0
  189. package/dist/deploy/types/base.js +5 -0
  190. package/dist/deploy/types/custom.d.ts +33 -0
  191. package/dist/deploy/types/custom.js +5 -0
  192. package/dist/deploy/types/dockerTag.d.ts +12 -0
  193. package/dist/deploy/types/dockerTag.js +5 -0
  194. package/dist/deploy/types/googleCloudRun.d.ts +208 -0
  195. package/dist/deploy/types/googleCloudRun.js +5 -0
  196. package/dist/deploy/types/index.d.ts +22 -0
  197. package/dist/deploy/types/index.js +37 -0
  198. package/dist/deploy/types/kubernetes.d.ts +355 -0
  199. package/dist/deploy/types/kubernetes.js +5 -0
  200. package/dist/deploy/utils.d.ts +3 -3
  201. package/dist/deploy/utils.js +8 -12
  202. package/dist/index.d.ts +3 -2
  203. package/dist/index.js +16 -19
  204. package/dist/packageInfos.d.ts +4 -0
  205. package/dist/packageInfos.js +20 -0
  206. package/dist/pipeline/__tests__/getPipelineStages.test.d.ts +1 -0
  207. package/dist/pipeline/__tests__/getPipelineStages.test.js +73 -0
  208. package/dist/pipeline/createAllJobs.d.ts +18 -0
  209. package/dist/pipeline/createAllJobs.js +236 -0
  210. package/dist/pipeline/createChildPipeline.d.ts +3 -3
  211. package/dist/pipeline/createChildPipeline.js +45 -157
  212. package/dist/pipeline/createJobsForComponent.d.ts +3 -0
  213. package/dist/{build/base/createBuildJob.js → pipeline/createJobsForComponent.js} +32 -51
  214. package/dist/pipeline/createJobsForWorkspace.d.ts +3 -0
  215. package/dist/pipeline/createJobsForWorkspace.js +12 -0
  216. package/dist/pipeline/createMainPipeline.d.ts +3 -0
  217. package/dist/pipeline/createMainPipeline.js +269 -0
  218. package/dist/pipeline/generatePipelineFiles.d.ts +40 -0
  219. package/dist/pipeline/generatePipelineFiles.js +240 -0
  220. package/dist/pipeline/getPipelineStages.d.ts +7 -0
  221. package/dist/pipeline/getPipelineStages.js +56 -0
  222. package/dist/pipeline/gitlab/createGitlabJobs.d.ts +11 -0
  223. package/dist/pipeline/gitlab/createGitlabJobs.js +461 -0
  224. package/dist/pipeline/gitlab/createGitlabPipeline.d.ts +8 -0
  225. package/dist/pipeline/gitlab/createGitlabPipeline.js +41 -0
  226. package/dist/pipeline/gitlab/getPipelineTriggerForGitlabChildPipeline.d.ts +1 -0
  227. package/dist/pipeline/gitlab/getPipelineTriggerForGitlabChildPipeline.js +29 -0
  228. package/dist/pipeline/gitlab/gitlabReleaseJobs.d.ts +35 -0
  229. package/dist/pipeline/gitlab/gitlabReleaseJobs.js +27 -0
  230. package/dist/pipeline/gitlab/sortGitLabJobDefProps.d.ts +7 -0
  231. package/dist/pipeline/gitlab/sortGitLabJobDefProps.js +27 -0
  232. package/dist/pipeline/index.d.ts +3 -1
  233. package/dist/pipeline/index.js +16 -12
  234. package/dist/pipeline/packageManager.d.ts +3 -2
  235. package/dist/pipeline/packageManager.js +69 -196
  236. package/dist/pipeline/yarn/yarnUtils.d.ts +5 -0
  237. package/dist/pipeline/yarn/yarnUtils.js +241 -0
  238. package/dist/rules/index.d.ts +10 -2
  239. package/dist/rules/index.js +36 -16
  240. package/dist/runner/index.d.ts +2 -3
  241. package/dist/runner/index.js +3 -4
  242. package/dist/tsconfig.tsbuildinfo +1 -1
  243. package/dist/types/config.d.ts +56 -32
  244. package/dist/types/config.js +11 -18
  245. package/dist/types/context.d.ts +143 -27
  246. package/dist/types/context.js +12 -1
  247. package/dist/types/environmentContext.d.ts +31 -0
  248. package/dist/types/environmentContext.js +5 -0
  249. package/dist/types/gitlab-ci-yml.d.ts +769 -0
  250. package/dist/types/gitlab-ci-yml.js +10 -0
  251. package/dist/types/gitlab-types.d.ts +12 -60
  252. package/dist/types/gitlab-types.js +3 -1
  253. package/dist/types/index.js +13 -13
  254. package/dist/types/jobs.d.ts +55 -21
  255. package/dist/types/jobs.js +4 -2
  256. package/dist/types/pipeline.d.ts +5 -4
  257. package/dist/types/pipeline.js +3 -1
  258. package/dist/types/utils.d.ts +1 -0
  259. package/dist/types/utils.js +5 -0
  260. package/dist/utils/gitlab.d.ts +6 -0
  261. package/dist/utils/gitlab.js +56 -0
  262. package/dist/utils/index.d.ts +1 -1
  263. package/dist/utils/index.js +8 -16
  264. package/dist/utils/jsonParse.d.ts +1 -0
  265. package/dist/utils/jsonParse.js +14 -0
  266. package/dist/utils/removeUndefined.d.ts +1 -0
  267. package/dist/utils/removeUndefined.js +36 -0
  268. package/dist/utils/writeFiles.d.ts +11 -0
  269. package/dist/utils/writeFiles.js +180 -0
  270. package/examples/.test-gen-ignore +1 -0
  271. package/examples/__snapshots__/cloud-run-memory-limit.test.ts.snap +3300 -0
  272. package/examples/__snapshots__/cloud-run-meteor-with-worker.test.ts.snap +3260 -0
  273. package/examples/__snapshots__/cloud-run-no-cpu-throttling.test.ts.snap +3300 -0
  274. package/examples/__snapshots__/cloud-run-no-service.test.ts.snap +3404 -0
  275. package/examples/__snapshots__/cloud-run-non-public.test.ts.snap +3300 -0
  276. package/examples/__snapshots__/cloud-run-post-stop-job.test.ts.snap +3322 -0
  277. package/examples/__snapshots__/cloud-run-service-gen2.test.ts.snap +3300 -0
  278. package/examples/__snapshots__/cloud-run-service-increase-timout.test.ts.snap +3300 -0
  279. package/examples/__snapshots__/cloud-run-service-with-volumes.test.ts.snap +3388 -0
  280. package/examples/__snapshots__/cloud-run-storybook.test.ts.snap +2900 -0
  281. package/examples/__snapshots__/cloud-run-with-ngnix.test.ts.snap +3300 -0
  282. package/examples/__snapshots__/cloud-run-with-sql-reuse-db.test.ts.snap +6760 -0
  283. package/examples/__snapshots__/cloud-run-with-sql.test.ts.snap +6030 -0
  284. package/examples/__snapshots__/cloud-run-with-worker.test.ts.snap +3316 -0
  285. package/examples/__snapshots__/custom-build-job-with-tests.test.ts.snap +2983 -0
  286. package/examples/__snapshots__/custom-build-job.test.ts.snap +2572 -0
  287. package/examples/__snapshots__/custom-deploy.test.ts.snap +2824 -0
  288. package/examples/__snapshots__/custom-envs.test.ts.snap +1884 -0
  289. package/examples/__snapshots__/custom-sbom-java.test.ts.snap +2588 -0
  290. package/examples/__snapshots__/git-submodule.test.ts.snap +3304 -0
  291. package/examples/__snapshots__/kubernetes-application-customization.test.ts.snap +4228 -0
  292. package/examples/__snapshots__/kubernetes-with-cloud-sql-legacy.test.ts.snap +4252 -0
  293. package/examples/__snapshots__/kubernetes-with-cloud-sql.test.ts.snap +4268 -0
  294. package/examples/__snapshots__/kubernetes-with-jobs.test.ts.snap +7910 -0
  295. package/examples/__snapshots__/kubernetes-with-mongodb.test.ts.snap +4476 -0
  296. package/examples/__snapshots__/local-dot-env.test.ts.snap +3300 -0
  297. package/examples/__snapshots__/meteor-kubernetes.test.ts.snap +4342 -0
  298. package/examples/__snapshots__/multiline-var.test.ts.snap +7864 -0
  299. package/examples/__snapshots__/native-app.test.ts.snap +5316 -0
  300. package/examples/__snapshots__/node-build-with-custom-image.test.ts.snap +3300 -0
  301. package/examples/__snapshots__/node-build-with-docker-additions.test.ts.snap +3316 -0
  302. package/examples/__snapshots__/rails-k8s-with-worker-dockerfile.test.ts.snap +2011 -0
  303. package/examples/__snapshots__/rails-k8s-with-worker.test.ts.snap +3465 -0
  304. package/examples/__snapshots__/wait-for-other-deploy.test.ts.snap +3380 -0
  305. package/examples/__utils__/helpers.ts +27 -0
  306. package/examples/cloud-run-memory-limit.test.ts +18 -0
  307. package/examples/cloud-run-memory-limit.ts +33 -0
  308. package/examples/cloud-run-meteor-with-worker.test.ts +18 -0
  309. package/examples/cloud-run-meteor-with-worker.ts +37 -0
  310. package/examples/cloud-run-no-cpu-throttling.test.ts +18 -0
  311. package/examples/cloud-run-no-cpu-throttling.ts +35 -0
  312. package/examples/cloud-run-no-service.test.ts +18 -0
  313. package/examples/cloud-run-no-service.ts +33 -0
  314. package/examples/cloud-run-non-public.test.ts +18 -0
  315. package/examples/cloud-run-non-public.ts +28 -0
  316. package/examples/cloud-run-post-stop-job.test.ts +18 -0
  317. package/examples/cloud-run-post-stop-job.ts +42 -0
  318. package/examples/cloud-run-service-gen2.test.ts +18 -0
  319. package/examples/cloud-run-service-gen2.ts +29 -0
  320. package/examples/cloud-run-service-increase-timout.test.ts +18 -0
  321. package/examples/cloud-run-service-increase-timout.ts +29 -0
  322. package/examples/cloud-run-service-with-volumes.test.ts +18 -0
  323. package/examples/cloud-run-service-with-volumes.ts +56 -0
  324. package/examples/cloud-run-storybook.test.ts +18 -0
  325. package/examples/cloud-run-storybook.ts +33 -0
  326. package/examples/cloud-run-with-ngnix.test.ts +18 -0
  327. package/examples/cloud-run-with-ngnix.ts +29 -0
  328. package/examples/cloud-run-with-sql-reuse-db.test.ts +18 -0
  329. package/examples/cloud-run-with-sql-reuse-db.ts +55 -0
  330. package/examples/cloud-run-with-sql.test.ts +18 -0
  331. package/examples/cloud-run-with-sql.ts +71 -0
  332. package/examples/cloud-run-with-worker.test.ts +18 -0
  333. package/examples/cloud-run-with-worker.ts +37 -0
  334. package/examples/custom-build-job-with-tests.test.ts +18 -0
  335. package/examples/custom-build-job-with-tests.ts +56 -0
  336. package/examples/custom-build-job.test.ts +18 -0
  337. package/examples/custom-build-job.ts +29 -0
  338. package/examples/custom-deploy.test.ts +18 -0
  339. package/examples/custom-deploy.ts +36 -0
  340. package/examples/custom-envs.test.ts +18 -0
  341. package/examples/custom-envs.ts +32 -0
  342. package/examples/custom-sbom-java.test.ts +18 -0
  343. package/examples/custom-sbom-java.ts +38 -0
  344. package/examples/git-submodule.test.ts +18 -0
  345. package/examples/git-submodule.ts +30 -0
  346. package/examples/kubernetes-application-customization.test.ts +18 -0
  347. package/examples/kubernetes-application-customization.ts +59 -0
  348. package/examples/kubernetes-with-cloud-sql-legacy.test.ts +18 -0
  349. package/examples/kubernetes-with-cloud-sql-legacy.ts +35 -0
  350. package/examples/kubernetes-with-cloud-sql.test.ts +18 -0
  351. package/examples/kubernetes-with-cloud-sql.ts +37 -0
  352. package/examples/kubernetes-with-jobs.test.ts +18 -0
  353. package/examples/kubernetes-with-jobs.ts +70 -0
  354. package/examples/kubernetes-with-mongodb.test.ts +18 -0
  355. package/examples/kubernetes-with-mongodb.ts +51 -0
  356. package/examples/local-dot-env.test.ts +18 -0
  357. package/examples/local-dot-env.ts +27 -0
  358. package/examples/meteor-kubernetes.test.ts +18 -0
  359. package/examples/meteor-kubernetes.ts +64 -0
  360. package/examples/multiline-var.test.ts +18 -0
  361. package/examples/multiline-var.ts +65 -0
  362. package/examples/native-app.test.ts +18 -0
  363. package/examples/native-app.ts +83 -0
  364. package/examples/node-build-with-custom-image.test.ts +18 -0
  365. package/examples/node-build-with-custom-image.ts +26 -0
  366. package/examples/node-build-with-docker-additions.test.ts +18 -0
  367. package/examples/node-build-with-docker-additions.ts +29 -0
  368. package/examples/rails-k8s-with-worker-dockerfile.test.ts +9 -0
  369. package/examples/rails-k8s-with-worker.test.ts +18 -0
  370. package/examples/rails-k8s-with-worker.ts +95 -0
  371. package/examples/wait-for-other-deploy.test.ts +18 -0
  372. package/examples/wait-for-other-deploy.ts +37 -0
  373. package/package.json +76 -17
  374. package/scripts/bundle +2 -0
  375. package/scripts/generate-examples-test.ts +93 -0
  376. package/scripts/generate-gitlab-ci-types.ts +51 -0
  377. package/scripts/tsconfig.json +7 -0
  378. package/src/bash/BashExpression.ts +81 -0
  379. package/src/bash/bashExpressionPerPipelineType.ts +16 -0
  380. package/src/bash/bashYaml.ts +46 -0
  381. package/src/bash/getInjectVarsScript.ts +12 -0
  382. package/src/bash/replaceAsync.ts +50 -0
  383. package/src/build/artifacts/createBuildJobArtifact.ts +61 -0
  384. package/src/build/base/__tests__/__snapshots__/createArtifactsConfig.test.ts.snap +49 -0
  385. package/src/build/base/__tests__/createArtifactsConfig.test.ts +41 -0
  386. package/src/build/base/constants.ts +2 -2
  387. package/src/build/base/createAppBuildJob.ts +70 -0
  388. package/src/build/base/createArtifactsConfig.ts +34 -0
  389. package/src/build/base/index.ts +62 -0
  390. package/src/build/base/writeBuildInfo.ts +7 -0
  391. package/src/build/base/writeDotEnv.ts +40 -0
  392. package/src/build/custom/__tests__/testJob.test.ts +29 -0
  393. package/src/build/custom/buildJob.ts +41 -0
  394. package/src/build/custom/index.ts +8 -0
  395. package/src/build/custom/testJob.ts +93 -0
  396. package/src/build/docker.ts +173 -63
  397. package/src/build/index.ts +59 -8
  398. package/src/build/node/buildJob.ts +84 -64
  399. package/src/build/node/cache.ts +59 -24
  400. package/src/build/node/constants.ts +2 -3
  401. package/src/build/node/index.ts +9 -5
  402. package/src/build/node/meteor.ts +41 -44
  403. package/src/build/node/testJob.ts +57 -16
  404. package/src/build/node/yarn.ts +81 -25
  405. package/src/build/rails/build.ts +69 -0
  406. package/src/build/rails/index.ts +8 -0
  407. package/src/build/rails/test.ts +103 -0
  408. package/src/build/sbom.ts +48 -0
  409. package/src/build/types.ts +301 -27
  410. package/src/catladder-gitlab.ts +12 -52
  411. package/src/config/__tests__/__snapshots__/getAllEnvs.test.ts.snap +31 -0
  412. package/src/config/__tests__/__snapshots__/getAllEnvsInAllComponents.test.ts.snap +15 -0
  413. package/src/config/{configruedEnvs.test.ts → __tests__/configruedEnvs.test.ts} +3 -3
  414. package/src/config/__tests__/getAllEnvs.test.ts +71 -0
  415. package/src/config/__tests__/getAllEnvsInAllComponents.test.ts +63 -0
  416. package/src/config/configruedEnvs.ts +8 -13
  417. package/src/config/readConfig.ts +17 -23
  418. package/src/constants.ts +5 -2
  419. package/src/context/{resolveReferences.test.ts → __tests__/resolveReferences.test.ts} +34 -44
  420. package/src/context/createAllComponentsContext.ts +31 -0
  421. package/src/context/createComponentContext.ts +135 -0
  422. package/src/context/createWorkspaceContext.ts +56 -0
  423. package/src/context/getBuildInfoVariables.ts +36 -0
  424. package/src/context/getEnvConfig.ts +21 -0
  425. package/src/context/getEnvType.ts +17 -0
  426. package/src/context/getEnvironment.ts +26 -0
  427. package/src/context/getEnvironmentContext.ts +53 -0
  428. package/src/context/getEnvironmentVariables.ts +210 -0
  429. package/src/context/getLabels.ts +21 -0
  430. package/src/context/getReviewSlug.ts +27 -0
  431. package/src/context/index.ts +3 -232
  432. package/src/context/resolveReferences.ts +67 -40
  433. package/src/context/transformJobOnlyVars.ts +45 -0
  434. package/src/context/utils/envVars.ts +27 -0
  435. package/src/defaults/index.ts +1 -1
  436. package/src/deploy/base/deploy.ts +136 -0
  437. package/src/deploy/base/index.ts +22 -0
  438. package/src/deploy/base/rollback.ts +38 -0
  439. package/src/deploy/base/stop.ts +43 -0
  440. package/src/deploy/base/types.ts +3 -0
  441. package/src/deploy/base/variables.ts +5 -0
  442. package/src/deploy/cloudRun/artifactsRegistry.ts +126 -0
  443. package/src/deploy/cloudRun/cleanup.ts +30 -0
  444. package/src/deploy/cloudRun/cloudRunRevisions.ts +65 -0
  445. package/src/deploy/cloudRun/createJobs/cloudRunJobs.ts +198 -0
  446. package/src/deploy/cloudRun/createJobs/cloudRunServices.ts +86 -0
  447. package/src/deploy/cloudRun/createJobs/common.ts +59 -0
  448. package/src/deploy/cloudRun/createJobs/constants.ts +1 -0
  449. package/src/deploy/cloudRun/createJobs/getCloudRunDeployScripts.ts +79 -0
  450. package/src/deploy/cloudRun/createJobs/getCloudRunStopScripts.ts +34 -0
  451. package/src/deploy/cloudRun/createJobs/index.ts +51 -0
  452. package/src/deploy/cloudRun/createJobs/volumes.ts +23 -0
  453. package/src/deploy/cloudRun/index.ts +127 -0
  454. package/src/deploy/cloudRun/utils/createArgsString.ts +34 -0
  455. package/src/deploy/cloudRun/utils/database.ts +77 -0
  456. package/src/deploy/cloudRun/utils/gcloudServiceAccountLoginCommands.ts +12 -0
  457. package/src/deploy/cloudRun/utils/getServiceName.ts +3 -0
  458. package/src/deploy/cloudRun/utils/jobName.ts +7 -0
  459. package/src/deploy/cloudRun/utils/removeFirstLinesFromCommandOutput.ts +12 -0
  460. package/src/deploy/cloudSql/utils.ts +26 -0
  461. package/src/deploy/custom/deployJob.ts +41 -16
  462. package/src/deploy/custom/index.ts +9 -1
  463. package/src/deploy/dockerTag/deployJob.ts +29 -0
  464. package/src/deploy/dockerTag/index.ts +10 -0
  465. package/src/deploy/index.ts +32 -17
  466. package/src/deploy/kubernetes/additionalSecretKeys.ts +25 -0
  467. package/src/deploy/kubernetes/cloudSql/index.ts +76 -0
  468. package/src/deploy/kubernetes/deployJob.ts +61 -115
  469. package/src/deploy/kubernetes/index.ts +50 -1
  470. package/src/deploy/kubernetes/kubeEnv.ts +50 -0
  471. package/src/deploy/kubernetes/kubeValues.ts +100 -0
  472. package/src/deploy/kubernetes/mongodb.ts +106 -8
  473. package/src/deploy/kubernetes/processSecretsAsFiles.ts +6 -5
  474. package/src/deploy/sbom.ts +32 -0
  475. package/src/deploy/types/base.ts +43 -0
  476. package/src/deploy/types/custom.ts +36 -0
  477. package/src/deploy/types/dockerTag.ts +14 -0
  478. package/src/deploy/types/googleCloudRun.ts +282 -0
  479. package/src/deploy/types/index.ts +28 -0
  480. package/src/deploy/types/kubernetes.ts +390 -0
  481. package/src/deploy/utils.ts +10 -6
  482. package/src/index.ts +2 -1
  483. package/src/packageInfos.ts +14 -0
  484. package/src/pipeline/__tests__/__snapshots__/getPipelineStages.test.ts.snap +69 -0
  485. package/src/pipeline/__tests__/getPipelineStages.test.ts +63 -0
  486. package/src/pipeline/createAllJobs.ts +72 -0
  487. package/src/pipeline/createChildPipeline.ts +24 -43
  488. package/src/pipeline/createJobsForComponent.ts +35 -0
  489. package/src/pipeline/createJobsForWorkspace.ts +12 -0
  490. package/src/pipeline/createMainPipeline.ts +111 -0
  491. package/src/pipeline/generatePipelineFiles.ts +76 -0
  492. package/src/pipeline/getPipelineStages.ts +23 -0
  493. package/src/pipeline/gitlab/createGitlabJobs.ts +445 -0
  494. package/src/pipeline/gitlab/createGitlabPipeline.ts +28 -0
  495. package/src/pipeline/gitlab/getPipelineTriggerForGitlabChildPipeline.ts +46 -0
  496. package/src/pipeline/gitlab/gitlabReleaseJobs.ts +25 -0
  497. package/src/pipeline/gitlab/sortGitLabJobDefProps.ts +59 -0
  498. package/src/pipeline/index.ts +3 -1
  499. package/src/pipeline/packageManager.ts +47 -64
  500. package/src/pipeline/yarn/yarnUtils.ts +66 -0
  501. package/src/rules/index.ts +46 -13
  502. package/src/runner/index.ts +2 -1
  503. package/src/types/config.ts +72 -16
  504. package/src/types/context.ts +194 -25
  505. package/src/types/environmentContext.ts +38 -0
  506. package/src/types/gitlab-ci-yml.ts +891 -0
  507. package/src/types/gitlab-types.ts +52 -57
  508. package/src/types/jobs.ts +66 -11
  509. package/src/types/pipeline.ts +5 -1
  510. package/src/types/utils.ts +7 -0
  511. package/src/utils/gitlab.ts +33 -0
  512. package/src/utils/index.ts +3 -3
  513. package/src/utils/jsonParse.ts +7 -0
  514. package/src/utils/removeUndefined.ts +4 -0
  515. package/src/utils/writeFiles.ts +53 -0
  516. package/tsconfig.json +4 -2
  517. package/dist/build/base/createBuildJob.d.ts +0 -7
  518. package/dist/build/base/getBuildInfo.d.ts +0 -2
  519. package/dist/build/base/getBuildInfo.js +0 -12
  520. package/dist/context/resolveReferences.test.js +0 -141
  521. package/dist/deploy/base.d.ts +0 -8
  522. package/dist/deploy/base.js +0 -107
  523. package/dist/deploy/kubernetes/cloudsql.d.ts +0 -6
  524. package/dist/deploy/kubernetes/cloudsql.js +0 -16
  525. package/dist/deploy/types.d.ts +0 -196
  526. package/dist/deploy/types.js +0 -16
  527. package/dist/pipeline/createJobs.d.ts +0 -3
  528. package/dist/pipeline/createJobs.js +0 -383
  529. package/dist/pipeline/gitlab/makeGitlabJob.d.ts +0 -8
  530. package/dist/pipeline/gitlab/makeGitlabJob.js +0 -45
  531. package/src/build/base/createBuildJob.ts +0 -43
  532. package/src/build/base/getBuildInfo.ts +0 -7
  533. package/src/build/tests/storybook.test.ts +0 -54
  534. package/src/deploy/base.ts +0 -120
  535. package/src/deploy/kubernetes/cloudsql.ts +0 -12
  536. package/src/deploy/types.ts +0 -189
  537. package/src/pipeline/createChildPipeline.test.ts +0 -49
  538. package/src/pipeline/createJobs.ts +0 -195
  539. package/src/pipeline/gitlab/makeGitlabJob.ts +0 -16
  540. /package/dist/build/{tests/storybook.test.d.ts → base/__tests__/createArtifactsConfig.test.d.ts} +0 -0
  541. /package/dist/{config/configruedEnvs.test.d.ts → build/custom/__tests__/testJob.test.d.ts} +0 -0
  542. /package/dist/{context/resolveReferences.test.d.ts → config/__tests__/configruedEnvs.test.d.ts} +0 -0
  543. /package/dist/{pipeline/createChildPipeline.test.d.ts → config/__tests__/getAllEnvs.test.d.ts} +0 -0
@@ -0,0 +1,210 @@
1
+ import { merge } from "lodash";
2
+ import { DEPLOY_TYPES } from "../deploy";
3
+ import type {
4
+ ComponentContext,
5
+ EnvironmentEnvVarPart as EnvironmentVariables,
6
+ } from "../types";
7
+ import type { DevLocalEnvConfig } from "../types/config";
8
+
9
+ import type { CreateComponentContextContext, UnspecifiedEnvVars } from "..";
10
+ import type { StringOrBashExpression } from "../bash/BashExpression";
11
+ import { joinBashExpressions } from "../bash/BashExpression";
12
+ import { isStandaloneBuildConfig } from "../build/types";
13
+ import type { EnvironmentContext } from "../types/environmentContext";
14
+ import { getBuildInfoVariables } from "./getBuildInfoVariables";
15
+ import { getEnvironmentContext } from "./getEnvironmentContext";
16
+ import {
17
+ resolveReferences,
18
+ translateLegacyFromComponents,
19
+ } from "./resolveReferences";
20
+ import { transformJobOnlyVars } from "./transformJobOnlyVars";
21
+ import {
22
+ makeSecretEnvVarMapping,
23
+ stringListToSecreteEnvVarList,
24
+ stringifyValues,
25
+ } from "./utils/envVars";
26
+
27
+ export type SecretEnvVar = {
28
+ key: string;
29
+ // hidden env vars are not shown in config-secrets
30
+ hidden?: boolean;
31
+ };
32
+
33
+ const getBasePredefinedVariables = (ctx: EnvironmentContext) => {
34
+ return {
35
+ ENV_SHORT: ctx.env,
36
+ APP_DIR: ctx.envConfigRaw.dir,
37
+ ENV_TYPE: ctx.envType,
38
+ ...(ctx.envType !== "local" ? getBuildInfoVariables(ctx) : {}),
39
+ };
40
+ };
41
+
42
+ type BasePredefinedVariables = ReturnType<typeof getBasePredefinedVariables>;
43
+
44
+ // we export so that we have later nice autocomplete
45
+ export type PredefinedVariables = BasePredefinedVariables & {
46
+ /**
47
+ * undefined in rails, Rails before 6.1 (mis)uses the `HOST` environment variable to specify the IP to bind to
48
+ */
49
+ HOST?: StringOrBashExpression;
50
+ ROOT_URL: StringOrBashExpression;
51
+ HOST_INTERNAL: StringOrBashExpression;
52
+ ROOT_URL_INTERNAL: StringOrBashExpression;
53
+ };
54
+
55
+ export const getEnvironmentVariables = async (
56
+ ctx: CreateComponentContextContext,
57
+ alreadyVisited: Record<string, Record<string, boolean>> = {}, // to prevent endless loop
58
+ ): Promise<EnvironmentVariables> => {
59
+ const environmentContext = getEnvironmentContext(ctx);
60
+
61
+ const { config, env, componentName } = ctx;
62
+ const { envConfigRaw, deployConfigRaw, buildConfigRaw, envType } =
63
+ environmentContext;
64
+
65
+ const basePredefinedVariables =
66
+ getBasePredefinedVariables(environmentContext);
67
+
68
+ let predefinedVariables: PredefinedVariables & UnspecifiedEnvVars;
69
+ let host: StringOrBashExpression;
70
+ let url: StringOrBashExpression;
71
+
72
+ if (envType === "local") {
73
+ const devLocalConfig: DevLocalEnvConfig = envConfigRaw;
74
+ const port = devLocalConfig.port ?? 3000;
75
+ host = "localhost:" + port.toString();
76
+ url = "http://" + host;
77
+ predefinedVariables = {
78
+ ...basePredefinedVariables,
79
+ ENV_SHORT: "local",
80
+ ROOT_URL: url,
81
+ // Rails before 6.1 (mis)uses the `HOST` environment variable to specify the IP to bind to
82
+ ...(isStandaloneBuildConfig(buildConfigRaw) &&
83
+ buildConfigRaw.type === "rails"
84
+ ? {}
85
+ : { HOST: host }),
86
+ HOST_INTERNAL: host,
87
+ ROOT_URL_INTERNAL: "http://" + host,
88
+ PORT: port.toString(),
89
+ };
90
+ } else {
91
+ const additionalEnvVars = deployConfigRaw
92
+ ? DEPLOY_TYPES[deployConfigRaw.type].getAdditionalEnvVars(
93
+ environmentContext as never,
94
+ )
95
+ : {};
96
+
97
+ const HOST_INTERNAL =
98
+ additionalEnvVars.HOST_INTERNAL ?? "unknown-host.example.com";
99
+
100
+ host = envConfigRaw?.host ?? HOST_INTERNAL;
101
+ url = joinBashExpressions(["https://", host]);
102
+
103
+ predefinedVariables = {
104
+ ...basePredefinedVariables,
105
+ // Rails before 6.1 (mis)uses the `HOST` environment variable to specify the IP to bind to
106
+ ...(isStandaloneBuildConfig(buildConfigRaw) &&
107
+ buildConfigRaw.type === "rails"
108
+ ? {}
109
+ : { HOST: host }),
110
+ ROOT_URL: url,
111
+ HOST_INTERNAL,
112
+ /**@deprecated */
113
+ HOST_CANONICAL: HOST_INTERNAL, // legacy alias for HOST_INTERNAL
114
+ ROOT_URL_INTERNAL: joinBashExpressions(["https://", HOST_INTERNAL]),
115
+ ...additionalEnvVars,
116
+ };
117
+ }
118
+ const publicEnvVarsRaw = envConfigRaw.vars?.public ?? {};
119
+
120
+ const additionalSecretKeys = deployConfigRaw
121
+ ? DEPLOY_TYPES[deployConfigRaw.type].additionalSecretKeys(
122
+ environmentContext as never,
123
+ )
124
+ : [];
125
+
126
+ const secretEnvVarKeys: SecretEnvVar[] = [
127
+ ...stringListToSecreteEnvVarList(envConfigRaw.vars?.secret ?? []),
128
+ ...additionalSecretKeys,
129
+ ];
130
+ const secretEnvVars = makeSecretEnvVarMapping(
131
+ env,
132
+ componentName,
133
+ secretEnvVarKeys,
134
+ );
135
+ // this is deprecated, we now support: $componentname:FOO
136
+ const legacyFromComponents = envConfigRaw.vars?.fromComponents ?? {};
137
+ const publicEnvVarsRawWithLegacyFromComponents = merge(
138
+ {},
139
+ translateLegacyFromComponents(legacyFromComponents),
140
+ publicEnvVarsRaw,
141
+ );
142
+
143
+ const publicEnvVarsRawSanitized = stringifyValues(
144
+ publicEnvVarsRawWithLegacyFromComponents,
145
+ );
146
+
147
+ const envVarsRaw = addIndexVar({
148
+ ...predefinedVariables,
149
+ ...secretEnvVars,
150
+ ...publicEnvVarsRawSanitized,
151
+ });
152
+
153
+ const envVars = (await resolveReferences(
154
+ envVarsRaw,
155
+ async (otherComponentName, alreadyVisited) => {
156
+ const { envVars: otherEnvVars } = await getEnvironmentVariables(
157
+ {
158
+ ...ctx,
159
+ componentName: otherComponentName,
160
+ },
161
+ alreadyVisited,
162
+ );
163
+ return otherEnvVars;
164
+ },
165
+ alreadyVisited,
166
+ )) as typeof envVarsRaw;
167
+
168
+ return {
169
+ envVars,
170
+ secretEnvVarKeys,
171
+ jobOnlyVars: {
172
+ build: await transformJobOnlyVars(
173
+ env,
174
+ componentName,
175
+ (buildConfigRaw &&
176
+ isStandaloneBuildConfig(buildConfigRaw) &&
177
+ buildConfigRaw.jobVars) ||
178
+ null,
179
+ ),
180
+ deploy: await transformJobOnlyVars(
181
+ env,
182
+ componentName,
183
+ (deployConfigRaw && deployConfigRaw.jobVars) || null,
184
+ ),
185
+ },
186
+
187
+ host,
188
+ url,
189
+ };
190
+ };
191
+
192
+ const sanitizeForEnVar = (s: string) => s.replace(/-/g, "_");
193
+
194
+ export const getSecretVarName = (
195
+ env: string,
196
+ componentName: string,
197
+ key: string,
198
+ ) => `CL_${sanitizeForEnVar(env)}_${sanitizeForEnVar(componentName)}_${key}`; // remove dash from component name
199
+
200
+ const addIndexVar = <V extends Record<string, unknown>>(
201
+ vars: V,
202
+ ): V & { _ALL_ENV_VAR_KEYS: string } => ({
203
+ ...vars,
204
+ _ALL_ENV_VAR_KEYS: JSON.stringify(Object.keys(vars)),
205
+ });
206
+
207
+ export const getSecretVarNameForContext = (
208
+ context: ComponentContext,
209
+ key: string,
210
+ ) => getSecretVarName(context.env, context.name, key);
@@ -0,0 +1,21 @@
1
+ import slugify from "slugify";
2
+ import type { ComponentContext } from "../types";
3
+
4
+ const sanitize = (value?: string) => {
5
+ if (!value) return value;
6
+ //"The value can only contain lowercase letters, numeric characters, underscores and dashes. The value can be at most 63 characters long. International characters are allowed."
7
+ // slugify should do the job
8
+ return slugify(value).toLowerCase();
9
+ };
10
+ export const getLabels = (context: ComponentContext) => {
11
+ const labels = {
12
+ "customer-name": sanitize(context.fullConfig.customerName),
13
+ "component-name": sanitize(context.name),
14
+ "app-name": sanitize(context.fullConfig.appName),
15
+ "env-type": sanitize(context.environment.envType),
16
+ "env-name": sanitize(context.env),
17
+ "build-type": sanitize(context.build.buildType),
18
+ ...(context.fullConfig.meta?.labels ?? {}),
19
+ };
20
+ return labels;
21
+ };
@@ -0,0 +1,27 @@
1
+ import {
2
+ BashExpression,
3
+ type StringOrBashExpression,
4
+ } from "../bash/BashExpression";
5
+ import type { BashExpressionPerPipelineType } from "../bash/bashExpressionPerPipelineType";
6
+ import { getBashExpressionPerPipelineType } from "../bash/bashExpressionPerPipelineType";
7
+ import type { PipelineType } from "../types";
8
+ import type { EnvConfigWithComponent } from "../types/config";
9
+ import { getEnvType } from "./getEnvType";
10
+ const REVIEW_SLUG: BashExpressionPerPipelineType = {
11
+ default: "unknown-review-slug",
12
+ gitlab: new BashExpression(
13
+ `$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })`,
14
+ ),
15
+ };
16
+
17
+ export const getReviewSlug = (
18
+ envConfig: EnvConfigWithComponent,
19
+ env: string,
20
+ pipelineType?: PipelineType,
21
+ ): StringOrBashExpression | null => {
22
+ const envType = getEnvType(env, envConfig);
23
+ if (envType === "review") {
24
+ return getBashExpressionPerPipelineType(REVIEW_SLUG, pipelineType);
25
+ }
26
+ return null; // not a review app;
27
+ };
@@ -1,232 +1,3 @@
1
- import { isObject, merge } from "lodash";
2
- import slugify from "slugify";
3
- import { BUILD_TYPES } from "../build";
4
- import { BuildConfig } from "../build/types";
5
- import { DEPLOY_TYPES, getKubernetesNamespace } from "../deploy";
6
- import { DeployConfig } from "../deploy/types";
7
- import { Config, isKnowEnvType, DevLocalEnvConfig } from "../types/config";
8
- import {
9
- CommitInfo,
10
- Context,
11
- Environment,
12
- PackageManagerInfo,
13
- } from "../types/context";
14
- import { mergeWithMergingArrays } from "../utils";
15
- import {
16
- resolveReferences,
17
- translateLegacyFromComponents,
18
- } from "./resolveReferences";
19
-
20
- const sanitizeForEnVar = (s: string) => s.replace(/-/g, "_");
21
- export const getSecretVarName = (
22
- env: string,
23
- componentName: string,
24
- key: string
25
- ) => `CL_${sanitizeForEnVar(env)}_${sanitizeForEnVar(componentName)}_${key}`; // remove dash from component name
26
-
27
- export const getSecretVarNameForContext = (context: Context, key: string) =>
28
- getSecretVarName(context.environment.shortName, context.componentName, key);
29
- export const getEnvironment = (
30
- config: Config,
31
- componentName: string,
32
- env: string,
33
- commitInfo?: CommitInfo,
34
- alreadyVisited: Record<string, Record<string, boolean>> = {} // to prevent endless loop
35
- ): Environment => {
36
- const componentConfig = config.components[componentName];
37
- if (!componentConfig) {
38
- throw new Error("unknown component " + componentName);
39
- }
40
-
41
- const defaultConfig = componentConfig;
42
-
43
- const envConfig = componentConfig.env?.[env] ?? {};
44
- if (envConfig === false) {
45
- throw new Error("env is disabled: " + env);
46
- }
47
-
48
- const mergedConfig = mergeWithMergingArrays(defaultConfig, envConfig);
49
-
50
- // env type: if its set manually, use that, otherwise use the known env types
51
-
52
- const envType = envConfig?.type ?? (isKnowEnvType(env) ? env : null);
53
-
54
- if (!envType) {
55
- throw new Error(
56
- "Missing type in environment " + env + " in component " + componentName
57
- );
58
- }
59
-
60
- const basePredefinedVariables = {
61
- ENV_SHORT: env,
62
- APP_DIR: componentConfig.dir,
63
- ENV_TYPE: envType,
64
- };
65
-
66
- const environmentName =
67
- envType === "review" && commitInfo
68
- ? `${env}/${commitInfo.refName}/${componentName}`
69
- : `${env}/${componentName}`;
70
-
71
- const environmentSlug =
72
- envType === "review" && commitInfo
73
- ? `${env}-${commitInfo.reviewSlug}-${componentName}`
74
- : `${env}-${componentName}`;
75
-
76
- let predefinedVariables: Record<string, string>;
77
- let host: string;
78
- let url: string;
79
- if (envType === "local") {
80
- const devLocalConfig: DevLocalEnvConfig = mergedConfig;
81
- const port = devLocalConfig.port ?? 3000;
82
- host = "localhost:" + port;
83
- url = "http://" + host;
84
- predefinedVariables = {
85
- ENV_SHORT: "local",
86
- ROOT_URL: url,
87
- PORT: port.toString(),
88
- };
89
- } else {
90
- const RELEASE_NAME = `${config.customerName}-${config.appName}-${environmentSlug}`;
91
-
92
- const componentSlug = slugify(componentName);
93
- const envInUrl =
94
- envType === "review" && commitInfo ? `${commitInfo.reviewSlug}.${env}` : env;
95
-
96
- const domainCanonical =
97
- (mergedConfig?.deploy &&
98
- mergedConfig?.deploy.type === "kubernetes" &&
99
- mergedConfig.deploy.cluster?.domainCanonical) || // for convenience, we allow clusters to define a canonical domain, because a cluster has a fixed ip and you will usually have a domain pointing to that cluster
100
- config.domainCanonical ||
101
- "panter.cloud";
102
-
103
- const HOST_CANONICAL = `${componentSlug}.${envInUrl}.${config.appName}.${config.customerName}.${domainCanonical}`;
104
- host = mergedConfig?.host ?? HOST_CANONICAL;
105
- const url = `https://${host}`;
106
-
107
- // FIXME: move to kube specific jobs
108
- const KUBE_APP_NAME =
109
- envType === "review" && commitInfo
110
- ? `${commitInfo.reviewSlug}-${componentName}`
111
- : componentName;
112
- const KUBE_NAMESPACE = getKubernetesNamespace(config, env);
113
-
114
- predefinedVariables = {
115
- ...basePredefinedVariables,
116
- HOST_CANONICAL,
117
- ROOT_URL: url,
118
- KUBE_NAMESPACE,
119
- KUBE_APP_NAME,
120
- RELEASE_NAME,
121
- };
122
- }
123
- const publicEnvVarsRaw = mergedConfig.vars?.public ?? {};
124
- const secretEnvVarKeys = mergedConfig.vars?.secret ?? [];
125
- const secretEnvVars = Object.fromEntries(
126
- secretEnvVarKeys.map((key) => [
127
- key,
128
- `$${getSecretVarName(env, componentName, key)}`,
129
- ])
130
- );
131
-
132
- // this is deprecated, we now support: $componentname:FOO
133
- const legacyFromComponents = mergedConfig.vars?.fromComponents ?? {};
134
- const publicEnvVarsRawWithLegasyFromComponents = merge(
135
- {},
136
- translateLegacyFromComponents(legacyFromComponents),
137
- publicEnvVarsRaw
138
- );
139
-
140
- const publicEnvVarsRawSanitized = Object.fromEntries(
141
- Object.entries(publicEnvVarsRawWithLegasyFromComponents).map(
142
- ([key, value]) => [
143
- key,
144
- isObject(value) ? JSON.stringify(value) : `${value}`,
145
- ]
146
- )
147
- );
148
-
149
- const envVarsRaw = {
150
- ...predefinedVariables,
151
- ...secretEnvVars,
152
- ...publicEnvVarsRawSanitized,
153
- };
154
-
155
- const envVars = resolveReferences(
156
- envVarsRaw,
157
- (componentName, variableName, alreadyVisited) => {
158
- const { envVars } = getEnvironment(
159
- config,
160
- componentName,
161
- env,
162
- commitInfo,
163
- alreadyVisited
164
- );
165
- return envVars[variableName];
166
- },
167
- alreadyVisited
168
- );
169
- return {
170
- envType,
171
- host,
172
- fullName: environmentName,
173
- slug: environmentSlug,
174
- shortName: env,
175
- url: predefinedVariables.ROOT_URL,
176
- envVars,
177
- secretEnvVarKeys,
178
- };
179
- };
180
-
181
- export const createContext = (
182
- config: Config,
183
- componentName: string,
184
- env: string,
185
- commitInfo?: CommitInfo,
186
- packageManagerInfo?: PackageManagerInfo
187
- ): Context => {
188
- if (!/^[a-z0-9-]+$/.test(componentName)) {
189
- throw new Error(
190
- "componentName may only contain lower case letters, numbers and -"
191
- );
192
- }
193
- const rawConfig = config.components[componentName];
194
- if (!rawConfig) {
195
- throw new Error("unknown component " + componentName);
196
- }
197
- // envs can override the config
198
- const envConfig = rawConfig.env?.[env] ?? {};
199
- const componentConfigWithoutDefaults = mergeWithMergingArrays(
200
- rawConfig,
201
- envConfig
202
- );
203
-
204
- // fill in defaults of build and deploy
205
- const defaults: {
206
- build: Partial<BuildConfig>;
207
- deploy: Partial<DeployConfig>;
208
- } = componentConfigWithoutDefaults.deploy
209
- ? {
210
- build:
211
- BUILD_TYPES[componentConfigWithoutDefaults.build.type].defaults(),
212
- deploy:
213
- DEPLOY_TYPES[componentConfigWithoutDefaults.deploy.type].defaults(),
214
- }
215
- : {
216
- build: {},
217
- deploy: {},
218
- };
219
- const componentConfig = mergeWithMergingArrays(
220
- defaults,
221
- componentConfigWithoutDefaults
222
- );
223
-
224
- return {
225
- fullConfig: config,
226
- componentConfig,
227
- componentName,
228
- environment: getEnvironment(config, componentName, env, commitInfo),
229
- commitInfo,
230
- packageManagerInfo,
231
- };
232
- };
1
+ export * from "./createComponentContext";
2
+ export * from "./getEnvironment";
3
+ export * from "./getEnvironmentVariables";
@@ -1,59 +1,86 @@
1
1
  import { merge } from "lodash";
2
2
 
3
- const REGEX = /\$\{(([^:]+):)?([^}]+)}/gm;
3
+ import type { BashExpression } from "../bash/BashExpression";
4
+ import replaceAsync from "../bash/replaceAsync";
5
+ import type { UnspecifiedEnvVars } from "..";
4
6
 
5
- export const resolveReferences = (
6
- vars: Record<string, string>,
7
+ // regex to resolve references in catladder variables
8
+ // those expressions have the pattern ${componentName:variableName}
9
+ const REGEX = /\$\{(([^:}]+):)?([^}]+)}/gm;
10
+
11
+ export const resolveReferences = async (
12
+ vars: Record<string, string | BashExpression | undefined | null>,
7
13
  getOtherVariables?: (
8
14
  componentName: string,
9
- variableName: string,
10
- alreadyVisited: Record<string, Record<string, boolean>>
11
- ) => string | null,
12
- alreadyVisitedBase: Record<string, Record<string, boolean>> = {}
15
+ alreadyVisited: Record<string, Record<string, boolean>>,
16
+ ) => Promise<UnspecifiedEnvVars>,
17
+ alreadyVisitedBase: Record<string, Record<string, boolean>> = {},
13
18
  ) => {
14
- const replaceSingleValue = (
15
- value: string,
16
- alreadyVisited: Record<string, Record<string, boolean>> = alreadyVisitedBase
17
- ): string => {
18
- if (REGEX.test(value)) {
19
- return value.replace(REGEX, (match, _, componentName, variableName) => {
20
- if (alreadyVisited[componentName]?.[variableName]) {
21
- return match; // prevent endless loop
22
- }
23
- const newAlreadyVisited = merge({}, alreadyVisited, {
24
- [componentName]: {
25
- [variableName]: true,
26
- },
27
- });
28
- const result = componentName
29
- ? getOtherVariables?.(
30
- componentName,
31
- variableName,
32
- newAlreadyVisited
33
- ) ?? null
34
- : vars[variableName]; // is self reference
19
+ /**
20
+ *
21
+ * replace referenced variables with their values in a value string
22
+ */
23
+ const replaceSingleValue = async (
24
+ value: string | BashExpression,
25
+ alreadyVisited: Record<
26
+ string,
27
+ Record<string, boolean>
28
+ > = alreadyVisitedBase,
29
+ ): Promise<string | BashExpression> => {
30
+ if (REGEX.test(value.toString())) {
31
+ // we consider variables that got references in it BashExpressions, because the replacement may be one
32
+
33
+ return await replaceAsync(
34
+ value,
35
+ REGEX,
36
+ async (match, _, componentName, variableName) => {
37
+ if (alreadyVisited[componentName]?.[variableName]) {
38
+ return match; // prevent endless loop
39
+ }
40
+ const newAlreadyVisited = merge({}, alreadyVisited, {
41
+ [componentName]: {
42
+ [variableName]: true,
43
+ },
44
+ });
45
+ const result = componentName
46
+ ? (await getOtherVariables?.(componentName, newAlreadyVisited).then(
47
+ (r) => r?.[variableName],
48
+ )) ?? null
49
+ : vars[variableName]; // is self reference
35
50
 
36
- const replaced =
37
- result !== null && result !== undefined
38
- ? replaceSingleValue(result, newAlreadyVisited)
39
- : match;
51
+ const replaced =
52
+ result !== null && result !== undefined
53
+ ? await replaceSingleValue(result, newAlreadyVisited)
54
+ : match;
40
55
 
41
- return replaced;
42
- });
56
+ return replaced;
57
+ },
58
+ );
43
59
  } else {
44
60
  return value;
45
61
  }
46
62
  };
47
63
 
48
64
  return Object.fromEntries(
49
- Object.entries(vars).map(([key, value]) => {
50
- return [key, replaceSingleValue(value)];
51
- })
52
- );
65
+ await Promise.all(
66
+ Object.entries(vars).map(async ([key, value]) => {
67
+ if (value === null || value === undefined) {
68
+ return [key, null];
69
+ }
70
+
71
+ return [
72
+ key,
73
+ value !== null && value !== undefined
74
+ ? await replaceSingleValue(value)
75
+ : null,
76
+ ];
77
+ }),
78
+ ),
79
+ ) as Record<string, BashExpression>;
53
80
  };
54
81
 
55
82
  export const translateLegacyFromComponents = (
56
- fromComponents: Record<string, Record<string, string>>
83
+ fromComponents: Record<string, Record<string, string>>,
57
84
  ) => {
58
85
  return Object.fromEntries(
59
86
  Object.entries(fromComponents).flatMap(([componentName, variables]) => {
@@ -61,6 +88,6 @@ export const translateLegacyFromComponents = (
61
88
  ourName,
62
89
  "${" + componentName + ":" + otherName + "}",
63
90
  ]);
64
- })
91
+ }),
65
92
  );
66
93
  };
@@ -0,0 +1,45 @@
1
+ import type { SecretEnvVar, UnspecifiedEnvVars } from "..";
2
+ import type { EnvVars } from "../types/config";
3
+ import {
4
+ makeSecretEnvVarMapping,
5
+ stringListToSecreteEnvVarList,
6
+ stringifyValues,
7
+ } from "./utils/envVars";
8
+
9
+ /**
10
+ * transform EnvVars for environment.
11
+ *
12
+ * currently does not resolve references and is only used for additional job-only-vars
13
+ * @param vars
14
+ * @returns
15
+ */
16
+ export const transformJobOnlyVars = async (
17
+ env: string,
18
+ componentName: string,
19
+ vars: EnvVars | null,
20
+ ): Promise<{
21
+ envVars: UnspecifiedEnvVars;
22
+ secretEnvVarKeys: SecretEnvVar[];
23
+ }> => {
24
+ if (!vars) {
25
+ return {
26
+ envVars: {},
27
+ secretEnvVarKeys: [],
28
+ };
29
+ }
30
+
31
+ const publicVars = stringifyValues(vars?.public ?? {});
32
+ const secretEnvVarKeys = stringListToSecreteEnvVarList(vars?.secret ?? []);
33
+ const deployJobOnlySecretEnvVars = vars?.secret
34
+ ? makeSecretEnvVarMapping(env, componentName, secretEnvVarKeys)
35
+ : {};
36
+
37
+ const envVars = {
38
+ ...deployJobOnlySecretEnvVars,
39
+ ...publicVars,
40
+ };
41
+ return {
42
+ envVars,
43
+ secretEnvVarKeys,
44
+ };
45
+ };