@catladder/pipeline 1.144.0 → 1.145.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 (307) 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 +41 -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 +9 -2
  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 +3 -2
  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/custom-deploy.ts +7 -7
  226. package/examples/multiline-var.ts +64 -0
  227. package/package.json +5 -8
  228. package/src/bash/BashExpression.ts +81 -0
  229. package/src/bash/bashExpressionPerPipelineType.ts +16 -0
  230. package/src/bash/bashYaml.ts +46 -0
  231. package/src/bash/getInjectVarsScript.ts +12 -0
  232. package/src/bash/replaceAsync.ts +50 -0
  233. package/src/build/base/createAppBuildJob.ts +6 -2
  234. package/src/build/base/writeBuildInfo.ts +1 -1
  235. package/src/build/base/writeDotEnv.ts +6 -1
  236. package/src/build/custom/buildJob.ts +2 -4
  237. package/src/build/custom/testJob.ts +3 -2
  238. package/src/build/docker.ts +15 -7
  239. package/src/build/node/buildJob.ts +1 -3
  240. package/src/build/node/testJob.ts +3 -2
  241. package/src/build/node/yarn.ts +9 -4
  242. package/src/build/rails/test.ts +2 -1
  243. package/src/build/types.ts +8 -1
  244. package/src/catladder-gitlab.ts +8 -55
  245. package/src/config/readConfig.ts +2 -3
  246. package/src/constants.ts +5 -2
  247. package/src/context/__tests__/resolveReferences.test.ts +11 -6
  248. package/src/context/getBuildInfoVariables.ts +40 -0
  249. package/src/context/getEnvironment.ts +7 -30
  250. package/src/context/getEnvironmentContext.ts +25 -29
  251. package/src/context/getEnvironmentVariables.ts +61 -36
  252. package/src/context/getReviewSlug.ts +27 -0
  253. package/src/context/index.ts +24 -23
  254. package/src/context/resolveReferences.ts +28 -8
  255. package/src/context/transformJobOnlyVars.ts +5 -2
  256. package/src/context/utils/envVars.ts +2 -1
  257. package/src/deploy/base/deploy.ts +20 -18
  258. package/src/deploy/base/rollback.ts +8 -10
  259. package/src/deploy/base/stop.ts +8 -9
  260. package/src/deploy/cloudRun/artifactsRegistry.ts +9 -4
  261. package/src/deploy/cloudRun/createJobs/cloudRunJobs.ts +12 -7
  262. package/src/deploy/cloudRun/createJobs/cloudRunServices.ts +3 -2
  263. package/src/deploy/cloudRun/createJobs/constants.ts +1 -0
  264. package/src/deploy/cloudRun/createJobs/getCloudRunDeployScripts.ts +20 -2
  265. package/src/deploy/cloudRun/createJobs/index.ts +17 -8
  266. package/src/deploy/cloudRun/index.ts +14 -6
  267. package/src/deploy/cloudRun/utils/createArgsString.ts +2 -1
  268. package/src/deploy/cloudRun/utils/database.ts +2 -2
  269. package/src/deploy/cloudRun/utils/jobName.ts +7 -2
  270. package/src/deploy/cloudSql/utils.ts +12 -9
  271. package/src/deploy/index.ts +2 -1
  272. package/src/deploy/kubernetes/cloudSql/index.ts +3 -2
  273. package/src/deploy/kubernetes/deployJob.ts +24 -10
  274. package/src/deploy/kubernetes/index.ts +15 -8
  275. package/src/deploy/kubernetes/kubeEnv.ts +8 -6
  276. package/src/deploy/kubernetes/kubeValues.ts +0 -1
  277. package/src/deploy/kubernetes/processSecretsAsFiles.ts +2 -1
  278. package/src/deploy/types/base.ts +6 -0
  279. package/src/deploy/types/googleCloudRun.ts +2 -0
  280. package/src/index.ts +2 -1
  281. package/src/packageInfos.ts +10 -0
  282. package/src/pipeline/createAllJobs.ts +24 -10
  283. package/src/pipeline/createChildPipeline.ts +19 -8
  284. package/src/pipeline/createJobsForComponent.ts +14 -22
  285. package/src/pipeline/createMainPipeline.ts +88 -0
  286. package/src/pipeline/generatePipelineFiles.ts +29 -0
  287. package/src/pipeline/gitlab/createGitlabJobs.ts +174 -51
  288. package/src/pipeline/gitlab/createGitlabPipeline.ts +16 -14
  289. package/src/pipeline/gitlab/getPipelineTriggerForGitlabChildPipeline.ts +46 -0
  290. package/src/pipeline/gitlab/gitlabReleaseJobs.ts +20 -0
  291. package/src/pipeline/index.ts +2 -0
  292. package/src/rules/index.ts +15 -9
  293. package/src/types/config.ts +11 -2
  294. package/src/types/context.ts +39 -26
  295. package/src/types/environmentContext.ts +12 -6
  296. package/src/types/gitlab-ci-yml.ts +0 -1
  297. package/src/types/gitlab-types.ts +5 -4
  298. package/src/types/jobs.ts +28 -3
  299. package/src/types/pipeline.ts +4 -0
  300. package/src/utils/writeFiles.ts +40 -0
  301. package/dist/deploy/cloudRun/createJobs/variables.d.ts +0 -5
  302. package/dist/deploy/cloudRun/createJobs/variables.js +0 -19
  303. package/dist/pipeline/commitInfo/getBuildId.d.ts +0 -6
  304. package/dist/pipeline/commitInfo/getCommitInfo.d.ts +0 -2
  305. package/src/deploy/cloudRun/createJobs/variables.ts +0 -21
  306. package/src/pipeline/commitInfo/getBuildId.ts +0 -17
  307. package/src/pipeline/commitInfo/getCommitInfo.ts +0 -15
@@ -1,6 +1,6 @@
1
1
  import { existsSync, readFileSync } from "fs";
2
2
  import { register } from "ts-node";
3
- import { load } from "js-yaml";
3
+ import { parse } from "yaml";
4
4
  import type { Config } from "../types";
5
5
 
6
6
  // allows us to load ts files
@@ -33,14 +33,13 @@ export const readConfigSync = (
33
33
  return {
34
34
  path: filePath,
35
35
  ext: found,
36
- // eslint-disable-next-line @typescript-eslint/no-var-requires
37
36
  config: requireUncached(filePath).default,
38
37
  };
39
38
  } else {
40
39
  return {
41
40
  path: filePath,
42
41
  ext: found,
43
- config: load(readFileSync(filePath, { encoding: "utf-8" })) as Config,
42
+ config: parse(readFileSync(filePath, { encoding: "utf-8" })) as Config,
44
43
  };
45
44
  }
46
45
  }
package/src/constants.ts CHANGED
@@ -1,2 +1,5 @@
1
- export const PIPELINE_IMAGE_TAG = process.env.INLINE_PIPELINE_IMAGE_TAG || "";
2
- export const DOCKER_REGISTRY = process.env.INLINE_DOCKER_REGISTRY || "";
1
+ export const PIPELINE_IMAGE_TAG =
2
+ process.env.INLINE_PIPELINE_IMAGE_TAG || "latest";
3
+ export const DOCKER_REGISTRY =
4
+ process.env.INLINE_DOCKER_REGISTRY ||
5
+ "git.panter.ch:5001/catladder/catladder";
@@ -1,8 +1,13 @@
1
+ import type { BashExpression } from "../../bash/BashExpression";
1
2
  import {
2
3
  resolveReferences,
3
4
  translateLegacyFromComponents,
4
5
  } from "../resolveReferences";
5
6
 
7
+ const unpackBashExpressions = (obj: Record<string, string | BashExpression>) =>
8
+ Object.fromEntries(
9
+ Object.entries(obj).map(([key, value]) => [key, value.toString()])
10
+ );
6
11
  describe("resolveReferences", () => {
7
12
  it("replaces occurences of ${componentName:VARIABLE_NAME}", async () => {
8
13
  const variables = {
@@ -21,7 +26,7 @@ describe("resolveReferences", () => {
21
26
  return otherVariables[componentName];
22
27
  });
23
28
 
24
- expect(result).toEqual({
29
+ expect(unpackBashExpressions(result)).toEqual({
25
30
  a: "hello world",
26
31
  b: "a replaced value looks like this: 'foo from api', nice!",
27
32
  });
@@ -34,7 +39,7 @@ describe("resolveReferences", () => {
34
39
  };
35
40
  const result = await resolveReferences(variables);
36
41
 
37
- expect(result).toEqual({
42
+ expect(unpackBashExpressions(result)).toEqual({
38
43
  FOO: "hello world",
39
44
  BAR: "this: hello world!",
40
45
  });
@@ -54,7 +59,7 @@ describe("resolveReferences", () => {
54
59
  return otherVariables[componentName];
55
60
  });
56
61
 
57
- expect(result).toEqual({
62
+ expect(unpackBashExpressions(result)).toEqual({
58
63
  FOO: "hello from foo from api",
59
64
  BAR: "this: hello from foo from api!",
60
65
  });
@@ -70,7 +75,7 @@ describe("resolveReferences", () => {
70
75
  return otherVariables[componentName];
71
76
  });
72
77
 
73
- expect(result).toEqual({
78
+ expect(unpackBashExpressions(result)).toEqual({
74
79
  a: "hello world",
75
80
  b: "a not found value looks like this: '${api:FOO}'",
76
81
  });
@@ -92,7 +97,7 @@ describe("resolveReferences", () => {
92
97
  return otherVariables[componentName];
93
98
  });
94
99
 
95
- expect(result).toEqual({
100
+ expect(unpackBashExpressions(result)).toEqual({
96
101
  a: "value is hi, foo from api!",
97
102
  });
98
103
  });
@@ -113,7 +118,7 @@ describe("resolveReferences", () => {
113
118
  return otherVariables[componentName];
114
119
  });
115
120
 
116
- expect(result).toEqual({
121
+ expect(unpackBashExpressions(result)).toEqual({
117
122
  a: "value is frontend api ${frontend:FOO}!",
118
123
  });
119
124
  });
@@ -0,0 +1,40 @@
1
+ import { BashExpression } from "../bash/BashExpression";
2
+ import type { BashExpressionPerPipelineType } from "../bash/bashExpressionPerPipelineType";
3
+ import { getBashExpressionPerPipelineType } from "../bash/bashExpressionPerPipelineType";
4
+ import type { EnvironmentContext } from "../types/environmentContext";
5
+
6
+ const BUILD_TIME: BashExpressionPerPipelineType = {
7
+ default: "unknown-build-time",
8
+ gitlab: new BashExpression(`$CI_JOB_STARTED_AT`),
9
+ };
10
+
11
+ const BUILD_ID: BashExpressionPerPipelineType = {
12
+ default: new BashExpression(
13
+ `$(git describe --tags 2>/dev/null || git rev-parse HEAD)`
14
+ ),
15
+ };
16
+ const CURRENT_VERSION: BashExpressionPerPipelineType = {
17
+ default: new BashExpression(
18
+ // because we do shallow fetch, we need to ask the origin
19
+ `$(tag=$(git ls-remote origin "refs/tags/v*[0-9]" 2>/dev/null | cut -f 2- | sort -V | tail -1 | sed 's/refs\\/tags\\///'); [ -z "$tag" ] && echo "v0.0.0" || echo "$tag")`
20
+ ),
21
+ };
22
+
23
+ export const getBuildInfoVariables = (ctx: EnvironmentContext<any, any>) => {
24
+ const { pipelineType } = ctx;
25
+
26
+ return {
27
+ BUILD_INFO_BUILD_ID: getBashExpressionPerPipelineType(
28
+ BUILD_ID,
29
+ pipelineType
30
+ ),
31
+ BUILD_INFO_BUILD_TIME: getBashExpressionPerPipelineType(
32
+ BUILD_TIME,
33
+ pipelineType
34
+ ),
35
+ BUILD_INFO_CURRENT_VERSION: getBashExpressionPerPipelineType(
36
+ CURRENT_VERSION,
37
+ pipelineType
38
+ ),
39
+ };
40
+ };
@@ -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,
55
+ ctx: CreateContextContext,
32
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(),
@@ -72,10 +91,12 @@ export const getEnvironmentVariables = async (
72
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
  }
@@ -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,
154
+ {
155
+ ...ctx,
156
+ componentName: otherComponentName,
157
+ },
135
158
  alreadyVisited
136
159
  );
137
160
  return otherEnvVars;
138
161
  },
139
162
  alreadyVisited
140
- );
163
+ )) as typeof envVarsRaw;
141
164
 
142
165
  return {
143
166
  envVars,
@@ -168,7 +191,9 @@ export const getSecretVarName = (
168
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
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: {},
@@ -57,11 +57,12 @@ export const createContext = async (
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,32 @@
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
15
  alreadyVisited: Record<string, Record<string, boolean>>
11
- ) => Promise<Record<string, string | null>>,
16
+ ) => Promise<UnspecifiedEnvVars>,
12
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,
24
+ value: string | BashExpression,
16
25
  alreadyVisited: Record<string, Record<string, boolean>> = alreadyVisitedBase
17
- ): Promise<string> => {
18
- if (REGEX.test(value)) {
26
+ ): Promise<string | BashExpression> => {
27
+ if (REGEX.test(value.toString())) {
28
+ // we consider variables that got references in it BashExpressions, because the replacement may be one
29
+
19
30
  return await replaceAsync(
20
31
  value,
21
32
  REGEX,
@@ -50,10 +61,19 @@ export const resolveReferences = async (
50
61
  return Object.fromEntries(
51
62
  await Promise.all(
52
63
  Object.entries(vars).map(async ([key, value]) => {
53
- return [key, await replaceSingleValue(value)];
64
+ if (value === null || value === undefined) {
65
+ return [key, null];
66
+ }
67
+
68
+ return [
69
+ key,
70
+ value !== null && value !== undefined
71
+ ? await replaceSingleValue(value)
72
+ : null,
73
+ ];
54
74
  })
55
75
  )
56
- ) as Record<string, string>;
76
+ ) as Record<string, BashExpression>;
57
77
  };
58
78
 
59
79
  export const translateLegacyFromComponents = (
@@ -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,
@@ -17,7 +17,10 @@ export const transformJobOnlyVars = async (
17
17
  env: string,
18
18
  componentName: string,
19
19
  vars: EnvVars | null
20
- ): Promise<EnvironmentEnvVars> => {
20
+ ): Promise<{
21
+ envVars: UnspecifiedEnvVars;
22
+ secretEnvVarKeys: SecretEnvVar[];
23
+ }> => {
21
24
  if (!vars) {
22
25
  return {
23
26
  envVars: {},
@@ -1,6 +1,7 @@
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(
@@ -20,7 +21,7 @@ export const makeSecretEnvVarMapping = (
20
21
  return Object.fromEntries(
21
22
  secretEnvVars.map(({ key }) => [
22
23
  key,
23
- `$${getSecretVarName(env, componentName, key)}`,
24
+ getBashVariable(getSecretVarName(env, componentName, key)),
24
25
  ])
25
26
  );
26
27
  };