@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.
- package/dist/bash/BashExpression.d.ts +40 -0
- package/dist/bash/BashExpression.js +124 -0
- package/dist/bash/bashExpressionPerPipelineType.d.ts +6 -0
- package/dist/bash/bashExpressionPerPipelineType.js +11 -0
- package/dist/bash/bashYaml.d.ts +10 -0
- package/dist/bash/bashYaml.js +46 -0
- package/dist/bash/getInjectVarsScript.d.ts +2 -0
- package/dist/bash/getInjectVarsScript.js +45 -0
- package/dist/bash/replaceAsync.d.ts +2 -0
- package/dist/{pipeline/commitInfo/getCommitInfo.js → bash/replaceAsync.js} +49 -21
- package/dist/build/base/__tests__/createArtifactsConfig.test.js +3 -1
- package/dist/build/base/constants.js +3 -1
- package/dist/build/base/createAppBuildJob.d.ts +2 -1
- package/dist/build/base/createAppBuildJob.js +10 -6
- package/dist/build/base/createArtifactsConfig.d.ts +1 -1
- package/dist/build/base/createArtifactsConfig.js +3 -1
- package/dist/build/base/index.js +3 -1
- package/dist/build/base/writeBuildInfo.js +4 -3
- package/dist/build/base/writeDotEnv.js +12 -3
- package/dist/build/custom/__tests__/testJob.test.js +3 -1
- package/dist/build/custom/buildJob.js +4 -12
- package/dist/build/custom/index.js +3 -1
- package/dist/build/custom/testJob.d.ts +1 -1
- package/dist/build/custom/testJob.js +18 -14
- package/dist/build/docker.d.ts +5 -31
- package/dist/build/docker.js +16 -9
- package/dist/build/index.d.ts +1 -1
- package/dist/build/index.js +13 -7
- package/dist/build/node/buildJob.js +4 -12
- package/dist/build/node/cache.js +6 -3
- package/dist/build/node/constants.js +3 -1
- package/dist/build/node/index.js +3 -1
- package/dist/build/node/meteor.js +5 -2
- package/dist/build/node/testJob.js +18 -14
- package/dist/build/node/yarn.d.ts +3 -2
- package/dist/build/node/yarn.js +6 -3
- package/dist/build/rails/build.js +3 -1
- package/dist/build/rails/index.js +3 -1
- package/dist/build/rails/test.js +15 -11
- package/dist/build/sbom.js +3 -1
- package/dist/build/types.d.ts +24 -18
- package/dist/build/types.js +3 -1
- package/dist/bundles/catladder-gitlab/index.js +3 -3
- package/dist/catladder-gitlab.js +10 -54
- package/dist/config/__tests__/configruedEnvs.test.js +3 -1
- package/dist/config/configruedEnvs.js +3 -1
- package/dist/config/index.js +13 -7
- package/dist/config/readConfig.js +6 -5
- package/dist/constants.js +5 -3
- package/dist/context/__tests__/resolveReferences.test.js +40 -8
- package/dist/context/getBuildInfoVariables.d.ts +7 -0
- package/dist/context/getBuildInfoVariables.js +29 -0
- package/dist/context/getEnvConfig.js +3 -1
- package/dist/context/getEnvType.js +3 -1
- package/dist/context/getEnvironment.d.ts +3 -3
- package/dist/context/getEnvironment.js +10 -14
- package/dist/context/getEnvironmentContext.d.ts +7 -3
- package/dist/context/getEnvironmentContext.js +21 -11
- package/dist/context/getEnvironmentVariables.d.ts +26 -5
- package/dist/context/getEnvironmentVariables.js +40 -25
- package/dist/context/getLabels.js +4 -2
- package/dist/context/getReviewSlug.d.ts +4 -0
- package/dist/context/getReviewSlug.js +22 -0
- package/dist/context/index.d.ts +12 -3
- package/dist/context/index.js +21 -15
- package/dist/context/resolveReferences.d.ts +3 -1
- package/dist/context/resolveReferences.js +53 -21
- package/dist/context/transformJobOnlyVars.d.ts +5 -2
- package/dist/context/transformJobOnlyVars.js +4 -2
- package/dist/context/utils/envVars.d.ts +1 -1
- package/dist/context/utils/envVars.js +5 -2
- package/dist/defaults/index.js +3 -1
- package/dist/deploy/base/deploy.d.ts +1 -1
- package/dist/deploy/base/deploy.js +12 -11
- package/dist/deploy/base/index.js +3 -1
- package/dist/deploy/base/rollback.d.ts +1 -1
- package/dist/deploy/base/rollback.js +13 -9
- package/dist/deploy/base/stop.d.ts +1 -1
- package/dist/deploy/base/stop.js +16 -11
- package/dist/deploy/base/types.d.ts +1 -1
- package/dist/deploy/base/types.js +3 -1
- package/dist/deploy/base/variables.js +3 -1
- package/dist/deploy/cloudRun/artifactsRegistry.d.ts +2 -1
- package/dist/deploy/cloudRun/artifactsRegistry.js +6 -4
- package/dist/deploy/cloudRun/cleanup.js +3 -1
- package/dist/deploy/cloudRun/cloudRunRevisions.js +3 -1
- package/dist/deploy/cloudRun/createJobs/cloudRunJobs.js +8 -5
- package/dist/deploy/cloudRun/createJobs/cloudRunServices.d.ts +2 -2
- package/dist/deploy/cloudRun/createJobs/cloudRunServices.js +6 -3
- package/dist/deploy/cloudRun/createJobs/common.d.ts +3 -3
- package/dist/deploy/cloudRun/createJobs/common.js +3 -1
- package/dist/deploy/cloudRun/createJobs/constants.d.ts +1 -0
- package/dist/deploy/cloudRun/createJobs/constants.js +7 -0
- package/dist/deploy/cloudRun/createJobs/getCloudRunDeployScripts.js +10 -4
- package/dist/deploy/cloudRun/createJobs/getCloudRunStopScripts.js +3 -1
- package/dist/deploy/cloudRun/createJobs/index.js +25 -8
- package/dist/deploy/cloudRun/createJobs/volumes.js +3 -1
- package/dist/deploy/cloudRun/index.js +5 -3
- package/dist/deploy/cloudRun/utils/createArgsString.d.ts +2 -1
- package/dist/deploy/cloudRun/utils/createArgsString.js +3 -1
- package/dist/deploy/cloudRun/utils/database.js +13 -13
- package/dist/deploy/cloudRun/utils/gcloudServiceAccountLoginCommands.js +3 -1
- package/dist/deploy/cloudRun/utils/getServiceName.d.ts +1 -1
- package/dist/deploy/cloudRun/utils/getServiceName.js +3 -1
- package/dist/deploy/cloudRun/utils/jobName.d.ts +2 -1
- package/dist/deploy/cloudRun/utils/jobName.js +4 -2
- package/dist/deploy/cloudRun/utils/removeFirstLinesFromCommandOutput.js +3 -1
- package/dist/deploy/cloudSql/utils.d.ts +2 -1
- package/dist/deploy/cloudSql/utils.js +7 -2
- package/dist/deploy/custom/deployJob.js +3 -1
- package/dist/deploy/custom/index.js +3 -1
- package/dist/deploy/dockerTag/deployJob.js +3 -1
- package/dist/deploy/dockerTag/index.js +3 -1
- package/dist/deploy/index.d.ts +4 -3
- package/dist/deploy/index.js +13 -7
- package/dist/deploy/kubernetes/additionalSecretKeys.js +3 -1
- package/dist/deploy/kubernetes/cloudSql/index.d.ts +3 -2
- package/dist/deploy/kubernetes/cloudSql/index.js +6 -4
- package/dist/deploy/kubernetes/deployJob.js +22 -15
- package/dist/deploy/kubernetes/index.js +51 -14
- package/dist/deploy/kubernetes/kubeEnv.d.ts +3 -2
- package/dist/deploy/kubernetes/kubeEnv.js +7 -4
- package/dist/deploy/kubernetes/kubeValues.d.ts +2 -2
- package/dist/deploy/kubernetes/kubeValues.js +4 -5
- package/dist/deploy/kubernetes/mongodb.js +3 -1
- package/dist/deploy/kubernetes/processSecretsAsFiles.d.ts +2 -1
- package/dist/deploy/kubernetes/processSecretsAsFiles.js +3 -1
- package/dist/deploy/sbom.js +3 -1
- package/dist/deploy/types/base.d.ts +8 -2
- package/dist/deploy/types/base.js +3 -1
- package/dist/deploy/types/custom.d.ts +1 -1
- package/dist/deploy/types/custom.js +3 -1
- package/dist/deploy/types/dockerTag.d.ts +1 -1
- package/dist/deploy/types/dockerTag.js +3 -1
- package/dist/deploy/types/googleCloudRun.d.ts +19 -18
- package/dist/deploy/types/googleCloudRun.js +3 -1
- package/dist/deploy/types/index.d.ts +6 -6
- package/dist/deploy/types/index.js +13 -7
- package/dist/deploy/types/kubernetes.d.ts +22 -22
- package/dist/deploy/types/kubernetes.js +3 -1
- package/dist/deploy/utils.js +3 -1
- package/dist/index.d.ts +3 -2
- package/dist/index.js +16 -9
- package/dist/packageInfos.d.ts +2 -0
- package/dist/packageInfos.js +14 -0
- package/dist/pipeline/createAllJobs.d.ts +13 -5
- package/dist/pipeline/createAllJobs.js +21 -10
- package/dist/pipeline/createChildPipeline.d.ts +1 -1
- package/dist/pipeline/createChildPipeline.js +24 -7
- package/dist/pipeline/createJobsForComponent.d.ts +3 -3
- package/dist/pipeline/createJobsForComponent.js +19 -18
- package/dist/pipeline/createMainPipeline.d.ts +3 -0
- package/dist/pipeline/createMainPipeline.js +248 -0
- package/dist/pipeline/generatePipelineFiles.d.ts +2 -0
- package/dist/pipeline/generatePipelineFiles.js +178 -0
- package/dist/pipeline/getPipelineStages.js +3 -1
- package/dist/pipeline/gitlab/createGitlabJobs.d.ts +15 -5
- package/dist/pipeline/gitlab/createGitlabJobs.js +98 -25
- package/dist/pipeline/gitlab/createGitlabPipeline.d.ts +7 -2
- package/dist/pipeline/gitlab/createGitlabPipeline.js +34 -17
- package/dist/pipeline/gitlab/getPipelineTriggerForGitlabChildPipeline.d.ts +1 -0
- package/dist/pipeline/gitlab/getPipelineTriggerForGitlabChildPipeline.js +29 -0
- package/dist/pipeline/gitlab/gitlabReleaseJobs.d.ts +33 -0
- package/dist/pipeline/gitlab/gitlabReleaseJobs.js +24 -0
- package/dist/pipeline/index.d.ts +3 -1
- package/dist/pipeline/index.js +16 -8
- package/dist/pipeline/packageManager.js +4 -2
- package/dist/pipeline/yarn/yarnUtils.js +6 -4
- package/dist/rules/index.d.ts +4 -1
- package/dist/rules/index.js +25 -18
- package/dist/runner/index.d.ts +1 -1
- package/dist/runner/index.js +3 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/types/config.d.ts +18 -15
- package/dist/types/config.js +5 -2
- package/dist/types/context.d.ts +37 -32
- package/dist/types/context.js +3 -1
- package/dist/types/environmentContext.d.ts +11 -7
- package/dist/types/environmentContext.js +3 -1
- package/dist/types/gitlab-ci-yml.d.ts +30 -30
- package/dist/types/gitlab-ci-yml.js +3 -2
- package/dist/types/gitlab-types.d.ts +4 -6
- package/dist/types/gitlab-types.js +3 -1
- package/dist/types/index.js +13 -7
- package/dist/types/jobs.d.ts +23 -6
- package/dist/types/jobs.js +3 -1
- package/dist/types/pipeline.d.ts +4 -3
- package/dist/types/pipeline.js +3 -1
- package/dist/types/utils.d.ts +1 -1
- package/dist/types/utils.js +3 -1
- package/dist/utils/gitlab.js +3 -1
- package/dist/utils/index.d.ts +1 -1
- package/dist/utils/index.js +3 -1
- package/dist/utils/writeFiles.d.ts +7 -0
- package/dist/{pipeline/commitInfo/getBuildId.js → utils/writeFiles.js} +39 -22
- package/examples/__snapshots__/cloud-run-memory-limit.ts.snap +480 -384
- package/examples/__snapshots__/cloud-run-meteor-with-worker.ts.snap +462 -366
- package/examples/__snapshots__/cloud-run-no-cpu-throttling.ts.snap +480 -384
- package/examples/__snapshots__/cloud-run-no-service.ts.snap +501 -393
- package/examples/__snapshots__/cloud-run-non-public.ts.snap +480 -384
- package/examples/__snapshots__/cloud-run-post-stop-job.ts.snap +489 -392
- package/examples/__snapshots__/cloud-run-service-gen2.ts.snap +480 -384
- package/examples/__snapshots__/cloud-run-service-with-volumes.ts.snap +501 -401
- package/examples/__snapshots__/cloud-run-with-sql-reuse-db.ts.snap +1155 -915
- package/examples/__snapshots__/cloud-run-with-sql.ts.snap +1116 -888
- package/examples/__snapshots__/cloud-run-with-worker.ts.snap +482 -386
- package/examples/__snapshots__/custom-build-job-with-tests.ts.snap +452 -356
- package/examples/__snapshots__/custom-build-job.ts.snap +434 -350
- package/examples/__snapshots__/custom-deploy.ts.snap +319 -223
- package/examples/__snapshots__/custom-envs.ts.snap +123 -81
- package/examples/__snapshots__/custom-sbom-java.ts.snap +434 -350
- package/examples/__snapshots__/kubernetes-application-customization.ts.snap +846 -969
- package/examples/__snapshots__/kubernetes-with-cloud-sql-legacy.ts.snap +886 -957
- package/examples/__snapshots__/kubernetes-with-cloud-sql.ts.snap +894 -969
- package/examples/__snapshots__/kubernetes-with-jobs.ts.snap +1626 -1728
- package/examples/__snapshots__/kubernetes-with-mongodb.ts.snap +974 -1137
- package/examples/__snapshots__/local-dot-env.ts.snap +480 -384
- package/examples/__snapshots__/meteor-kubernetes.ts.snap +906 -1069
- package/examples/__snapshots__/multiline-var.ts.snap +4500 -0
- package/examples/__snapshots__/native-app.ts.snap +706 -578
- package/examples/__snapshots__/node-build-with-custom-image.ts.snap +480 -384
- package/examples/__snapshots__/node-build-with-docker-additions.ts.snap +488 -384
- package/examples/__snapshots__/rails-k8s-with-worker.ts.snap +1656 -1942
- package/examples/__snapshots__/wait-for-other-deploy.ts.snap +287 -231
- package/examples/__utils__/helpers.ts +2 -2
- package/examples/custom-deploy.ts +7 -7
- package/examples/multiline-var.ts +64 -0
- package/package.json +5 -8
- package/scripts/generate-gitlab-ci-types.ts +2 -2
- package/src/bash/BashExpression.ts +81 -0
- package/src/bash/bashExpressionPerPipelineType.ts +16 -0
- package/src/bash/bashYaml.ts +46 -0
- package/src/bash/getInjectVarsScript.ts +12 -0
- package/src/bash/replaceAsync.ts +50 -0
- package/src/build/base/__tests__/createArtifactsConfig.test.ts +3 -3
- package/src/build/base/createAppBuildJob.ts +8 -4
- package/src/build/base/createArtifactsConfig.ts +2 -2
- package/src/build/base/index.ts +1 -1
- package/src/build/base/writeBuildInfo.ts +1 -1
- package/src/build/base/writeDotEnv.ts +6 -1
- package/src/build/custom/__tests__/testJob.test.ts +1 -1
- package/src/build/custom/buildJob.ts +4 -6
- package/src/build/custom/testJob.ts +6 -5
- package/src/build/docker.ts +21 -13
- package/src/build/index.ts +1 -1
- package/src/build/node/buildJob.ts +3 -5
- package/src/build/node/cache.ts +4 -4
- package/src/build/node/meteor.ts +1 -1
- package/src/build/node/testJob.ts +6 -5
- package/src/build/node/yarn.ts +14 -9
- package/src/build/rails/test.ts +2 -1
- package/src/build/types.ts +8 -1
- package/src/catladder-gitlab.ts +8 -55
- package/src/config/configruedEnvs.ts +6 -6
- package/src/config/readConfig.ts +4 -5
- package/src/constants.ts +5 -2
- package/src/context/__tests__/resolveReferences.test.ts +11 -6
- package/src/context/getBuildInfoVariables.ts +40 -0
- package/src/context/getEnvConfig.ts +1 -1
- package/src/context/getEnvType.ts +1 -1
- package/src/context/getEnvironment.ts +7 -30
- package/src/context/getEnvironmentContext.ts +25 -29
- package/src/context/getEnvironmentVariables.ts +72 -47
- package/src/context/getReviewSlug.ts +27 -0
- package/src/context/index.ts +26 -25
- package/src/context/resolveReferences.ts +40 -17
- package/src/context/transformJobOnlyVars.ts +6 -3
- package/src/context/utils/envVars.ts +5 -4
- package/src/deploy/base/deploy.ts +25 -23
- package/src/deploy/base/index.ts +1 -1
- package/src/deploy/base/rollback.ts +9 -11
- package/src/deploy/base/stop.ts +9 -10
- package/src/deploy/cloudRun/artifactsRegistry.ts +13 -8
- package/src/deploy/cloudRun/cleanup.ts +3 -3
- package/src/deploy/cloudRun/cloudRunRevisions.ts +3 -3
- package/src/deploy/cloudRun/createJobs/cloudRunJobs.ts +22 -17
- package/src/deploy/cloudRun/createJobs/cloudRunServices.ts +7 -6
- package/src/deploy/cloudRun/createJobs/common.ts +1 -1
- package/src/deploy/cloudRun/createJobs/constants.ts +1 -0
- package/src/deploy/cloudRun/createJobs/getCloudRunDeployScripts.ts +25 -7
- package/src/deploy/cloudRun/createJobs/getCloudRunStopScripts.ts +1 -1
- package/src/deploy/cloudRun/createJobs/index.ts +18 -9
- package/src/deploy/cloudRun/createJobs/volumes.ts +2 -2
- package/src/deploy/cloudRun/index.ts +22 -10
- package/src/deploy/cloudRun/utils/createArgsString.ts +3 -2
- package/src/deploy/cloudRun/utils/database.ts +7 -7
- package/src/deploy/cloudRun/utils/gcloudServiceAccountLoginCommands.ts +1 -1
- package/src/deploy/cloudRun/utils/jobName.ts +7 -2
- package/src/deploy/cloudRun/utils/removeFirstLinesFromCommandOutput.ts +1 -1
- package/src/deploy/cloudSql/utils.ts +13 -10
- package/src/deploy/index.ts +5 -4
- package/src/deploy/kubernetes/cloudSql/index.ts +6 -5
- package/src/deploy/kubernetes/deployJob.ts +28 -14
- package/src/deploy/kubernetes/index.ts +15 -8
- package/src/deploy/kubernetes/kubeEnv.ts +9 -7
- package/src/deploy/kubernetes/kubeValues.ts +5 -6
- package/src/deploy/kubernetes/mongodb.ts +1 -1
- package/src/deploy/kubernetes/processSecretsAsFiles.ts +5 -4
- package/src/deploy/types/base.ts +6 -0
- package/src/deploy/types/googleCloudRun.ts +2 -0
- package/src/deploy/utils.ts +2 -2
- package/src/index.ts +2 -1
- package/src/packageInfos.ts +10 -0
- package/src/pipeline/createAllJobs.ts +28 -14
- package/src/pipeline/createChildPipeline.ts +20 -9
- package/src/pipeline/createJobsForComponent.ts +15 -23
- package/src/pipeline/createMainPipeline.ts +91 -0
- package/src/pipeline/generatePipelineFiles.ts +29 -0
- package/src/pipeline/getPipelineStages.ts +1 -1
- package/src/pipeline/gitlab/createGitlabJobs.ts +182 -59
- package/src/pipeline/gitlab/createGitlabPipeline.ts +16 -14
- package/src/pipeline/gitlab/getPipelineTriggerForGitlabChildPipeline.ts +46 -0
- package/src/pipeline/gitlab/gitlabReleaseJobs.ts +20 -0
- package/src/pipeline/index.ts +2 -0
- package/src/pipeline/packageManager.ts +2 -2
- package/src/pipeline/yarn/yarnUtils.ts +7 -7
- package/src/rules/index.ts +15 -9
- package/src/types/config.ts +12 -3
- package/src/types/context.ts +39 -26
- package/src/types/environmentContext.ts +13 -7
- package/src/types/gitlab-ci-yml.ts +0 -1
- package/src/types/gitlab-types.ts +5 -4
- package/src/types/jobs.ts +29 -4
- package/src/types/pipeline.ts +4 -0
- package/src/types/utils.ts +4 -4
- package/src/utils/gitlab.ts +1 -1
- package/src/utils/index.ts +2 -2
- package/src/utils/writeFiles.ts +40 -0
- package/dist/deploy/cloudRun/createJobs/variables.d.ts +0 -5
- package/dist/deploy/cloudRun/createJobs/variables.js +0 -19
- package/dist/pipeline/commitInfo/getBuildId.d.ts +0 -6
- package/dist/pipeline/commitInfo/getCommitInfo.d.ts +0 -2
- package/src/deploy/cloudRun/createJobs/variables.ts +0 -21
- package/src/pipeline/commitInfo/getBuildId.ts +0 -17
- package/src/pipeline/commitInfo/getCommitInfo.ts +0 -15
|
@@ -1,47 +1,24 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import type { Config } from "../types/config";
|
|
1
|
+
import type { CreateContextContext } from "..";
|
|
3
2
|
|
|
4
|
-
import type {
|
|
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
|
-
|
|
10
|
-
componentName: string,
|
|
11
|
-
env: string,
|
|
12
|
-
commitInfo?: CommitInfo
|
|
8
|
+
ctx: CreateContextContext,
|
|
13
9
|
): Promise<Environment> => {
|
|
14
|
-
const
|
|
15
|
-
|
|
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 {
|
|
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
|
-
|
|
12
|
-
) => {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
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
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
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 =
|
|
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 =
|
|
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
|
-
|
|
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 {
|
|
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
|
-
|
|
29
|
-
|
|
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
|
-
|
|
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:
|
|
54
|
-
let host:
|
|
55
|
-
let url:
|
|
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 =
|
|
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
|
-
|
|
88
|
-
|
|
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
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
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 =
|
|
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
|
+
};
|
package/src/context/index.ts
CHANGED
|
@@ -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 {
|
|
6
|
-
import type {
|
|
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
|
-
|
|
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
|
-
|
|
47
|
-
|
|
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(
|
|
64
|
-
|
|
65
|
-
|
|
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<
|
|
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<
|
|
17
|
-
|
|
18
|
-
|
|
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
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
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 {
|
|
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<
|
|
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
|
-
|
|
24
|
-
])
|
|
24
|
+
getBashVariable(getSecretVarName(env, componentName, key)),
|
|
25
|
+
]),
|
|
25
26
|
);
|
|
26
27
|
};
|