@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,95 @@
1
+ import type { Config } from "../src";
2
+
3
+ // the image version should match your `.ruby-version`
4
+ const RAILS_TEST_STAGE_IMAGE = "ruby:3.2.1";
5
+
6
+ const config: Config = {
7
+ appName: "test-app",
8
+ customerName: "pan",
9
+ components: {
10
+ app: {
11
+ dir: ".",
12
+ vars: {
13
+ public: {
14
+ RAILS_ENV: "production",
15
+ },
16
+ secret: ["SECRET_KEY_BASE"],
17
+ },
18
+ build: {
19
+ type: "rails",
20
+ test: {
21
+ // if operating system dependencies are required you can either
22
+ // - build a dedicated image
23
+ // - use `command` to apt-get install them before running the test command
24
+ jobImage: RAILS_TEST_STAGE_IMAGE,
25
+ },
26
+ lint: {
27
+ jobImage: RAILS_TEST_STAGE_IMAGE,
28
+ },
29
+ audit: {
30
+ jobImage: RAILS_TEST_STAGE_IMAGE,
31
+ },
32
+ // only needed if you do not have a Dockerfile
33
+ cnbBuilder: {
34
+ buildVars: { SECRET_KEY_BASE: "dummy-value" },
35
+ },
36
+ },
37
+ deploy: {
38
+ type: "kubernetes",
39
+ cluster: {
40
+ name: "some-cluster-name",
41
+ region: "europe-west6",
42
+ projectId: "some-project-id",
43
+ type: "gcloud",
44
+ domainCanonical: "panter.cloud",
45
+ },
46
+ values: {
47
+ cloudsql: { enabled: true, projectId: "some-project-id" },
48
+ application: {
49
+ // if deployed to Google Cloud Run use a gem like cloudtasker instead of a permanently running expensive worker
50
+ worker: {
51
+ enabled: true,
52
+ command: "launcher bundle exec rake jobs:work",
53
+ // the delayed_job gem does not have a http health endpoint
54
+ // disable probe to avoid worker restarts
55
+ livenessProbe: false,
56
+ },
57
+ },
58
+ jobs: {
59
+ "db-migrate": {
60
+ hook: "post-install,post-upgrade",
61
+ command: "launcher bundle exec rake db:migrate",
62
+ },
63
+ },
64
+ },
65
+ },
66
+ env: {
67
+ review: {
68
+ deploy: {
69
+ values: {
70
+ jobs: {
71
+ "db-prepare-seed": {
72
+ hook: "post-install",
73
+ command: "launcher bundle exec rake db:prepare db:seed",
74
+ },
75
+ "db-migrate": {
76
+ hook: "post-upgrade",
77
+ command: "launcher bundle exec rake db:migrate",
78
+ },
79
+ },
80
+ },
81
+ },
82
+ },
83
+ prod: {
84
+ host: "my-fancy-website.com",
85
+ },
86
+ },
87
+ },
88
+ },
89
+ };
90
+
91
+ export default config;
92
+
93
+ export const information = {
94
+ title: "K8s: Rails with Worker",
95
+ };
@@ -0,0 +1,18 @@
1
+ import {
2
+ createAllPipelines,
3
+ createYamlLocalPipeline,
4
+ } from "./__utils__/helpers";
5
+ import config from "./wait-for-other-deploy";
6
+
7
+ /**
8
+ * This test is auto-generated.
9
+ * Modifications will be overwritten on every `yarn test` run!
10
+ */
11
+
12
+ it("matches snapshot for wait-for-other-deploy", async () => {
13
+ expect(await createAllPipelines(config)).toMatchSnapshot();
14
+ });
15
+
16
+ it("matches snapshot for cloud-run-memory-limit local pipeline YAML", async () => {
17
+ expect(await createYamlLocalPipeline(config)).toMatchSnapshot();
18
+ });
@@ -0,0 +1,37 @@
1
+ import type { Config } from "../src";
2
+
3
+ const config: Config<{ CustomEnvs: "asdf" | "bla" }> = {
4
+ appName: "test-app",
5
+ customerName: "pan",
6
+ components: {
7
+ api: {
8
+ dir: "api",
9
+ build: {
10
+ type: "node",
11
+ },
12
+ deploy: {
13
+ type: "custom",
14
+ requiresDocker: false,
15
+ script: ["yarn deploy"],
16
+ },
17
+ },
18
+ www: {
19
+ dir: "www",
20
+ build: {
21
+ type: "node",
22
+ },
23
+ deploy: {
24
+ waitFor: ["api"],
25
+ type: "custom",
26
+ requiresDocker: false,
27
+ script: ["yarn deploy"],
28
+ },
29
+ },
30
+ },
31
+ };
32
+
33
+ export default config;
34
+
35
+ export const information = {
36
+ title: "Wait for other deployment",
37
+ };
package/package.json CHANGED
@@ -1,17 +1,75 @@
1
1
  {
2
2
  "name": "@catladder/pipeline",
3
- "version": "0.0.0-node16-ddfae617",
3
+ "description": "Panter workflow for cloud CI/CD and DevOps",
4
+ "homepage": "https://catladder.git.panter.biz/catladder/docs",
5
+ "bugs": "https://git.panter.ch/catladder/catladder/issues",
6
+ "readme": "https://git.panter.ch/catladder/catladder/-/blob/main/pipeline/README.md",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "git+https://git.panter.ch/catladder/catladder.git",
10
+ "directory": "pipeline"
11
+ },
12
+ "keywords": [
13
+ "GitLab",
14
+ "cloud",
15
+ "cli",
16
+ "gitlab-ci",
17
+ "ci/cd",
18
+ "pipeline",
19
+ "deployment",
20
+ "devops",
21
+ "automation",
22
+ "typescript"
23
+ ],
24
+ "author": "Marco Wettstein <maw@panter.ch>",
25
+ "contributors": [
26
+ {
27
+ "name": "Marco Wettstein",
28
+ "email": "maw@panter.ch"
29
+ },
30
+ {
31
+ "name": "Michael Leu",
32
+ "email": "leu@panter.ch"
33
+ },
34
+ {
35
+ "name": "Luboš Matejčík",
36
+ "email": "lma@panter.ch"
37
+ },
38
+ {
39
+ "name": "Kaspar Vollenweider",
40
+ "email": "vok@panter.ch"
41
+ },
42
+ {
43
+ "name": "Silvan Adrian",
44
+ "email": "sia@panter.ch"
45
+ },
46
+ {
47
+ "name": "Stefan Bakocs",
48
+ "email": "stb@panter.ch"
49
+ },
50
+ {
51
+ "name": "Lukas Brezina",
52
+ "email": "brl@panter.ch"
53
+ }
54
+ ],
55
+ "license": "MIT",
56
+ "version": "0.0.0-perf-cli-reduce-bundle-size-with-tsconfig-optimization-3556aaa4",
57
+ "stableVersion": "0.1.0",
4
58
  "scripts": {
5
59
  "build:tsc": "yarn tsc",
6
- "build": "yarn tsc && yarn build:inline-variables",
7
- "build:watch": "yarn tsc -w",
60
+ "build": "yarn build:compile && yarn build:inline-variables && yarn build:bundle",
61
+ "build:bundle": "./scripts/bundle",
62
+ "build:compile": "yarn tsc",
8
63
  "build:inline-variables": "yarn babel --keep-file-extension --extensions \".ts,.js\" --config-file ./babel-inline.json dist --out-dir dist",
9
- "test": "jest",
64
+ "build:watch": "yarn tsc -w",
10
65
  "lint": "eslint \"src/**/*.ts\"",
11
- "lint:fix": "eslint \"src/**/*.ts\" --fix"
66
+ "lint:fix": "eslint \"src/**/*.ts\" --fix",
67
+ "generate:gitlab-ci-yml-types": "ts-node ./scripts/generate-gitlab-ci-types.ts",
68
+ "generate:examples-test": "tsx scripts/generate-examples-test.ts"
12
69
  },
13
- "main": "dist/index.js",
14
70
  "types": "dist/index.d.ts",
71
+ "main": "dist/index.js",
72
+ "sideEffects": false,
15
73
  "bin": {
16
74
  "catladder-gitlab": "./bin/catladder-gitlab.js"
17
75
  },
@@ -20,23 +78,24 @@
20
78
  "@babel/core": "^7.0.0-0",
21
79
  "@babel/plugin-syntax-typescript": "^7.16.7",
22
80
  "@babel/preset-typescript": "^7.16.5",
81
+ "@jest/globals": "^29.3.1",
23
82
  "@types/child-process-promise": "^2.2.2",
24
83
  "@types/jest": "^27.4.0",
25
- "@types/lodash": "^4.14.172",
84
+ "@types/lodash": "^4.14.185",
85
+ "@types/node": "^20.14.2",
26
86
  "babel-plugin-transform-inline-environment-variables": "^0.4.3",
27
- "eslint": "^8.7.0"
28
- },
29
- "dependencies": {
30
- "@types/node": "^17.0.10",
31
87
  "child-process-promise": "^2.2.1",
32
- "js-yaml": "^4.1.0",
88
+ "glob": "^10.4.2",
89
+ "json-schema-to-typescript": "^13.0.2",
33
90
  "lodash": "^4.17.21",
34
91
  "memoizee": "^0.4.15",
35
- "path-equal": "^1.1.3",
92
+ "path-equal": "1.1.3",
36
93
  "slugify": "^1.6.3",
37
- "ts-node": "^10.4.0",
38
- "type-fest": "^2.10.0",
39
- "typescript": "^4.5.4"
94
+ "tsx": "^4.16.2",
95
+ "typescript": "^5.4.5",
96
+ "yaml": "^2.4.5"
40
97
  },
41
- "stableVersion": "0.1.0"
98
+ "dependencies": {
99
+ "tsx": "^4.16.2"
100
+ }
42
101
  }
package/scripts/bundle ADDED
@@ -0,0 +1,2 @@
1
+ #!/bin/bash
2
+ ncc build dist/catladder-gitlab.js -o dist/bundles/catladder-gitlab -e 'tsx/cjs/api' $( ((SHOULD_MINIFY == 1)) && printf %s '-m')
@@ -0,0 +1,93 @@
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
+ type ExampleTestLines = {
41
+ importLine: string;
42
+ testString: string;
43
+ kebabName: string;
44
+ camelName: string;
45
+ };
46
+
47
+ async function main() {
48
+ const exampleIgnores = await getExampleIgnores();
49
+ const [exampleFiles, existingTestFiles] = await Promise.all([
50
+ glob("*.ts", {
51
+ ignore: exampleIgnores,
52
+ cwd: examplesPath,
53
+ }),
54
+ glob("*.test.ts", {
55
+ ignore: ["rails-k8s-with-worker-dockerfile.test.ts"],
56
+ cwd: examplesPath,
57
+ }),
58
+ ]);
59
+ await Promise.all(
60
+ existingTestFiles.map((testFile) => rm(join(examplesPath, testFile))),
61
+ );
62
+ await Promise.all(
63
+ exampleFiles.map(async (exampleFile) => {
64
+ const kebabName = basename(exampleFile, ".ts");
65
+ const testFileContent = [
66
+ `import { createAllPipelines, createYamlLocalPipeline } from "./__utils__/helpers";`,
67
+ `import config from "./${kebabName}";`,
68
+ `\n/**`,
69
+ ` * This test is auto-generated.`,
70
+ ` * Modifications will be overwritten on every \`yarn test\` run!`,
71
+ ` */\n`,
72
+ `it("matches snapshot for ${kebabName}", async () => {`,
73
+ ` expect(await createAllPipelines(config)).toMatchSnapshot();`,
74
+ `});\n`,
75
+ `it("matches snapshot for cloud-run-memory-limit local pipeline YAML", async () => {`,
76
+ ` expect(await createYamlLocalPipeline(config)).toMatchSnapshot();`,
77
+ `});\n`,
78
+ ].join("\n");
79
+ const formattedTest = await format(testFileContent, {
80
+ parser: "typescript",
81
+ });
82
+ await writeFile(
83
+ join(examplesPath, `${kebabName}.test.ts`),
84
+ formattedTest,
85
+ {
86
+ encoding: "utf-8",
87
+ },
88
+ );
89
+ }),
90
+ );
91
+ }
92
+
93
+ main().catch(console.error);
@@ -0,0 +1,51 @@
1
+ import { compile } from "json-schema-to-typescript";
2
+ import { resolve, join } from "path";
3
+ import { existsSync } from "fs";
4
+ import { rm, writeFile } from "fs/promises";
5
+
6
+ const rootPath = resolve(__dirname, "..");
7
+ const typeOutputPath = join(rootPath, "src/types/gitlab-ci-yml.ts");
8
+
9
+ export const generateFromCurrentSchema = async () => {
10
+ const response = await fetch(
11
+ "https://gitlab.com/gitlab-org/gitlab/-/raw/master/app/assets/javascripts/editor/schema/ci.json",
12
+ );
13
+ const gitLabCiJsonSchema = await response.json();
14
+ const schema = await compile(gitLabCiJsonSchema, "GitlabCiYml", {
15
+ additionalProperties: true,
16
+ enableConstEnums: true,
17
+ declareExternallyReferenced: true,
18
+ unreachableDefinitions: true,
19
+ strictIndexSignatures: true,
20
+ unknownAny: false,
21
+ ignoreMinAndMaxItems: true,
22
+ format: true,
23
+ style: {
24
+ bracketSpacing: true,
25
+ printWidth: 100,
26
+ semi: true,
27
+ tabWidth: 2,
28
+ useTabs: false,
29
+ trailingComma: "es5",
30
+ endOfLine: "lf",
31
+ },
32
+ cwd: rootPath,
33
+ });
34
+ /**
35
+ * Remove part that failes with tsc error
36
+ * ```
37
+ * error TS2411: Property '$schema' of type 'string | undefined' is not assignable to 'string' index type 'JobTemplate1'.
38
+ * ```
39
+ */
40
+ const sanitizedSchenma = schema.replace(
41
+ // eslint-disable-next-line no-useless-escape
42
+ /export interface HttpsGitlabComGitlabCiYml \{\n[ a-zA-Z0-9?$:;\n_!"\{\}\/*@\[\],.|\(\)]*\[k\: string\]: Job;\n\}/m,
43
+ "",
44
+ );
45
+ if (existsSync(typeOutputPath)) {
46
+ await rm(typeOutputPath);
47
+ }
48
+ await writeFile(typeOutputPath, sanitizedSchenma, { encoding: "utf-8" });
49
+ };
50
+
51
+ generateFromCurrentSchema();
@@ -0,0 +1,7 @@
1
+ {
2
+ "extends": "../tsconfig.json",
3
+ "compilerOptions": {
4
+ "target": "ES2020"
5
+ },
6
+ "include": ["**/*.ts"]
7
+ }
@@ -0,0 +1,81 @@
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
+ /**
16
+ *
17
+ * @returns a bash expression to lowercase the string
18
+ */
19
+ public toLowerCase(): BashExpression {
20
+ return this.transformWithCommand("awk '{print tolower($0)}'");
21
+ }
22
+ /**
23
+ * concats a value to this one and returns a new BashExpression
24
+ * @param value
25
+ * @returns
26
+ */
27
+ public concat(...values: Array<string | BashExpression>): BashExpression {
28
+ return new BashExpression(
29
+ this.toString().concat(...values.map((v) => v.toString())),
30
+ );
31
+ }
32
+
33
+ public transformWithCommand(command: string): BashExpression {
34
+ return new BashExpression(
35
+ // see https://stackoverflow.com/a/2264537
36
+ `$(printf %s "${this.toString()}" | ${command})`,
37
+ );
38
+ }
39
+ }
40
+
41
+ export type StringOrBashExpression = string | BashExpression;
42
+
43
+ export const getBashVariable = (name: string) => new BashExpression(`$${name}`);
44
+
45
+ /**
46
+ * joins bash expressions together with a joiner
47
+ * returns a bash expression if any of the parts is a bash expression
48
+ * returns a string otherwise
49
+ *
50
+ * @param parts
51
+ * @param joiner
52
+ * @returns
53
+ */
54
+ export const joinBashExpressions = (
55
+ parts: Array<StringOrBashExpression>,
56
+ joiner = "",
57
+ ): StringOrBashExpression => {
58
+ const anyIsBashExpression = parts.some((p) => p instanceof BashExpression);
59
+ if (anyIsBashExpression) {
60
+ return new BashExpression(
61
+ parts
62
+ .map((p) => (p instanceof BashExpression ? p.toString() : p))
63
+ .join(joiner),
64
+ );
65
+ } else {
66
+ return parts.join(joiner);
67
+ }
68
+ };
69
+
70
+ /**
71
+ * escapes a string or bash expression for bash
72
+ * it mainly escapes double quotes
73
+ */
74
+ export const bashEscape = (value: StringOrBashExpression | any) => {
75
+ if (value instanceof BashExpression) {
76
+ return value.toString(); // no need to escape bash expressions, as we want them to evaluate
77
+ }
78
+ // we wrap it in double quotes, so we need to escape them
79
+ if (typeof value === "string") return value.replace(/"/g, '\\"');
80
+ return value;
81
+ };
@@ -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,46 @@
1
+ import type { ScalarTag } from "yaml";
2
+ import { stringify } from "yaml";
3
+ import { BashExpression } from "./BashExpression";
4
+
5
+ const bashExpressionType: ScalarTag = {
6
+ tag: "",
7
+ resolve: (str) => {
8
+ // not really needed,but let's make typescript happy
9
+ return new BashExpression(str);
10
+ },
11
+ stringify(node: any, ctx: any) {
12
+ // we create a BLOCK_LITERAL
13
+ // but because bash will interpret the value, it may resolve to a multiline string
14
+ // so we need to indent every line using sed
15
+ return "|-\n" + node.value.transformWithCommand(`sed 's/^/${ctx.indent}/'`);
16
+ },
17
+
18
+ identify: (v: any) => v instanceof BashExpression,
19
+ };
20
+
21
+ /***
22
+ * creates a yaml string that can be used in bash scripts
23
+ * it handles BashExpressions correctly so that they can be evaluated in bash
24
+ */
25
+ export const yamlBashString = (value: any) => {
26
+ return stringify(value, {
27
+ defaultStringType: "BLOCK_LITERAL",
28
+ defaultKeyType: "PLAIN",
29
+ customTags: [bashExpressionType],
30
+ aliasDuplicateObjects: false,
31
+ lineWidth: 0,
32
+ });
33
+ };
34
+
35
+ /**
36
+ * creates a bash script that writes a yaml string to a file
37
+ * @param value the yaml value to write, it supports BashExpressions
38
+ */
39
+ export const writeBashYamlToFileScript = (value: any, filename: string) => {
40
+ return [
41
+ `cat > ${filename} <<EOF
42
+ ${yamlBashString(value)}
43
+ EOF
44
+ `,
45
+ ];
46
+ };
@@ -0,0 +1,12 @@
1
+ import type { UnspecifiedEnvVars } from "../types";
2
+ import { isNil } from "lodash";
3
+ import { bashEscape } from "./BashExpression";
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(([key, value]) => `export ${key}="${value ? bashEscape(value) : ""}"`);
12
+ };
@@ -0,0 +1,50 @@
1
+ import { BashExpression } from "./BashExpression";
2
+
3
+ // from https://github.com/dsblv/string-replace-async/blob/main/index.js
4
+ // and adjusted a bit
5
+ export default async function replaceAsync(
6
+ string: string | BashExpression,
7
+ searchValue: any,
8
+ replacer: (
9
+ substring: string,
10
+ ...args: any[]
11
+ ) => Promise<string | BashExpression>,
12
+ ) {
13
+ const wasBashExpression = string instanceof BashExpression;
14
+ try {
15
+ // 1. Run fake pass of `replace`, collect values from `replacer` calls
16
+ // 2. Resolve them with `Promise.all`
17
+ // 3. Run `replace` with resolved values
18
+ const values: Array<Promise<string | BashExpression>> = [];
19
+ String.prototype.replace.call(
20
+ string.toString(),
21
+ searchValue,
22
+ function (...args) {
23
+ // eslint-disable-next-line prefer-spread
24
+ const result = replacer.apply(undefined, args);
25
+ values.push(result);
26
+ return "";
27
+ },
28
+ );
29
+ const resolvedValues = await Promise.all(values);
30
+
31
+ const containsBashExpression = resolvedValues.some(
32
+ (value) => value instanceof BashExpression,
33
+ );
34
+
35
+ const result = String.prototype.replace.call(
36
+ string.toString(),
37
+ searchValue,
38
+ function () {
39
+ return resolvedValues.shift()?.toString() ?? "";
40
+ },
41
+ );
42
+ if (wasBashExpression || containsBashExpression) {
43
+ return new BashExpression(result);
44
+ } else {
45
+ return result;
46
+ }
47
+ } catch (error) {
48
+ return Promise.reject(error);
49
+ }
50
+ }