@catladder/pipeline 0.0.0-refactore-catenv-command-validates-argument-78d05852 → 0.0.0-reference-database-url-1befbbee
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/README.md +15 -1
- package/dist/bash/BashExpression.d.ts +36 -0
- package/dist/bash/BashExpression.js +114 -0
- package/dist/bash/bashEscape.d.ts +37 -0
- package/dist/bash/bashEscape.js +119 -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 +69 -0
- package/dist/bash/getInjectVarsScript.d.ts +2 -0
- package/dist/bash/getInjectVarsScript.js +47 -0
- package/dist/bash/index.d.ts +2 -0
- package/dist/bash/index.js +26 -0
- package/dist/build/artifacts/createBuildJobArtifact.d.ts +3 -0
- package/dist/build/artifacts/createBuildJobArtifact.js +97 -0
- package/dist/build/base/__tests__/createArtifactsConfig.test.js +3 -1
- package/dist/build/base/constants.js +4 -2
- package/dist/build/base/createAppBuildJob.d.ts +5 -3
- package/dist/build/base/createAppBuildJob.js +18 -15
- package/dist/build/base/createArtifactsConfig.d.ts +1 -1
- package/dist/build/base/createArtifactsConfig.js +3 -1
- package/dist/build/base/createBuildJobDefinition.d.ts +6 -0
- package/dist/build/base/createBuildJobDefinition.js +58 -0
- package/dist/build/base/index.d.ts +6 -4
- package/dist/build/base/index.js +17 -6
- package/dist/build/base/writeBuildInfo.d.ts +2 -2
- package/dist/build/base/writeBuildInfo.js +4 -3
- package/dist/build/base/writeDotEnv.d.ts +3 -2
- package/dist/build/base/writeDotEnv.js +30 -6
- package/dist/build/cache/createJobCache.d.ts +7 -0
- package/dist/build/cache/createJobCache.js +115 -0
- package/dist/build/cache/getAllCacheConfigsFromConfig.d.ts +3 -0
- package/dist/build/cache/getAllCacheConfigsFromConfig.js +64 -0
- package/dist/build/cache/transformLegacyJobCache.d.ts +3 -0
- package/dist/build/cache/transformLegacyJobCache.js +29 -0
- package/dist/build/custom/__tests__/testJob.test.js +15 -16
- package/dist/build/custom/buildJob.d.ts +2 -2
- package/dist/build/custom/buildJob.js +8 -66
- package/dist/build/custom/index.d.ts +2 -2
- package/dist/build/custom/index.js +3 -1
- package/dist/build/custom/testJob.d.ts +4 -4
- package/dist/build/custom/testJob.js +25 -20
- package/dist/build/docker.d.ts +37 -46
- package/dist/build/docker.js +65 -34
- package/dist/build/index.d.ts +14 -7
- package/dist/build/index.js +44 -17
- package/dist/build/node/buildJob.d.ts +8 -2
- package/dist/build/node/buildJob.js +39 -52
- package/dist/build/node/cache.d.ts +4 -5
- package/dist/build/node/cache.js +18 -24
- package/dist/build/node/constants.js +5 -3
- package/dist/build/node/index.d.ts +4 -4
- package/dist/build/node/index.js +3 -1
- package/dist/build/node/meteor.d.ts +2 -2
- package/dist/build/node/meteor.js +10 -12
- package/dist/build/node/testJob.d.ts +3 -2
- package/dist/build/node/testJob.js +29 -19
- package/dist/build/node/yarn.d.ts +4 -3
- package/dist/build/node/yarn.js +11 -12
- package/dist/build/rails/build.d.ts +2 -2
- package/dist/build/rails/build.js +13 -6
- package/dist/build/rails/index.d.ts +2 -2
- package/dist/build/rails/index.js +3 -1
- package/dist/build/rails/test.d.ts +2 -2
- package/dist/build/rails/test.js +30 -11
- package/dist/build/sbom.d.ts +2 -2
- package/dist/build/sbom.js +13 -7
- package/dist/build/types.d.ts +160 -47
- package/dist/build/types.js +10 -2
- package/dist/catladder-gitlab.js +129 -49
- package/dist/config/__tests__/configruedEnvs.test.js +3 -1
- package/dist/config/__tests__/getAllEnvs.test.js +79 -0
- package/dist/config/__tests__/getAllEnvsInAllComponents.test.d.ts +1 -0
- package/dist/config/__tests__/getAllEnvsInAllComponents.test.js +73 -0
- package/dist/config/configruedEnvs.js +3 -1
- package/dist/config/index.js +13 -7
- package/dist/config/readConfig.d.ts +2 -2
- package/dist/config/readConfig.js +191 -40
- package/dist/constants.js +5 -3
- package/dist/context/createAllComponentsContext.d.ts +12 -0
- package/dist/{pipeline/commitInfo/getCommitInfo.js → context/createAllComponentsContext.js} +35 -19
- package/dist/context/createComponentContext.d.ts +11 -0
- package/dist/context/createComponentContext.js +262 -0
- package/dist/context/createWorkspaceContext.d.ts +16 -0
- package/dist/context/createWorkspaceContext.js +173 -0
- package/dist/context/getBuildInfoVariables.d.ts +6 -0
- package/dist/context/getBuildInfoVariables.js +55 -0
- package/dist/context/getEnvConfig.js +21 -4
- package/dist/context/getEnvType.js +3 -1
- package/dist/context/getEnvironment.d.ts +3 -3
- package/dist/context/getEnvironment.js +11 -12
- package/dist/context/getEnvironmentContext.d.ts +7 -3
- package/dist/context/getEnvironmentContext.js +21 -11
- package/dist/context/getEnvironmentVariables.d.ts +22 -5
- package/dist/context/getEnvironmentVariables.js +79 -53
- package/dist/context/getLabels.d.ts +2 -2
- package/dist/context/getLabels.js +9 -7
- package/dist/context/getReviewSlug.d.ts +4 -0
- package/dist/context/getReviewSlug.js +21 -0
- package/dist/context/index.d.ts +2 -4
- package/dist/context/index.js +15 -162
- 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 +3 -3
- package/dist/deploy/base/deploy.js +37 -21
- package/dist/deploy/base/index.d.ts +3 -5
- package/dist/deploy/base/index.js +3 -1
- package/dist/deploy/base/rollback.d.ts +3 -3
- package/dist/deploy/base/rollback.js +13 -9
- package/dist/deploy/base/stop.d.ts +3 -3
- 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 +4 -2
- package/dist/deploy/cloudRun/artifactsRegistry.d.ts +8 -11
- package/dist/deploy/cloudRun/artifactsRegistry.js +15 -14
- package/dist/deploy/cloudRun/cleanup.d.ts +2 -2
- package/dist/deploy/cloudRun/cleanup.js +3 -1
- package/dist/deploy/cloudRun/cloudRunRevisions.d.ts +2 -2
- package/dist/deploy/cloudRun/cloudRunRevisions.js +7 -6
- package/dist/deploy/cloudRun/createJobs/cloudRunJobs.d.ts +8 -6
- package/dist/deploy/cloudRun/createJobs/cloudRunJobs.js +57 -106
- package/dist/deploy/cloudRun/createJobs/cloudRunServices.d.ts +3 -3
- package/dist/deploy/cloudRun/createJobs/cloudRunServices.js +79 -15
- package/dist/deploy/cloudRun/createJobs/common.d.ts +7 -7
- package/dist/deploy/cloudRun/createJobs/common.js +6 -3
- package/dist/deploy/cloudRun/createJobs/constants.d.ts +1 -0
- package/dist/deploy/cloudRun/createJobs/constants.js +7 -0
- package/dist/deploy/cloudRun/createJobs/execute/onDeploy.d.ts +3 -0
- package/dist/deploy/cloudRun/createJobs/execute/onDeploy.js +115 -0
- package/dist/deploy/cloudRun/createJobs/execute/schedules.d.ts +3 -0
- package/dist/deploy/cloudRun/createJobs/execute/schedules.js +173 -0
- package/dist/deploy/cloudRun/createJobs/getCloudRunDeployScripts.d.ts +2 -2
- package/dist/deploy/cloudRun/createJobs/getCloudRunDeployScripts.js +13 -5
- package/dist/deploy/cloudRun/createJobs/getCloudRunStopScripts.d.ts +2 -2
- package/dist/deploy/cloudRun/createJobs/getCloudRunStopScripts.js +7 -3
- package/dist/deploy/cloudRun/createJobs/healthCheck.d.ts +5 -0
- package/dist/deploy/cloudRun/createJobs/healthCheck.js +82 -0
- package/dist/deploy/cloudRun/createJobs/index.d.ts +2 -2
- package/dist/deploy/cloudRun/createJobs/index.js +26 -12
- package/dist/deploy/cloudRun/createJobs/volumes.d.ts +3 -0
- package/dist/deploy/cloudRun/createJobs/volumes.js +58 -0
- package/dist/deploy/cloudRun/index.d.ts +2 -2
- package/dist/deploy/cloudRun/index.js +25 -13
- package/dist/deploy/cloudRun/utils/cloudRunExecutionUrl.d.ts +10 -0
- package/dist/deploy/cloudRun/utils/cloudRunExecutionUrl.js +16 -0
- package/dist/deploy/cloudRun/utils/createArgsString.d.ts +2 -2
- package/dist/deploy/cloudRun/utils/createArgsString.js +3 -1
- package/dist/deploy/cloudRun/utils/database.d.ts +25 -4
- package/dist/deploy/cloudRun/utils/database.js +49 -15
- package/dist/deploy/cloudRun/utils/gcloudServiceAccountLoginCommands.d.ts +2 -2
- package/dist/deploy/cloudRun/utils/gcloudServiceAccountLoginCommands.js +3 -1
- package/dist/deploy/cloudRun/utils/getJobOrServiceArgs.d.ts +2 -0
- package/dist/deploy/cloudRun/utils/getJobOrServiceArgs.js +12 -0
- package/dist/deploy/cloudRun/utils/getServiceName.d.ts +2 -2
- package/dist/deploy/cloudRun/utils/getServiceName.js +3 -1
- package/dist/deploy/cloudRun/utils/jobName.d.ts +6 -1
- package/dist/deploy/cloudRun/utils/jobName.js +18 -4
- 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.d.ts +2 -2
- package/dist/deploy/custom/deployJob.js +10 -9
- package/dist/deploy/custom/index.d.ts +2 -2
- package/dist/deploy/custom/index.js +3 -1
- package/dist/deploy/dockerTag/deployJob.d.ts +2 -2
- package/dist/deploy/dockerTag/deployJob.js +6 -6
- package/dist/deploy/dockerTag/index.d.ts +2 -2
- package/dist/deploy/dockerTag/index.js +3 -1
- package/dist/deploy/index.d.ts +10 -9
- package/dist/deploy/index.js +13 -7
- package/dist/deploy/kubernetes/additionalSecretKeys.d.ts +3 -1
- package/dist/deploy/kubernetes/additionalSecretKeys.js +3 -1
- package/dist/deploy/kubernetes/cloudSql/index.d.ts +6 -5
- package/dist/deploy/kubernetes/cloudSql/index.js +14 -21
- package/dist/deploy/kubernetes/deployJob.d.ts +2 -2
- package/dist/deploy/kubernetes/deployJob.js +23 -22
- package/dist/deploy/kubernetes/index.d.ts +2 -2
- package/dist/deploy/kubernetes/index.js +52 -15
- package/dist/deploy/kubernetes/kubeEnv.d.ts +5 -4
- package/dist/deploy/kubernetes/kubeEnv.js +9 -5
- package/dist/deploy/kubernetes/kubeValues.d.ts +5 -6
- package/dist/deploy/kubernetes/kubeValues.js +17 -19
- package/dist/deploy/kubernetes/mongodb.d.ts +2 -2
- package/dist/deploy/kubernetes/mongodb.js +14 -12
- package/dist/deploy/sbom.d.ts +4 -4
- package/dist/deploy/sbom.js +8 -4
- package/dist/deploy/types/base.d.ts +5 -5
- package/dist/deploy/types/base.js +3 -1
- package/dist/deploy/types/custom.d.ts +3 -7
- 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 +291 -16
- package/dist/deploy/types/googleCloudRun.js +28 -1
- package/dist/deploy/types/index.d.ts +8 -7
- package/dist/deploy/types/index.js +21 -10
- package/dist/deploy/types/kubernetes.d.ts +21 -54
- package/dist/deploy/types/kubernetes.js +3 -1
- package/dist/deploy/utils.d.ts +2 -2
- package/dist/deploy/utils.js +5 -2
- package/dist/globalScriptFunctions/index.d.ts +14 -0
- package/dist/globalScriptFunctions/index.js +37 -0
- package/dist/index.d.ts +5 -2
- package/dist/index.js +18 -9
- package/dist/packageInfos.d.ts +4 -0
- package/dist/packageInfos.js +20 -0
- package/dist/pipeline/__tests__/getPipelineStages.test.d.ts +1 -0
- package/dist/pipeline/__tests__/getPipelineStages.test.js +73 -0
- package/dist/pipeline/createAllJobs.d.ts +16 -6
- package/dist/pipeline/createAllJobs.js +99 -27
- package/dist/pipeline/createJobsForComponent.d.ts +2 -2
- package/dist/pipeline/createJobsForComponent.js +9 -149
- package/dist/pipeline/createJobsForWorkspace.d.ts +3 -0
- package/dist/pipeline/createJobsForWorkspace.js +12 -0
- package/dist/pipeline/createMainPipeline.d.ts +3 -0
- package/dist/pipeline/createMainPipeline.js +283 -0
- package/dist/pipeline/generatePipelineFiles.d.ts +7 -0
- package/dist/pipeline/generatePipelineFiles.js +305 -0
- package/dist/pipeline/getPipelineStages.d.ts +7 -0
- package/dist/pipeline/getPipelineStages.js +56 -0
- package/dist/pipeline/gitlab/createGitlabJobs.d.ts +11 -14
- package/dist/pipeline/gitlab/createGitlabJobs.js +264 -74
- package/dist/pipeline/gitlab/createGitlabPipeline.d.ts +9 -0
- package/dist/pipeline/gitlab/createGitlabPipeline.js +77 -0
- package/dist/pipeline/gitlab/gitlabReleaseJobs.d.ts +33 -0
- package/dist/pipeline/gitlab/gitlabReleaseJobs.js +25 -0
- package/dist/pipeline/gitlab/sortGitLabJobDefProps.d.ts +7 -0
- package/dist/pipeline/gitlab/sortGitLabJobDefProps.js +27 -0
- package/dist/pipeline/index.d.ts +3 -2
- package/dist/pipeline/index.js +16 -9
- package/dist/pipeline/packageManager.d.ts +4 -2
- package/dist/pipeline/packageManager.js +56 -19
- package/dist/pipeline/yarn/yarnUtils.d.ts +2 -2
- package/dist/pipeline/yarn/yarnUtils.js +18 -15
- package/dist/rules/index.d.ts +10 -3
- package/dist/rules/index.js +35 -17
- 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 +54 -36
- package/dist/types/config.js +5 -2
- package/dist/types/context.d.ts +123 -38
- package/dist/types/context.js +12 -1
- package/dist/types/environmentContext.d.ts +15 -12
- 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 +8 -8
- package/dist/types/gitlab-types.js +3 -1
- package/dist/types/index.d.ts +3 -1
- package/dist/types/index.js +16 -8
- package/dist/types/jobDefinition.d.ts +11 -0
- package/dist/types/jobDefinition.js +5 -0
- package/dist/types/jobs.d.ts +30 -15
- package/dist/types/jobs.js +3 -1
- package/dist/types/pipeline.d.ts +3 -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 +7 -2
- package/dist/utils/index.d.ts +2 -1
- package/dist/utils/index.js +10 -3
- package/dist/utils/jsonParse.d.ts +1 -0
- package/dist/utils/jsonParse.js +14 -0
- package/dist/utils/removeUndefined.d.ts +1 -0
- package/dist/utils/removeUndefined.js +36 -0
- package/dist/utils/writeFiles.d.ts +11 -0
- package/dist/{pipeline/commitInfo/getBuildId.js → utils/writeFiles.js} +39 -22
- package/dist/variables/VariableValue.d.ts +3 -0
- package/dist/variables/VariableValue.js +5 -0
- package/dist/variables/VariableValueContainingReferences.d.ts +24 -0
- package/dist/variables/VariableValueContainingReferences.js +97 -0
- package/dist/variables/__tests__/resolveAllReferences.test.d.ts +1 -0
- package/dist/variables/__tests__/resolveAllReferences.test.js +218 -0
- package/dist/variables/__tests__/resolveAllReferencesOnce.test.d.ts +1 -0
- package/dist/variables/__tests__/resolveAllReferencesOnce.test.js +171 -0
- package/dist/variables/__tests__/resolveReferencesOnce.test.d.ts +1 -0
- package/dist/variables/__tests__/resolveReferencesOnce.test.js +199 -0
- package/dist/variables/__tests__/variableValue.test.d.ts +1 -0
- package/dist/variables/__tests__/variableValue.test.js +36 -0
- package/dist/variables/resolveAllReferences.d.ts +3 -0
- package/dist/{pipeline/createChildPipeline.js → variables/resolveAllReferences.js} +44 -48
- package/dist/variables/resolveAllReferencesOnce.d.ts +5 -0
- package/dist/variables/resolveAllReferencesOnce.js +191 -0
- package/dist/variables/resolveReferencesOnce.d.ts +8 -0
- package/dist/variables/resolveReferencesOnce.js +22 -0
- package/examples/.test-gen-ignore +1 -0
- package/examples/__snapshots__/cloud-run-health-check-defaults.test.ts.snap +1394 -0
- package/examples/__snapshots__/cloud-run-health-check-only-startup.test.ts.snap +1394 -0
- package/examples/__snapshots__/cloud-run-health-check.test.ts.snap +1394 -0
- package/examples/__snapshots__/cloud-run-http2.test.ts.snap +1394 -0
- package/examples/__snapshots__/cloud-run-llama.test.ts.snap +624 -0
- package/examples/__snapshots__/cloud-run-memory-limit.test.ts.snap +1394 -0
- package/examples/__snapshots__/cloud-run-meteor-with-worker.test.ts.snap +1394 -0
- package/examples/__snapshots__/cloud-run-nextjs.test.ts.snap +1410 -0
- package/examples/__snapshots__/cloud-run-no-cpu-throttling.test.ts.snap +1394 -0
- package/examples/__snapshots__/cloud-run-no-service.test.ts.snap +1502 -0
- package/examples/__snapshots__/cloud-run-non-public.test.ts.snap +1394 -0
- package/examples/__snapshots__/cloud-run-post-stop-job.test.ts.snap +1412 -0
- package/examples/__snapshots__/cloud-run-service-custom-vpc-connector.test.ts.snap +1462 -0
- package/examples/__snapshots__/cloud-run-service-custom-vpc.test.ts.snap +1462 -0
- package/examples/__snapshots__/cloud-run-service-gen2.test.ts.snap +1394 -0
- package/examples/__snapshots__/cloud-run-service-increase-timout.test.ts.snap +1394 -0
- package/examples/__snapshots__/cloud-run-service-with-volumes.test.ts.snap +1466 -0
- package/examples/__snapshots__/cloud-run-storybook.test.ts.snap +1284 -0
- package/examples/__snapshots__/cloud-run-with-gpu.test.ts.snap +1394 -0
- package/examples/__snapshots__/cloud-run-with-ngnix.test.ts.snap +1394 -0
- package/examples/__snapshots__/cloud-run-with-sql-legacy-jobs.test.ts.snap +1709 -0
- package/examples/__snapshots__/cloud-run-with-sql-multiple-dbs.test.ts.snap +4515 -0
- package/examples/__snapshots__/cloud-run-with-sql-reuse-db.test.ts.snap +2950 -0
- package/examples/__snapshots__/cloud-run-with-sql.test.ts.snap +1772 -0
- package/examples/__snapshots__/cloud-run-with-worker.test.ts.snap +1402 -0
- package/examples/__snapshots__/custom-build-job-with-tests.test.ts.snap +1261 -0
- package/examples/__snapshots__/custom-build-job.test.ts.snap +1156 -0
- package/examples/__snapshots__/custom-deploy.test.ts.snap +1059 -0
- package/examples/__snapshots__/custom-envs.test.ts.snap +786 -0
- package/examples/__snapshots__/custom-sbom-java.test.ts.snap +1152 -0
- package/examples/__snapshots__/custom-verify-job.test.ts.snap +1606 -0
- package/examples/__snapshots__/git-submodule.test.ts.snap +1395 -0
- package/examples/__snapshots__/kubernetes-application-customization.test.ts.snap +1713 -0
- package/examples/__snapshots__/kubernetes-with-cloud-sql.test.ts.snap +1733 -0
- package/examples/__snapshots__/kubernetes-with-jobs.test.ts.snap +3265 -0
- package/examples/__snapshots__/kubernetes-with-mongodb.test.ts.snap +1837 -0
- package/examples/__snapshots__/local-dot-env.test.ts.snap +1318 -0
- package/examples/__snapshots__/meteor-kubernetes.test.ts.snap +1790 -0
- package/examples/__snapshots__/multiline-var.test.ts.snap +5585 -0
- package/examples/__snapshots__/native-app.test.ts.snap +2210 -0
- package/examples/__snapshots__/node-build-with-custom-image.test.ts.snap +1394 -0
- package/examples/__snapshots__/node-build-with-docker-additions.test.ts.snap +1402 -0
- package/examples/__snapshots__/override-secrets.test.ts.snap +1419 -0
- package/examples/__snapshots__/rails-k8s-with-worker-dockerfile.test.ts.snap +1464 -0
- package/examples/__snapshots__/rails-k8s-with-worker.test.ts.snap +1444 -0
- package/examples/__snapshots__/referencing-other-vars.test.ts.snap +4645 -0
- package/examples/__snapshots__/wait-for-other-deploy.test.ts.snap +1424 -0
- package/examples/__snapshots__/workspace-api-www-turbo-cache.test.ts.snap +2298 -0
- package/examples/__snapshots__/workspace-api-www.test.ts.snap +2290 -0
- package/examples/__utils__/helpers.ts +9 -12
- package/examples/cloud-run-health-check-defaults.test.ts +11 -0
- package/examples/cloud-run-health-check-defaults.ts +28 -0
- package/examples/cloud-run-health-check-only-startup.test.ts +11 -0
- package/examples/cloud-run-health-check-only-startup.ts +38 -0
- package/examples/cloud-run-health-check.test.ts +11 -0
- package/examples/cloud-run-health-check.ts +45 -0
- package/examples/cloud-run-http2.test.ts +11 -0
- package/examples/cloud-run-http2.ts +29 -0
- package/examples/cloud-run-llama.test.ts +11 -0
- package/examples/cloud-run-llama.ts +40 -0
- package/examples/cloud-run-memory-limit.test.ts +11 -0
- package/examples/cloud-run-memory-limit.ts +12 -7
- package/examples/cloud-run-meteor-with-worker.test.ts +11 -0
- package/examples/cloud-run-meteor-with-worker.ts +13 -7
- package/examples/cloud-run-nextjs.test.ts +11 -0
- package/examples/cloud-run-nextjs.ts +28 -0
- package/examples/cloud-run-no-cpu-throttling.test.ts +11 -0
- package/examples/cloud-run-no-cpu-throttling.ts +8 -6
- package/examples/cloud-run-no-service.test.ts +11 -0
- package/examples/cloud-run-no-service.ts +39 -0
- package/examples/cloud-run-non-public.test.ts +11 -0
- package/examples/cloud-run-non-public.ts +7 -6
- package/examples/cloud-run-post-stop-job.test.ts +11 -0
- package/examples/cloud-run-post-stop-job.ts +15 -6
- package/examples/cloud-run-service-custom-vpc-connector.test.ts +11 -0
- package/examples/cloud-run-service-custom-vpc-connector.ts +37 -0
- package/examples/cloud-run-service-custom-vpc.test.ts +11 -0
- package/examples/cloud-run-service-custom-vpc.ts +39 -0
- package/examples/cloud-run-service-gen2.test.ts +11 -0
- package/examples/cloud-run-service-gen2.ts +8 -6
- package/examples/cloud-run-service-increase-timout.test.ts +11 -0
- package/examples/cloud-run-service-increase-timout.ts +29 -0
- package/examples/cloud-run-service-with-volumes.test.ts +11 -0
- package/examples/cloud-run-service-with-volumes.ts +64 -0
- package/examples/cloud-run-storybook.test.ts +11 -0
- package/examples/cloud-run-storybook.ts +33 -0
- package/examples/cloud-run-with-gpu.test.ts +11 -0
- package/examples/cloud-run-with-gpu.ts +30 -0
- package/examples/cloud-run-with-ngnix.test.ts +11 -0
- package/examples/cloud-run-with-ngnix.ts +29 -0
- package/examples/cloud-run-with-sql-legacy-jobs.test.ts +11 -0
- package/examples/cloud-run-with-sql-legacy-jobs.ts +49 -0
- package/examples/cloud-run-with-sql-multiple-dbs.test.ts +11 -0
- package/examples/cloud-run-with-sql-multiple-dbs.ts +87 -0
- package/examples/cloud-run-with-sql-reuse-db.test.ts +11 -0
- package/examples/cloud-run-with-sql-reuse-db.ts +7 -6
- package/examples/cloud-run-with-sql.test.ts +11 -0
- package/examples/cloud-run-with-sql.ts +45 -24
- package/examples/cloud-run-with-worker.test.ts +11 -0
- package/examples/cloud-run-with-worker.ts +8 -6
- package/examples/custom-build-job-with-tests.test.ts +11 -0
- package/examples/custom-build-job-with-tests.ts +7 -6
- package/examples/custom-build-job.test.ts +11 -0
- package/examples/custom-build-job.ts +7 -6
- package/examples/custom-deploy.test.ts +11 -0
- package/examples/custom-deploy.ts +22 -14
- package/examples/custom-envs.test.ts +11 -0
- package/examples/custom-envs.ts +7 -6
- package/examples/custom-sbom-java.test.ts +11 -0
- package/examples/custom-sbom-java.ts +12 -8
- package/examples/custom-verify-job.test.ts +11 -0
- package/examples/custom-verify-job.ts +65 -0
- package/examples/git-submodule.test.ts +11 -0
- package/examples/git-submodule.ts +30 -0
- package/examples/kubernetes-application-customization.test.ts +11 -0
- package/examples/kubernetes-application-customization.ts +9 -6
- package/examples/kubernetes-with-cloud-sql.test.ts +11 -0
- package/examples/kubernetes-with-cloud-sql.ts +9 -6
- package/examples/kubernetes-with-jobs.test.ts +11 -0
- package/examples/kubernetes-with-jobs.ts +9 -6
- package/examples/kubernetes-with-mongodb.test.ts +11 -0
- package/examples/kubernetes-with-mongodb.ts +9 -6
- package/examples/local-dot-env.test.ts +11 -0
- package/examples/local-dot-env.ts +27 -0
- package/examples/meteor-kubernetes.test.ts +11 -0
- package/examples/meteor-kubernetes.ts +6 -7
- package/examples/multiline-var.test.ts +11 -0
- package/examples/multiline-var.ts +107 -0
- package/examples/native-app.test.ts +11 -0
- package/examples/native-app.ts +24 -19
- package/examples/node-build-with-custom-image.test.ts +11 -0
- package/examples/node-build-with-custom-image.ts +7 -6
- package/examples/node-build-with-docker-additions.test.ts +11 -0
- package/examples/node-build-with-docker-additions.ts +7 -6
- package/examples/override-secrets.test.ts +11 -0
- package/examples/override-secrets.ts +44 -0
- package/examples/rails-k8s-with-worker-dockerfile.test.ts +33 -0
- package/examples/rails-k8s-with-worker.test.ts +11 -0
- package/examples/rails-k8s-with-worker.ts +13 -13
- package/examples/referencing-other-vars.test.ts +11 -0
- package/examples/referencing-other-vars.ts +83 -0
- package/examples/wait-for-other-deploy.test.ts +11 -0
- package/examples/wait-for-other-deploy.ts +6 -5
- package/examples/workspace-api-www-turbo-cache.test.ts +11 -0
- package/examples/workspace-api-www-turbo-cache.ts +52 -0
- package/examples/workspace-api-www.test.ts +11 -0
- package/examples/workspace-api-www.ts +46 -0
- package/package.json +23 -26
- package/scripts/generate-examples-test.ts +84 -0
- package/scripts/generate-gitlab-ci-types.ts +2 -2
- package/scripts/tsconfig.json +7 -0
- package/src/bash/BashExpression.ts +78 -0
- package/src/bash/bashEscape.ts +164 -0
- package/src/bash/bashExpressionPerPipelineType.ts +16 -0
- package/src/bash/bashYaml.ts +80 -0
- package/src/bash/getInjectVarsScript.ts +21 -0
- package/src/bash/index.ts +2 -0
- package/src/build/artifacts/createBuildJobArtifact.ts +63 -0
- package/src/build/base/__tests__/createArtifactsConfig.test.ts +3 -3
- package/src/build/base/constants.ts +1 -1
- package/src/build/base/createAppBuildJob.ts +40 -24
- package/src/build/base/createArtifactsConfig.ts +2 -2
- package/src/build/base/createBuildJobDefinition.ts +37 -0
- package/src/build/base/index.ts +40 -8
- package/src/build/base/writeBuildInfo.ts +3 -3
- package/src/build/base/writeDotEnv.ts +25 -6
- package/src/build/cache/createJobCache.ts +83 -0
- package/src/build/cache/getAllCacheConfigsFromConfig.ts +29 -0
- package/src/build/cache/transformLegacyJobCache.ts +14 -0
- package/src/build/custom/__tests__/testJob.test.ts +10 -13
- package/src/build/custom/buildJob.ts +11 -37
- package/src/build/custom/index.ts +4 -2
- package/src/build/custom/testJob.ts +24 -21
- package/src/build/docker.ts +110 -49
- package/src/build/index.ts +45 -11
- package/src/build/node/buildJob.ts +68 -69
- package/src/build/node/cache.ts +28 -34
- package/src/build/node/constants.ts +2 -2
- package/src/build/node/index.ts +13 -4
- package/src/build/node/meteor.ts +19 -24
- package/src/build/node/testJob.ts +44 -25
- package/src/build/node/yarn.ts +22 -15
- package/src/build/rails/build.ts +15 -9
- package/src/build/rails/index.ts +4 -2
- package/src/build/rails/test.ts +41 -12
- package/src/build/sbom.ts +21 -11
- package/src/build/types.ts +198 -47
- package/src/catladder-gitlab.ts +7 -56
- package/src/config/__tests__/__snapshots__/getAllEnvs.test.ts.snap +31 -0
- package/src/config/__tests__/__snapshots__/getAllEnvsInAllComponents.test.ts.snap +15 -0
- package/src/config/__tests__/getAllEnvs.test.ts +71 -0
- package/src/config/__tests__/getAllEnvsInAllComponents.test.ts +63 -0
- package/src/config/configruedEnvs.ts +6 -6
- package/src/config/readConfig.ts +15 -22
- package/src/constants.ts +5 -2
- package/src/context/createAllComponentsContext.ts +31 -0
- package/src/context/createComponentContext.ts +148 -0
- package/src/context/createWorkspaceContext.ts +56 -0
- package/src/context/getBuildInfoVariables.ts +36 -0
- package/src/context/getEnvConfig.ts +25 -5
- package/src/context/getEnvType.ts +1 -1
- package/src/context/getEnvironment.ts +8 -24
- package/src/context/getEnvironmentContext.ts +25 -29
- package/src/context/getEnvironmentVariables.ts +101 -83
- package/src/context/getLabels.ts +8 -5
- package/src/context/getReviewSlug.ts +27 -0
- package/src/context/index.ts +1 -65
- package/src/context/transformJobOnlyVars.ts +6 -3
- package/src/context/utils/envVars.ts +5 -4
- package/src/deploy/base/deploy.ts +63 -47
- package/src/deploy/base/index.ts +11 -6
- package/src/deploy/base/rollback.ts +11 -16
- package/src/deploy/base/stop.ts +11 -15
- package/src/deploy/base/variables.ts +1 -1
- package/src/deploy/cloudRun/artifactsRegistry.ts +32 -28
- package/src/deploy/cloudRun/cleanup.ts +5 -5
- package/src/deploy/cloudRun/cloudRunRevisions.ts +9 -11
- package/src/deploy/cloudRun/createJobs/cloudRunJobs.ts +71 -153
- package/src/deploy/cloudRun/createJobs/cloudRunServices.ts +65 -26
- package/src/deploy/cloudRun/createJobs/common.ts +7 -7
- package/src/deploy/cloudRun/createJobs/constants.ts +1 -0
- package/src/deploy/cloudRun/createJobs/execute/onDeploy.ts +102 -0
- package/src/deploy/cloudRun/createJobs/execute/schedules.ts +186 -0
- package/src/deploy/cloudRun/createJobs/getCloudRunDeployScripts.ts +27 -16
- package/src/deploy/cloudRun/createJobs/getCloudRunStopScripts.ts +9 -11
- package/src/deploy/cloudRun/createJobs/healthCheck.ts +64 -0
- package/src/deploy/cloudRun/createJobs/index.ts +20 -14
- package/src/deploy/cloudRun/createJobs/volumes.ts +23 -0
- package/src/deploy/cloudRun/index.ts +94 -60
- package/src/deploy/cloudRun/utils/cloudRunExecutionUrl.ts +20 -0
- package/src/deploy/cloudRun/utils/createArgsString.ts +6 -2
- package/src/deploy/cloudRun/utils/database.ts +116 -9
- package/src/deploy/cloudRun/utils/gcloudServiceAccountLoginCommands.ts +5 -3
- package/src/deploy/cloudRun/utils/getJobOrServiceArgs.ts +18 -0
- package/src/deploy/cloudRun/utils/getServiceName.ts +2 -2
- package/src/deploy/cloudRun/utils/jobName.ts +22 -2
- package/src/deploy/cloudRun/utils/removeFirstLinesFromCommandOutput.ts +1 -1
- package/src/deploy/cloudSql/utils.ts +13 -10
- package/src/deploy/custom/deployJob.ts +15 -10
- package/src/deploy/custom/index.ts +2 -2
- package/src/deploy/dockerTag/deployJob.ts +6 -7
- package/src/deploy/dockerTag/index.ts +8 -7
- package/src/deploy/index.ts +15 -12
- package/src/deploy/kubernetes/additionalSecretKeys.ts +3 -1
- package/src/deploy/kubernetes/cloudSql/index.ts +16 -25
- package/src/deploy/kubernetes/deployJob.ts +30 -21
- package/src/deploy/kubernetes/index.ts +43 -35
- package/src/deploy/kubernetes/kubeEnv.ts +12 -10
- package/src/deploy/kubernetes/kubeValues.ts +25 -20
- package/src/deploy/kubernetes/mongodb.ts +15 -15
- package/src/deploy/sbom.ts +20 -10
- package/src/deploy/types/base.ts +3 -3
- package/src/deploy/types/custom.ts +3 -7
- package/src/deploy/types/googleCloudRun.ts +359 -2
- package/src/deploy/types/index.ts +9 -2
- package/src/deploy/types/kubernetes.ts +1 -36
- package/src/deploy/utils.ts +5 -5
- package/src/globalScriptFunctions/index.ts +30 -0
- package/src/index.ts +4 -1
- package/src/packageInfos.ts +14 -0
- package/src/pipeline/__tests__/__snapshots__/getPipelineStages.test.ts.snap +69 -0
- package/src/pipeline/__tests__/getPipelineStages.test.ts +63 -0
- package/src/pipeline/createAllJobs.ts +67 -33
- package/src/pipeline/createJobsForComponent.ts +17 -37
- package/src/pipeline/createJobsForWorkspace.ts +12 -0
- package/src/pipeline/createMainPipeline.ts +118 -0
- package/src/pipeline/generatePipelineFiles.ts +100 -0
- package/src/pipeline/getPipelineStages.ts +23 -0
- package/src/pipeline/gitlab/createGitlabJobs.ts +398 -108
- package/src/pipeline/gitlab/createGitlabPipeline.ts +35 -0
- package/src/pipeline/gitlab/gitlabReleaseJobs.ts +23 -0
- package/src/pipeline/gitlab/sortGitLabJobDefProps.ts +59 -0
- package/src/pipeline/index.ts +2 -1
- package/src/pipeline/packageManager.ts +42 -18
- package/src/pipeline/yarn/yarnUtils.ts +15 -12
- package/src/rules/index.ts +41 -18
- package/src/runner/index.ts +0 -1
- package/src/types/config.ts +62 -23
- package/src/types/context.ts +167 -36
- package/src/types/environmentContext.ts +18 -13
- package/src/types/gitlab-ci-yml.ts +0 -1
- package/src/types/gitlab-types.ts +10 -7
- package/src/types/index.ts +2 -0
- package/src/types/jobDefinition.ts +34 -0
- package/src/types/jobs.ts +31 -15
- package/src/types/utils.ts +4 -4
- package/src/utils/gitlab.ts +20 -3
- package/src/utils/index.ts +6 -3
- package/src/utils/jsonParse.ts +7 -0
- package/src/utils/removeUndefined.ts +4 -0
- package/src/utils/writeFiles.ts +52 -0
- package/src/variables/VariableValue.ts +6 -0
- package/src/variables/VariableValueContainingReferences.ts +89 -0
- package/src/variables/__tests__/resolveAllReferences.test.ts +110 -0
- package/src/variables/__tests__/resolveAllReferencesOnce.test.ts +64 -0
- package/src/variables/__tests__/resolveReferencesOnce.test.ts +117 -0
- package/src/variables/__tests__/variableValue.test.ts +73 -0
- package/src/variables/resolveAllReferences.ts +46 -0
- package/src/variables/resolveAllReferencesOnce.ts +44 -0
- package/src/variables/resolveReferencesOnce.ts +29 -0
- package/bin/catladder-gitlab-dev.js +0 -3
- package/bin/catladder-gitlab.js +0 -3
- package/dist/bundles/catladder-gitlab/index.js +0 -34559
- package/dist/context/__tests__/resolveReferences.test.js +0 -336
- package/dist/context/resolveReferences.d.ts +0 -4
- package/dist/context/resolveReferences.js +0 -254
- package/dist/deploy/cloudRun/createJobs/variables.d.ts +0 -5
- package/dist/deploy/cloudRun/createJobs/variables.js +0 -19
- package/dist/deploy/kubernetes/processSecretsAsFiles.d.ts +0 -84
- package/dist/deploy/kubernetes/processSecretsAsFiles.js +0 -31
- package/dist/pipeline/commitInfo/getBuildId.d.ts +0 -6
- package/dist/pipeline/commitInfo/getCommitInfo.d.ts +0 -2
- package/dist/pipeline/createChildPipeline.d.ts +0 -3
- package/examples/__snapshots__/cloud-run-memory-limit.ts.snap +0 -1839
- package/examples/__snapshots__/cloud-run-meteor-with-worker.ts.snap +0 -1807
- package/examples/__snapshots__/cloud-run-no-cpu-throttling.ts.snap +0 -1839
- package/examples/__snapshots__/cloud-run-non-public.ts.snap +0 -1839
- package/examples/__snapshots__/cloud-run-post-stop-job.ts.snap +0 -1849
- package/examples/__snapshots__/cloud-run-service-gen2.ts.snap +0 -1839
- package/examples/__snapshots__/cloud-run-with-sql-reuse-db.ts.snap +0 -3647
- package/examples/__snapshots__/cloud-run-with-sql.ts.snap +0 -3658
- package/examples/__snapshots__/cloud-run-with-worker.ts.snap +0 -1847
- package/examples/__snapshots__/custom-build-job-with-tests.ts.snap +0 -1663
- package/examples/__snapshots__/custom-build-job.ts.snap +0 -1375
- package/examples/__snapshots__/custom-deploy.ts.snap +0 -1625
- package/examples/__snapshots__/custom-envs.ts.snap +0 -1127
- package/examples/__snapshots__/custom-sbom-java.ts.snap +0 -1383
- package/examples/__snapshots__/kubernetes-application-customization.ts.snap +0 -2573
- package/examples/__snapshots__/kubernetes-with-cloud-sql-legacy.ts.snap +0 -2533
- package/examples/__snapshots__/kubernetes-with-cloud-sql.ts.snap +0 -2545
- package/examples/__snapshots__/kubernetes-with-jobs.ts.snap +0 -4660
- package/examples/__snapshots__/kubernetes-with-mongodb.ts.snap +0 -2737
- package/examples/__snapshots__/meteor-kubernetes.ts.snap +0 -2658
- package/examples/__snapshots__/native-app.ts.snap +0 -3007
- package/examples/__snapshots__/node-build-with-custom-image.ts.snap +0 -1839
- package/examples/__snapshots__/node-build-with-docker-additions.ts.snap +0 -1839
- package/examples/__snapshots__/rails-k8s-with-worker.ts.snap +0 -4291
- package/examples/__snapshots__/wait-for-other-deploy.ts.snap +0 -2049
- package/examples/kubernetes-with-cloud-sql-legacy.ts +0 -33
- package/scripts/bundle +0 -2
- package/src/context/__tests__/resolveReferences.test.ts +0 -143
- package/src/context/resolveReferences.ts +0 -70
- package/src/deploy/cloudRun/createJobs/variables.ts +0 -21
- package/src/deploy/kubernetes/processSecretsAsFiles.ts +0 -34
- package/src/pipeline/commitInfo/getBuildId.ts +0 -17
- package/src/pipeline/commitInfo/getCommitInfo.ts +0 -15
- package/src/pipeline/createChildPipeline.ts +0 -46
- /package/dist/{context/__tests__/resolveReferences.test.d.ts → config/__tests__/getAllEnvs.test.d.ts} +0 -0
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import type { Config, DeployConfig } from "../src";
|
|
2
|
+
|
|
3
|
+
const DEPLOY_CONFIG: DeployConfig = {
|
|
4
|
+
type: "google-cloudrun",
|
|
5
|
+
projectId: "google-project-id",
|
|
6
|
+
region: "europe-west6",
|
|
7
|
+
};
|
|
8
|
+
const config = {
|
|
9
|
+
appName: "test-app",
|
|
10
|
+
customerName: "pan",
|
|
11
|
+
builds: {
|
|
12
|
+
myWorkspace: {
|
|
13
|
+
type: "node",
|
|
14
|
+
},
|
|
15
|
+
},
|
|
16
|
+
components: {
|
|
17
|
+
api: {
|
|
18
|
+
dir: "api",
|
|
19
|
+
build: {
|
|
20
|
+
from: "myWorkspace",
|
|
21
|
+
},
|
|
22
|
+
deploy: DEPLOY_CONFIG,
|
|
23
|
+
},
|
|
24
|
+
www: {
|
|
25
|
+
dir: "www",
|
|
26
|
+
build: {
|
|
27
|
+
from: "myWorkspace",
|
|
28
|
+
cache: {
|
|
29
|
+
paths: [".next/cache"],
|
|
30
|
+
},
|
|
31
|
+
},
|
|
32
|
+
deploy: DEPLOY_CONFIG,
|
|
33
|
+
vars: {
|
|
34
|
+
public: {
|
|
35
|
+
API_URL: "${api:ROOT_URL}/graphql",
|
|
36
|
+
},
|
|
37
|
+
},
|
|
38
|
+
},
|
|
39
|
+
},
|
|
40
|
+
} satisfies Config;
|
|
41
|
+
|
|
42
|
+
export default config;
|
|
43
|
+
|
|
44
|
+
export const information = {
|
|
45
|
+
title: "Workspace API and WWW",
|
|
46
|
+
};
|
package/package.json
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@catladder/pipeline",
|
|
3
|
-
"description": "CI/CD and
|
|
4
|
-
"homepage": "https://git.panter.
|
|
3
|
+
"description": "Panter workflow for cloud CI/CD and DevOps",
|
|
4
|
+
"homepage": "https://catladder.git.panter.biz/catladder/docs",
|
|
5
5
|
"bugs": "https://git.panter.ch/catladder/catladder/issues",
|
|
6
|
+
"readme": "https://git.panter.ch/catladder/catladder/-/blob/main/pipeline/README.md",
|
|
6
7
|
"repository": {
|
|
7
8
|
"type": "git",
|
|
8
9
|
"url": "git+https://git.panter.ch/catladder/catladder.git",
|
|
@@ -52,48 +53,44 @@
|
|
|
52
53
|
}
|
|
53
54
|
],
|
|
54
55
|
"license": "MIT",
|
|
55
|
-
"version": "0.0.0-
|
|
56
|
+
"version": "0.0.0-reference-database-url-1befbbee",
|
|
56
57
|
"stableVersion": "0.1.0",
|
|
57
58
|
"scripts": {
|
|
58
59
|
"build:tsc": "yarn tsc",
|
|
59
|
-
"build": "yarn build:compile && yarn build:inline-variables
|
|
60
|
-
"build:bundle": "./scripts/bundle",
|
|
60
|
+
"build": "yarn build:compile && yarn build:inline-variables",
|
|
61
61
|
"build:compile": "yarn tsc",
|
|
62
62
|
"build:inline-variables": "yarn babel --keep-file-extension --extensions \".ts,.js\" --config-file ./babel-inline.json dist --out-dir dist",
|
|
63
63
|
"build:watch": "yarn tsc -w",
|
|
64
64
|
"lint": "eslint \"src/**/*.ts\"",
|
|
65
65
|
"lint:fix": "eslint \"src/**/*.ts\" --fix",
|
|
66
|
-
"generate:gitlab-ci-yml-types": "ts-node ./scripts/generate-gitlab-ci-types.ts"
|
|
66
|
+
"generate:gitlab-ci-yml-types": "ts-node ./scripts/generate-gitlab-ci-types.ts",
|
|
67
|
+
"generate:examples-test": "tsx scripts/generate-examples-test.ts"
|
|
67
68
|
},
|
|
68
69
|
"types": "dist/index.d.ts",
|
|
69
70
|
"main": "dist/index.js",
|
|
70
71
|
"sideEffects": false,
|
|
71
|
-
"bin": {
|
|
72
|
-
"catladder-gitlab": "./bin/catladder-gitlab.js"
|
|
73
|
-
},
|
|
74
72
|
"devDependencies": {
|
|
75
|
-
"@babel/cli": "^7.
|
|
76
|
-
"@babel/core": "^7.
|
|
77
|
-
"@babel/plugin-syntax-typescript": "^7.
|
|
78
|
-
"@babel/preset-typescript": "^7.
|
|
79
|
-
"@jest/globals": "^29.
|
|
80
|
-
"@types/child-process-promise": "^2.2.
|
|
81
|
-
"@types/jest": "^
|
|
82
|
-
"@types/lodash": "^4.
|
|
83
|
-
"@types/node": "^
|
|
73
|
+
"@babel/cli": "^7.24.8",
|
|
74
|
+
"@babel/core": "^7.25.2",
|
|
75
|
+
"@babel/plugin-syntax-typescript": "^7.25.4",
|
|
76
|
+
"@babel/preset-typescript": "^7.24.7",
|
|
77
|
+
"@jest/globals": "^29.7.0",
|
|
78
|
+
"@types/child-process-promise": "^2.2.6",
|
|
79
|
+
"@types/jest": "^29.5.12",
|
|
80
|
+
"@types/lodash": "^4.17.7",
|
|
81
|
+
"@types/node": "^22.5.1",
|
|
84
82
|
"babel-plugin-transform-inline-environment-variables": "^0.4.3",
|
|
85
83
|
"child-process-promise": "^2.2.1",
|
|
86
|
-
"
|
|
87
|
-
"js-yaml": "^4.1.0",
|
|
84
|
+
"glob": "^11.0.0",
|
|
88
85
|
"json-schema-to-typescript": "^13.0.2",
|
|
89
86
|
"lodash": "^4.17.21",
|
|
90
|
-
"memoizee": "^0.4.
|
|
91
|
-
"path-equal": "1.
|
|
92
|
-
"slugify": "^1.6.
|
|
87
|
+
"memoizee": "^0.4.17",
|
|
88
|
+
"path-equal": "1.2.5",
|
|
89
|
+
"slugify": "^1.6.6",
|
|
90
|
+
"typescript": "^5.4.5",
|
|
91
|
+
"yaml": "^2.5.0"
|
|
93
92
|
},
|
|
94
93
|
"dependencies": {
|
|
95
|
-
"
|
|
96
|
-
"ts-node": "^10.4.0",
|
|
97
|
-
"typescript": "^4.5.4"
|
|
94
|
+
"tsx": "^4.19.0"
|
|
98
95
|
}
|
|
99
96
|
}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { glob } from "glob";
|
|
2
|
+
import { resolve, join, basename } from "path";
|
|
3
|
+
import { existsSync } from "fs";
|
|
4
|
+
import { readFile, writeFile, rm } from "fs/promises";
|
|
5
|
+
import { format } from "prettier";
|
|
6
|
+
|
|
7
|
+
const pipelineWorkspaceRoot = resolve(__dirname, "..");
|
|
8
|
+
const examplesPath = join(pipelineWorkspaceRoot, "examples");
|
|
9
|
+
const exampleIgnoresPath = join(examplesPath, ".test-gen-ignore");
|
|
10
|
+
|
|
11
|
+
const defaultExampleIgnores = ["*.test.ts"];
|
|
12
|
+
|
|
13
|
+
async function getExampleIgnores(): Promise<string[]> {
|
|
14
|
+
if (!existsSync(exampleIgnoresPath)) {
|
|
15
|
+
await writeFile(exampleIgnoresPath, defaultExampleIgnores.join("\n"));
|
|
16
|
+
}
|
|
17
|
+
try {
|
|
18
|
+
const ignoresFile = await readFile(exampleIgnoresPath, {
|
|
19
|
+
encoding: "utf-8",
|
|
20
|
+
});
|
|
21
|
+
return [
|
|
22
|
+
...new Set([
|
|
23
|
+
...defaultExampleIgnores,
|
|
24
|
+
...ignoresFile
|
|
25
|
+
.split("\n")
|
|
26
|
+
.filter((line) => !line.match(/^\s*# [\s\w]*/))
|
|
27
|
+
.map((line) => line.trim())
|
|
28
|
+
.filter(Boolean),
|
|
29
|
+
]),
|
|
30
|
+
];
|
|
31
|
+
} catch (error) {
|
|
32
|
+
console.error(
|
|
33
|
+
`Error reading example ignores file: ${exampleIgnoresPath}`,
|
|
34
|
+
error,
|
|
35
|
+
);
|
|
36
|
+
return defaultExampleIgnores;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
async function main() {
|
|
41
|
+
const exampleIgnores = await getExampleIgnores();
|
|
42
|
+
const [exampleFiles, existingTestFiles] = await Promise.all([
|
|
43
|
+
glob("*.ts", {
|
|
44
|
+
ignore: exampleIgnores,
|
|
45
|
+
cwd: examplesPath,
|
|
46
|
+
}),
|
|
47
|
+
glob("*.test.ts", {
|
|
48
|
+
ignore: ["rails-k8s-with-worker-dockerfile.test.ts"],
|
|
49
|
+
cwd: examplesPath,
|
|
50
|
+
}),
|
|
51
|
+
]);
|
|
52
|
+
await Promise.all(
|
|
53
|
+
existingTestFiles.map((testFile) => rm(join(examplesPath, testFile))),
|
|
54
|
+
);
|
|
55
|
+
await Promise.all(
|
|
56
|
+
exampleFiles.map(async (exampleFile) => {
|
|
57
|
+
const kebabName = basename(exampleFile, ".ts");
|
|
58
|
+
const testFileContent = [
|
|
59
|
+
`import { createYamlLocalPipeline } from "./__utils__/helpers";`,
|
|
60
|
+
`import config from "./${kebabName}";`,
|
|
61
|
+
`\n/**`,
|
|
62
|
+
` * This test is auto-generated.`,
|
|
63
|
+
` * Modifications will be overwritten on every \`yarn test\` run!`,
|
|
64
|
+
` */\n`,
|
|
65
|
+
|
|
66
|
+
`it("matches snapshot for ${kebabName} local pipeline YAML", async () => {`,
|
|
67
|
+
` expect(await createYamlLocalPipeline(config)).toMatchSnapshot();`,
|
|
68
|
+
`});\n`,
|
|
69
|
+
].join("\n");
|
|
70
|
+
const formattedTest = await format(testFileContent, {
|
|
71
|
+
parser: "typescript",
|
|
72
|
+
});
|
|
73
|
+
await writeFile(
|
|
74
|
+
join(examplesPath, `${kebabName}.test.ts`),
|
|
75
|
+
formattedTest,
|
|
76
|
+
{
|
|
77
|
+
encoding: "utf-8",
|
|
78
|
+
},
|
|
79
|
+
);
|
|
80
|
+
}),
|
|
81
|
+
);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
main().catch(console.error);
|
|
@@ -8,7 +8,7 @@ const typeOutputPath = join(rootPath, "src/types/gitlab-ci-yml.ts");
|
|
|
8
8
|
|
|
9
9
|
export const generateFromCurrentSchema = async () => {
|
|
10
10
|
const response = await fetch(
|
|
11
|
-
"https://gitlab.com/gitlab-org/gitlab/-/raw/master/app/assets/javascripts/editor/schema/ci.json"
|
|
11
|
+
"https://gitlab.com/gitlab-org/gitlab/-/raw/master/app/assets/javascripts/editor/schema/ci.json",
|
|
12
12
|
);
|
|
13
13
|
const gitLabCiJsonSchema = await response.json();
|
|
14
14
|
const schema = await compile(gitLabCiJsonSchema, "GitlabCiYml", {
|
|
@@ -40,7 +40,7 @@ export const generateFromCurrentSchema = async () => {
|
|
|
40
40
|
const sanitizedSchenma = schema.replace(
|
|
41
41
|
// eslint-disable-next-line no-useless-escape
|
|
42
42
|
/export interface HttpsGitlabComGitlabCiYml \{\n[ a-zA-Z0-9?$:;\n_!"\{\}\/*@\[\],.|\(\)]*\[k\: string\]: Job;\n\}/m,
|
|
43
|
-
""
|
|
43
|
+
"",
|
|
44
44
|
);
|
|
45
45
|
if (existsSync(typeOutputPath)) {
|
|
46
46
|
await rm(typeOutputPath);
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* this class represents a string that can be evaluated in bash scripts.
|
|
3
|
+
*
|
|
4
|
+
* you can do basic transforms like lowercase, but that does not return you a lowercase string, but instead an experssion represeting a lowercase string
|
|
5
|
+
*/
|
|
6
|
+
export class BashExpression {
|
|
7
|
+
constructor(private value: string | BashExpression) {}
|
|
8
|
+
public toJSON(): string {
|
|
9
|
+
return this.toString();
|
|
10
|
+
}
|
|
11
|
+
public toString(): string {
|
|
12
|
+
return this.value.toString();
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
public replace(
|
|
16
|
+
searchValue: any,
|
|
17
|
+
|
|
18
|
+
replacer: (substring: string, ...args: any[]) => string,
|
|
19
|
+
) {
|
|
20
|
+
return new BashExpression(
|
|
21
|
+
this.value.toString().replace(searchValue, replacer),
|
|
22
|
+
);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
*
|
|
27
|
+
* @returns a bash expression to lowercase the string
|
|
28
|
+
*/
|
|
29
|
+
public toLowerCase(): BashExpression {
|
|
30
|
+
return this.transformWithCommand("awk '{print tolower($0)}'");
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* concats a value to this one and returns a new BashExpression
|
|
34
|
+
* @param value
|
|
35
|
+
* @returns
|
|
36
|
+
*/
|
|
37
|
+
public concat(...values: Array<string | BashExpression>): BashExpression {
|
|
38
|
+
return new BashExpression(
|
|
39
|
+
this.toString().concat(...values.map((v) => v.toString())),
|
|
40
|
+
);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
public transformWithCommand(command: string): BashExpression {
|
|
44
|
+
return new BashExpression(
|
|
45
|
+
// see https://stackoverflow.com/a/2264537
|
|
46
|
+
`$(printf %s "${this.toString()}" | ${command})`,
|
|
47
|
+
);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
export type StringOrBashExpression = string | BashExpression;
|
|
52
|
+
|
|
53
|
+
export const getBashVariable = (name: string) => new BashExpression(`$${name}`);
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* joins bash expressions together with a joiner
|
|
57
|
+
* returns a bash expression if any of the parts is a bash expression
|
|
58
|
+
* returns a string otherwise
|
|
59
|
+
*
|
|
60
|
+
* @param parts
|
|
61
|
+
* @param joiner
|
|
62
|
+
* @returns
|
|
63
|
+
*/
|
|
64
|
+
export const joinBashExpressions = (
|
|
65
|
+
parts: Array<StringOrBashExpression>,
|
|
66
|
+
joiner = "",
|
|
67
|
+
): StringOrBashExpression => {
|
|
68
|
+
const anyIsBashExpression = parts.some((p) => p instanceof BashExpression);
|
|
69
|
+
if (anyIsBashExpression) {
|
|
70
|
+
return new BashExpression(
|
|
71
|
+
parts
|
|
72
|
+
.map((p) => (p instanceof BashExpression ? p.toString() : p))
|
|
73
|
+
.join(joiner),
|
|
74
|
+
);
|
|
75
|
+
} else {
|
|
76
|
+
return parts.join(joiner);
|
|
77
|
+
}
|
|
78
|
+
};
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
import { registerGlobalScriptFunction } from "../globalScriptFunctions";
|
|
2
|
+
import type { VariableValue } from "../variables/VariableValue";
|
|
3
|
+
import { VariableValueContainingReferences } from "../variables/VariableValueContainingReferences";
|
|
4
|
+
import { BashExpression } from "./BashExpression";
|
|
5
|
+
|
|
6
|
+
export type QuotesEscapeMode = "single" | "double";
|
|
7
|
+
|
|
8
|
+
export type EscapeOptions = {
|
|
9
|
+
quotes?: QuotesEscapeMode | false;
|
|
10
|
+
};
|
|
11
|
+
/**
|
|
12
|
+
* escapes a string or bash expression for bash
|
|
13
|
+
* it either can escape single or double quotes (double is default)
|
|
14
|
+
*/
|
|
15
|
+
export const bashEscape = (
|
|
16
|
+
value: VariableValue | any,
|
|
17
|
+
options: EscapeOptions = {
|
|
18
|
+
quotes: "double",
|
|
19
|
+
},
|
|
20
|
+
) => {
|
|
21
|
+
if (value instanceof BashExpression) {
|
|
22
|
+
// no need to escape
|
|
23
|
+
return escapeBashExpression(value, options);
|
|
24
|
+
}
|
|
25
|
+
if (value instanceof VariableValueContainingReferences) {
|
|
26
|
+
return value.toString(options);
|
|
27
|
+
}
|
|
28
|
+
return escapeString(value, options);
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
export const escapeString = (
|
|
32
|
+
value: string | null | undefined,
|
|
33
|
+
{ quotes }: EscapeOptions = {
|
|
34
|
+
quotes: "double",
|
|
35
|
+
},
|
|
36
|
+
) => {
|
|
37
|
+
const quoteEscaped = quotes
|
|
38
|
+
? quotes === "single"
|
|
39
|
+
? escapeSingleQuotes(value)
|
|
40
|
+
: escapeDoubleQuotes(value)
|
|
41
|
+
: value;
|
|
42
|
+
|
|
43
|
+
return quoteEscaped;
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
export const escapeBashExpression = (
|
|
47
|
+
value: BashExpression,
|
|
48
|
+
options: EscapeOptions,
|
|
49
|
+
) => {
|
|
50
|
+
// no need to escape, we just return the string
|
|
51
|
+
return value;
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
export const escapeDoubleQuotes = (value: string | null | undefined) =>
|
|
55
|
+
value?.toString().replace(/"/g, '\\"');
|
|
56
|
+
|
|
57
|
+
export const escapeSingleQuotes = (value: string | null | undefined) =>
|
|
58
|
+
value?.toString().replace(/'/g, "\\'");
|
|
59
|
+
|
|
60
|
+
export type EscapeForDotEnvOptions = {
|
|
61
|
+
quoteMode: "auto" | "always";
|
|
62
|
+
};
|
|
63
|
+
/**
|
|
64
|
+
*
|
|
65
|
+
* escape env vars for .env files.
|
|
66
|
+
* unfortunatly, the format has many limitations. In order to be very forgiving, we need to do some magic here:
|
|
67
|
+
*
|
|
68
|
+
* - when the value contains no newlines, we are fine
|
|
69
|
+
* - if the value contains newlines, we need to wrap it in quotes. And thats where the problem begins:
|
|
70
|
+
* - you can't escape quotes. this is a limitation of dotenv and node
|
|
71
|
+
* - you can have inner quotes, but they break in node.js (not in dotenv though), see https://github.com/nodejs/node/issues/54134
|
|
72
|
+
* - so we need to quote cleverly
|
|
73
|
+
* - to make things worse, we need to check whether we have a simple stirng or a bash expression, that needs to be evalulated first...
|
|
74
|
+
*
|
|
75
|
+
* what an absolute nightmare.
|
|
76
|
+
*
|
|
77
|
+
* - other languages are currently only partially supported, since most .env implementations are slightly different
|
|
78
|
+
*/
|
|
79
|
+
export const escapeForDotEnv = (
|
|
80
|
+
value: VariableValue | undefined | null,
|
|
81
|
+
options: EscapeForDotEnvOptions = {
|
|
82
|
+
quoteMode: "auto",
|
|
83
|
+
},
|
|
84
|
+
): string => {
|
|
85
|
+
if (value === undefined || value === null) {
|
|
86
|
+
return "";
|
|
87
|
+
}
|
|
88
|
+
if (typeof value === "string") {
|
|
89
|
+
// if string contains newlines, we need to wrap it in quotes
|
|
90
|
+
// we additionaly escape newlines, that give best compatibility
|
|
91
|
+
if (options.quoteMode === "always" || value.includes("\n")) {
|
|
92
|
+
const newlinesReplaces = value.replace(/\n/g, "\\n");
|
|
93
|
+
|
|
94
|
+
// default to ", but if this is not possible, we try to use ' or `
|
|
95
|
+
const quote = value.includes(`"`)
|
|
96
|
+
? value.includes(`'`)
|
|
97
|
+
? value.includes("`")
|
|
98
|
+
? // If all quote types are present, default to double quotes. This works in dotenv, but not in node.js because of the bug mentioned abouve
|
|
99
|
+
'"'
|
|
100
|
+
: "`"
|
|
101
|
+
: "'"
|
|
102
|
+
: '"';
|
|
103
|
+
|
|
104
|
+
// if we found a quote, we can wrap the string in it
|
|
105
|
+
return `${quote}${newlinesReplaces}${quote}`;
|
|
106
|
+
} else {
|
|
107
|
+
// otherwise we can return as is
|
|
108
|
+
return value;
|
|
109
|
+
}
|
|
110
|
+
} else if (value instanceof BashExpression) {
|
|
111
|
+
return escapeBashExpressionForDotEnv(value);
|
|
112
|
+
} else if (value instanceof VariableValueContainingReferences) {
|
|
113
|
+
// instead of doing it part-wise, we just do it all at once
|
|
114
|
+
|
|
115
|
+
const containsAnyBashExpression = value.parts.some(
|
|
116
|
+
(part) => part instanceof BashExpression,
|
|
117
|
+
);
|
|
118
|
+
if (!containsAnyBashExpression) {
|
|
119
|
+
return escapeForDotEnv(
|
|
120
|
+
value.toString({
|
|
121
|
+
quotes: "double",
|
|
122
|
+
}),
|
|
123
|
+
);
|
|
124
|
+
} else {
|
|
125
|
+
const result = escapeBashExpressionForDotEnv(
|
|
126
|
+
new BashExpression(
|
|
127
|
+
value.toString({
|
|
128
|
+
quotes: "double",
|
|
129
|
+
}),
|
|
130
|
+
),
|
|
131
|
+
);
|
|
132
|
+
|
|
133
|
+
return result;
|
|
134
|
+
}
|
|
135
|
+
} else {
|
|
136
|
+
return value;
|
|
137
|
+
}
|
|
138
|
+
};
|
|
139
|
+
// basically the same thing as above for bash
|
|
140
|
+
// thx chatgpt for this
|
|
141
|
+
const escapeForDotEnvScript = registerGlobalScriptFunction(
|
|
142
|
+
"escapeForDotEnv",
|
|
143
|
+
`
|
|
144
|
+
input="\${1:-$(cat)}"
|
|
145
|
+
input="\${input//$'\\n'/\\\\n}"
|
|
146
|
+
if [[ "$input" == *\\\\n* ]]; then
|
|
147
|
+
if [[ "$input" == *\\"* && "$input" == *\\'* && "$input" == *\\\`* ]]; then
|
|
148
|
+
printf "\\"%s\\"\\n" "$input" ${/* fallback to double quotes */ ""}
|
|
149
|
+
elif [[ "$input" == *\\"* && "$input" == *\\'* ]]; then
|
|
150
|
+
printf "\`%s\`\\n" "$input"
|
|
151
|
+
elif [[ "$input" == *\\"* ]]; then
|
|
152
|
+
printf "'%s'\\n" "$input"
|
|
153
|
+
else
|
|
154
|
+
printf "\\"%s\\"\\n" "$input"
|
|
155
|
+
fi
|
|
156
|
+
else
|
|
157
|
+
printf "%s\\n" "$input"
|
|
158
|
+
fi
|
|
159
|
+
`,
|
|
160
|
+
);
|
|
161
|
+
|
|
162
|
+
const escapeBashExpressionForDotEnv = (value: BashExpression) => {
|
|
163
|
+
return value.transformWithCommand(escapeForDotEnvScript.name).toString();
|
|
164
|
+
};
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { PipelineType } from "../types/pipeline";
|
|
2
|
+
import type { BashExpression } from "./BashExpression";
|
|
3
|
+
|
|
4
|
+
export type BashExpressionPerPipelineType = {
|
|
5
|
+
[type in PipelineType]?: BashExpression | string;
|
|
6
|
+
} & {
|
|
7
|
+
default: BashExpression | string;
|
|
8
|
+
};
|
|
9
|
+
|
|
10
|
+
export const getBashExpressionPerPipelineType = (
|
|
11
|
+
definition: BashExpressionPerPipelineType,
|
|
12
|
+
pipelineType?: PipelineType,
|
|
13
|
+
) => {
|
|
14
|
+
if (!pipelineType) return definition.default;
|
|
15
|
+
return definition[pipelineType] || definition.default;
|
|
16
|
+
};
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import type { ScalarTag } from "yaml";
|
|
2
|
+
import { stringify } from "yaml";
|
|
3
|
+
import { BashExpression } from "./BashExpression";
|
|
4
|
+
import { VariableValueContainingReferences } from "../variables/VariableValueContainingReferences";
|
|
5
|
+
|
|
6
|
+
const bashExpressionType: ScalarTag = {
|
|
7
|
+
tag: "",
|
|
8
|
+
resolve: (str) => {
|
|
9
|
+
// not really needed,but let's make typescript happy
|
|
10
|
+
return new BashExpression(str);
|
|
11
|
+
},
|
|
12
|
+
stringify(node: any, ctx: any) {
|
|
13
|
+
// we create a BLOCK_LITERAL
|
|
14
|
+
// but because bash will interpret the value, it may resolve to a multiline string
|
|
15
|
+
// so we need to indent every line using sed
|
|
16
|
+
return (
|
|
17
|
+
"|-\n" +
|
|
18
|
+
ctx.indent +
|
|
19
|
+
indentNewlinesInBashExpression(node.value, ctx.indent)
|
|
20
|
+
);
|
|
21
|
+
},
|
|
22
|
+
|
|
23
|
+
identify: (v: any) => v instanceof BashExpression,
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
const indentNewlinesInBashExpression = (
|
|
27
|
+
expression: BashExpression,
|
|
28
|
+
indent: string,
|
|
29
|
+
) => {
|
|
30
|
+
return expression.transformWithCommand(`sed '1!s/^/${indent}/'`);
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
const variableContainingReferences: ScalarTag = {
|
|
34
|
+
tag: "",
|
|
35
|
+
resolve: (str) => {
|
|
36
|
+
// not really needed,but let's make typescript happy
|
|
37
|
+
return new VariableValueContainingReferences(str);
|
|
38
|
+
},
|
|
39
|
+
stringify(node: any, ctx: any) {
|
|
40
|
+
const value: VariableValueContainingReferences = node.value;
|
|
41
|
+
const stringified = value.parts
|
|
42
|
+
.map((part) =>
|
|
43
|
+
part instanceof BashExpression
|
|
44
|
+
? indentNewlinesInBashExpression(part, ctx.indent)
|
|
45
|
+
: // indent every new line
|
|
46
|
+
part.toString().replace(/\n/g, `\n${ctx.indent}`),
|
|
47
|
+
)
|
|
48
|
+
.join("");
|
|
49
|
+
return "|-\n" + ctx.indent + stringified;
|
|
50
|
+
},
|
|
51
|
+
|
|
52
|
+
identify: (v: any) => v instanceof VariableValueContainingReferences,
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
/***
|
|
56
|
+
* creates a yaml string that can be used in bash scripts
|
|
57
|
+
* it handles BashExpressions correctly so that they can be evaluated in bash
|
|
58
|
+
*/
|
|
59
|
+
export const yamlBashString = (value: any) => {
|
|
60
|
+
return stringify(value, {
|
|
61
|
+
defaultStringType: "BLOCK_LITERAL",
|
|
62
|
+
defaultKeyType: "PLAIN",
|
|
63
|
+
customTags: [bashExpressionType, variableContainingReferences],
|
|
64
|
+
aliasDuplicateObjects: false,
|
|
65
|
+
lineWidth: 0,
|
|
66
|
+
});
|
|
67
|
+
};
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* creates a bash script that writes a yaml string to a file
|
|
71
|
+
* @param value the yaml value to write, it supports BashExpressions
|
|
72
|
+
*/
|
|
73
|
+
export const writeBashYamlToFileScript = (value: any, filename: string) => {
|
|
74
|
+
return [
|
|
75
|
+
`cat > ${filename} <<EOF
|
|
76
|
+
${yamlBashString(value)}
|
|
77
|
+
EOF
|
|
78
|
+
`,
|
|
79
|
+
];
|
|
80
|
+
};
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { UnspecifiedEnvVars } from "../types";
|
|
2
|
+
import { isNil } from "lodash";
|
|
3
|
+
import { bashEscape } from "./bashEscape";
|
|
4
|
+
|
|
5
|
+
export const getInjectVarsScript = (vars?: UnspecifiedEnvVars) => {
|
|
6
|
+
if (!vars) return [];
|
|
7
|
+
// filter out null and undefined values
|
|
8
|
+
return Object.entries(vars)
|
|
9
|
+
.filter(([, value]) => !isNil(value))
|
|
10
|
+
|
|
11
|
+
.map(
|
|
12
|
+
([key, value]) =>
|
|
13
|
+
`export ${key}="${
|
|
14
|
+
value
|
|
15
|
+
? bashEscape(value, {
|
|
16
|
+
quotes: "double",
|
|
17
|
+
})
|
|
18
|
+
: ""
|
|
19
|
+
}"`,
|
|
20
|
+
);
|
|
21
|
+
};
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { join } from "path";
|
|
2
|
+
import {
|
|
3
|
+
componentContextIsStandaloneBuild,
|
|
4
|
+
type ComponentContext,
|
|
5
|
+
type Context,
|
|
6
|
+
} from "../../types";
|
|
7
|
+
import type { CatladderJob } from "../../types/jobs";
|
|
8
|
+
import { uniq } from "lodash";
|
|
9
|
+
import { componentContextNeedsBuildTimeDotEnv } from "../base/writeDotEnv";
|
|
10
|
+
|
|
11
|
+
export const createBuildJobArtifacts = (
|
|
12
|
+
context: Context,
|
|
13
|
+
): CatladderJob["artifacts"] => {
|
|
14
|
+
const paths =
|
|
15
|
+
context.type === "workspace"
|
|
16
|
+
? context.components.flatMap((c) => getArtifactsPathForComponent(c))
|
|
17
|
+
: getArtifactsPathForComponent(context, ["__build_info.json"]);
|
|
18
|
+
// esxclude .env files if generated
|
|
19
|
+
const exclude =
|
|
20
|
+
context.type === "workspace"
|
|
21
|
+
? context.components.flatMap((c) => getDotEnvPathsForComponent(c))
|
|
22
|
+
: getDotEnvPathsForComponent(context);
|
|
23
|
+
return {
|
|
24
|
+
paths: uniq(paths).sort((a, b) => a.localeCompare(b)),
|
|
25
|
+
...(exclude.length > 0 ? { exclude } : {}),
|
|
26
|
+
expire_in: "1 day",
|
|
27
|
+
when: "always",
|
|
28
|
+
reports:
|
|
29
|
+
// TODO: support for junit reports in other builds
|
|
30
|
+
context.type === "component" && componentContextIsStandaloneBuild(context)
|
|
31
|
+
? {
|
|
32
|
+
junit: context.build.config.artifactsReports?.junit?.map((p) =>
|
|
33
|
+
join(context.build.dir, p),
|
|
34
|
+
),
|
|
35
|
+
}
|
|
36
|
+
: {},
|
|
37
|
+
};
|
|
38
|
+
};
|
|
39
|
+
const getArtifactsPathForComponent = (
|
|
40
|
+
c: ComponentContext,
|
|
41
|
+
additionalPaths?: string[],
|
|
42
|
+
): string[] => {
|
|
43
|
+
return [
|
|
44
|
+
...(c.build.type !== "disabled"
|
|
45
|
+
? (c.build.config.artifactsPaths ?? [])
|
|
46
|
+
: []),
|
|
47
|
+
...(additionalPaths ?? []),
|
|
48
|
+
]?.flatMap((artifact) =>
|
|
49
|
+
c.build
|
|
50
|
+
// in theory, we only need "direct",
|
|
51
|
+
// but in some cases project may have packages in the workspace that create build artifacts, which aren't components
|
|
52
|
+
// this highly depends on the build tool. To be safe, we get all
|
|
53
|
+
.getComponentDirs("all")
|
|
54
|
+
.flatMap((cDir) => join(cDir, artifact)),
|
|
55
|
+
);
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
const getDotEnvPathsForComponent = (c: ComponentContext): string[] => {
|
|
59
|
+
if (componentContextNeedsBuildTimeDotEnv(c)) {
|
|
60
|
+
return [join(c.build.dir, ".env")];
|
|
61
|
+
}
|
|
62
|
+
return [];
|
|
63
|
+
};
|