@catladder/pipeline 1.144.1 → 1.145.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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 +41 -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 +9 -2
- 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 +3 -2
- 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/custom-deploy.ts +7 -7
- package/examples/multiline-var.ts +64 -0
- package/package.json +5 -8
- 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/createAppBuildJob.ts +6 -2
- package/src/build/base/writeBuildInfo.ts +1 -1
- package/src/build/base/writeDotEnv.ts +6 -1
- package/src/build/custom/buildJob.ts +2 -4
- package/src/build/custom/testJob.ts +3 -2
- package/src/build/docker.ts +15 -7
- package/src/build/node/buildJob.ts +1 -3
- package/src/build/node/testJob.ts +3 -2
- package/src/build/node/yarn.ts +9 -4
- 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/readConfig.ts +2 -3
- 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/getEnvironment.ts +7 -30
- package/src/context/getEnvironmentContext.ts +25 -29
- package/src/context/getEnvironmentVariables.ts +61 -36
- package/src/context/getReviewSlug.ts +27 -0
- package/src/context/index.ts +24 -23
- package/src/context/resolveReferences.ts +28 -8
- package/src/context/transformJobOnlyVars.ts +5 -2
- package/src/context/utils/envVars.ts +2 -1
- package/src/deploy/base/deploy.ts +20 -18
- package/src/deploy/base/rollback.ts +8 -10
- package/src/deploy/base/stop.ts +8 -9
- package/src/deploy/cloudRun/artifactsRegistry.ts +9 -4
- package/src/deploy/cloudRun/createJobs/cloudRunJobs.ts +12 -7
- package/src/deploy/cloudRun/createJobs/cloudRunServices.ts +3 -2
- package/src/deploy/cloudRun/createJobs/constants.ts +1 -0
- package/src/deploy/cloudRun/createJobs/getCloudRunDeployScripts.ts +20 -2
- package/src/deploy/cloudRun/createJobs/index.ts +17 -8
- package/src/deploy/cloudRun/index.ts +14 -6
- package/src/deploy/cloudRun/utils/createArgsString.ts +2 -1
- package/src/deploy/cloudRun/utils/database.ts +2 -2
- package/src/deploy/cloudRun/utils/jobName.ts +7 -2
- package/src/deploy/cloudSql/utils.ts +12 -9
- package/src/deploy/index.ts +2 -1
- package/src/deploy/kubernetes/cloudSql/index.ts +3 -2
- package/src/deploy/kubernetes/deployJob.ts +24 -10
- package/src/deploy/kubernetes/index.ts +15 -8
- package/src/deploy/kubernetes/kubeEnv.ts +8 -6
- package/src/deploy/kubernetes/kubeValues.ts +0 -1
- package/src/deploy/kubernetes/processSecretsAsFiles.ts +2 -1
- package/src/deploy/types/base.ts +6 -0
- package/src/deploy/types/googleCloudRun.ts +2 -0
- package/src/index.ts +2 -1
- package/src/packageInfos.ts +10 -0
- package/src/pipeline/createAllJobs.ts +24 -10
- package/src/pipeline/createChildPipeline.ts +19 -8
- package/src/pipeline/createJobsForComponent.ts +14 -22
- package/src/pipeline/createMainPipeline.ts +88 -0
- package/src/pipeline/generatePipelineFiles.ts +29 -0
- package/src/pipeline/gitlab/createGitlabJobs.ts +174 -51
- 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/rules/index.ts +15 -9
- package/src/types/config.ts +11 -2
- package/src/types/context.ts +39 -26
- package/src/types/environmentContext.ts +12 -6
- package/src/types/gitlab-ci-yml.ts +0 -1
- package/src/types/gitlab-types.ts +5 -4
- package/src/types/jobs.ts +28 -3
- package/src/types/pipeline.ts +4 -0
- 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
|
@@ -33,6 +33,9 @@ exports[`matches snapshot 1`] = `
|
|
|
33
33
|
],
|
|
34
34
|
},
|
|
35
35
|
"script": [
|
|
36
|
+
"echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
|
|
37
|
+
"export APP_PATH="app"",
|
|
38
|
+
"echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
|
|
36
39
|
"echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"",
|
|
37
40
|
"if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
|
|
38
41
|
"if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
|
|
@@ -49,7 +52,6 @@ exports[`matches snapshot 1`] = `
|
|
|
49
52
|
],
|
|
50
53
|
"stage": "test",
|
|
51
54
|
"variables": {
|
|
52
|
-
"APP_PATH": "app",
|
|
53
55
|
"KUBERNETES_CPU_REQUEST": "0.5",
|
|
54
56
|
"KUBERNETES_MEMORY_LIMIT": "4Gi",
|
|
55
57
|
"KUBERNETES_MEMORY_REQUEST": "2Gi",
|
|
@@ -102,7 +104,26 @@ exports[`matches snapshot 1`] = `
|
|
|
102
104
|
],
|
|
103
105
|
},
|
|
104
106
|
"script": [
|
|
105
|
-
"echo
|
|
107
|
+
"echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
|
|
108
|
+
"export ENV_SHORT="dev"",
|
|
109
|
+
"export APP_DIR="app"",
|
|
110
|
+
"export ENV_TYPE="dev"",
|
|
111
|
+
"export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
|
|
112
|
+
"export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
|
|
113
|
+
"export BUILD_INFO_CURRENT_VERSION="$(tag=$(git ls-remote origin "refs/tags/v*[0-9]" 2>/dev/null | cut -f 2- | sort -V | tail -1 | sed 's/refs\\/tags\\///'); [ -z "$tag" ] && echo "v0.0.0" || echo "$tag")"",
|
|
114
|
+
"export HOST="$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
|
|
115
|
+
"export ROOT_URL="https://$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
|
|
116
|
+
"export HOST_INTERNAL="$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
|
|
117
|
+
"export HOST_CANONICAL="$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
|
|
118
|
+
"export ROOT_URL_INTERNAL="https://$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
|
|
119
|
+
"export CLOUD_RUN_JOB_TRIGGER_URL_alarm_clock="https://asia-east1-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/asdf/jobs/pan-test-app-dev-api-alarm-clock:run"",
|
|
120
|
+
"export DEPLOY_CLOUD_RUN_PROJECT_ID="asdf"",
|
|
121
|
+
"export DEPLOY_CLOUD_RUN_REGION="asia-east1"",
|
|
122
|
+
"export GCLOUD_DEPLOY_credentialsKey="$CL_dev_api_GCLOUD_DEPLOY_credentialsKey"",
|
|
123
|
+
"export GCLOUD_RUN_canonicalHostSuffix="$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix"",
|
|
124
|
+
"export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOST\\",\\"ROOT_URL\\",\\"HOST_INTERNAL\\",\\"HOST_CANONICAL\\",\\"ROOT_URL_INTERNAL\\",\\"CLOUD_RUN_JOB_TRIGGER_URL_alarm_clock\\",\\"DEPLOY_CLOUD_RUN_PROJECT_ID\\",\\"DEPLOY_CLOUD_RUN_REGION\\",\\"GCLOUD_DEPLOY_credentialsKey\\",\\"GCLOUD_RUN_canonicalHostSuffix\\"]"",
|
|
125
|
+
"echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
|
|
126
|
+
"echo '{"id":"$(git describe --tags 2>/dev/null || git rev-parse HEAD)","time":"$CI_JOB_STARTED_AT"}' > app/__build_info.json",
|
|
106
127
|
"echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"",
|
|
107
128
|
"if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
|
|
108
129
|
"if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
|
|
@@ -119,26 +140,9 @@ exports[`matches snapshot 1`] = `
|
|
|
119
140
|
],
|
|
120
141
|
"stage": "build",
|
|
121
142
|
"variables": {
|
|
122
|
-
"APP_DIR": "app",
|
|
123
|
-
"BUILD_INFO_BUILD_TIME": "01-01-2023 12:13:14",
|
|
124
|
-
"BUILD_INFO_CURRENT_VERSION": "3.2.1",
|
|
125
|
-
"BUILD_INFO_ID": "some-id",
|
|
126
|
-
"CLOUD_RUN_JOB_TRIGGER_URL_alarm_clock": "https://asia-east1-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/asdf/jobs/pan-test-app-dev-api-alarm-clock:run",
|
|
127
|
-
"DEPLOY_CLOUD_RUN_PROJECT_ID": "asdf",
|
|
128
|
-
"DEPLOY_CLOUD_RUN_REGION": "asia-east1",
|
|
129
|
-
"ENV_SHORT": "dev",
|
|
130
|
-
"ENV_TYPE": "dev",
|
|
131
|
-
"GCLOUD_DEPLOY_credentialsKey": "$CL_dev_api_GCLOUD_DEPLOY_credentialsKey",
|
|
132
|
-
"GCLOUD_RUN_canonicalHostSuffix": "$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix",
|
|
133
|
-
"HOST": "pan-test-app-dev-api-unknown-host.example.com",
|
|
134
|
-
"HOST_CANONICAL": "pan-test-app-dev-api-unknown-host.example.com",
|
|
135
|
-
"HOST_INTERNAL": "pan-test-app-dev-api-unknown-host.example.com",
|
|
136
143
|
"KUBERNETES_CPU_REQUEST": "0.5",
|
|
137
144
|
"KUBERNETES_MEMORY_LIMIT": "4Gi",
|
|
138
145
|
"KUBERNETES_MEMORY_REQUEST": "2Gi",
|
|
139
|
-
"ROOT_URL": "https://pan-test-app-dev-api-unknown-host.example.com",
|
|
140
|
-
"ROOT_URL_INTERNAL": "https://pan-test-app-dev-api-unknown-host.example.com",
|
|
141
|
-
"_ALL_ENV_VAR_KEYS": "["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","HOST_CANONICAL","ROOT_URL_INTERNAL","HOST_INTERNAL","CLOUD_RUN_JOB_TRIGGER_URL_alarm_clock","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]",
|
|
142
146
|
},
|
|
143
147
|
},
|
|
144
148
|
"api 🔨 docker | dev ": {
|
|
@@ -164,6 +168,21 @@ exports[`matches snapshot 1`] = `
|
|
|
164
168
|
],
|
|
165
169
|
},
|
|
166
170
|
"script": [
|
|
171
|
+
"echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
|
|
172
|
+
"export APP_DIR="app"",
|
|
173
|
+
"export DOCKER_DIR="."",
|
|
174
|
+
"export DOCKER_REGISTRY="asia-east1-docker.pkg.dev"",
|
|
175
|
+
"export DOCKER_IMAGE="asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/dev/api"",
|
|
176
|
+
"export DOCKER_CACHE_IMAGE="asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/caches/api"",
|
|
177
|
+
"export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"",
|
|
178
|
+
"export DOCKER_COPY_AND_INSTALL_APP="COPY --chown=node:node $APP_DIR .
|
|
179
|
+
RUN yarn plugin import workspace-tools
|
|
180
|
+
RUN yarn workspaces focus --production && yarn rebuild"",
|
|
181
|
+
"export DOCKER_COPY_WORKSPACE_FILES="COPY --chown=node:node app/package.json /app/app/package.json
|
|
182
|
+
COPY --chown=node:node app/yarn.lock /app/app/yarn.lock
|
|
183
|
+
COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
|
|
184
|
+
COPY --chown=node:node .yarn /app/.yarn"",
|
|
185
|
+
"echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
|
|
167
186
|
"ensureNodeDockerfile",
|
|
168
187
|
"echo -e "\\e[0Ksection_start:$(date +%s):docker-login[collapsed=true]\\r\\e[0KDocker Login"",
|
|
169
188
|
"gcloud auth activate-service-account --key-file=<(echo "$CL_dev_api_GCLOUD_DEPLOY_credentialsKey")",
|
|
@@ -188,24 +207,9 @@ exports[`matches snapshot 1`] = `
|
|
|
188
207
|
],
|
|
189
208
|
"stage": "build",
|
|
190
209
|
"variables": {
|
|
191
|
-
"APP_DIR": "app",
|
|
192
|
-
"DOCKERFILE_ADDITIONS": undefined,
|
|
193
|
-
"DOCKERFILE_ADDITIONS_END": undefined,
|
|
194
210
|
"DOCKER_BUILDKIT": "1",
|
|
195
|
-
"DOCKER_CACHE_IMAGE": "asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/caches/api",
|
|
196
|
-
"DOCKER_COPY_AND_INSTALL_APP": "COPY --chown=node:node $APP_DIR .
|
|
197
|
-
RUN yarn plugin import workspace-tools
|
|
198
|
-
RUN yarn workspaces focus --production && yarn rebuild",
|
|
199
|
-
"DOCKER_COPY_WORKSPACE_FILES": "COPY --chown=node:node app/package.json /app/app/package.json
|
|
200
|
-
COPY --chown=node:node app/yarn.lock /app/app/yarn.lock
|
|
201
|
-
COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
|
|
202
|
-
COPY --chown=node:node .yarn /app/.yarn",
|
|
203
|
-
"DOCKER_DIR": ".",
|
|
204
211
|
"DOCKER_DRIVER": "overlay2",
|
|
205
212
|
"DOCKER_HOST": "tcp://0.0.0.0:2375",
|
|
206
|
-
"DOCKER_IMAGE": "asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/dev/api",
|
|
207
|
-
"DOCKER_IMAGE_TAG": "$CI_COMMIT_SHA",
|
|
208
|
-
"DOCKER_REGISTRY": "asia-east1-docker.pkg.dev",
|
|
209
213
|
"DOCKER_TLS_CERTDIR": "",
|
|
210
214
|
"KUBERNETES_CPU_REQUEST": "0.5",
|
|
211
215
|
"KUBERNETES_MEMORY_LIMIT": "2Gi",
|
|
@@ -215,14 +219,15 @@ COPY --chown=node:node .yarn /app/.yarn",
|
|
|
215
219
|
"api 🚀 Deploy | dev ": {
|
|
216
220
|
"allow_failure": false,
|
|
217
221
|
"artifacts": {
|
|
218
|
-
"
|
|
219
|
-
"
|
|
220
|
-
|
|
222
|
+
"reports": {
|
|
223
|
+
"dotenv": "gitlab_environment.env",
|
|
224
|
+
},
|
|
221
225
|
},
|
|
222
226
|
"environment": {
|
|
223
227
|
"auto_stop_in": "4 weeks",
|
|
224
228
|
"name": "dev/api",
|
|
225
229
|
"on_stop": "api 🛑 Stop ⚠️ | dev ",
|
|
230
|
+
"url": "$CL_GITLAB_ENVIRONMENT_URL",
|
|
226
231
|
},
|
|
227
232
|
"image": "path/to/docker/gcloud:the-version",
|
|
228
233
|
"interruptible": true,
|
|
@@ -265,13 +270,74 @@ COPY --chown=node:node .yarn /app/.yarn",
|
|
|
265
270
|
},
|
|
266
271
|
],
|
|
267
272
|
"script": [
|
|
273
|
+
"echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
|
|
274
|
+
"export ENV_SHORT="dev"",
|
|
275
|
+
"export APP_DIR="app"",
|
|
276
|
+
"export ENV_TYPE="dev"",
|
|
277
|
+
"export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
|
|
278
|
+
"export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
|
|
279
|
+
"export BUILD_INFO_CURRENT_VERSION="$(tag=$(git ls-remote origin "refs/tags/v*[0-9]" 2>/dev/null | cut -f 2- | sort -V | tail -1 | sed 's/refs\\/tags\\///'); [ -z "$tag" ] && echo "v0.0.0" || echo "$tag")"",
|
|
280
|
+
"export HOST="$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
|
|
281
|
+
"export ROOT_URL="https://$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
|
|
282
|
+
"export HOST_INTERNAL="$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
|
|
283
|
+
"export HOST_CANONICAL="$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
|
|
284
|
+
"export ROOT_URL_INTERNAL="https://$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
|
|
285
|
+
"export CLOUD_RUN_JOB_TRIGGER_URL_alarm_clock="https://asia-east1-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/asdf/jobs/pan-test-app-dev-api-alarm-clock:run"",
|
|
286
|
+
"export DEPLOY_CLOUD_RUN_PROJECT_ID="asdf"",
|
|
287
|
+
"export DEPLOY_CLOUD_RUN_REGION="asia-east1"",
|
|
288
|
+
"export GCLOUD_DEPLOY_credentialsKey="$CL_dev_api_GCLOUD_DEPLOY_credentialsKey"",
|
|
289
|
+
"export GCLOUD_RUN_canonicalHostSuffix="$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix"",
|
|
290
|
+
"export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOST\\",\\"ROOT_URL\\",\\"HOST_INTERNAL\\",\\"HOST_CANONICAL\\",\\"ROOT_URL_INTERNAL\\",\\"CLOUD_RUN_JOB_TRIGGER_URL_alarm_clock\\",\\"DEPLOY_CLOUD_RUN_PROJECT_ID\\",\\"DEPLOY_CLOUD_RUN_REGION\\",\\"GCLOUD_DEPLOY_credentialsKey\\",\\"GCLOUD_RUN_canonicalHostSuffix\\"]"",
|
|
291
|
+
"export DOCKER_REGISTRY="asia-east1-docker.pkg.dev"",
|
|
292
|
+
"export DOCKER_IMAGE="asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/dev/api"",
|
|
293
|
+
"export DOCKER_CACHE_IMAGE="asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/caches/api"",
|
|
294
|
+
"export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"",
|
|
295
|
+
"export CLOUDSDK_CORE_DISABLE_PROMPTS="1"",
|
|
296
|
+
"echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
|
|
268
297
|
"echo -e "\\e[0Ksection_start:$(date +%s):prepare[collapsed=true]\\r\\e[0KPrepare..."",
|
|
269
298
|
"gcloud auth activate-service-account --key-file=<(echo "$CL_dev_api_GCLOUD_DEPLOY_credentialsKey")",
|
|
270
299
|
"export GCLOUD_PROJECT_NUMBER=$(gcloud projects describe asdf --format="value(projectNumber)")",
|
|
271
300
|
"echo "GCLOUD_PROJECT_NUMBER: $GCLOUD_PROJECT_NUMBER"",
|
|
272
301
|
"echo -e "\\e[0Ksection_end:$(date +%s):prepare\\r\\e[0K"",
|
|
302
|
+
"echo -e "\\e[0Ksection_start:$(date +%s):writeenvvars[collapsed=true]\\r\\e[0KWrite env vars to file"",
|
|
303
|
+
"cat > ____envvars.yaml <<EOF
|
|
304
|
+
ENV_SHORT: |-
|
|
305
|
+
dev
|
|
306
|
+
APP_DIR: |-
|
|
307
|
+
app
|
|
308
|
+
ENV_TYPE: |-
|
|
309
|
+
dev
|
|
310
|
+
BUILD_INFO_BUILD_ID: |-
|
|
311
|
+
$(printf %s "$(git describe --tags 2>/dev/null || git rev-parse HEAD)" | sed 's/^/ /')
|
|
312
|
+
BUILD_INFO_BUILD_TIME: |-
|
|
313
|
+
$(printf %s "$CI_JOB_STARTED_AT" | sed 's/^/ /')
|
|
314
|
+
BUILD_INFO_CURRENT_VERSION: |-
|
|
315
|
+
$(printf %s "$(tag=$(git ls-remote origin "refs/tags/v*[0-9]" 2>/dev/null | cut -f 2- | sort -V | tail -1 | sed 's/refs\\/tags\\///'); [ -z "$tag" ] && echo "v0.0.0" || echo "$tag")" | sed 's/^/ /')
|
|
316
|
+
HOST: |-
|
|
317
|
+
$(printf %s "$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
|
|
318
|
+
ROOT_URL: |-
|
|
319
|
+
$(printf %s "https://$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
|
|
320
|
+
HOST_INTERNAL: |-
|
|
321
|
+
$(printf %s "$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
|
|
322
|
+
HOST_CANONICAL: |-
|
|
323
|
+
$(printf %s "$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
|
|
324
|
+
ROOT_URL_INTERNAL: |-
|
|
325
|
+
$(printf %s "https://$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
|
|
326
|
+
CLOUD_RUN_JOB_TRIGGER_URL_alarm_clock: |-
|
|
327
|
+
https://asia-east1-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/asdf/jobs/pan-test-app-dev-api-alarm-clock:run
|
|
328
|
+
DEPLOY_CLOUD_RUN_PROJECT_ID: |-
|
|
329
|
+
asdf
|
|
330
|
+
DEPLOY_CLOUD_RUN_REGION: |-
|
|
331
|
+
asia-east1
|
|
332
|
+
GCLOUD_RUN_canonicalHostSuffix: |-
|
|
333
|
+
$(printf %s "$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | sed 's/^/ /')
|
|
334
|
+
_ALL_ENV_VAR_KEYS: |-
|
|
335
|
+
["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","HOST_INTERNAL","HOST_CANONICAL","ROOT_URL_INTERNAL","CLOUD_RUN_JOB_TRIGGER_URL_alarm_clock","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]
|
|
336
|
+
|
|
337
|
+
EOF
|
|
338
|
+
",
|
|
339
|
+
"echo -e "\\e[0Ksection_end:$(date +%s):writeenvvars\\r\\e[0K"",
|
|
273
340
|
"echo -e "\\e[0Ksection_start:$(date +%s):deploy[collapsed=true]\\r\\e[0KDeploy to cloud run"",
|
|
274
|
-
"echo "$ENV_VARS" > ____envvars.yaml",
|
|
275
341
|
"set +e",
|
|
276
342
|
"gcloud scheduler jobs create http pan-test-app-dev-api-alarm-clock-scheduler --project=asdf --location=asia-east1 --schedule="0 7 0 0 1-5" --max-retry-attempts=0 --uri="https://asia-east1-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/asdf/jobs/pan-test-app-dev-api-alarm-clock:run" --http-method=POST --oauth-service-account-email=$GCLOUD_PROJECT_NUMBER-compute@developer.gserviceaccount.com",
|
|
277
343
|
"set -e",
|
|
@@ -287,70 +353,27 @@ COPY --chown=node:node .yarn /app/.yarn",
|
|
|
287
353
|
"gcloud artifacts docker images list asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/caches/api --sort-by=~CREATE_TIME --format="value(version)" | tail -n +2 | while read -r version; do gcloud artifacts docker images delete asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/caches/api@$version --quiet --delete-tags; done",
|
|
288
354
|
"echo -e "\\e[0Ksection_end:$(date +%s):cleanup\\r\\e[0K"",
|
|
289
355
|
"echo Uploading SBOM to Dependency Track",
|
|
290
|
-
"/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/api" "https
|
|
291
|
-
|
|
292
|
-
"services": [
|
|
293
|
-
{
|
|
294
|
-
"command": [
|
|
295
|
-
"--tls=false",
|
|
296
|
-
],
|
|
297
|
-
"name": "docker:24.0.6-dind",
|
|
298
|
-
},
|
|
356
|
+
"/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/api" "https://$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" "__sbom.json" vex.json || true",
|
|
357
|
+
"echo "CL_GITLAB_ENVIRONMENT_URL=https://$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" >> gitlab_environment.env",
|
|
299
358
|
],
|
|
300
359
|
"stage": "deploy dev",
|
|
301
360
|
"variables": {
|
|
302
|
-
"APP_DIR": "app",
|
|
303
|
-
"BUILD_INFO_BUILD_TIME": "01-01-2023 12:13:14",
|
|
304
|
-
"BUILD_INFO_CURRENT_VERSION": "3.2.1",
|
|
305
|
-
"BUILD_INFO_ID": "some-id",
|
|
306
|
-
"CLOUDSDK_CORE_DISABLE_PROMPTS": "1",
|
|
307
|
-
"CLOUD_RUN_JOB_TRIGGER_URL_alarm_clock": "https://asia-east1-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/asdf/jobs/pan-test-app-dev-api-alarm-clock:run",
|
|
308
|
-
"DEPLOY_CLOUD_RUN_PROJECT_ID": "asdf",
|
|
309
|
-
"DEPLOY_CLOUD_RUN_REGION": "asia-east1",
|
|
310
|
-
"DOCKER_BUILDKIT": "1",
|
|
311
|
-
"DOCKER_CACHE_IMAGE": "asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/caches/api",
|
|
312
|
-
"DOCKER_DRIVER": "overlay2",
|
|
313
|
-
"DOCKER_HOST": "tcp://0.0.0.0:2375",
|
|
314
|
-
"DOCKER_IMAGE": "asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/dev/api",
|
|
315
|
-
"DOCKER_IMAGE_TAG": "$CI_COMMIT_SHA",
|
|
316
|
-
"DOCKER_REGISTRY": "asia-east1-docker.pkg.dev",
|
|
317
|
-
"DOCKER_TLS_CERTDIR": "",
|
|
318
|
-
"ENV_SHORT": "dev",
|
|
319
|
-
"ENV_TYPE": "dev",
|
|
320
|
-
"ENV_VARS": "ENV_SHORT: 'dev'
|
|
321
|
-
APP_DIR: 'app'
|
|
322
|
-
ENV_TYPE: 'dev'
|
|
323
|
-
BUILD_INFO_ID: 'some-id'
|
|
324
|
-
BUILD_INFO_BUILD_TIME: '01-01-2023 12:13:14'
|
|
325
|
-
BUILD_INFO_CURRENT_VERSION: '3.2.1'
|
|
326
|
-
HOST: 'pan-test-app-dev-api-unknown-host.example.com'
|
|
327
|
-
ROOT_URL: 'https://pan-test-app-dev-api-unknown-host.example.com'
|
|
328
|
-
HOST_CANONICAL: 'pan-test-app-dev-api-unknown-host.example.com'
|
|
329
|
-
ROOT_URL_INTERNAL: 'https://pan-test-app-dev-api-unknown-host.example.com'
|
|
330
|
-
HOST_INTERNAL: 'pan-test-app-dev-api-unknown-host.example.com'
|
|
331
|
-
CLOUD_RUN_JOB_TRIGGER_URL_alarm_clock: 'https://asia-east1-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/asdf/jobs/pan-test-app-dev-api-alarm-clock:run'
|
|
332
|
-
DEPLOY_CLOUD_RUN_PROJECT_ID: 'asdf'
|
|
333
|
-
DEPLOY_CLOUD_RUN_REGION: 'asia-east1'
|
|
334
|
-
GCLOUD_RUN_canonicalHostSuffix: '$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix'
|
|
335
|
-
_ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","HOST_CANONICAL","ROOT_URL_INTERNAL","HOST_INTERNAL","CLOUD_RUN_JOB_TRIGGER_URL_alarm_clock","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]'
|
|
336
|
-
",
|
|
337
|
-
"GCLOUD_DEPLOY_credentialsKey": "$CL_dev_api_GCLOUD_DEPLOY_credentialsKey",
|
|
338
|
-
"GCLOUD_RUN_canonicalHostSuffix": "$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix",
|
|
339
|
-
"HOST": "pan-test-app-dev-api-unknown-host.example.com",
|
|
340
|
-
"HOST_CANONICAL": "pan-test-app-dev-api-unknown-host.example.com",
|
|
341
|
-
"HOST_INTERNAL": "pan-test-app-dev-api-unknown-host.example.com",
|
|
342
361
|
"KUBERNETES_CPU_REQUEST": "0.5",
|
|
343
362
|
"KUBERNETES_MEMORY_LIMIT": "400Mi",
|
|
344
363
|
"KUBERNETES_MEMORY_REQUEST": "200Mi",
|
|
345
|
-
"ROOT_URL": "https://pan-test-app-dev-api-unknown-host.example.com",
|
|
346
|
-
"ROOT_URL_INTERNAL": "https://pan-test-app-dev-api-unknown-host.example.com",
|
|
347
|
-
"_ALL_ENV_VAR_KEYS": "["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","HOST_CANONICAL","ROOT_URL_INTERNAL","HOST_INTERNAL","CLOUD_RUN_JOB_TRIGGER_URL_alarm_clock","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]",
|
|
348
364
|
},
|
|
349
365
|
},
|
|
350
366
|
"api 🛑 Stop ⚠️ | dev ": {
|
|
367
|
+
"allow_failure": true,
|
|
368
|
+
"artifacts": {
|
|
369
|
+
"reports": {
|
|
370
|
+
"dotenv": "gitlab_environment.env",
|
|
371
|
+
},
|
|
372
|
+
},
|
|
351
373
|
"environment": {
|
|
352
374
|
"action": "stop",
|
|
353
375
|
"name": "dev/api",
|
|
376
|
+
"url": "$CL_GITLAB_ENVIRONMENT_URL",
|
|
354
377
|
},
|
|
355
378
|
"image": "path/to/docker/gcloud:the-version",
|
|
356
379
|
"interruptible": true,
|
|
@@ -364,16 +387,17 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
|
|
|
364
387
|
},
|
|
365
388
|
"rules": [
|
|
366
389
|
{
|
|
367
|
-
"allow_failure": true,
|
|
368
390
|
"if": "$CI_COMMIT_BRANCH =~ /^[0-9]+\\.([0-9]+|x)\\.x$/",
|
|
369
391
|
"when": "on_success",
|
|
370
392
|
},
|
|
371
393
|
{
|
|
372
|
-
"allow_failure": true,
|
|
373
394
|
"when": "manual",
|
|
374
395
|
},
|
|
375
396
|
],
|
|
376
397
|
"script": [
|
|
398
|
+
"echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
|
|
399
|
+
"export CLOUDSDK_CORE_DISABLE_PROMPTS="1"",
|
|
400
|
+
"echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
|
|
377
401
|
"set +e",
|
|
378
402
|
"gcloud auth activate-service-account --key-file=<(echo "$CL_dev_api_GCLOUD_DEPLOY_credentialsKey")",
|
|
379
403
|
"gcloud scheduler jobs delete pan-test-app-dev-api-alarm-clock-scheduler --project=asdf --location=asia-east1",
|
|
@@ -382,12 +406,12 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
|
|
|
382
406
|
"gcloud artifacts docker images delete asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/dev/api --quiet --delete-tags",
|
|
383
407
|
"gcloud artifacts docker images list asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/caches/api --sort-by=~CREATE_TIME --format="value(version)" | tail -n +2 | while read -r version; do gcloud artifacts docker images delete asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/caches/api@$version --quiet --delete-tags; done",
|
|
384
408
|
"echo Disabling component in Dependency Track",
|
|
385
|
-
"/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" disable "pan-test-app/api" "https
|
|
409
|
+
"/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" disable "pan-test-app/api" "https://$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" || true",
|
|
386
410
|
"set -e",
|
|
411
|
+
"echo "CL_GITLAB_ENVIRONMENT_URL=https://$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" >> gitlab_environment.env",
|
|
387
412
|
],
|
|
388
413
|
"stage": "stop dev",
|
|
389
414
|
"variables": {
|
|
390
|
-
"CLOUDSDK_CORE_DISABLE_PROMPTS": "1",
|
|
391
415
|
"GIT_STRATEGY": "none",
|
|
392
416
|
"KUBERNETES_CPU_REQUEST": "0.5",
|
|
393
417
|
"KUBERNETES_MEMORY_LIMIT": "400Mi",
|
|
@@ -407,12 +431,14 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
|
|
|
407
431
|
],
|
|
408
432
|
},
|
|
409
433
|
"script": [
|
|
434
|
+
"echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
|
|
435
|
+
"export APP_PATH="app"",
|
|
436
|
+
"echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
|
|
410
437
|
"cd app",
|
|
411
438
|
"yarn npm audit --environment production",
|
|
412
439
|
],
|
|
413
440
|
"stage": "test",
|
|
414
441
|
"variables": {
|
|
415
|
-
"APP_PATH": "app",
|
|
416
442
|
"KUBERNETES_CPU_REQUEST": "0.5",
|
|
417
443
|
"KUBERNETES_MEMORY_LIMIT": "4Gi",
|
|
418
444
|
"KUBERNETES_MEMORY_REQUEST": "2Gi",
|
|
@@ -446,6 +472,9 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
|
|
|
446
472
|
],
|
|
447
473
|
},
|
|
448
474
|
"script": [
|
|
475
|
+
"echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
|
|
476
|
+
"export APP_PATH="app"",
|
|
477
|
+
"echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
|
|
449
478
|
"echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"",
|
|
450
479
|
"if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
|
|
451
480
|
"if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
|
|
@@ -462,7 +491,6 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
|
|
|
462
491
|
],
|
|
463
492
|
"stage": "test",
|
|
464
493
|
"variables": {
|
|
465
|
-
"APP_PATH": "app",
|
|
466
494
|
"KUBERNETES_CPU_REQUEST": "0.5",
|
|
467
495
|
"KUBERNETES_MEMORY_LIMIT": "4Gi",
|
|
468
496
|
"KUBERNETES_MEMORY_REQUEST": "2Gi",
|
|
@@ -486,6 +514,8 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
|
|
|
486
514
|
],
|
|
487
515
|
},
|
|
488
516
|
"script": [
|
|
517
|
+
"echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
|
|
518
|
+
"echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
|
|
489
519
|
"trivy fs --quiet --format cyclonedx --output "__sbom.json" app",
|
|
490
520
|
],
|
|
491
521
|
"stage": "build",
|
|
@@ -538,7 +568,7 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
|
|
|
538
568
|
],
|
|
539
569
|
"variables": {
|
|
540
570
|
"FF_USE_FASTZIP": "true",
|
|
541
|
-
"GIT_DEPTH": 1,
|
|
571
|
+
"GIT_DEPTH": "1",
|
|
542
572
|
},
|
|
543
573
|
"workflow": {
|
|
544
574
|
"rules": [
|
|
@@ -596,6 +626,9 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
|
|
|
596
626
|
],
|
|
597
627
|
},
|
|
598
628
|
"script": [
|
|
629
|
+
"echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
|
|
630
|
+
"export APP_PATH="app"",
|
|
631
|
+
"echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
|
|
599
632
|
"echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"",
|
|
600
633
|
"if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
|
|
601
634
|
"if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
|
|
@@ -612,7 +645,6 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
|
|
|
612
645
|
],
|
|
613
646
|
"stage": "test",
|
|
614
647
|
"variables": {
|
|
615
|
-
"APP_PATH": "app",
|
|
616
648
|
"KUBERNETES_CPU_REQUEST": "0.5",
|
|
617
649
|
"KUBERNETES_MEMORY_LIMIT": "4Gi",
|
|
618
650
|
"KUBERNETES_MEMORY_REQUEST": "2Gi",
|
|
@@ -665,7 +697,26 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
|
|
|
665
697
|
],
|
|
666
698
|
},
|
|
667
699
|
"script": [
|
|
668
|
-
"echo
|
|
700
|
+
"echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
|
|
701
|
+
"export ENV_SHORT="review"",
|
|
702
|
+
"export APP_DIR="app"",
|
|
703
|
+
"export ENV_TYPE="review"",
|
|
704
|
+
"export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
|
|
705
|
+
"export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
|
|
706
|
+
"export BUILD_INFO_CURRENT_VERSION="$(tag=$(git ls-remote origin "refs/tags/v*[0-9]" 2>/dev/null | cut -f 2- | sort -V | tail -1 | sed 's/refs\\/tags\\///'); [ -z "$tag" ] && echo "v0.0.0" || echo "$tag")"",
|
|
707
|
+
"export HOST="$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api-$CL_review_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
|
|
708
|
+
"export ROOT_URL="https://$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api-$CL_review_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
|
|
709
|
+
"export HOST_INTERNAL="$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api-$CL_review_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
|
|
710
|
+
"export HOST_CANONICAL="$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api-$CL_review_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
|
|
711
|
+
"export ROOT_URL_INTERNAL="https://$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api-$CL_review_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
|
|
712
|
+
"export CLOUD_RUN_JOB_TRIGGER_URL_alarm_clock="https://asia-east1-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/asdf/jobs/$(printf %s \\"pan-test-app-review-$([ -n \\"$CI_MERGE_REQUEST_IID\\" ] && echo \\"mr$CI_MERGE_REQUEST_IID\\" || { [ -n \\"$CI_COMMIT_REF_SLUG\\" ] && echo \\"$CI_COMMIT_REF_SLUG\\" || echo \\"unknown\\"; })-api\\" | awk '{print tolower($0)}')-alarm-clock:run"",
|
|
713
|
+
"export DEPLOY_CLOUD_RUN_PROJECT_ID="asdf"",
|
|
714
|
+
"export DEPLOY_CLOUD_RUN_REGION="asia-east1"",
|
|
715
|
+
"export GCLOUD_DEPLOY_credentialsKey="$CL_review_api_GCLOUD_DEPLOY_credentialsKey"",
|
|
716
|
+
"export GCLOUD_RUN_canonicalHostSuffix="$CL_review_api_GCLOUD_RUN_canonicalHostSuffix"",
|
|
717
|
+
"export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOST\\",\\"ROOT_URL\\",\\"HOST_INTERNAL\\",\\"HOST_CANONICAL\\",\\"ROOT_URL_INTERNAL\\",\\"CLOUD_RUN_JOB_TRIGGER_URL_alarm_clock\\",\\"DEPLOY_CLOUD_RUN_PROJECT_ID\\",\\"DEPLOY_CLOUD_RUN_REGION\\",\\"GCLOUD_DEPLOY_credentialsKey\\",\\"GCLOUD_RUN_canonicalHostSuffix\\"]"",
|
|
718
|
+
"echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
|
|
719
|
+
"echo '{"id":"$(git describe --tags 2>/dev/null || git rev-parse HEAD)","time":"$CI_JOB_STARTED_AT"}' > app/__build_info.json",
|
|
669
720
|
"echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"",
|
|
670
721
|
"if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
|
|
671
722
|
"if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
|
|
@@ -682,26 +733,9 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
|
|
|
682
733
|
],
|
|
683
734
|
"stage": "build",
|
|
684
735
|
"variables": {
|
|
685
|
-
"APP_DIR": "app",
|
|
686
|
-
"BUILD_INFO_BUILD_TIME": "01-01-2023 12:13:14",
|
|
687
|
-
"BUILD_INFO_CURRENT_VERSION": "3.2.1",
|
|
688
|
-
"BUILD_INFO_ID": "some-id",
|
|
689
|
-
"CLOUD_RUN_JOB_TRIGGER_URL_alarm_clock": "https://asia-east1-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/asdf/jobs/pan-test-app-review-mr1234-api-alarm-clock:run",
|
|
690
|
-
"DEPLOY_CLOUD_RUN_PROJECT_ID": "asdf",
|
|
691
|
-
"DEPLOY_CLOUD_RUN_REGION": "asia-east1",
|
|
692
|
-
"ENV_SHORT": "review",
|
|
693
|
-
"ENV_TYPE": "review",
|
|
694
|
-
"GCLOUD_DEPLOY_credentialsKey": "$CL_review_api_GCLOUD_DEPLOY_credentialsKey",
|
|
695
|
-
"GCLOUD_RUN_canonicalHostSuffix": "$CL_review_api_GCLOUD_RUN_canonicalHostSuffix",
|
|
696
|
-
"HOST": "pan-test-app-review-mr1234-api-unknown-host.example.com",
|
|
697
|
-
"HOST_CANONICAL": "pan-test-app-review-mr1234-api-unknown-host.example.com",
|
|
698
|
-
"HOST_INTERNAL": "pan-test-app-review-mr1234-api-unknown-host.example.com",
|
|
699
736
|
"KUBERNETES_CPU_REQUEST": "0.5",
|
|
700
737
|
"KUBERNETES_MEMORY_LIMIT": "4Gi",
|
|
701
738
|
"KUBERNETES_MEMORY_REQUEST": "2Gi",
|
|
702
|
-
"ROOT_URL": "https://pan-test-app-review-mr1234-api-unknown-host.example.com",
|
|
703
|
-
"ROOT_URL_INTERNAL": "https://pan-test-app-review-mr1234-api-unknown-host.example.com",
|
|
704
|
-
"_ALL_ENV_VAR_KEYS": "["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","HOST_CANONICAL","ROOT_URL_INTERNAL","HOST_INTERNAL","CLOUD_RUN_JOB_TRIGGER_URL_alarm_clock","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]",
|
|
705
739
|
},
|
|
706
740
|
},
|
|
707
741
|
"api 🔨 docker | review ": {
|
|
@@ -727,6 +761,21 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
|
|
|
727
761
|
],
|
|
728
762
|
},
|
|
729
763
|
"script": [
|
|
764
|
+
"echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
|
|
765
|
+
"export APP_DIR="app"",
|
|
766
|
+
"export DOCKER_DIR="."",
|
|
767
|
+
"export DOCKER_REGISTRY="asia-east1-docker.pkg.dev"",
|
|
768
|
+
"export DOCKER_IMAGE="asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/review/api/$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })"",
|
|
769
|
+
"export DOCKER_CACHE_IMAGE="asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/caches/api"",
|
|
770
|
+
"export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"",
|
|
771
|
+
"export DOCKER_COPY_AND_INSTALL_APP="COPY --chown=node:node $APP_DIR .
|
|
772
|
+
RUN yarn plugin import workspace-tools
|
|
773
|
+
RUN yarn workspaces focus --production && yarn rebuild"",
|
|
774
|
+
"export DOCKER_COPY_WORKSPACE_FILES="COPY --chown=node:node app/package.json /app/app/package.json
|
|
775
|
+
COPY --chown=node:node app/yarn.lock /app/app/yarn.lock
|
|
776
|
+
COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
|
|
777
|
+
COPY --chown=node:node .yarn /app/.yarn"",
|
|
778
|
+
"echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
|
|
730
779
|
"ensureNodeDockerfile",
|
|
731
780
|
"echo -e "\\e[0Ksection_start:$(date +%s):docker-login[collapsed=true]\\r\\e[0KDocker Login"",
|
|
732
781
|
"gcloud auth activate-service-account --key-file=<(echo "$CL_review_api_GCLOUD_DEPLOY_credentialsKey")",
|
|
@@ -751,24 +800,9 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
|
|
|
751
800
|
],
|
|
752
801
|
"stage": "build",
|
|
753
802
|
"variables": {
|
|
754
|
-
"APP_DIR": "app",
|
|
755
|
-
"DOCKERFILE_ADDITIONS": undefined,
|
|
756
|
-
"DOCKERFILE_ADDITIONS_END": undefined,
|
|
757
803
|
"DOCKER_BUILDKIT": "1",
|
|
758
|
-
"DOCKER_CACHE_IMAGE": "asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/caches/api",
|
|
759
|
-
"DOCKER_COPY_AND_INSTALL_APP": "COPY --chown=node:node $APP_DIR .
|
|
760
|
-
RUN yarn plugin import workspace-tools
|
|
761
|
-
RUN yarn workspaces focus --production && yarn rebuild",
|
|
762
|
-
"DOCKER_COPY_WORKSPACE_FILES": "COPY --chown=node:node app/package.json /app/app/package.json
|
|
763
|
-
COPY --chown=node:node app/yarn.lock /app/app/yarn.lock
|
|
764
|
-
COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
|
|
765
|
-
COPY --chown=node:node .yarn /app/.yarn",
|
|
766
|
-
"DOCKER_DIR": ".",
|
|
767
804
|
"DOCKER_DRIVER": "overlay2",
|
|
768
805
|
"DOCKER_HOST": "tcp://0.0.0.0:2375",
|
|
769
|
-
"DOCKER_IMAGE": "asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/review/api/mr1234",
|
|
770
|
-
"DOCKER_IMAGE_TAG": "$CI_COMMIT_SHA",
|
|
771
|
-
"DOCKER_REGISTRY": "asia-east1-docker.pkg.dev",
|
|
772
806
|
"DOCKER_TLS_CERTDIR": "",
|
|
773
807
|
"KUBERNETES_CPU_REQUEST": "0.5",
|
|
774
808
|
"KUBERNETES_MEMORY_LIMIT": "2Gi",
|
|
@@ -778,14 +812,15 @@ COPY --chown=node:node .yarn /app/.yarn",
|
|
|
778
812
|
"api 🚀 Deploy | review ": {
|
|
779
813
|
"allow_failure": false,
|
|
780
814
|
"artifacts": {
|
|
781
|
-
"
|
|
782
|
-
"
|
|
783
|
-
|
|
815
|
+
"reports": {
|
|
816
|
+
"dotenv": "gitlab_environment.env",
|
|
817
|
+
},
|
|
784
818
|
},
|
|
785
819
|
"environment": {
|
|
786
820
|
"auto_stop_in": "1 week",
|
|
787
|
-
"name": "review/
|
|
821
|
+
"name": "review/$CI_COMMIT_REF_NAME/api",
|
|
788
822
|
"on_stop": "api 🛑 Stop ⚠️ | review ",
|
|
823
|
+
"url": "$CL_GITLAB_ENVIRONMENT_URL",
|
|
789
824
|
},
|
|
790
825
|
"image": "path/to/docker/gcloud:the-version",
|
|
791
826
|
"interruptible": true,
|
|
@@ -828,95 +863,113 @@ COPY --chown=node:node .yarn /app/.yarn",
|
|
|
828
863
|
},
|
|
829
864
|
],
|
|
830
865
|
"script": [
|
|
866
|
+
"echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
|
|
867
|
+
"export ENV_SHORT="review"",
|
|
868
|
+
"export APP_DIR="app"",
|
|
869
|
+
"export ENV_TYPE="review"",
|
|
870
|
+
"export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
|
|
871
|
+
"export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
|
|
872
|
+
"export BUILD_INFO_CURRENT_VERSION="$(tag=$(git ls-remote origin "refs/tags/v*[0-9]" 2>/dev/null | cut -f 2- | sort -V | tail -1 | sed 's/refs\\/tags\\///'); [ -z "$tag" ] && echo "v0.0.0" || echo "$tag")"",
|
|
873
|
+
"export HOST="$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api-$CL_review_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
|
|
874
|
+
"export ROOT_URL="https://$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api-$CL_review_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
|
|
875
|
+
"export HOST_INTERNAL="$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api-$CL_review_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
|
|
876
|
+
"export HOST_CANONICAL="$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api-$CL_review_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
|
|
877
|
+
"export ROOT_URL_INTERNAL="https://$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api-$CL_review_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
|
|
878
|
+
"export CLOUD_RUN_JOB_TRIGGER_URL_alarm_clock="https://asia-east1-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/asdf/jobs/$(printf %s \\"pan-test-app-review-$([ -n \\"$CI_MERGE_REQUEST_IID\\" ] && echo \\"mr$CI_MERGE_REQUEST_IID\\" || { [ -n \\"$CI_COMMIT_REF_SLUG\\" ] && echo \\"$CI_COMMIT_REF_SLUG\\" || echo \\"unknown\\"; })-api\\" | awk '{print tolower($0)}')-alarm-clock:run"",
|
|
879
|
+
"export DEPLOY_CLOUD_RUN_PROJECT_ID="asdf"",
|
|
880
|
+
"export DEPLOY_CLOUD_RUN_REGION="asia-east1"",
|
|
881
|
+
"export GCLOUD_DEPLOY_credentialsKey="$CL_review_api_GCLOUD_DEPLOY_credentialsKey"",
|
|
882
|
+
"export GCLOUD_RUN_canonicalHostSuffix="$CL_review_api_GCLOUD_RUN_canonicalHostSuffix"",
|
|
883
|
+
"export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOST\\",\\"ROOT_URL\\",\\"HOST_INTERNAL\\",\\"HOST_CANONICAL\\",\\"ROOT_URL_INTERNAL\\",\\"CLOUD_RUN_JOB_TRIGGER_URL_alarm_clock\\",\\"DEPLOY_CLOUD_RUN_PROJECT_ID\\",\\"DEPLOY_CLOUD_RUN_REGION\\",\\"GCLOUD_DEPLOY_credentialsKey\\",\\"GCLOUD_RUN_canonicalHostSuffix\\"]"",
|
|
884
|
+
"export DOCKER_REGISTRY="asia-east1-docker.pkg.dev"",
|
|
885
|
+
"export DOCKER_IMAGE="asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/review/api/$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })"",
|
|
886
|
+
"export DOCKER_CACHE_IMAGE="asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/caches/api"",
|
|
887
|
+
"export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"",
|
|
888
|
+
"export CLOUDSDK_CORE_DISABLE_PROMPTS="1"",
|
|
889
|
+
"echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
|
|
831
890
|
"echo -e "\\e[0Ksection_start:$(date +%s):prepare[collapsed=true]\\r\\e[0KPrepare..."",
|
|
832
891
|
"gcloud auth activate-service-account --key-file=<(echo "$CL_review_api_GCLOUD_DEPLOY_credentialsKey")",
|
|
833
892
|
"export GCLOUD_PROJECT_NUMBER=$(gcloud projects describe asdf --format="value(projectNumber)")",
|
|
834
893
|
"echo "GCLOUD_PROJECT_NUMBER: $GCLOUD_PROJECT_NUMBER"",
|
|
835
894
|
"echo -e "\\e[0Ksection_end:$(date +%s):prepare\\r\\e[0K"",
|
|
895
|
+
"echo -e "\\e[0Ksection_start:$(date +%s):writeenvvars[collapsed=true]\\r\\e[0KWrite env vars to file"",
|
|
896
|
+
"cat > ____envvars.yaml <<EOF
|
|
897
|
+
ENV_SHORT: |-
|
|
898
|
+
review
|
|
899
|
+
APP_DIR: |-
|
|
900
|
+
app
|
|
901
|
+
ENV_TYPE: |-
|
|
902
|
+
review
|
|
903
|
+
BUILD_INFO_BUILD_ID: |-
|
|
904
|
+
$(printf %s "$(git describe --tags 2>/dev/null || git rev-parse HEAD)" | sed 's/^/ /')
|
|
905
|
+
BUILD_INFO_BUILD_TIME: |-
|
|
906
|
+
$(printf %s "$CI_JOB_STARTED_AT" | sed 's/^/ /')
|
|
907
|
+
BUILD_INFO_CURRENT_VERSION: |-
|
|
908
|
+
$(printf %s "$(tag=$(git ls-remote origin "refs/tags/v*[0-9]" 2>/dev/null | cut -f 2- | sort -V | tail -1 | sed 's/refs\\/tags\\///'); [ -z "$tag" ] && echo "v0.0.0" || echo "$tag")" | sed 's/^/ /')
|
|
909
|
+
HOST: |-
|
|
910
|
+
$(printf %s "$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api-$CL_review_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
|
|
911
|
+
ROOT_URL: |-
|
|
912
|
+
$(printf %s "https://$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api-$CL_review_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
|
|
913
|
+
HOST_INTERNAL: |-
|
|
914
|
+
$(printf %s "$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api-$CL_review_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
|
|
915
|
+
HOST_CANONICAL: |-
|
|
916
|
+
$(printf %s "$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api-$CL_review_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
|
|
917
|
+
ROOT_URL_INTERNAL: |-
|
|
918
|
+
$(printf %s "https://$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api-$CL_review_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
|
|
919
|
+
CLOUD_RUN_JOB_TRIGGER_URL_alarm_clock: |-
|
|
920
|
+
https://asia-east1-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/asdf/jobs/$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api" | awk '{print tolower($0)}')-alarm-clock:run
|
|
921
|
+
DEPLOY_CLOUD_RUN_PROJECT_ID: |-
|
|
922
|
+
asdf
|
|
923
|
+
DEPLOY_CLOUD_RUN_REGION: |-
|
|
924
|
+
asia-east1
|
|
925
|
+
GCLOUD_RUN_canonicalHostSuffix: |-
|
|
926
|
+
$(printf %s "$CL_review_api_GCLOUD_RUN_canonicalHostSuffix" | sed 's/^/ /')
|
|
927
|
+
_ALL_ENV_VAR_KEYS: |-
|
|
928
|
+
["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","HOST_INTERNAL","HOST_CANONICAL","ROOT_URL_INTERNAL","CLOUD_RUN_JOB_TRIGGER_URL_alarm_clock","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]
|
|
929
|
+
|
|
930
|
+
EOF
|
|
931
|
+
",
|
|
932
|
+
"echo -e "\\e[0Ksection_end:$(date +%s):writeenvvars\\r\\e[0K"",
|
|
836
933
|
"echo -e "\\e[0Ksection_start:$(date +%s):deploy[collapsed=true]\\r\\e[0KDeploy to cloud run"",
|
|
837
|
-
"echo "$ENV_VARS" > ____envvars.yaml",
|
|
838
934
|
"set +e",
|
|
839
|
-
"gcloud scheduler jobs create http pan-test-app-review-
|
|
935
|
+
"gcloud scheduler jobs create http $(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api" | awk '{print tolower($0)}')-alarm-clock-scheduler --project=asdf --location=asia-east1 --schedule="0 7 0 0 1-5" --max-retry-attempts=0 --uri="https://asia-east1-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/asdf/jobs/$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api" | awk '{print tolower($0)}')-alarm-clock:run" --http-method=POST --oauth-service-account-email=$GCLOUD_PROJECT_NUMBER-compute@developer.gserviceaccount.com",
|
|
840
936
|
"set -e",
|
|
841
|
-
"gcloud scheduler jobs update http pan-test-app-review-
|
|
937
|
+
"gcloud scheduler jobs update http $(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api" | awk '{print tolower($0)}')-alarm-clock-scheduler --project=asdf --location=asia-east1 --schedule="0 7 0 0 1-5" --max-retry-attempts=0 --uri="https://asia-east1-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/asdf/jobs/$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api" | awk '{print tolower($0)}')-alarm-clock:run" --http-method=POST --oauth-service-account-email=$GCLOUD_PROJECT_NUMBER-compute@developer.gserviceaccount.com",
|
|
842
938
|
"set +e",
|
|
843
|
-
"gcloud run jobs create pan-test-app-review-
|
|
939
|
+
"gcloud run jobs create $(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api" | awk '{print tolower($0)}')-alarm-clock --command="./wake-up-call" --image=asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/review/api/$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }):$DOCKER_IMAGE_TAG --project=asdf --region=asia-east1 --labels=customer-name=pan,component-name=api,app-name=test-app,env-type=review,env-name=review,build-type=node,cloud-run-job-name=$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api" | awk '{print tolower($0)}')-alarm-clock --memory=512Mi --task-timeout=10m --parallelism=1 --env-vars-file=____envvars.yaml --max-retries=0",
|
|
844
940
|
"set -e",
|
|
845
|
-
"gcloud run jobs update pan-test-app-review-
|
|
941
|
+
"gcloud run jobs update $(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api" | awk '{print tolower($0)}')-alarm-clock --command="./wake-up-call" --image=asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/review/api/$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }):$DOCKER_IMAGE_TAG --project=asdf --region=asia-east1 --labels=customer-name=pan,component-name=api,app-name=test-app,env-type=review,env-name=review,build-type=node,cloud-run-job-name=$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api" | awk '{print tolower($0)}')-alarm-clock --memory=512Mi --task-timeout=10m --parallelism=1 --env-vars-file=____envvars.yaml --max-retries=0 ",
|
|
846
942
|
"echo -e "\\e[0Ksection_end:$(date +%s):deploy\\r\\e[0K"",
|
|
847
943
|
"echo -e "\\e[0Ksection_start:$(date +%s):cleanup[collapsed=true]\\r\\e[0KCleanup"",
|
|
848
|
-
"gcloud run revisions list --project=asdf --region=asia-east1 --service
|
|
849
|
-
"gcloud artifacts docker images list asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/review/api
|
|
944
|
+
"gcloud run revisions list --project=asdf --region=asia-east1 --service=$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api" | awk '{print tolower($0)}') --limit=unlimited --sort-by=metadata.creationTimestamp --format="value(name)" --filter='(status.conditions.status=False OR status.conditions.status=Unknown)' | while read -r revisionname; do gcloud run revisions delete --project=asdf --region=asia-east1 --quiet $revisionname ; done",
|
|
945
|
+
"gcloud artifacts docker images list asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/review/api/$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }) --sort-by=~CREATE_TIME --format="value(version)" | tail -n +2 | while read -r version; do gcloud artifacts docker images delete asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/review/api/$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })@$version --quiet --delete-tags; done",
|
|
850
946
|
"gcloud artifacts docker images list asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/caches/api --sort-by=~CREATE_TIME --format="value(version)" | tail -n +2 | while read -r version; do gcloud artifacts docker images delete asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/caches/api@$version --quiet --delete-tags; done",
|
|
851
947
|
"set +e",
|
|
852
948
|
"gcloud artifacts docker images delete asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/review/api --quiet --delete-tags",
|
|
853
949
|
"set -e",
|
|
854
950
|
"echo -e "\\e[0Ksection_end:$(date +%s):cleanup\\r\\e[0K"",
|
|
855
951
|
"echo Uploading SBOM to Dependency Track",
|
|
856
|
-
"/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/api" "https
|
|
857
|
-
|
|
858
|
-
"services": [
|
|
859
|
-
{
|
|
860
|
-
"command": [
|
|
861
|
-
"--tls=false",
|
|
862
|
-
],
|
|
863
|
-
"name": "docker:24.0.6-dind",
|
|
864
|
-
},
|
|
952
|
+
"/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/api" "https://$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api-$CL_review_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" "__sbom.json" vex.json || true",
|
|
953
|
+
"echo "CL_GITLAB_ENVIRONMENT_URL=https://$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api-$CL_review_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" >> gitlab_environment.env",
|
|
865
954
|
],
|
|
866
955
|
"stage": "deploy review",
|
|
867
956
|
"variables": {
|
|
868
|
-
"APP_DIR": "app",
|
|
869
|
-
"BUILD_INFO_BUILD_TIME": "01-01-2023 12:13:14",
|
|
870
|
-
"BUILD_INFO_CURRENT_VERSION": "3.2.1",
|
|
871
|
-
"BUILD_INFO_ID": "some-id",
|
|
872
|
-
"CLOUDSDK_CORE_DISABLE_PROMPTS": "1",
|
|
873
|
-
"CLOUD_RUN_JOB_TRIGGER_URL_alarm_clock": "https://asia-east1-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/asdf/jobs/pan-test-app-review-mr1234-api-alarm-clock:run",
|
|
874
|
-
"DEPLOY_CLOUD_RUN_PROJECT_ID": "asdf",
|
|
875
|
-
"DEPLOY_CLOUD_RUN_REGION": "asia-east1",
|
|
876
|
-
"DOCKER_BUILDKIT": "1",
|
|
877
|
-
"DOCKER_CACHE_IMAGE": "asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/caches/api",
|
|
878
|
-
"DOCKER_DRIVER": "overlay2",
|
|
879
|
-
"DOCKER_HOST": "tcp://0.0.0.0:2375",
|
|
880
|
-
"DOCKER_IMAGE": "asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/review/api/mr1234",
|
|
881
|
-
"DOCKER_IMAGE_TAG": "$CI_COMMIT_SHA",
|
|
882
|
-
"DOCKER_REGISTRY": "asia-east1-docker.pkg.dev",
|
|
883
|
-
"DOCKER_TLS_CERTDIR": "",
|
|
884
|
-
"ENV_SHORT": "review",
|
|
885
|
-
"ENV_TYPE": "review",
|
|
886
|
-
"ENV_VARS": "ENV_SHORT: 'review'
|
|
887
|
-
APP_DIR: 'app'
|
|
888
|
-
ENV_TYPE: 'review'
|
|
889
|
-
BUILD_INFO_ID: 'some-id'
|
|
890
|
-
BUILD_INFO_BUILD_TIME: '01-01-2023 12:13:14'
|
|
891
|
-
BUILD_INFO_CURRENT_VERSION: '3.2.1'
|
|
892
|
-
HOST: 'pan-test-app-review-mr1234-api-unknown-host.example.com'
|
|
893
|
-
ROOT_URL: 'https://pan-test-app-review-mr1234-api-unknown-host.example.com'
|
|
894
|
-
HOST_CANONICAL: 'pan-test-app-review-mr1234-api-unknown-host.example.com'
|
|
895
|
-
ROOT_URL_INTERNAL: 'https://pan-test-app-review-mr1234-api-unknown-host.example.com'
|
|
896
|
-
HOST_INTERNAL: 'pan-test-app-review-mr1234-api-unknown-host.example.com'
|
|
897
|
-
CLOUD_RUN_JOB_TRIGGER_URL_alarm_clock: 'https://asia-east1-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/asdf/jobs/pan-test-app-review-mr1234-api-alarm-clock:run'
|
|
898
|
-
DEPLOY_CLOUD_RUN_PROJECT_ID: 'asdf'
|
|
899
|
-
DEPLOY_CLOUD_RUN_REGION: 'asia-east1'
|
|
900
|
-
GCLOUD_RUN_canonicalHostSuffix: '$CL_review_api_GCLOUD_RUN_canonicalHostSuffix'
|
|
901
|
-
_ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","HOST_CANONICAL","ROOT_URL_INTERNAL","HOST_INTERNAL","CLOUD_RUN_JOB_TRIGGER_URL_alarm_clock","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]'
|
|
902
|
-
",
|
|
903
|
-
"GCLOUD_DEPLOY_credentialsKey": "$CL_review_api_GCLOUD_DEPLOY_credentialsKey",
|
|
904
|
-
"GCLOUD_RUN_canonicalHostSuffix": "$CL_review_api_GCLOUD_RUN_canonicalHostSuffix",
|
|
905
|
-
"HOST": "pan-test-app-review-mr1234-api-unknown-host.example.com",
|
|
906
|
-
"HOST_CANONICAL": "pan-test-app-review-mr1234-api-unknown-host.example.com",
|
|
907
|
-
"HOST_INTERNAL": "pan-test-app-review-mr1234-api-unknown-host.example.com",
|
|
908
957
|
"KUBERNETES_CPU_REQUEST": "0.5",
|
|
909
958
|
"KUBERNETES_MEMORY_LIMIT": "400Mi",
|
|
910
959
|
"KUBERNETES_MEMORY_REQUEST": "200Mi",
|
|
911
|
-
"ROOT_URL": "https://pan-test-app-review-mr1234-api-unknown-host.example.com",
|
|
912
|
-
"ROOT_URL_INTERNAL": "https://pan-test-app-review-mr1234-api-unknown-host.example.com",
|
|
913
|
-
"_ALL_ENV_VAR_KEYS": "["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","HOST_CANONICAL","ROOT_URL_INTERNAL","HOST_INTERNAL","CLOUD_RUN_JOB_TRIGGER_URL_alarm_clock","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]",
|
|
914
960
|
},
|
|
915
961
|
},
|
|
916
962
|
"api 🛑 Stop ⚠️ | review ": {
|
|
963
|
+
"allow_failure": true,
|
|
964
|
+
"artifacts": {
|
|
965
|
+
"reports": {
|
|
966
|
+
"dotenv": "gitlab_environment.env",
|
|
967
|
+
},
|
|
968
|
+
},
|
|
917
969
|
"environment": {
|
|
918
970
|
"action": "stop",
|
|
919
|
-
"name": "review/
|
|
971
|
+
"name": "review/$CI_COMMIT_REF_NAME/api",
|
|
972
|
+
"url": "$CL_GITLAB_ENVIRONMENT_URL",
|
|
920
973
|
},
|
|
921
974
|
"image": "path/to/docker/gcloud:the-version",
|
|
922
975
|
"interruptible": true,
|
|
@@ -930,33 +983,34 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
|
|
|
930
983
|
},
|
|
931
984
|
"rules": [
|
|
932
985
|
{
|
|
933
|
-
"allow_failure": true,
|
|
934
986
|
"if": "$CI_COMMIT_BRANCH =~ /^[0-9]+\\.([0-9]+|x)\\.x$/",
|
|
935
987
|
"when": "on_success",
|
|
936
988
|
},
|
|
937
989
|
{
|
|
938
|
-
"allow_failure": true,
|
|
939
990
|
"when": "manual",
|
|
940
991
|
},
|
|
941
992
|
],
|
|
942
993
|
"script": [
|
|
994
|
+
"echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
|
|
995
|
+
"export CLOUDSDK_CORE_DISABLE_PROMPTS="1"",
|
|
996
|
+
"echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
|
|
943
997
|
"set +e",
|
|
944
998
|
"gcloud auth activate-service-account --key-file=<(echo "$CL_review_api_GCLOUD_DEPLOY_credentialsKey")",
|
|
945
|
-
"gcloud scheduler jobs delete pan-test-app-review-
|
|
946
|
-
"gcloud run jobs executions list --project=asdf --region=asia-east1 --job pan-test-app-review-
|
|
947
|
-
"gcloud run jobs delete pan-test-app-review-
|
|
948
|
-
"gcloud artifacts docker images delete asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/review/api
|
|
999
|
+
"gcloud scheduler jobs delete $(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api" | awk '{print tolower($0)}')-alarm-clock-scheduler --project=asdf --location=asia-east1",
|
|
1000
|
+
"gcloud run jobs executions list --project=asdf --region=asia-east1 --job $(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api" | awk '{print tolower($0)}')-alarm-clock --format="value(name)" | xargs -I {} gcloud run jobs executions delete {} --quiet --project=asdf --region=asia-east1",
|
|
1001
|
+
"gcloud run jobs delete $(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api" | awk '{print tolower($0)}')-alarm-clock --project=asdf --region=asia-east1",
|
|
1002
|
+
"gcloud artifacts docker images delete asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/review/api/$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }) --quiet --delete-tags",
|
|
949
1003
|
"gcloud artifacts docker images list asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/caches/api --sort-by=~CREATE_TIME --format="value(version)" | tail -n +2 | while read -r version; do gcloud artifacts docker images delete asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/caches/api@$version --quiet --delete-tags; done",
|
|
950
1004
|
"set +e",
|
|
951
1005
|
"gcloud artifacts docker images delete asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/review/api --quiet --delete-tags",
|
|
952
1006
|
"set -e",
|
|
953
1007
|
"echo Disabling component in Dependency Track",
|
|
954
|
-
"/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" disable "pan-test-app/api" "https
|
|
1008
|
+
"/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" disable "pan-test-app/api" "https://$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api-$CL_review_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" || true",
|
|
955
1009
|
"set -e",
|
|
1010
|
+
"echo "CL_GITLAB_ENVIRONMENT_URL=https://$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api-$CL_review_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" >> gitlab_environment.env",
|
|
956
1011
|
],
|
|
957
1012
|
"stage": "stop review",
|
|
958
1013
|
"variables": {
|
|
959
|
-
"CLOUDSDK_CORE_DISABLE_PROMPTS": "1",
|
|
960
1014
|
"GIT_STRATEGY": "none",
|
|
961
1015
|
"KUBERNETES_CPU_REQUEST": "0.5",
|
|
962
1016
|
"KUBERNETES_MEMORY_LIMIT": "400Mi",
|
|
@@ -976,12 +1030,14 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
|
|
|
976
1030
|
],
|
|
977
1031
|
},
|
|
978
1032
|
"script": [
|
|
1033
|
+
"echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
|
|
1034
|
+
"export APP_PATH="app"",
|
|
1035
|
+
"echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
|
|
979
1036
|
"cd app",
|
|
980
1037
|
"yarn npm audit --environment production",
|
|
981
1038
|
],
|
|
982
1039
|
"stage": "test",
|
|
983
1040
|
"variables": {
|
|
984
|
-
"APP_PATH": "app",
|
|
985
1041
|
"KUBERNETES_CPU_REQUEST": "0.5",
|
|
986
1042
|
"KUBERNETES_MEMORY_LIMIT": "4Gi",
|
|
987
1043
|
"KUBERNETES_MEMORY_REQUEST": "2Gi",
|
|
@@ -1015,6 +1071,9 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
|
|
|
1015
1071
|
],
|
|
1016
1072
|
},
|
|
1017
1073
|
"script": [
|
|
1074
|
+
"echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
|
|
1075
|
+
"export APP_PATH="app"",
|
|
1076
|
+
"echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
|
|
1018
1077
|
"echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"",
|
|
1019
1078
|
"if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
|
|
1020
1079
|
"if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
|
|
@@ -1031,7 +1090,6 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
|
|
|
1031
1090
|
],
|
|
1032
1091
|
"stage": "test",
|
|
1033
1092
|
"variables": {
|
|
1034
|
-
"APP_PATH": "app",
|
|
1035
1093
|
"KUBERNETES_CPU_REQUEST": "0.5",
|
|
1036
1094
|
"KUBERNETES_MEMORY_LIMIT": "4Gi",
|
|
1037
1095
|
"KUBERNETES_MEMORY_REQUEST": "2Gi",
|
|
@@ -1055,6 +1113,8 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
|
|
|
1055
1113
|
],
|
|
1056
1114
|
},
|
|
1057
1115
|
"script": [
|
|
1116
|
+
"echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
|
|
1117
|
+
"echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
|
|
1058
1118
|
"trivy fs --quiet --format cyclonedx --output "__sbom.json" app",
|
|
1059
1119
|
],
|
|
1060
1120
|
"stage": "build",
|
|
@@ -1107,7 +1167,7 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
|
|
|
1107
1167
|
],
|
|
1108
1168
|
"variables": {
|
|
1109
1169
|
"FF_USE_FASTZIP": "true",
|
|
1110
|
-
"GIT_DEPTH": 1,
|
|
1170
|
+
"GIT_DEPTH": "1",
|
|
1111
1171
|
},
|
|
1112
1172
|
"workflow": {
|
|
1113
1173
|
"rules": [
|
|
@@ -1184,7 +1244,26 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
|
|
|
1184
1244
|
],
|
|
1185
1245
|
},
|
|
1186
1246
|
"script": [
|
|
1187
|
-
"echo
|
|
1247
|
+
"echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
|
|
1248
|
+
"export ENV_SHORT="prod"",
|
|
1249
|
+
"export APP_DIR="app"",
|
|
1250
|
+
"export ENV_TYPE="prod"",
|
|
1251
|
+
"export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
|
|
1252
|
+
"export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
|
|
1253
|
+
"export BUILD_INFO_CURRENT_VERSION="$(tag=$(git ls-remote origin "refs/tags/v*[0-9]" 2>/dev/null | cut -f 2- | sort -V | tail -1 | sed 's/refs\\/tags\\///'); [ -z "$tag" ] && echo "v0.0.0" || echo "$tag")"",
|
|
1254
|
+
"export HOST="$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
|
|
1255
|
+
"export ROOT_URL="https://$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
|
|
1256
|
+
"export HOST_INTERNAL="$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
|
|
1257
|
+
"export HOST_CANONICAL="$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
|
|
1258
|
+
"export ROOT_URL_INTERNAL="https://$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
|
|
1259
|
+
"export CLOUD_RUN_JOB_TRIGGER_URL_alarm_clock="https://asia-east1-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/asdf/jobs/pan-test-app-prod-api-alarm-clock:run"",
|
|
1260
|
+
"export DEPLOY_CLOUD_RUN_PROJECT_ID="asdf"",
|
|
1261
|
+
"export DEPLOY_CLOUD_RUN_REGION="asia-east1"",
|
|
1262
|
+
"export GCLOUD_DEPLOY_credentialsKey="$CL_prod_api_GCLOUD_DEPLOY_credentialsKey"",
|
|
1263
|
+
"export GCLOUD_RUN_canonicalHostSuffix="$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix"",
|
|
1264
|
+
"export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOST\\",\\"ROOT_URL\\",\\"HOST_INTERNAL\\",\\"HOST_CANONICAL\\",\\"ROOT_URL_INTERNAL\\",\\"CLOUD_RUN_JOB_TRIGGER_URL_alarm_clock\\",\\"DEPLOY_CLOUD_RUN_PROJECT_ID\\",\\"DEPLOY_CLOUD_RUN_REGION\\",\\"GCLOUD_DEPLOY_credentialsKey\\",\\"GCLOUD_RUN_canonicalHostSuffix\\"]"",
|
|
1265
|
+
"echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
|
|
1266
|
+
"echo '{"id":"$(git describe --tags 2>/dev/null || git rev-parse HEAD)","time":"$CI_JOB_STARTED_AT"}' > app/__build_info.json",
|
|
1188
1267
|
"echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"",
|
|
1189
1268
|
"if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
|
|
1190
1269
|
"if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
|
|
@@ -1201,26 +1280,9 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
|
|
|
1201
1280
|
],
|
|
1202
1281
|
"stage": "build",
|
|
1203
1282
|
"variables": {
|
|
1204
|
-
"APP_DIR": "app",
|
|
1205
|
-
"BUILD_INFO_BUILD_TIME": "01-01-2023 12:13:14",
|
|
1206
|
-
"BUILD_INFO_CURRENT_VERSION": "3.2.1",
|
|
1207
|
-
"BUILD_INFO_ID": "some-id",
|
|
1208
|
-
"CLOUD_RUN_JOB_TRIGGER_URL_alarm_clock": "https://asia-east1-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/asdf/jobs/pan-test-app-prod-api-alarm-clock:run",
|
|
1209
|
-
"DEPLOY_CLOUD_RUN_PROJECT_ID": "asdf",
|
|
1210
|
-
"DEPLOY_CLOUD_RUN_REGION": "asia-east1",
|
|
1211
|
-
"ENV_SHORT": "prod",
|
|
1212
|
-
"ENV_TYPE": "prod",
|
|
1213
|
-
"GCLOUD_DEPLOY_credentialsKey": "$CL_prod_api_GCLOUD_DEPLOY_credentialsKey",
|
|
1214
|
-
"GCLOUD_RUN_canonicalHostSuffix": "$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix",
|
|
1215
|
-
"HOST": "pan-test-app-prod-api-unknown-host.example.com",
|
|
1216
|
-
"HOST_CANONICAL": "pan-test-app-prod-api-unknown-host.example.com",
|
|
1217
|
-
"HOST_INTERNAL": "pan-test-app-prod-api-unknown-host.example.com",
|
|
1218
1283
|
"KUBERNETES_CPU_REQUEST": "0.5",
|
|
1219
1284
|
"KUBERNETES_MEMORY_LIMIT": "4Gi",
|
|
1220
1285
|
"KUBERNETES_MEMORY_REQUEST": "2Gi",
|
|
1221
|
-
"ROOT_URL": "https://pan-test-app-prod-api-unknown-host.example.com",
|
|
1222
|
-
"ROOT_URL_INTERNAL": "https://pan-test-app-prod-api-unknown-host.example.com",
|
|
1223
|
-
"_ALL_ENV_VAR_KEYS": "["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","HOST_CANONICAL","ROOT_URL_INTERNAL","HOST_INTERNAL","CLOUD_RUN_JOB_TRIGGER_URL_alarm_clock","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]",
|
|
1224
1286
|
},
|
|
1225
1287
|
},
|
|
1226
1288
|
"api 🔨 app | stage ": {
|
|
@@ -1270,7 +1332,26 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
|
|
|
1270
1332
|
],
|
|
1271
1333
|
},
|
|
1272
1334
|
"script": [
|
|
1273
|
-
"echo
|
|
1335
|
+
"echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
|
|
1336
|
+
"export ENV_SHORT="stage"",
|
|
1337
|
+
"export APP_DIR="app"",
|
|
1338
|
+
"export ENV_TYPE="stage"",
|
|
1339
|
+
"export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
|
|
1340
|
+
"export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
|
|
1341
|
+
"export BUILD_INFO_CURRENT_VERSION="$(tag=$(git ls-remote origin "refs/tags/v*[0-9]" 2>/dev/null | cut -f 2- | sort -V | tail -1 | sed 's/refs\\/tags\\///'); [ -z "$tag" ] && echo "v0.0.0" || echo "$tag")"",
|
|
1342
|
+
"export HOST="$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
|
|
1343
|
+
"export ROOT_URL="https://$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
|
|
1344
|
+
"export HOST_INTERNAL="$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
|
|
1345
|
+
"export HOST_CANONICAL="$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
|
|
1346
|
+
"export ROOT_URL_INTERNAL="https://$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
|
|
1347
|
+
"export CLOUD_RUN_JOB_TRIGGER_URL_alarm_clock="https://asia-east1-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/asdf/jobs/pan-test-app-stage-api-alarm-clock:run"",
|
|
1348
|
+
"export DEPLOY_CLOUD_RUN_PROJECT_ID="asdf"",
|
|
1349
|
+
"export DEPLOY_CLOUD_RUN_REGION="asia-east1"",
|
|
1350
|
+
"export GCLOUD_DEPLOY_credentialsKey="$CL_stage_api_GCLOUD_DEPLOY_credentialsKey"",
|
|
1351
|
+
"export GCLOUD_RUN_canonicalHostSuffix="$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix"",
|
|
1352
|
+
"export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOST\\",\\"ROOT_URL\\",\\"HOST_INTERNAL\\",\\"HOST_CANONICAL\\",\\"ROOT_URL_INTERNAL\\",\\"CLOUD_RUN_JOB_TRIGGER_URL_alarm_clock\\",\\"DEPLOY_CLOUD_RUN_PROJECT_ID\\",\\"DEPLOY_CLOUD_RUN_REGION\\",\\"GCLOUD_DEPLOY_credentialsKey\\",\\"GCLOUD_RUN_canonicalHostSuffix\\"]"",
|
|
1353
|
+
"echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
|
|
1354
|
+
"echo '{"id":"$(git describe --tags 2>/dev/null || git rev-parse HEAD)","time":"$CI_JOB_STARTED_AT"}' > app/__build_info.json",
|
|
1274
1355
|
"echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"",
|
|
1275
1356
|
"if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
|
|
1276
1357
|
"if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
|
|
@@ -1287,26 +1368,9 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
|
|
|
1287
1368
|
],
|
|
1288
1369
|
"stage": "build",
|
|
1289
1370
|
"variables": {
|
|
1290
|
-
"APP_DIR": "app",
|
|
1291
|
-
"BUILD_INFO_BUILD_TIME": "01-01-2023 12:13:14",
|
|
1292
|
-
"BUILD_INFO_CURRENT_VERSION": "3.2.1",
|
|
1293
|
-
"BUILD_INFO_ID": "some-id",
|
|
1294
|
-
"CLOUD_RUN_JOB_TRIGGER_URL_alarm_clock": "https://asia-east1-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/asdf/jobs/pan-test-app-stage-api-alarm-clock:run",
|
|
1295
|
-
"DEPLOY_CLOUD_RUN_PROJECT_ID": "asdf",
|
|
1296
|
-
"DEPLOY_CLOUD_RUN_REGION": "asia-east1",
|
|
1297
|
-
"ENV_SHORT": "stage",
|
|
1298
|
-
"ENV_TYPE": "stage",
|
|
1299
|
-
"GCLOUD_DEPLOY_credentialsKey": "$CL_stage_api_GCLOUD_DEPLOY_credentialsKey",
|
|
1300
|
-
"GCLOUD_RUN_canonicalHostSuffix": "$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix",
|
|
1301
|
-
"HOST": "pan-test-app-stage-api-unknown-host.example.com",
|
|
1302
|
-
"HOST_CANONICAL": "pan-test-app-stage-api-unknown-host.example.com",
|
|
1303
|
-
"HOST_INTERNAL": "pan-test-app-stage-api-unknown-host.example.com",
|
|
1304
1371
|
"KUBERNETES_CPU_REQUEST": "0.5",
|
|
1305
1372
|
"KUBERNETES_MEMORY_LIMIT": "4Gi",
|
|
1306
1373
|
"KUBERNETES_MEMORY_REQUEST": "2Gi",
|
|
1307
|
-
"ROOT_URL": "https://pan-test-app-stage-api-unknown-host.example.com",
|
|
1308
|
-
"ROOT_URL_INTERNAL": "https://pan-test-app-stage-api-unknown-host.example.com",
|
|
1309
|
-
"_ALL_ENV_VAR_KEYS": "["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","HOST_CANONICAL","ROOT_URL_INTERNAL","HOST_INTERNAL","CLOUD_RUN_JOB_TRIGGER_URL_alarm_clock","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]",
|
|
1310
1374
|
},
|
|
1311
1375
|
},
|
|
1312
1376
|
"api 🔨 docker | prod ": {
|
|
@@ -1332,6 +1396,21 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
|
|
|
1332
1396
|
],
|
|
1333
1397
|
},
|
|
1334
1398
|
"script": [
|
|
1399
|
+
"echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
|
|
1400
|
+
"export APP_DIR="app"",
|
|
1401
|
+
"export DOCKER_DIR="."",
|
|
1402
|
+
"export DOCKER_REGISTRY="asia-east1-docker.pkg.dev"",
|
|
1403
|
+
"export DOCKER_IMAGE="asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/prod/api"",
|
|
1404
|
+
"export DOCKER_CACHE_IMAGE="asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/caches/api"",
|
|
1405
|
+
"export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"",
|
|
1406
|
+
"export DOCKER_COPY_AND_INSTALL_APP="COPY --chown=node:node $APP_DIR .
|
|
1407
|
+
RUN yarn plugin import workspace-tools
|
|
1408
|
+
RUN yarn workspaces focus --production && yarn rebuild"",
|
|
1409
|
+
"export DOCKER_COPY_WORKSPACE_FILES="COPY --chown=node:node app/package.json /app/app/package.json
|
|
1410
|
+
COPY --chown=node:node app/yarn.lock /app/app/yarn.lock
|
|
1411
|
+
COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
|
|
1412
|
+
COPY --chown=node:node .yarn /app/.yarn"",
|
|
1413
|
+
"echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
|
|
1335
1414
|
"ensureNodeDockerfile",
|
|
1336
1415
|
"echo -e "\\e[0Ksection_start:$(date +%s):docker-login[collapsed=true]\\r\\e[0KDocker Login"",
|
|
1337
1416
|
"gcloud auth activate-service-account --key-file=<(echo "$CL_prod_api_GCLOUD_DEPLOY_credentialsKey")",
|
|
@@ -1356,24 +1435,9 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
|
|
|
1356
1435
|
],
|
|
1357
1436
|
"stage": "build",
|
|
1358
1437
|
"variables": {
|
|
1359
|
-
"APP_DIR": "app",
|
|
1360
|
-
"DOCKERFILE_ADDITIONS": undefined,
|
|
1361
|
-
"DOCKERFILE_ADDITIONS_END": undefined,
|
|
1362
1438
|
"DOCKER_BUILDKIT": "1",
|
|
1363
|
-
"DOCKER_CACHE_IMAGE": "asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/caches/api",
|
|
1364
|
-
"DOCKER_COPY_AND_INSTALL_APP": "COPY --chown=node:node $APP_DIR .
|
|
1365
|
-
RUN yarn plugin import workspace-tools
|
|
1366
|
-
RUN yarn workspaces focus --production && yarn rebuild",
|
|
1367
|
-
"DOCKER_COPY_WORKSPACE_FILES": "COPY --chown=node:node app/package.json /app/app/package.json
|
|
1368
|
-
COPY --chown=node:node app/yarn.lock /app/app/yarn.lock
|
|
1369
|
-
COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
|
|
1370
|
-
COPY --chown=node:node .yarn /app/.yarn",
|
|
1371
|
-
"DOCKER_DIR": ".",
|
|
1372
1439
|
"DOCKER_DRIVER": "overlay2",
|
|
1373
1440
|
"DOCKER_HOST": "tcp://0.0.0.0:2375",
|
|
1374
|
-
"DOCKER_IMAGE": "asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/prod/api",
|
|
1375
|
-
"DOCKER_IMAGE_TAG": "$CI_COMMIT_SHA",
|
|
1376
|
-
"DOCKER_REGISTRY": "asia-east1-docker.pkg.dev",
|
|
1377
1441
|
"DOCKER_TLS_CERTDIR": "",
|
|
1378
1442
|
"KUBERNETES_CPU_REQUEST": "0.5",
|
|
1379
1443
|
"KUBERNETES_MEMORY_LIMIT": "2Gi",
|
|
@@ -1403,6 +1467,21 @@ COPY --chown=node:node .yarn /app/.yarn",
|
|
|
1403
1467
|
],
|
|
1404
1468
|
},
|
|
1405
1469
|
"script": [
|
|
1470
|
+
"echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
|
|
1471
|
+
"export APP_DIR="app"",
|
|
1472
|
+
"export DOCKER_DIR="."",
|
|
1473
|
+
"export DOCKER_REGISTRY="asia-east1-docker.pkg.dev"",
|
|
1474
|
+
"export DOCKER_IMAGE="asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/stage/api"",
|
|
1475
|
+
"export DOCKER_CACHE_IMAGE="asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/caches/api"",
|
|
1476
|
+
"export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"",
|
|
1477
|
+
"export DOCKER_COPY_AND_INSTALL_APP="COPY --chown=node:node $APP_DIR .
|
|
1478
|
+
RUN yarn plugin import workspace-tools
|
|
1479
|
+
RUN yarn workspaces focus --production && yarn rebuild"",
|
|
1480
|
+
"export DOCKER_COPY_WORKSPACE_FILES="COPY --chown=node:node app/package.json /app/app/package.json
|
|
1481
|
+
COPY --chown=node:node app/yarn.lock /app/app/yarn.lock
|
|
1482
|
+
COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
|
|
1483
|
+
COPY --chown=node:node .yarn /app/.yarn"",
|
|
1484
|
+
"echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
|
|
1406
1485
|
"ensureNodeDockerfile",
|
|
1407
1486
|
"echo -e "\\e[0Ksection_start:$(date +%s):docker-login[collapsed=true]\\r\\e[0KDocker Login"",
|
|
1408
1487
|
"gcloud auth activate-service-account --key-file=<(echo "$CL_stage_api_GCLOUD_DEPLOY_credentialsKey")",
|
|
@@ -1427,24 +1506,9 @@ COPY --chown=node:node .yarn /app/.yarn",
|
|
|
1427
1506
|
],
|
|
1428
1507
|
"stage": "build",
|
|
1429
1508
|
"variables": {
|
|
1430
|
-
"APP_DIR": "app",
|
|
1431
|
-
"DOCKERFILE_ADDITIONS": undefined,
|
|
1432
|
-
"DOCKERFILE_ADDITIONS_END": undefined,
|
|
1433
1509
|
"DOCKER_BUILDKIT": "1",
|
|
1434
|
-
"DOCKER_CACHE_IMAGE": "asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/caches/api",
|
|
1435
|
-
"DOCKER_COPY_AND_INSTALL_APP": "COPY --chown=node:node $APP_DIR .
|
|
1436
|
-
RUN yarn plugin import workspace-tools
|
|
1437
|
-
RUN yarn workspaces focus --production && yarn rebuild",
|
|
1438
|
-
"DOCKER_COPY_WORKSPACE_FILES": "COPY --chown=node:node app/package.json /app/app/package.json
|
|
1439
|
-
COPY --chown=node:node app/yarn.lock /app/app/yarn.lock
|
|
1440
|
-
COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
|
|
1441
|
-
COPY --chown=node:node .yarn /app/.yarn",
|
|
1442
|
-
"DOCKER_DIR": ".",
|
|
1443
1510
|
"DOCKER_DRIVER": "overlay2",
|
|
1444
1511
|
"DOCKER_HOST": "tcp://0.0.0.0:2375",
|
|
1445
|
-
"DOCKER_IMAGE": "asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/stage/api",
|
|
1446
|
-
"DOCKER_IMAGE_TAG": "$CI_COMMIT_SHA",
|
|
1447
|
-
"DOCKER_REGISTRY": "asia-east1-docker.pkg.dev",
|
|
1448
1512
|
"DOCKER_TLS_CERTDIR": "",
|
|
1449
1513
|
"KUBERNETES_CPU_REQUEST": "0.5",
|
|
1450
1514
|
"KUBERNETES_MEMORY_LIMIT": "2Gi",
|
|
@@ -1454,14 +1518,15 @@ COPY --chown=node:node .yarn /app/.yarn",
|
|
|
1454
1518
|
"api 🚀 Deploy | prod ": {
|
|
1455
1519
|
"allow_failure": true,
|
|
1456
1520
|
"artifacts": {
|
|
1457
|
-
"
|
|
1458
|
-
"
|
|
1459
|
-
|
|
1521
|
+
"reports": {
|
|
1522
|
+
"dotenv": "gitlab_environment.env",
|
|
1523
|
+
},
|
|
1460
1524
|
},
|
|
1461
1525
|
"environment": {
|
|
1462
1526
|
"auto_stop_in": undefined,
|
|
1463
1527
|
"name": "prod/api",
|
|
1464
1528
|
"on_stop": "api 🛑 Stop ⚠️ | prod ",
|
|
1529
|
+
"url": "$CL_GITLAB_ENVIRONMENT_URL",
|
|
1465
1530
|
},
|
|
1466
1531
|
"image": "path/to/docker/gcloud:the-version",
|
|
1467
1532
|
"interruptible": true,
|
|
@@ -1492,13 +1557,74 @@ COPY --chown=node:node .yarn /app/.yarn",
|
|
|
1492
1557
|
},
|
|
1493
1558
|
],
|
|
1494
1559
|
"script": [
|
|
1560
|
+
"echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
|
|
1561
|
+
"export ENV_SHORT="prod"",
|
|
1562
|
+
"export APP_DIR="app"",
|
|
1563
|
+
"export ENV_TYPE="prod"",
|
|
1564
|
+
"export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
|
|
1565
|
+
"export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
|
|
1566
|
+
"export BUILD_INFO_CURRENT_VERSION="$(tag=$(git ls-remote origin "refs/tags/v*[0-9]" 2>/dev/null | cut -f 2- | sort -V | tail -1 | sed 's/refs\\/tags\\///'); [ -z "$tag" ] && echo "v0.0.0" || echo "$tag")"",
|
|
1567
|
+
"export HOST="$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
|
|
1568
|
+
"export ROOT_URL="https://$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
|
|
1569
|
+
"export HOST_INTERNAL="$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
|
|
1570
|
+
"export HOST_CANONICAL="$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
|
|
1571
|
+
"export ROOT_URL_INTERNAL="https://$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
|
|
1572
|
+
"export CLOUD_RUN_JOB_TRIGGER_URL_alarm_clock="https://asia-east1-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/asdf/jobs/pan-test-app-prod-api-alarm-clock:run"",
|
|
1573
|
+
"export DEPLOY_CLOUD_RUN_PROJECT_ID="asdf"",
|
|
1574
|
+
"export DEPLOY_CLOUD_RUN_REGION="asia-east1"",
|
|
1575
|
+
"export GCLOUD_DEPLOY_credentialsKey="$CL_prod_api_GCLOUD_DEPLOY_credentialsKey"",
|
|
1576
|
+
"export GCLOUD_RUN_canonicalHostSuffix="$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix"",
|
|
1577
|
+
"export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOST\\",\\"ROOT_URL\\",\\"HOST_INTERNAL\\",\\"HOST_CANONICAL\\",\\"ROOT_URL_INTERNAL\\",\\"CLOUD_RUN_JOB_TRIGGER_URL_alarm_clock\\",\\"DEPLOY_CLOUD_RUN_PROJECT_ID\\",\\"DEPLOY_CLOUD_RUN_REGION\\",\\"GCLOUD_DEPLOY_credentialsKey\\",\\"GCLOUD_RUN_canonicalHostSuffix\\"]"",
|
|
1578
|
+
"export DOCKER_REGISTRY="asia-east1-docker.pkg.dev"",
|
|
1579
|
+
"export DOCKER_IMAGE="asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/prod/api"",
|
|
1580
|
+
"export DOCKER_CACHE_IMAGE="asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/caches/api"",
|
|
1581
|
+
"export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"",
|
|
1582
|
+
"export CLOUDSDK_CORE_DISABLE_PROMPTS="1"",
|
|
1583
|
+
"echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
|
|
1495
1584
|
"echo -e "\\e[0Ksection_start:$(date +%s):prepare[collapsed=true]\\r\\e[0KPrepare..."",
|
|
1496
1585
|
"gcloud auth activate-service-account --key-file=<(echo "$CL_prod_api_GCLOUD_DEPLOY_credentialsKey")",
|
|
1497
1586
|
"export GCLOUD_PROJECT_NUMBER=$(gcloud projects describe asdf --format="value(projectNumber)")",
|
|
1498
1587
|
"echo "GCLOUD_PROJECT_NUMBER: $GCLOUD_PROJECT_NUMBER"",
|
|
1499
1588
|
"echo -e "\\e[0Ksection_end:$(date +%s):prepare\\r\\e[0K"",
|
|
1589
|
+
"echo -e "\\e[0Ksection_start:$(date +%s):writeenvvars[collapsed=true]\\r\\e[0KWrite env vars to file"",
|
|
1590
|
+
"cat > ____envvars.yaml <<EOF
|
|
1591
|
+
ENV_SHORT: |-
|
|
1592
|
+
prod
|
|
1593
|
+
APP_DIR: |-
|
|
1594
|
+
app
|
|
1595
|
+
ENV_TYPE: |-
|
|
1596
|
+
prod
|
|
1597
|
+
BUILD_INFO_BUILD_ID: |-
|
|
1598
|
+
$(printf %s "$(git describe --tags 2>/dev/null || git rev-parse HEAD)" | sed 's/^/ /')
|
|
1599
|
+
BUILD_INFO_BUILD_TIME: |-
|
|
1600
|
+
$(printf %s "$CI_JOB_STARTED_AT" | sed 's/^/ /')
|
|
1601
|
+
BUILD_INFO_CURRENT_VERSION: |-
|
|
1602
|
+
$(printf %s "$(tag=$(git ls-remote origin "refs/tags/v*[0-9]" 2>/dev/null | cut -f 2- | sort -V | tail -1 | sed 's/refs\\/tags\\///'); [ -z "$tag" ] && echo "v0.0.0" || echo "$tag")" | sed 's/^/ /')
|
|
1603
|
+
HOST: |-
|
|
1604
|
+
$(printf %s "$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
|
|
1605
|
+
ROOT_URL: |-
|
|
1606
|
+
$(printf %s "https://$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
|
|
1607
|
+
HOST_INTERNAL: |-
|
|
1608
|
+
$(printf %s "$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
|
|
1609
|
+
HOST_CANONICAL: |-
|
|
1610
|
+
$(printf %s "$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
|
|
1611
|
+
ROOT_URL_INTERNAL: |-
|
|
1612
|
+
$(printf %s "https://$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
|
|
1613
|
+
CLOUD_RUN_JOB_TRIGGER_URL_alarm_clock: |-
|
|
1614
|
+
https://asia-east1-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/asdf/jobs/pan-test-app-prod-api-alarm-clock:run
|
|
1615
|
+
DEPLOY_CLOUD_RUN_PROJECT_ID: |-
|
|
1616
|
+
asdf
|
|
1617
|
+
DEPLOY_CLOUD_RUN_REGION: |-
|
|
1618
|
+
asia-east1
|
|
1619
|
+
GCLOUD_RUN_canonicalHostSuffix: |-
|
|
1620
|
+
$(printf %s "$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | sed 's/^/ /')
|
|
1621
|
+
_ALL_ENV_VAR_KEYS: |-
|
|
1622
|
+
["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","HOST_INTERNAL","HOST_CANONICAL","ROOT_URL_INTERNAL","CLOUD_RUN_JOB_TRIGGER_URL_alarm_clock","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]
|
|
1623
|
+
|
|
1624
|
+
EOF
|
|
1625
|
+
",
|
|
1626
|
+
"echo -e "\\e[0Ksection_end:$(date +%s):writeenvvars\\r\\e[0K"",
|
|
1500
1627
|
"echo -e "\\e[0Ksection_start:$(date +%s):deploy[collapsed=true]\\r\\e[0KDeploy to cloud run"",
|
|
1501
|
-
"echo "$ENV_VARS" > ____envvars.yaml",
|
|
1502
1628
|
"set +e",
|
|
1503
1629
|
"gcloud scheduler jobs create http pan-test-app-prod-api-alarm-clock-scheduler --project=asdf --location=asia-east1 --schedule="0 7 0 0 1-5" --max-retry-attempts=0 --uri="https://asia-east1-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/asdf/jobs/pan-test-app-prod-api-alarm-clock:run" --http-method=POST --oauth-service-account-email=$GCLOUD_PROJECT_NUMBER-compute@developer.gserviceaccount.com",
|
|
1504
1630
|
"set -e",
|
|
@@ -1514,77 +1640,28 @@ COPY --chown=node:node .yarn /app/.yarn",
|
|
|
1514
1640
|
"gcloud artifacts docker images list asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/caches/api --sort-by=~CREATE_TIME --format="value(version)" | tail -n +2 | while read -r version; do gcloud artifacts docker images delete asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/caches/api@$version --quiet --delete-tags; done",
|
|
1515
1641
|
"echo -e "\\e[0Ksection_end:$(date +%s):cleanup\\r\\e[0K"",
|
|
1516
1642
|
"echo Uploading SBOM to Dependency Track",
|
|
1517
|
-
"/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/api" "https
|
|
1518
|
-
|
|
1519
|
-
"services": [
|
|
1520
|
-
{
|
|
1521
|
-
"command": [
|
|
1522
|
-
"--tls=false",
|
|
1523
|
-
],
|
|
1524
|
-
"name": "docker:24.0.6-dind",
|
|
1525
|
-
},
|
|
1643
|
+
"/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/api" "https://$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" "__sbom.json" vex.json || true",
|
|
1644
|
+
"echo "CL_GITLAB_ENVIRONMENT_URL=https://$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" >> gitlab_environment.env",
|
|
1526
1645
|
],
|
|
1527
1646
|
"stage": "deploy prod",
|
|
1528
1647
|
"variables": {
|
|
1529
|
-
"APP_DIR": "app",
|
|
1530
|
-
"BUILD_INFO_BUILD_TIME": "01-01-2023 12:13:14",
|
|
1531
|
-
"BUILD_INFO_CURRENT_VERSION": "3.2.1",
|
|
1532
|
-
"BUILD_INFO_ID": "some-id",
|
|
1533
|
-
"CLOUDSDK_CORE_DISABLE_PROMPTS": "1",
|
|
1534
|
-
"CLOUD_RUN_JOB_TRIGGER_URL_alarm_clock": "https://asia-east1-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/asdf/jobs/pan-test-app-prod-api-alarm-clock:run",
|
|
1535
|
-
"DEPLOY_CLOUD_RUN_PROJECT_ID": "asdf",
|
|
1536
|
-
"DEPLOY_CLOUD_RUN_REGION": "asia-east1",
|
|
1537
|
-
"DOCKER_BUILDKIT": "1",
|
|
1538
|
-
"DOCKER_CACHE_IMAGE": "asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/caches/api",
|
|
1539
|
-
"DOCKER_DRIVER": "overlay2",
|
|
1540
|
-
"DOCKER_HOST": "tcp://0.0.0.0:2375",
|
|
1541
|
-
"DOCKER_IMAGE": "asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/prod/api",
|
|
1542
|
-
"DOCKER_IMAGE_TAG": "$CI_COMMIT_SHA",
|
|
1543
|
-
"DOCKER_REGISTRY": "asia-east1-docker.pkg.dev",
|
|
1544
|
-
"DOCKER_TLS_CERTDIR": "",
|
|
1545
|
-
"ENV_SHORT": "prod",
|
|
1546
|
-
"ENV_TYPE": "prod",
|
|
1547
|
-
"ENV_VARS": "ENV_SHORT: 'prod'
|
|
1548
|
-
APP_DIR: 'app'
|
|
1549
|
-
ENV_TYPE: 'prod'
|
|
1550
|
-
BUILD_INFO_ID: 'some-id'
|
|
1551
|
-
BUILD_INFO_BUILD_TIME: '01-01-2023 12:13:14'
|
|
1552
|
-
BUILD_INFO_CURRENT_VERSION: '3.2.1'
|
|
1553
|
-
HOST: 'pan-test-app-prod-api-unknown-host.example.com'
|
|
1554
|
-
ROOT_URL: 'https://pan-test-app-prod-api-unknown-host.example.com'
|
|
1555
|
-
HOST_CANONICAL: 'pan-test-app-prod-api-unknown-host.example.com'
|
|
1556
|
-
ROOT_URL_INTERNAL: 'https://pan-test-app-prod-api-unknown-host.example.com'
|
|
1557
|
-
HOST_INTERNAL: 'pan-test-app-prod-api-unknown-host.example.com'
|
|
1558
|
-
CLOUD_RUN_JOB_TRIGGER_URL_alarm_clock: 'https://asia-east1-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/asdf/jobs/pan-test-app-prod-api-alarm-clock:run'
|
|
1559
|
-
DEPLOY_CLOUD_RUN_PROJECT_ID: 'asdf'
|
|
1560
|
-
DEPLOY_CLOUD_RUN_REGION: 'asia-east1'
|
|
1561
|
-
GCLOUD_RUN_canonicalHostSuffix: '$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix'
|
|
1562
|
-
_ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","HOST_CANONICAL","ROOT_URL_INTERNAL","HOST_INTERNAL","CLOUD_RUN_JOB_TRIGGER_URL_alarm_clock","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]'
|
|
1563
|
-
",
|
|
1564
|
-
"GCLOUD_DEPLOY_credentialsKey": "$CL_prod_api_GCLOUD_DEPLOY_credentialsKey",
|
|
1565
|
-
"GCLOUD_RUN_canonicalHostSuffix": "$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix",
|
|
1566
|
-
"HOST": "pan-test-app-prod-api-unknown-host.example.com",
|
|
1567
|
-
"HOST_CANONICAL": "pan-test-app-prod-api-unknown-host.example.com",
|
|
1568
|
-
"HOST_INTERNAL": "pan-test-app-prod-api-unknown-host.example.com",
|
|
1569
1648
|
"KUBERNETES_CPU_REQUEST": "0.5",
|
|
1570
1649
|
"KUBERNETES_MEMORY_LIMIT": "400Mi",
|
|
1571
1650
|
"KUBERNETES_MEMORY_REQUEST": "200Mi",
|
|
1572
|
-
"ROOT_URL": "https://pan-test-app-prod-api-unknown-host.example.com",
|
|
1573
|
-
"ROOT_URL_INTERNAL": "https://pan-test-app-prod-api-unknown-host.example.com",
|
|
1574
|
-
"_ALL_ENV_VAR_KEYS": "["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","HOST_CANONICAL","ROOT_URL_INTERNAL","HOST_INTERNAL","CLOUD_RUN_JOB_TRIGGER_URL_alarm_clock","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]",
|
|
1575
1651
|
},
|
|
1576
1652
|
},
|
|
1577
1653
|
"api 🚀 Deploy | stage ": {
|
|
1578
1654
|
"allow_failure": false,
|
|
1579
1655
|
"artifacts": {
|
|
1580
|
-
"
|
|
1581
|
-
"
|
|
1582
|
-
|
|
1656
|
+
"reports": {
|
|
1657
|
+
"dotenv": "gitlab_environment.env",
|
|
1658
|
+
},
|
|
1583
1659
|
},
|
|
1584
1660
|
"environment": {
|
|
1585
1661
|
"auto_stop_in": undefined,
|
|
1586
1662
|
"name": "stage/api",
|
|
1587
1663
|
"on_stop": "api 🛑 Stop ⚠️ | stage ",
|
|
1664
|
+
"url": "$CL_GITLAB_ENVIRONMENT_URL",
|
|
1588
1665
|
},
|
|
1589
1666
|
"image": "path/to/docker/gcloud:the-version",
|
|
1590
1667
|
"interruptible": true,
|
|
@@ -1615,13 +1692,74 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
|
|
|
1615
1692
|
},
|
|
1616
1693
|
],
|
|
1617
1694
|
"script": [
|
|
1695
|
+
"echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
|
|
1696
|
+
"export ENV_SHORT="stage"",
|
|
1697
|
+
"export APP_DIR="app"",
|
|
1698
|
+
"export ENV_TYPE="stage"",
|
|
1699
|
+
"export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
|
|
1700
|
+
"export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
|
|
1701
|
+
"export BUILD_INFO_CURRENT_VERSION="$(tag=$(git ls-remote origin "refs/tags/v*[0-9]" 2>/dev/null | cut -f 2- | sort -V | tail -1 | sed 's/refs\\/tags\\///'); [ -z "$tag" ] && echo "v0.0.0" || echo "$tag")"",
|
|
1702
|
+
"export HOST="$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
|
|
1703
|
+
"export ROOT_URL="https://$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
|
|
1704
|
+
"export HOST_INTERNAL="$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
|
|
1705
|
+
"export HOST_CANONICAL="$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
|
|
1706
|
+
"export ROOT_URL_INTERNAL="https://$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"",
|
|
1707
|
+
"export CLOUD_RUN_JOB_TRIGGER_URL_alarm_clock="https://asia-east1-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/asdf/jobs/pan-test-app-stage-api-alarm-clock:run"",
|
|
1708
|
+
"export DEPLOY_CLOUD_RUN_PROJECT_ID="asdf"",
|
|
1709
|
+
"export DEPLOY_CLOUD_RUN_REGION="asia-east1"",
|
|
1710
|
+
"export GCLOUD_DEPLOY_credentialsKey="$CL_stage_api_GCLOUD_DEPLOY_credentialsKey"",
|
|
1711
|
+
"export GCLOUD_RUN_canonicalHostSuffix="$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix"",
|
|
1712
|
+
"export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOST\\",\\"ROOT_URL\\",\\"HOST_INTERNAL\\",\\"HOST_CANONICAL\\",\\"ROOT_URL_INTERNAL\\",\\"CLOUD_RUN_JOB_TRIGGER_URL_alarm_clock\\",\\"DEPLOY_CLOUD_RUN_PROJECT_ID\\",\\"DEPLOY_CLOUD_RUN_REGION\\",\\"GCLOUD_DEPLOY_credentialsKey\\",\\"GCLOUD_RUN_canonicalHostSuffix\\"]"",
|
|
1713
|
+
"export DOCKER_REGISTRY="asia-east1-docker.pkg.dev"",
|
|
1714
|
+
"export DOCKER_IMAGE="asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/stage/api"",
|
|
1715
|
+
"export DOCKER_CACHE_IMAGE="asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/caches/api"",
|
|
1716
|
+
"export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"",
|
|
1717
|
+
"export CLOUDSDK_CORE_DISABLE_PROMPTS="1"",
|
|
1718
|
+
"echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
|
|
1618
1719
|
"echo -e "\\e[0Ksection_start:$(date +%s):prepare[collapsed=true]\\r\\e[0KPrepare..."",
|
|
1619
1720
|
"gcloud auth activate-service-account --key-file=<(echo "$CL_stage_api_GCLOUD_DEPLOY_credentialsKey")",
|
|
1620
1721
|
"export GCLOUD_PROJECT_NUMBER=$(gcloud projects describe asdf --format="value(projectNumber)")",
|
|
1621
1722
|
"echo "GCLOUD_PROJECT_NUMBER: $GCLOUD_PROJECT_NUMBER"",
|
|
1622
1723
|
"echo -e "\\e[0Ksection_end:$(date +%s):prepare\\r\\e[0K"",
|
|
1724
|
+
"echo -e "\\e[0Ksection_start:$(date +%s):writeenvvars[collapsed=true]\\r\\e[0KWrite env vars to file"",
|
|
1725
|
+
"cat > ____envvars.yaml <<EOF
|
|
1726
|
+
ENV_SHORT: |-
|
|
1727
|
+
stage
|
|
1728
|
+
APP_DIR: |-
|
|
1729
|
+
app
|
|
1730
|
+
ENV_TYPE: |-
|
|
1731
|
+
stage
|
|
1732
|
+
BUILD_INFO_BUILD_ID: |-
|
|
1733
|
+
$(printf %s "$(git describe --tags 2>/dev/null || git rev-parse HEAD)" | sed 's/^/ /')
|
|
1734
|
+
BUILD_INFO_BUILD_TIME: |-
|
|
1735
|
+
$(printf %s "$CI_JOB_STARTED_AT" | sed 's/^/ /')
|
|
1736
|
+
BUILD_INFO_CURRENT_VERSION: |-
|
|
1737
|
+
$(printf %s "$(tag=$(git ls-remote origin "refs/tags/v*[0-9]" 2>/dev/null | cut -f 2- | sort -V | tail -1 | sed 's/refs\\/tags\\///'); [ -z "$tag" ] && echo "v0.0.0" || echo "$tag")" | sed 's/^/ /')
|
|
1738
|
+
HOST: |-
|
|
1739
|
+
$(printf %s "$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
|
|
1740
|
+
ROOT_URL: |-
|
|
1741
|
+
$(printf %s "https://$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
|
|
1742
|
+
HOST_INTERNAL: |-
|
|
1743
|
+
$(printf %s "$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
|
|
1744
|
+
HOST_CANONICAL: |-
|
|
1745
|
+
$(printf %s "$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
|
|
1746
|
+
ROOT_URL_INTERNAL: |-
|
|
1747
|
+
$(printf %s "https://$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
|
|
1748
|
+
CLOUD_RUN_JOB_TRIGGER_URL_alarm_clock: |-
|
|
1749
|
+
https://asia-east1-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/asdf/jobs/pan-test-app-stage-api-alarm-clock:run
|
|
1750
|
+
DEPLOY_CLOUD_RUN_PROJECT_ID: |-
|
|
1751
|
+
asdf
|
|
1752
|
+
DEPLOY_CLOUD_RUN_REGION: |-
|
|
1753
|
+
asia-east1
|
|
1754
|
+
GCLOUD_RUN_canonicalHostSuffix: |-
|
|
1755
|
+
$(printf %s "$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | sed 's/^/ /')
|
|
1756
|
+
_ALL_ENV_VAR_KEYS: |-
|
|
1757
|
+
["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","HOST_INTERNAL","HOST_CANONICAL","ROOT_URL_INTERNAL","CLOUD_RUN_JOB_TRIGGER_URL_alarm_clock","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]
|
|
1758
|
+
|
|
1759
|
+
EOF
|
|
1760
|
+
",
|
|
1761
|
+
"echo -e "\\e[0Ksection_end:$(date +%s):writeenvvars\\r\\e[0K"",
|
|
1623
1762
|
"echo -e "\\e[0Ksection_start:$(date +%s):deploy[collapsed=true]\\r\\e[0KDeploy to cloud run"",
|
|
1624
|
-
"echo "$ENV_VARS" > ____envvars.yaml",
|
|
1625
1763
|
"set +e",
|
|
1626
1764
|
"gcloud scheduler jobs create http pan-test-app-stage-api-alarm-clock-scheduler --project=asdf --location=asia-east1 --schedule="0 7 0 0 1-5" --max-retry-attempts=0 --uri="https://asia-east1-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/asdf/jobs/pan-test-app-stage-api-alarm-clock:run" --http-method=POST --oauth-service-account-email=$GCLOUD_PROJECT_NUMBER-compute@developer.gserviceaccount.com",
|
|
1627
1765
|
"set -e",
|
|
@@ -1637,70 +1775,27 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
|
|
|
1637
1775
|
"gcloud artifacts docker images list asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/caches/api --sort-by=~CREATE_TIME --format="value(version)" | tail -n +2 | while read -r version; do gcloud artifacts docker images delete asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/caches/api@$version --quiet --delete-tags; done",
|
|
1638
1776
|
"echo -e "\\e[0Ksection_end:$(date +%s):cleanup\\r\\e[0K"",
|
|
1639
1777
|
"echo Uploading SBOM to Dependency Track",
|
|
1640
|
-
"/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/api" "https
|
|
1641
|
-
|
|
1642
|
-
"services": [
|
|
1643
|
-
{
|
|
1644
|
-
"command": [
|
|
1645
|
-
"--tls=false",
|
|
1646
|
-
],
|
|
1647
|
-
"name": "docker:24.0.6-dind",
|
|
1648
|
-
},
|
|
1778
|
+
"/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/api" "https://$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" "__sbom.json" vex.json || true",
|
|
1779
|
+
"echo "CL_GITLAB_ENVIRONMENT_URL=https://$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" >> gitlab_environment.env",
|
|
1649
1780
|
],
|
|
1650
1781
|
"stage": "deploy stage",
|
|
1651
1782
|
"variables": {
|
|
1652
|
-
"APP_DIR": "app",
|
|
1653
|
-
"BUILD_INFO_BUILD_TIME": "01-01-2023 12:13:14",
|
|
1654
|
-
"BUILD_INFO_CURRENT_VERSION": "3.2.1",
|
|
1655
|
-
"BUILD_INFO_ID": "some-id",
|
|
1656
|
-
"CLOUDSDK_CORE_DISABLE_PROMPTS": "1",
|
|
1657
|
-
"CLOUD_RUN_JOB_TRIGGER_URL_alarm_clock": "https://asia-east1-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/asdf/jobs/pan-test-app-stage-api-alarm-clock:run",
|
|
1658
|
-
"DEPLOY_CLOUD_RUN_PROJECT_ID": "asdf",
|
|
1659
|
-
"DEPLOY_CLOUD_RUN_REGION": "asia-east1",
|
|
1660
|
-
"DOCKER_BUILDKIT": "1",
|
|
1661
|
-
"DOCKER_CACHE_IMAGE": "asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/caches/api",
|
|
1662
|
-
"DOCKER_DRIVER": "overlay2",
|
|
1663
|
-
"DOCKER_HOST": "tcp://0.0.0.0:2375",
|
|
1664
|
-
"DOCKER_IMAGE": "asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/stage/api",
|
|
1665
|
-
"DOCKER_IMAGE_TAG": "$CI_COMMIT_SHA",
|
|
1666
|
-
"DOCKER_REGISTRY": "asia-east1-docker.pkg.dev",
|
|
1667
|
-
"DOCKER_TLS_CERTDIR": "",
|
|
1668
|
-
"ENV_SHORT": "stage",
|
|
1669
|
-
"ENV_TYPE": "stage",
|
|
1670
|
-
"ENV_VARS": "ENV_SHORT: 'stage'
|
|
1671
|
-
APP_DIR: 'app'
|
|
1672
|
-
ENV_TYPE: 'stage'
|
|
1673
|
-
BUILD_INFO_ID: 'some-id'
|
|
1674
|
-
BUILD_INFO_BUILD_TIME: '01-01-2023 12:13:14'
|
|
1675
|
-
BUILD_INFO_CURRENT_VERSION: '3.2.1'
|
|
1676
|
-
HOST: 'pan-test-app-stage-api-unknown-host.example.com'
|
|
1677
|
-
ROOT_URL: 'https://pan-test-app-stage-api-unknown-host.example.com'
|
|
1678
|
-
HOST_CANONICAL: 'pan-test-app-stage-api-unknown-host.example.com'
|
|
1679
|
-
ROOT_URL_INTERNAL: 'https://pan-test-app-stage-api-unknown-host.example.com'
|
|
1680
|
-
HOST_INTERNAL: 'pan-test-app-stage-api-unknown-host.example.com'
|
|
1681
|
-
CLOUD_RUN_JOB_TRIGGER_URL_alarm_clock: 'https://asia-east1-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/asdf/jobs/pan-test-app-stage-api-alarm-clock:run'
|
|
1682
|
-
DEPLOY_CLOUD_RUN_PROJECT_ID: 'asdf'
|
|
1683
|
-
DEPLOY_CLOUD_RUN_REGION: 'asia-east1'
|
|
1684
|
-
GCLOUD_RUN_canonicalHostSuffix: '$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix'
|
|
1685
|
-
_ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","HOST_CANONICAL","ROOT_URL_INTERNAL","HOST_INTERNAL","CLOUD_RUN_JOB_TRIGGER_URL_alarm_clock","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]'
|
|
1686
|
-
",
|
|
1687
|
-
"GCLOUD_DEPLOY_credentialsKey": "$CL_stage_api_GCLOUD_DEPLOY_credentialsKey",
|
|
1688
|
-
"GCLOUD_RUN_canonicalHostSuffix": "$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix",
|
|
1689
|
-
"HOST": "pan-test-app-stage-api-unknown-host.example.com",
|
|
1690
|
-
"HOST_CANONICAL": "pan-test-app-stage-api-unknown-host.example.com",
|
|
1691
|
-
"HOST_INTERNAL": "pan-test-app-stage-api-unknown-host.example.com",
|
|
1692
1783
|
"KUBERNETES_CPU_REQUEST": "0.5",
|
|
1693
1784
|
"KUBERNETES_MEMORY_LIMIT": "400Mi",
|
|
1694
1785
|
"KUBERNETES_MEMORY_REQUEST": "200Mi",
|
|
1695
|
-
"ROOT_URL": "https://pan-test-app-stage-api-unknown-host.example.com",
|
|
1696
|
-
"ROOT_URL_INTERNAL": "https://pan-test-app-stage-api-unknown-host.example.com",
|
|
1697
|
-
"_ALL_ENV_VAR_KEYS": "["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","HOST_CANONICAL","ROOT_URL_INTERNAL","HOST_INTERNAL","CLOUD_RUN_JOB_TRIGGER_URL_alarm_clock","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]",
|
|
1698
1786
|
},
|
|
1699
1787
|
},
|
|
1700
1788
|
"api 🛑 Stop ⚠️ | prod ": {
|
|
1789
|
+
"allow_failure": true,
|
|
1790
|
+
"artifacts": {
|
|
1791
|
+
"reports": {
|
|
1792
|
+
"dotenv": "gitlab_environment.env",
|
|
1793
|
+
},
|
|
1794
|
+
},
|
|
1701
1795
|
"environment": {
|
|
1702
1796
|
"action": "stop",
|
|
1703
1797
|
"name": "prod/api",
|
|
1798
|
+
"url": "$CL_GITLAB_ENVIRONMENT_URL",
|
|
1704
1799
|
},
|
|
1705
1800
|
"image": "path/to/docker/gcloud:the-version",
|
|
1706
1801
|
"interruptible": true,
|
|
@@ -1714,16 +1809,17 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
|
|
|
1714
1809
|
},
|
|
1715
1810
|
"rules": [
|
|
1716
1811
|
{
|
|
1717
|
-
"allow_failure": true,
|
|
1718
1812
|
"if": "$CI_COMMIT_BRANCH =~ /^[0-9]+\\.([0-9]+|x)\\.x$/",
|
|
1719
1813
|
"when": "on_success",
|
|
1720
1814
|
},
|
|
1721
1815
|
{
|
|
1722
|
-
"allow_failure": true,
|
|
1723
1816
|
"when": "manual",
|
|
1724
1817
|
},
|
|
1725
1818
|
],
|
|
1726
1819
|
"script": [
|
|
1820
|
+
"echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
|
|
1821
|
+
"export CLOUDSDK_CORE_DISABLE_PROMPTS="1"",
|
|
1822
|
+
"echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
|
|
1727
1823
|
"set +e",
|
|
1728
1824
|
"gcloud auth activate-service-account --key-file=<(echo "$CL_prod_api_GCLOUD_DEPLOY_credentialsKey")",
|
|
1729
1825
|
"gcloud scheduler jobs delete pan-test-app-prod-api-alarm-clock-scheduler --project=asdf --location=asia-east1",
|
|
@@ -1732,12 +1828,12 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
|
|
|
1732
1828
|
"gcloud artifacts docker images delete asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/prod/api --quiet --delete-tags",
|
|
1733
1829
|
"gcloud artifacts docker images list asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/caches/api --sort-by=~CREATE_TIME --format="value(version)" | tail -n +2 | while read -r version; do gcloud artifacts docker images delete asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/caches/api@$version --quiet --delete-tags; done",
|
|
1734
1830
|
"echo Disabling component in Dependency Track",
|
|
1735
|
-
"/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" disable "pan-test-app/api" "https
|
|
1831
|
+
"/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" disable "pan-test-app/api" "https://$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" || true",
|
|
1736
1832
|
"set -e",
|
|
1833
|
+
"echo "CL_GITLAB_ENVIRONMENT_URL=https://$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" >> gitlab_environment.env",
|
|
1737
1834
|
],
|
|
1738
1835
|
"stage": "stop prod",
|
|
1739
1836
|
"variables": {
|
|
1740
|
-
"CLOUDSDK_CORE_DISABLE_PROMPTS": "1",
|
|
1741
1837
|
"GIT_STRATEGY": "none",
|
|
1742
1838
|
"KUBERNETES_CPU_REQUEST": "0.5",
|
|
1743
1839
|
"KUBERNETES_MEMORY_LIMIT": "400Mi",
|
|
@@ -1745,9 +1841,16 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
|
|
|
1745
1841
|
},
|
|
1746
1842
|
},
|
|
1747
1843
|
"api 🛑 Stop ⚠️ | stage ": {
|
|
1844
|
+
"allow_failure": true,
|
|
1845
|
+
"artifacts": {
|
|
1846
|
+
"reports": {
|
|
1847
|
+
"dotenv": "gitlab_environment.env",
|
|
1848
|
+
},
|
|
1849
|
+
},
|
|
1748
1850
|
"environment": {
|
|
1749
1851
|
"action": "stop",
|
|
1750
1852
|
"name": "stage/api",
|
|
1853
|
+
"url": "$CL_GITLAB_ENVIRONMENT_URL",
|
|
1751
1854
|
},
|
|
1752
1855
|
"image": "path/to/docker/gcloud:the-version",
|
|
1753
1856
|
"interruptible": true,
|
|
@@ -1761,16 +1864,17 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
|
|
|
1761
1864
|
},
|
|
1762
1865
|
"rules": [
|
|
1763
1866
|
{
|
|
1764
|
-
"allow_failure": true,
|
|
1765
1867
|
"if": "$CI_COMMIT_BRANCH =~ /^[0-9]+\\.([0-9]+|x)\\.x$/",
|
|
1766
1868
|
"when": "on_success",
|
|
1767
1869
|
},
|
|
1768
1870
|
{
|
|
1769
|
-
"allow_failure": true,
|
|
1770
1871
|
"when": "manual",
|
|
1771
1872
|
},
|
|
1772
1873
|
],
|
|
1773
1874
|
"script": [
|
|
1875
|
+
"echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
|
|
1876
|
+
"export CLOUDSDK_CORE_DISABLE_PROMPTS="1"",
|
|
1877
|
+
"echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
|
|
1774
1878
|
"set +e",
|
|
1775
1879
|
"gcloud auth activate-service-account --key-file=<(echo "$CL_stage_api_GCLOUD_DEPLOY_credentialsKey")",
|
|
1776
1880
|
"gcloud scheduler jobs delete pan-test-app-stage-api-alarm-clock-scheduler --project=asdf --location=asia-east1",
|
|
@@ -1779,12 +1883,12 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
|
|
|
1779
1883
|
"gcloud artifacts docker images delete asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/stage/api --quiet --delete-tags",
|
|
1780
1884
|
"gcloud artifacts docker images list asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/caches/api --sort-by=~CREATE_TIME --format="value(version)" | tail -n +2 | while read -r version; do gcloud artifacts docker images delete asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/caches/api@$version --quiet --delete-tags; done",
|
|
1781
1885
|
"echo Disabling component in Dependency Track",
|
|
1782
|
-
"/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" disable "pan-test-app/api" "https
|
|
1886
|
+
"/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" disable "pan-test-app/api" "https://$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" || true",
|
|
1783
1887
|
"set -e",
|
|
1888
|
+
"echo "CL_GITLAB_ENVIRONMENT_URL=https://$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" >> gitlab_environment.env",
|
|
1784
1889
|
],
|
|
1785
1890
|
"stage": "stop stage",
|
|
1786
1891
|
"variables": {
|
|
1787
|
-
"CLOUDSDK_CORE_DISABLE_PROMPTS": "1",
|
|
1788
1892
|
"GIT_STRATEGY": "none",
|
|
1789
1893
|
"KUBERNETES_CPU_REQUEST": "0.5",
|
|
1790
1894
|
"KUBERNETES_MEMORY_LIMIT": "400Mi",
|
|
@@ -1809,6 +1913,8 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
|
|
|
1809
1913
|
],
|
|
1810
1914
|
},
|
|
1811
1915
|
"script": [
|
|
1916
|
+
"echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
|
|
1917
|
+
"echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
|
|
1812
1918
|
"trivy fs --quiet --format cyclonedx --output "__sbom.json" app",
|
|
1813
1919
|
],
|
|
1814
1920
|
"stage": "build",
|
|
@@ -1832,6 +1938,8 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
|
|
|
1832
1938
|
],
|
|
1833
1939
|
},
|
|
1834
1940
|
"script": [
|
|
1941
|
+
"echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
|
|
1942
|
+
"echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
|
|
1835
1943
|
"trivy fs --quiet --format cyclonedx --output "__sbom.json" app",
|
|
1836
1944
|
],
|
|
1837
1945
|
"stage": "build",
|
|
@@ -1884,7 +1992,7 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
|
|
|
1884
1992
|
],
|
|
1885
1993
|
"variables": {
|
|
1886
1994
|
"FF_USE_FASTZIP": "true",
|
|
1887
|
-
"GIT_DEPTH": 1,
|
|
1995
|
+
"GIT_DEPTH": "1",
|
|
1888
1996
|
},
|
|
1889
1997
|
"workflow": {
|
|
1890
1998
|
"rules": [
|