@catladder/pipeline 1.144.1 → 1.146.0

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 (335) hide show
  1. package/dist/bash/BashExpression.d.ts +40 -0
  2. package/dist/bash/BashExpression.js +124 -0
  3. package/dist/bash/bashExpressionPerPipelineType.d.ts +6 -0
  4. package/dist/bash/bashExpressionPerPipelineType.js +11 -0
  5. package/dist/bash/bashYaml.d.ts +10 -0
  6. package/dist/bash/bashYaml.js +46 -0
  7. package/dist/bash/getInjectVarsScript.d.ts +2 -0
  8. package/dist/bash/getInjectVarsScript.js +45 -0
  9. package/dist/bash/replaceAsync.d.ts +2 -0
  10. package/dist/{pipeline/commitInfo/getCommitInfo.js → bash/replaceAsync.js} +49 -21
  11. package/dist/build/base/__tests__/createArtifactsConfig.test.js +3 -1
  12. package/dist/build/base/constants.js +3 -1
  13. package/dist/build/base/createAppBuildJob.d.ts +2 -1
  14. package/dist/build/base/createAppBuildJob.js +10 -6
  15. package/dist/build/base/createArtifactsConfig.d.ts +1 -1
  16. package/dist/build/base/createArtifactsConfig.js +3 -1
  17. package/dist/build/base/index.js +3 -1
  18. package/dist/build/base/writeBuildInfo.js +4 -3
  19. package/dist/build/base/writeDotEnv.js +12 -3
  20. package/dist/build/custom/__tests__/testJob.test.js +3 -1
  21. package/dist/build/custom/buildJob.js +4 -12
  22. package/dist/build/custom/index.js +3 -1
  23. package/dist/build/custom/testJob.d.ts +1 -1
  24. package/dist/build/custom/testJob.js +18 -14
  25. package/dist/build/docker.d.ts +5 -31
  26. package/dist/build/docker.js +16 -9
  27. package/dist/build/index.d.ts +1 -1
  28. package/dist/build/index.js +13 -7
  29. package/dist/build/node/buildJob.js +4 -12
  30. package/dist/build/node/cache.js +6 -3
  31. package/dist/build/node/constants.js +3 -1
  32. package/dist/build/node/index.js +3 -1
  33. package/dist/build/node/meteor.js +5 -2
  34. package/dist/build/node/testJob.js +18 -14
  35. package/dist/build/node/yarn.d.ts +3 -2
  36. package/dist/build/node/yarn.js +6 -3
  37. package/dist/build/rails/build.js +3 -1
  38. package/dist/build/rails/index.js +3 -1
  39. package/dist/build/rails/test.js +15 -11
  40. package/dist/build/sbom.js +3 -1
  41. package/dist/build/types.d.ts +24 -18
  42. package/dist/build/types.js +3 -1
  43. package/dist/bundles/catladder-gitlab/index.js +3 -3
  44. package/dist/catladder-gitlab.js +10 -54
  45. package/dist/config/__tests__/configruedEnvs.test.js +3 -1
  46. package/dist/config/configruedEnvs.js +3 -1
  47. package/dist/config/index.js +13 -7
  48. package/dist/config/readConfig.js +6 -5
  49. package/dist/constants.js +5 -3
  50. package/dist/context/__tests__/resolveReferences.test.js +40 -8
  51. package/dist/context/getBuildInfoVariables.d.ts +7 -0
  52. package/dist/context/getBuildInfoVariables.js +29 -0
  53. package/dist/context/getEnvConfig.js +3 -1
  54. package/dist/context/getEnvType.js +3 -1
  55. package/dist/context/getEnvironment.d.ts +3 -3
  56. package/dist/context/getEnvironment.js +10 -14
  57. package/dist/context/getEnvironmentContext.d.ts +7 -3
  58. package/dist/context/getEnvironmentContext.js +21 -11
  59. package/dist/context/getEnvironmentVariables.d.ts +26 -5
  60. package/dist/context/getEnvironmentVariables.js +40 -25
  61. package/dist/context/getLabels.js +4 -2
  62. package/dist/context/getReviewSlug.d.ts +4 -0
  63. package/dist/context/getReviewSlug.js +22 -0
  64. package/dist/context/index.d.ts +12 -3
  65. package/dist/context/index.js +21 -15
  66. package/dist/context/resolveReferences.d.ts +3 -1
  67. package/dist/context/resolveReferences.js +53 -21
  68. package/dist/context/transformJobOnlyVars.d.ts +5 -2
  69. package/dist/context/transformJobOnlyVars.js +4 -2
  70. package/dist/context/utils/envVars.d.ts +1 -1
  71. package/dist/context/utils/envVars.js +5 -2
  72. package/dist/defaults/index.js +3 -1
  73. package/dist/deploy/base/deploy.d.ts +1 -1
  74. package/dist/deploy/base/deploy.js +12 -11
  75. package/dist/deploy/base/index.js +3 -1
  76. package/dist/deploy/base/rollback.d.ts +1 -1
  77. package/dist/deploy/base/rollback.js +13 -9
  78. package/dist/deploy/base/stop.d.ts +1 -1
  79. package/dist/deploy/base/stop.js +16 -11
  80. package/dist/deploy/base/types.d.ts +1 -1
  81. package/dist/deploy/base/types.js +3 -1
  82. package/dist/deploy/base/variables.js +3 -1
  83. package/dist/deploy/cloudRun/artifactsRegistry.d.ts +2 -1
  84. package/dist/deploy/cloudRun/artifactsRegistry.js +6 -4
  85. package/dist/deploy/cloudRun/cleanup.js +3 -1
  86. package/dist/deploy/cloudRun/cloudRunRevisions.js +3 -1
  87. package/dist/deploy/cloudRun/createJobs/cloudRunJobs.js +8 -5
  88. package/dist/deploy/cloudRun/createJobs/cloudRunServices.d.ts +2 -2
  89. package/dist/deploy/cloudRun/createJobs/cloudRunServices.js +6 -3
  90. package/dist/deploy/cloudRun/createJobs/common.d.ts +3 -3
  91. package/dist/deploy/cloudRun/createJobs/common.js +3 -1
  92. package/dist/deploy/cloudRun/createJobs/constants.d.ts +1 -0
  93. package/dist/deploy/cloudRun/createJobs/constants.js +7 -0
  94. package/dist/deploy/cloudRun/createJobs/getCloudRunDeployScripts.js +10 -4
  95. package/dist/deploy/cloudRun/createJobs/getCloudRunStopScripts.js +3 -1
  96. package/dist/deploy/cloudRun/createJobs/index.js +25 -8
  97. package/dist/deploy/cloudRun/createJobs/volumes.js +3 -1
  98. package/dist/deploy/cloudRun/index.js +5 -3
  99. package/dist/deploy/cloudRun/utils/createArgsString.d.ts +2 -1
  100. package/dist/deploy/cloudRun/utils/createArgsString.js +3 -1
  101. package/dist/deploy/cloudRun/utils/database.js +13 -13
  102. package/dist/deploy/cloudRun/utils/gcloudServiceAccountLoginCommands.js +3 -1
  103. package/dist/deploy/cloudRun/utils/getServiceName.d.ts +1 -1
  104. package/dist/deploy/cloudRun/utils/getServiceName.js +3 -1
  105. package/dist/deploy/cloudRun/utils/jobName.d.ts +2 -1
  106. package/dist/deploy/cloudRun/utils/jobName.js +4 -2
  107. package/dist/deploy/cloudRun/utils/removeFirstLinesFromCommandOutput.js +3 -1
  108. package/dist/deploy/cloudSql/utils.d.ts +2 -1
  109. package/dist/deploy/cloudSql/utils.js +7 -2
  110. package/dist/deploy/custom/deployJob.js +3 -1
  111. package/dist/deploy/custom/index.js +3 -1
  112. package/dist/deploy/dockerTag/deployJob.js +3 -1
  113. package/dist/deploy/dockerTag/index.js +3 -1
  114. package/dist/deploy/index.d.ts +4 -3
  115. package/dist/deploy/index.js +13 -7
  116. package/dist/deploy/kubernetes/additionalSecretKeys.js +3 -1
  117. package/dist/deploy/kubernetes/cloudSql/index.d.ts +3 -2
  118. package/dist/deploy/kubernetes/cloudSql/index.js +6 -4
  119. package/dist/deploy/kubernetes/deployJob.js +22 -15
  120. package/dist/deploy/kubernetes/index.js +51 -14
  121. package/dist/deploy/kubernetes/kubeEnv.d.ts +3 -2
  122. package/dist/deploy/kubernetes/kubeEnv.js +7 -4
  123. package/dist/deploy/kubernetes/kubeValues.d.ts +2 -2
  124. package/dist/deploy/kubernetes/kubeValues.js +4 -5
  125. package/dist/deploy/kubernetes/mongodb.js +3 -1
  126. package/dist/deploy/kubernetes/processSecretsAsFiles.d.ts +2 -1
  127. package/dist/deploy/kubernetes/processSecretsAsFiles.js +3 -1
  128. package/dist/deploy/sbom.js +3 -1
  129. package/dist/deploy/types/base.d.ts +8 -2
  130. package/dist/deploy/types/base.js +3 -1
  131. package/dist/deploy/types/custom.d.ts +1 -1
  132. package/dist/deploy/types/custom.js +3 -1
  133. package/dist/deploy/types/dockerTag.d.ts +1 -1
  134. package/dist/deploy/types/dockerTag.js +3 -1
  135. package/dist/deploy/types/googleCloudRun.d.ts +19 -18
  136. package/dist/deploy/types/googleCloudRun.js +3 -1
  137. package/dist/deploy/types/index.d.ts +6 -6
  138. package/dist/deploy/types/index.js +13 -7
  139. package/dist/deploy/types/kubernetes.d.ts +22 -22
  140. package/dist/deploy/types/kubernetes.js +3 -1
  141. package/dist/deploy/utils.js +3 -1
  142. package/dist/index.d.ts +3 -2
  143. package/dist/index.js +16 -9
  144. package/dist/packageInfos.d.ts +2 -0
  145. package/dist/packageInfos.js +14 -0
  146. package/dist/pipeline/createAllJobs.d.ts +13 -5
  147. package/dist/pipeline/createAllJobs.js +21 -10
  148. package/dist/pipeline/createChildPipeline.d.ts +1 -1
  149. package/dist/pipeline/createChildPipeline.js +24 -7
  150. package/dist/pipeline/createJobsForComponent.d.ts +3 -3
  151. package/dist/pipeline/createJobsForComponent.js +19 -18
  152. package/dist/pipeline/createMainPipeline.d.ts +3 -0
  153. package/dist/pipeline/createMainPipeline.js +248 -0
  154. package/dist/pipeline/generatePipelineFiles.d.ts +2 -0
  155. package/dist/pipeline/generatePipelineFiles.js +178 -0
  156. package/dist/pipeline/getPipelineStages.js +3 -1
  157. package/dist/pipeline/gitlab/createGitlabJobs.d.ts +15 -5
  158. package/dist/pipeline/gitlab/createGitlabJobs.js +98 -25
  159. package/dist/pipeline/gitlab/createGitlabPipeline.d.ts +7 -2
  160. package/dist/pipeline/gitlab/createGitlabPipeline.js +34 -17
  161. package/dist/pipeline/gitlab/getPipelineTriggerForGitlabChildPipeline.d.ts +1 -0
  162. package/dist/pipeline/gitlab/getPipelineTriggerForGitlabChildPipeline.js +29 -0
  163. package/dist/pipeline/gitlab/gitlabReleaseJobs.d.ts +33 -0
  164. package/dist/pipeline/gitlab/gitlabReleaseJobs.js +24 -0
  165. package/dist/pipeline/index.d.ts +3 -1
  166. package/dist/pipeline/index.js +16 -8
  167. package/dist/pipeline/packageManager.js +4 -2
  168. package/dist/pipeline/yarn/yarnUtils.js +6 -4
  169. package/dist/rules/index.d.ts +4 -1
  170. package/dist/rules/index.js +25 -18
  171. package/dist/runner/index.d.ts +1 -1
  172. package/dist/runner/index.js +3 -1
  173. package/dist/tsconfig.tsbuildinfo +1 -1
  174. package/dist/types/config.d.ts +18 -15
  175. package/dist/types/config.js +5 -2
  176. package/dist/types/context.d.ts +37 -32
  177. package/dist/types/context.js +3 -1
  178. package/dist/types/environmentContext.d.ts +11 -7
  179. package/dist/types/environmentContext.js +3 -1
  180. package/dist/types/gitlab-ci-yml.d.ts +30 -30
  181. package/dist/types/gitlab-ci-yml.js +3 -2
  182. package/dist/types/gitlab-types.d.ts +4 -6
  183. package/dist/types/gitlab-types.js +3 -1
  184. package/dist/types/index.js +13 -7
  185. package/dist/types/jobs.d.ts +23 -6
  186. package/dist/types/jobs.js +3 -1
  187. package/dist/types/pipeline.d.ts +4 -3
  188. package/dist/types/pipeline.js +3 -1
  189. package/dist/types/utils.d.ts +1 -1
  190. package/dist/types/utils.js +3 -1
  191. package/dist/utils/gitlab.js +3 -1
  192. package/dist/utils/index.d.ts +1 -1
  193. package/dist/utils/index.js +3 -1
  194. package/dist/utils/writeFiles.d.ts +7 -0
  195. package/dist/{pipeline/commitInfo/getBuildId.js → utils/writeFiles.js} +39 -22
  196. package/examples/__snapshots__/cloud-run-memory-limit.ts.snap +480 -384
  197. package/examples/__snapshots__/cloud-run-meteor-with-worker.ts.snap +462 -366
  198. package/examples/__snapshots__/cloud-run-no-cpu-throttling.ts.snap +480 -384
  199. package/examples/__snapshots__/cloud-run-no-service.ts.snap +501 -393
  200. package/examples/__snapshots__/cloud-run-non-public.ts.snap +480 -384
  201. package/examples/__snapshots__/cloud-run-post-stop-job.ts.snap +489 -392
  202. package/examples/__snapshots__/cloud-run-service-gen2.ts.snap +480 -384
  203. package/examples/__snapshots__/cloud-run-service-with-volumes.ts.snap +501 -401
  204. package/examples/__snapshots__/cloud-run-with-sql-reuse-db.ts.snap +1155 -915
  205. package/examples/__snapshots__/cloud-run-with-sql.ts.snap +1116 -888
  206. package/examples/__snapshots__/cloud-run-with-worker.ts.snap +482 -386
  207. package/examples/__snapshots__/custom-build-job-with-tests.ts.snap +452 -356
  208. package/examples/__snapshots__/custom-build-job.ts.snap +434 -350
  209. package/examples/__snapshots__/custom-deploy.ts.snap +319 -223
  210. package/examples/__snapshots__/custom-envs.ts.snap +123 -81
  211. package/examples/__snapshots__/custom-sbom-java.ts.snap +434 -350
  212. package/examples/__snapshots__/kubernetes-application-customization.ts.snap +846 -969
  213. package/examples/__snapshots__/kubernetes-with-cloud-sql-legacy.ts.snap +886 -957
  214. package/examples/__snapshots__/kubernetes-with-cloud-sql.ts.snap +894 -969
  215. package/examples/__snapshots__/kubernetes-with-jobs.ts.snap +1626 -1728
  216. package/examples/__snapshots__/kubernetes-with-mongodb.ts.snap +974 -1137
  217. package/examples/__snapshots__/local-dot-env.ts.snap +480 -384
  218. package/examples/__snapshots__/meteor-kubernetes.ts.snap +906 -1069
  219. package/examples/__snapshots__/multiline-var.ts.snap +4500 -0
  220. package/examples/__snapshots__/native-app.ts.snap +706 -578
  221. package/examples/__snapshots__/node-build-with-custom-image.ts.snap +480 -384
  222. package/examples/__snapshots__/node-build-with-docker-additions.ts.snap +488 -384
  223. package/examples/__snapshots__/rails-k8s-with-worker.ts.snap +1656 -1942
  224. package/examples/__snapshots__/wait-for-other-deploy.ts.snap +287 -231
  225. package/examples/__utils__/helpers.ts +2 -2
  226. package/examples/custom-deploy.ts +7 -7
  227. package/examples/multiline-var.ts +64 -0
  228. package/package.json +5 -8
  229. package/scripts/generate-gitlab-ci-types.ts +2 -2
  230. package/src/bash/BashExpression.ts +81 -0
  231. package/src/bash/bashExpressionPerPipelineType.ts +16 -0
  232. package/src/bash/bashYaml.ts +46 -0
  233. package/src/bash/getInjectVarsScript.ts +12 -0
  234. package/src/bash/replaceAsync.ts +50 -0
  235. package/src/build/base/__tests__/createArtifactsConfig.test.ts +3 -3
  236. package/src/build/base/createAppBuildJob.ts +8 -4
  237. package/src/build/base/createArtifactsConfig.ts +2 -2
  238. package/src/build/base/index.ts +1 -1
  239. package/src/build/base/writeBuildInfo.ts +1 -1
  240. package/src/build/base/writeDotEnv.ts +6 -1
  241. package/src/build/custom/__tests__/testJob.test.ts +1 -1
  242. package/src/build/custom/buildJob.ts +4 -6
  243. package/src/build/custom/testJob.ts +6 -5
  244. package/src/build/docker.ts +21 -13
  245. package/src/build/index.ts +1 -1
  246. package/src/build/node/buildJob.ts +3 -5
  247. package/src/build/node/cache.ts +4 -4
  248. package/src/build/node/meteor.ts +1 -1
  249. package/src/build/node/testJob.ts +6 -5
  250. package/src/build/node/yarn.ts +14 -9
  251. package/src/build/rails/test.ts +2 -1
  252. package/src/build/types.ts +8 -1
  253. package/src/catladder-gitlab.ts +8 -55
  254. package/src/config/configruedEnvs.ts +6 -6
  255. package/src/config/readConfig.ts +4 -5
  256. package/src/constants.ts +5 -2
  257. package/src/context/__tests__/resolveReferences.test.ts +11 -6
  258. package/src/context/getBuildInfoVariables.ts +40 -0
  259. package/src/context/getEnvConfig.ts +1 -1
  260. package/src/context/getEnvType.ts +1 -1
  261. package/src/context/getEnvironment.ts +7 -30
  262. package/src/context/getEnvironmentContext.ts +25 -29
  263. package/src/context/getEnvironmentVariables.ts +72 -47
  264. package/src/context/getReviewSlug.ts +27 -0
  265. package/src/context/index.ts +26 -25
  266. package/src/context/resolveReferences.ts +40 -17
  267. package/src/context/transformJobOnlyVars.ts +6 -3
  268. package/src/context/utils/envVars.ts +5 -4
  269. package/src/deploy/base/deploy.ts +25 -23
  270. package/src/deploy/base/index.ts +1 -1
  271. package/src/deploy/base/rollback.ts +9 -11
  272. package/src/deploy/base/stop.ts +9 -10
  273. package/src/deploy/cloudRun/artifactsRegistry.ts +13 -8
  274. package/src/deploy/cloudRun/cleanup.ts +3 -3
  275. package/src/deploy/cloudRun/cloudRunRevisions.ts +3 -3
  276. package/src/deploy/cloudRun/createJobs/cloudRunJobs.ts +22 -17
  277. package/src/deploy/cloudRun/createJobs/cloudRunServices.ts +7 -6
  278. package/src/deploy/cloudRun/createJobs/common.ts +1 -1
  279. package/src/deploy/cloudRun/createJobs/constants.ts +1 -0
  280. package/src/deploy/cloudRun/createJobs/getCloudRunDeployScripts.ts +25 -7
  281. package/src/deploy/cloudRun/createJobs/getCloudRunStopScripts.ts +1 -1
  282. package/src/deploy/cloudRun/createJobs/index.ts +18 -9
  283. package/src/deploy/cloudRun/createJobs/volumes.ts +2 -2
  284. package/src/deploy/cloudRun/index.ts +22 -10
  285. package/src/deploy/cloudRun/utils/createArgsString.ts +3 -2
  286. package/src/deploy/cloudRun/utils/database.ts +7 -7
  287. package/src/deploy/cloudRun/utils/gcloudServiceAccountLoginCommands.ts +1 -1
  288. package/src/deploy/cloudRun/utils/jobName.ts +7 -2
  289. package/src/deploy/cloudRun/utils/removeFirstLinesFromCommandOutput.ts +1 -1
  290. package/src/deploy/cloudSql/utils.ts +13 -10
  291. package/src/deploy/index.ts +5 -4
  292. package/src/deploy/kubernetes/cloudSql/index.ts +6 -5
  293. package/src/deploy/kubernetes/deployJob.ts +28 -14
  294. package/src/deploy/kubernetes/index.ts +15 -8
  295. package/src/deploy/kubernetes/kubeEnv.ts +9 -7
  296. package/src/deploy/kubernetes/kubeValues.ts +5 -6
  297. package/src/deploy/kubernetes/mongodb.ts +1 -1
  298. package/src/deploy/kubernetes/processSecretsAsFiles.ts +5 -4
  299. package/src/deploy/types/base.ts +6 -0
  300. package/src/deploy/types/googleCloudRun.ts +2 -0
  301. package/src/deploy/utils.ts +2 -2
  302. package/src/index.ts +2 -1
  303. package/src/packageInfos.ts +10 -0
  304. package/src/pipeline/createAllJobs.ts +28 -14
  305. package/src/pipeline/createChildPipeline.ts +20 -9
  306. package/src/pipeline/createJobsForComponent.ts +15 -23
  307. package/src/pipeline/createMainPipeline.ts +91 -0
  308. package/src/pipeline/generatePipelineFiles.ts +29 -0
  309. package/src/pipeline/getPipelineStages.ts +1 -1
  310. package/src/pipeline/gitlab/createGitlabJobs.ts +182 -59
  311. package/src/pipeline/gitlab/createGitlabPipeline.ts +16 -14
  312. package/src/pipeline/gitlab/getPipelineTriggerForGitlabChildPipeline.ts +46 -0
  313. package/src/pipeline/gitlab/gitlabReleaseJobs.ts +20 -0
  314. package/src/pipeline/index.ts +2 -0
  315. package/src/pipeline/packageManager.ts +2 -2
  316. package/src/pipeline/yarn/yarnUtils.ts +7 -7
  317. package/src/rules/index.ts +15 -9
  318. package/src/types/config.ts +12 -3
  319. package/src/types/context.ts +39 -26
  320. package/src/types/environmentContext.ts +13 -7
  321. package/src/types/gitlab-ci-yml.ts +0 -1
  322. package/src/types/gitlab-types.ts +5 -4
  323. package/src/types/jobs.ts +29 -4
  324. package/src/types/pipeline.ts +4 -0
  325. package/src/types/utils.ts +4 -4
  326. package/src/utils/gitlab.ts +1 -1
  327. package/src/utils/index.ts +2 -2
  328. package/src/utils/writeFiles.ts +40 -0
  329. package/dist/deploy/cloudRun/createJobs/variables.d.ts +0 -5
  330. package/dist/deploy/cloudRun/createJobs/variables.js +0 -19
  331. package/dist/pipeline/commitInfo/getBuildId.d.ts +0 -6
  332. package/dist/pipeline/commitInfo/getCommitInfo.d.ts +0 -2
  333. package/src/deploy/cloudRun/createJobs/variables.ts +0 -21
  334. package/src/pipeline/commitInfo/getBuildId.ts +0 -17
  335. package/src/pipeline/commitInfo/getCommitInfo.ts +0 -15
@@ -1,47 +1,24 @@
1
- import { isOfDeployType } from "../deploy";
2
- import type { Config } from "../types/config";
1
+ import type { CreateContextContext } from "..";
3
2
 
4
- import type { CommitInfo, Environment } from "../types/context";
3
+ import type { Environment } from "../types/context";
5
4
  import { getEnvironmentContext } from "./getEnvironmentContext";
6
5
  import { getEnvironmentVariables } from "./getEnvironmentVariables";
7
6
 
8
7
  export const getEnvironment = async (
9
- config: Config,
10
- componentName: string,
11
- env: string,
12
- commitInfo?: CommitInfo
8
+ ctx: CreateContextContext,
13
9
  ): Promise<Environment> => {
14
- const variables = await getEnvironmentVariables(
15
- config,
16
- componentName,
17
- env,
18
- commitInfo
19
- );
10
+ const { env } = ctx;
11
+ const variables = await getEnvironmentVariables(ctx);
20
12
 
21
- const envContext = getEnvironmentContext(
22
- config,
23
- env,
24
- componentName,
25
- commitInfo
26
- );
13
+ const envContext = getEnvironmentContext(ctx);
27
14
 
28
15
  const envType = envContext.envType;
29
- const deployConfig = config.components[componentName].deploy;
30
-
31
- const gitlabEnvironment = {
32
- name: envContext.gitlabEnvironmentName,
33
- ...(!isOfDeployType(deployConfig, "google-cloudrun") ||
34
- deployConfig.service !== false
35
- ? { url: variables.url }
36
- : {}),
37
- };
38
16
 
39
17
  return {
40
18
  envType,
41
-
42
- gitlabEnvironment,
43
19
  fullName: envContext.fullName,
44
20
  slugPrefix: envContext.environmentSlugPrefix,
21
+ reviewSlug: envContext.reviewSlug,
45
22
  slug: envContext.environmentSlug,
46
23
  shortName: env,
47
24
  ...variables,
@@ -1,44 +1,40 @@
1
- import type { Config, EnvConfigWithComponent } from "../types/config";
1
+ import type { CreateContextContext } from "..";
2
+ import type { StringOrBashExpression } from "../bash/BashExpression";
3
+ import { joinBashExpressions } from "../bash/BashExpression";
2
4
 
3
- import type { CommitInfo } from "../types/context";
4
5
  import type { EnvironmentContext } from "../types/environmentContext";
5
6
  import { getEnvConfig } from "./getEnvConfig";
6
7
  import { getEnvType } from "./getEnvType";
8
+ import { getReviewSlug } from "./getReviewSlug";
7
9
 
8
10
  const getEnvironmentSlugPrefix = (
9
- envConfig: EnvConfigWithComponent,
10
11
  env: string,
11
- commitInfo?: CommitInfo
12
- ) => {
13
- const envType = getEnvType(env, envConfig);
14
-
15
- return envType === "review" && commitInfo
16
- ? `${env}-${commitInfo.reviewSlug}`
17
- : `${env}`;
12
+ reviewSlug: StringOrBashExpression | null,
13
+ ): StringOrBashExpression => {
14
+ if (reviewSlug) {
15
+ return joinBashExpressions([env, reviewSlug], "-");
16
+ }
17
+ return env;
18
18
  };
19
19
 
20
- export const getEnvironmentContext = (
21
- config: Config,
22
- env: string,
23
- componentName: string,
24
- commitInfo?: CommitInfo
25
- ): EnvironmentContext<any, any> => {
20
+ export const getEnvironmentContext = ({
21
+ env,
22
+ componentName,
23
+ config,
24
+ pipelineType,
25
+ }: CreateContextContext): EnvironmentContext<any, any> => {
26
26
  const envConfigRaw = getEnvConfig(config, componentName, env);
27
27
  const envType = getEnvType(env, envConfigRaw);
28
+ const reviewSlug = getReviewSlug(envConfigRaw, env, pipelineType);
28
29
 
29
- const environmentSlugPrefix = getEnvironmentSlugPrefix(
30
- envConfigRaw,
31
- env,
32
- commitInfo
33
- );
30
+ const environmentSlugPrefix = getEnvironmentSlugPrefix(env, reviewSlug);
34
31
 
35
- const environmentSlug = `${environmentSlugPrefix}-${componentName}`;
36
- const gitlabEnvironmentName =
37
- envType === "review" && commitInfo
38
- ? `${env}/${commitInfo.refName}/${componentName}`
39
- : `${env}/${componentName}`;
32
+ const environmentSlug = environmentSlugPrefix.concat(`-${componentName}`);
40
33
 
41
- const fullName = `${config.customerName}-${config.appName}-${environmentSlug}`;
34
+ const fullName = joinBashExpressions(
35
+ [config.customerName, config.appName, environmentSlug],
36
+ "-",
37
+ );
42
38
 
43
39
  return {
44
40
  envConfigRaw,
@@ -46,10 +42,10 @@ export const getEnvironmentContext = (
46
42
  buildConfigRaw: envConfigRaw.build,
47
43
  environmentSlugPrefix,
48
44
  environmentSlug,
49
- gitlabEnvironmentName,
45
+ reviewSlug,
46
+ pipelineType,
50
47
  fullName,
51
48
  envType,
52
- commitInfo,
53
49
  componentName,
54
50
  env,
55
51
  fullConfig: config,
@@ -1,67 +1,86 @@
1
1
  import { merge } from "lodash";
2
2
  import { DEPLOY_TYPES } from "../deploy";
3
3
  import type {
4
- CommitInfo,
5
4
  Context,
6
5
  EnvironmentEnvVarPart as EnvironmentVariables,
7
6
  } from "../types";
8
- import type { Config, DevLocalEnvConfig } from "../types/config";
7
+ import type { DevLocalEnvConfig } from "../types/config";
9
8
 
9
+ import type { CreateContextContext, UnspecifiedEnvVars } from "..";
10
+ import type { StringOrBashExpression } from "../bash/BashExpression";
11
+ import { getBashVariable, joinBashExpressions } from "../bash/BashExpression";
12
+ import type { EnvironmentContext } from "../types/environmentContext";
13
+ import { getBuildInfoVariables } from "./getBuildInfoVariables";
10
14
  import { getEnvironmentContext } from "./getEnvironmentContext";
11
15
  import {
12
16
  resolveReferences,
13
17
  translateLegacyFromComponents,
14
18
  } from "./resolveReferences";
19
+ import { transformJobOnlyVars } from "./transformJobOnlyVars";
15
20
  import {
16
- stringListToSecreteEnvVarList,
17
21
  makeSecretEnvVarMapping,
22
+ stringListToSecreteEnvVarList,
18
23
  stringifyValues,
19
24
  } from "./utils/envVars";
20
- import { transformJobOnlyVars } from "./transformJobOnlyVars";
21
25
 
22
26
  export type SecretEnvVar = {
23
27
  key: string;
24
28
  // hidden env vars are not shown in config-secrets
25
29
  hidden?: boolean;
26
30
  };
31
+
32
+ const getBasePredefinedVariables = (ctx: EnvironmentContext<any, any>) => {
33
+ return {
34
+ ENV_SHORT: ctx.env,
35
+ APP_DIR: ctx.envConfigRaw.dir,
36
+ ENV_TYPE: ctx.envType,
37
+ ...(ctx.envType !== "local" ? getBuildInfoVariables(ctx) : {}),
38
+ };
39
+ };
40
+
41
+ type BasePredefinedVariables = ReturnType<typeof getBasePredefinedVariables>;
42
+
43
+ // we export so that we have later nice autocomplete
44
+ export type PredefinedVariables = BasePredefinedVariables & {
45
+ /**
46
+ * undefined in rails, Rails before 6.1 (mis)uses the `HOST` environment variable to specify the IP to bind to
47
+ */
48
+ HOST?: StringOrBashExpression;
49
+ ROOT_URL: StringOrBashExpression;
50
+ HOST_INTERNAL: StringOrBashExpression;
51
+ ROOT_URL_INTERNAL: StringOrBashExpression;
52
+ };
53
+
27
54
  export const getEnvironmentVariables = async (
28
- config: Config,
29
- componentName: string,
30
- env: string,
31
- commitInfo?: CommitInfo,
32
- alreadyVisited: Record<string, Record<string, boolean>> = {} // to prevent endless loop
55
+ ctx: CreateContextContext,
56
+ alreadyVisited: Record<string, Record<string, boolean>> = {}, // to prevent endless loop
33
57
  ): Promise<EnvironmentVariables> => {
34
- const environmentContext = getEnvironmentContext(
35
- config,
36
- env,
37
- componentName,
38
- commitInfo
39
- );
58
+ const environmentContext = getEnvironmentContext(ctx);
40
59
 
60
+ const { config, env, componentName } = ctx;
41
61
  const { envConfigRaw, deployConfigRaw, buildConfigRaw, envType } =
42
62
  environmentContext;
43
63
 
44
- const basePredefinedVariables = {
45
- ENV_SHORT: env,
46
- APP_DIR: envConfigRaw.dir,
47
- ENV_TYPE: envType,
48
- BUILD_INFO_ID: commitInfo?.buildId,
49
- BUILD_INFO_BUILD_TIME: commitInfo?.buildTime,
50
- BUILD_INFO_CURRENT_VERSION: commitInfo?.currentVersion,
51
- };
64
+ const basePredefinedVariables =
65
+ getBasePredefinedVariables(environmentContext);
52
66
 
53
- let predefinedVariables: Record<string, string | undefined>;
54
- let host: string;
55
- let url: string;
67
+ let predefinedVariables: PredefinedVariables & UnspecifiedEnvVars;
68
+ let host: StringOrBashExpression;
69
+ let url: StringOrBashExpression;
56
70
 
57
71
  if (envType === "local") {
58
72
  const devLocalConfig: DevLocalEnvConfig = envConfigRaw;
59
73
  const port = devLocalConfig.port ?? 3000;
60
- host = "localhost:" + port;
74
+ host = "localhost:" + port.toString();
61
75
  url = "http://" + host;
62
76
  predefinedVariables = {
77
+ ...basePredefinedVariables,
63
78
  ENV_SHORT: "local",
64
79
  ROOT_URL: url,
80
+ // Rails before 6.1 (mis)uses the `HOST` environment variable to specify the IP to bind to
81
+ ...(config.components[componentName].build.type === "rails"
82
+ ? {}
83
+ : { HOST: host }),
65
84
  HOST_INTERNAL: host,
66
85
  ROOT_URL_INTERNAL: "http://" + host,
67
86
  PORT: port.toString(),
@@ -69,13 +88,15 @@ export const getEnvironmentVariables = async (
69
88
  } else {
70
89
  const additionalEnvVars = deployConfigRaw
71
90
  ? DEPLOY_TYPES[deployConfigRaw.type].getAdditionalEnvVars(
72
- environmentContext as never
91
+ environmentContext as never,
73
92
  )
74
93
  : {};
94
+
75
95
  const HOST_INTERNAL =
76
96
  additionalEnvVars.HOST_INTERNAL ?? "unknown-host.example.com";
97
+
77
98
  host = envConfigRaw?.host ?? HOST_INTERNAL;
78
- url = `https://${host}`;
99
+ url = joinBashExpressions(["https://", host]);
79
100
 
80
101
  predefinedVariables = {
81
102
  ...basePredefinedVariables,
@@ -84,8 +105,10 @@ export const getEnvironmentVariables = async (
84
105
  ? {}
85
106
  : { HOST: host }),
86
107
  ROOT_URL: url,
87
- HOST_CANONICAL: HOST_INTERNAL, // legacy
88
- ROOT_URL_INTERNAL: "https://" + HOST_INTERNAL,
108
+ HOST_INTERNAL,
109
+ /**@deprecated */
110
+ HOST_CANONICAL: HOST_INTERNAL, // legacy alias for HOST_INTERNAL
111
+ ROOT_URL_INTERNAL: joinBashExpressions(["https://", HOST_INTERNAL]),
89
112
  ...additionalEnvVars,
90
113
  };
91
114
  }
@@ -93,7 +116,7 @@ export const getEnvironmentVariables = async (
93
116
 
94
117
  const additionalSecretKeys = deployConfigRaw
95
118
  ? DEPLOY_TYPES[deployConfigRaw.type].additionalSecretKeys(
96
- environmentContext as never
119
+ environmentContext as never,
97
120
  )
98
121
  : [];
99
122
 
@@ -104,18 +127,18 @@ export const getEnvironmentVariables = async (
104
127
  const secretEnvVars = makeSecretEnvVarMapping(
105
128
  env,
106
129
  componentName,
107
- secretEnvVarKeys
130
+ secretEnvVarKeys,
108
131
  );
109
132
  // this is deprecated, we now support: $componentname:FOO
110
133
  const legacyFromComponents = envConfigRaw.vars?.fromComponents ?? {};
111
134
  const publicEnvVarsRawWithLegacyFromComponents = merge(
112
135
  {},
113
136
  translateLegacyFromComponents(legacyFromComponents),
114
- publicEnvVarsRaw
137
+ publicEnvVarsRaw,
115
138
  );
116
139
 
117
140
  const publicEnvVarsRawSanitized = stringifyValues(
118
- publicEnvVarsRawWithLegacyFromComponents
141
+ publicEnvVarsRawWithLegacyFromComponents,
119
142
  );
120
143
 
121
144
  const envVarsRaw = addIndexVar({
@@ -124,20 +147,20 @@ export const getEnvironmentVariables = async (
124
147
  ...publicEnvVarsRawSanitized,
125
148
  });
126
149
 
127
- const envVars = await resolveReferences(
150
+ const envVars = (await resolveReferences(
128
151
  envVarsRaw,
129
152
  async (otherComponentName, alreadyVisited) => {
130
153
  const { envVars: otherEnvVars } = await getEnvironmentVariables(
131
- config,
132
- otherComponentName,
133
- env,
134
- commitInfo,
135
- alreadyVisited
154
+ {
155
+ ...ctx,
156
+ componentName: otherComponentName,
157
+ },
158
+ alreadyVisited,
136
159
  );
137
160
  return otherEnvVars;
138
161
  },
139
- alreadyVisited
140
- );
162
+ alreadyVisited,
163
+ )) as typeof envVarsRaw;
141
164
 
142
165
  return {
143
166
  envVars,
@@ -146,12 +169,12 @@ export const getEnvironmentVariables = async (
146
169
  build: await transformJobOnlyVars(
147
170
  env,
148
171
  componentName,
149
- (buildConfigRaw && buildConfigRaw.jobVars) || null
172
+ (buildConfigRaw && buildConfigRaw.jobVars) || null,
150
173
  ),
151
174
  deploy: await transformJobOnlyVars(
152
175
  env,
153
176
  componentName,
154
- (deployConfigRaw && deployConfigRaw.jobVars) || null
177
+ (deployConfigRaw && deployConfigRaw.jobVars) || null,
155
178
  ),
156
179
  },
157
180
 
@@ -165,10 +188,12 @@ const sanitizeForEnVar = (s: string) => s.replace(/-/g, "_");
165
188
  export const getSecretVarName = (
166
189
  env: string,
167
190
  componentName: string,
168
- key: string
191
+ key: string,
169
192
  ) => `CL_${sanitizeForEnVar(env)}_${sanitizeForEnVar(componentName)}_${key}`; // remove dash from component name
170
193
 
171
- const addIndexVar = (vars: Record<string, unknown>) => ({
194
+ const addIndexVar = <V extends Record<string, unknown>>(
195
+ vars: V,
196
+ ): V & { _ALL_ENV_VAR_KEYS: string } => ({
172
197
  ...vars,
173
198
  _ALL_ENV_VAR_KEYS: JSON.stringify(Object.keys(vars)),
174
199
  });
@@ -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
+ };
@@ -2,8 +2,9 @@ import { BUILD_TYPES } from "../build";
2
2
  import type { BuildConfig, BuildConfigType } from "../build/types";
3
3
  import { DEPLOY_TYPES } from "../deploy";
4
4
  import type { DeployConfig, DeployConfigType } from "../deploy/types";
5
- import type { Config } from "../types/config";
6
- import type { CommitInfo, Context, PackageManagerInfo } from "../types/context";
5
+ import type { PipelineType } from "../types";
6
+ import type { Config, PipelineTrigger } from "../types/config";
7
+ import type { Context, PackageManagerInfo } from "../types/context";
7
8
  import type { PartialDeep } from "../types/utils";
8
9
  import { mergeWithMergingArrays } from "../utils";
9
10
  import { getEnvironment } from "./getEnvironment";
@@ -12,25 +13,25 @@ import { getEnvironmentContext } from "./getEnvironmentContext";
12
13
  export * from "./getEnvironment";
13
14
  export * from "./getEnvironmentVariables";
14
15
 
16
+ export type CreateContextContext = {
17
+ config: Config;
18
+ componentName: string;
19
+ env: string;
20
+ pipelineType?: PipelineType;
21
+ trigger?: PipelineTrigger;
22
+ packageManagerInfo?: PackageManagerInfo;
23
+ };
24
+
15
25
  export const createContext = async (
16
- config: Config,
17
- componentName: string,
18
- env: string,
19
- commitInfo?: CommitInfo,
20
- packageManagerInfo?: PackageManagerInfo
26
+ ctx: CreateContextContext,
21
27
  ): Promise<Context> => {
22
- if (!/^[a-z0-9-]+$/.test(componentName)) {
28
+ if (!/^[a-z0-9-]+$/.test(ctx.componentName)) {
23
29
  throw new Error(
24
- "componentName may only contain lower case letters, numbers and -"
30
+ "componentName may only contain lower case letters, numbers and -",
25
31
  );
26
32
  }
27
33
 
28
- const envContext = getEnvironmentContext(
29
- config,
30
- env,
31
- componentName,
32
- commitInfo
33
- );
34
+ const envContext = getEnvironmentContext(ctx);
34
35
 
35
36
  const componentConfigWithoutDefaults = envContext.envConfigRaw;
36
37
  const defaults: {
@@ -42,10 +43,9 @@ export const createContext = async (
42
43
  BUILD_TYPES[
43
44
  componentConfigWithoutDefaults.build.type as BuildConfigType
44
45
  ].defaults(envContext),
45
- deploy:
46
- DEPLOY_TYPES[
47
- componentConfigWithoutDefaults.deploy.type as DeployConfigType
48
- ].defaults(envContext),
46
+ deploy: DEPLOY_TYPES[
47
+ componentConfigWithoutDefaults.deploy.type as DeployConfigType
48
+ ].defaults(envContext as any),
49
49
  }
50
50
  : {
51
51
  build: {},
@@ -53,15 +53,16 @@ export const createContext = async (
53
53
  };
54
54
  const componentConfig = mergeWithMergingArrays(
55
55
  defaults,
56
- componentConfigWithoutDefaults
56
+ componentConfigWithoutDefaults,
57
57
  );
58
58
 
59
59
  return {
60
- fullConfig: config,
60
+ fullConfig: ctx.config,
61
61
  componentConfig,
62
- componentName,
63
- environment: await getEnvironment(config, componentName, env, commitInfo),
64
- commitInfo,
65
- packageManagerInfo,
62
+ componentName: ctx.componentName,
63
+ environment: await getEnvironment(ctx),
64
+ packageManagerInfo: ctx.packageManagerInfo,
65
+ pipelineType: ctx.pipelineType,
66
+ trigger: ctx.trigger,
66
67
  };
67
68
  };
@@ -1,21 +1,35 @@
1
1
  import { merge } from "lodash";
2
- import replaceAsync from "string-replace-async";
3
2
 
3
+ import type { BashExpression } from "../bash/BashExpression";
4
+ import replaceAsync from "../bash/replaceAsync";
5
+ import type { UnspecifiedEnvVars } from "..";
6
+
7
+ // regex to resolve references in catladder variables
8
+ // those expressions have the pattern ${componentName:variableName}
4
9
  const REGEX = /\$\{(([^:}]+):)?([^}]+)}/gm;
5
10
 
6
11
  export const resolveReferences = async (
7
- vars: Record<string, string>,
12
+ vars: Record<string, string | BashExpression | undefined | null>,
8
13
  getOtherVariables?: (
9
14
  componentName: string,
10
- alreadyVisited: Record<string, Record<string, boolean>>
11
- ) => Promise<Record<string, 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
  ) => {
19
+ /**
20
+ *
21
+ * replace referenced variables with their values in a value string
22
+ */
14
23
  const replaceSingleValue = async (
15
- value: string,
16
- alreadyVisited: Record<string, Record<string, boolean>> = alreadyVisitedBase
17
- ): Promise<string> => {
18
- if (REGEX.test(value)) {
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
+
19
33
  return await replaceAsync(
20
34
  value,
21
35
  REGEX,
@@ -30,7 +44,7 @@ export const resolveReferences = async (
30
44
  });
31
45
  const result = componentName
32
46
  ? (await getOtherVariables?.(componentName, newAlreadyVisited).then(
33
- (r) => r?.[variableName]
47
+ (r) => r?.[variableName],
34
48
  )) ?? null
35
49
  : vars[variableName]; // is self reference
36
50
 
@@ -40,7 +54,7 @@ export const resolveReferences = async (
40
54
  : match;
41
55
 
42
56
  return replaced;
43
- }
57
+ },
44
58
  );
45
59
  } else {
46
60
  return value;
@@ -50,14 +64,23 @@ export const resolveReferences = async (
50
64
  return Object.fromEntries(
51
65
  await Promise.all(
52
66
  Object.entries(vars).map(async ([key, value]) => {
53
- return [key, await replaceSingleValue(value)];
54
- })
55
- )
56
- ) as Record<string, string>;
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>;
57
80
  };
58
81
 
59
82
  export const translateLegacyFromComponents = (
60
- fromComponents: Record<string, Record<string, string>>
83
+ fromComponents: Record<string, Record<string, string>>,
61
84
  ) => {
62
85
  return Object.fromEntries(
63
86
  Object.entries(fromComponents).flatMap(([componentName, variables]) => {
@@ -65,6 +88,6 @@ export const translateLegacyFromComponents = (
65
88
  ourName,
66
89
  "${" + componentName + ":" + otherName + "}",
67
90
  ]);
68
- })
91
+ }),
69
92
  );
70
93
  };
@@ -1,4 +1,4 @@
1
- import type { EnvironmentEnvVars } from "..";
1
+ import type { SecretEnvVar, UnspecifiedEnvVars } from "..";
2
2
  import type { EnvVars } from "../types/config";
3
3
  import {
4
4
  makeSecretEnvVarMapping,
@@ -16,8 +16,11 @@ import {
16
16
  export const transformJobOnlyVars = async (
17
17
  env: string,
18
18
  componentName: string,
19
- vars: EnvVars | null
20
- ): Promise<EnvironmentEnvVars> => {
19
+ vars: EnvVars | null,
20
+ ): Promise<{
21
+ envVars: UnspecifiedEnvVars;
22
+ secretEnvVarKeys: SecretEnvVar[];
23
+ }> => {
21
24
  if (!vars) {
22
25
  return {
23
26
  envVars: {},
@@ -1,13 +1,14 @@
1
1
  import { isObject } from "lodash";
2
2
  import type { SecretEnvVar } from "../getEnvironmentVariables";
3
3
  import { getSecretVarName } from "../getEnvironmentVariables";
4
+ import { getBashVariable } from "../../bash/BashExpression";
4
5
 
5
6
  export const stringifyValues = (obj: Record<string, unknown>) =>
6
7
  Object.fromEntries(
7
8
  Object.entries(obj).map(([key, value]) => [
8
9
  key,
9
10
  isObject(value) ? JSON.stringify(value) : `${value}`,
10
- ])
11
+ ]),
11
12
  );
12
13
 
13
14
  export const stringListToSecreteEnvVarList = (keys: string[]): SecretEnvVar[] =>
@@ -15,12 +16,12 @@ export const stringListToSecreteEnvVarList = (keys: string[]): SecretEnvVar[] =>
15
16
  export const makeSecretEnvVarMapping = (
16
17
  env: string,
17
18
  componentName: string,
18
- secretEnvVars: SecretEnvVar[]
19
+ secretEnvVars: SecretEnvVar[],
19
20
  ) => {
20
21
  return Object.fromEntries(
21
22
  secretEnvVars.map(({ key }) => [
22
23
  key,
23
- `$${getSecretVarName(env, componentName, key)}`,
24
- ])
24
+ getBashVariable(getSecretVarName(env, componentName, key)),
25
+ ]),
25
26
  );
26
27
  };