@catladder/pipeline 1.170.0 → 2.0.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 +2 -6
- package/dist/bash/BashExpression.js +5 -15
- package/dist/bash/bashEscape.d.ts +34 -0
- package/dist/bash/bashEscape.js +114 -0
- package/dist/bash/bashYaml.js +25 -2
- package/dist/bash/getInjectVarsScript.js +4 -2
- package/dist/bash/index.d.ts +2 -0
- package/dist/bash/index.js +26 -0
- package/dist/build/base/createAppBuildJob.js +3 -3
- package/dist/build/base/writeDotEnv.js +6 -4
- package/dist/build/custom/testJob.js +12 -12
- package/dist/build/docker.d.ts +3 -3
- package/dist/build/node/buildJob.js +1 -1
- package/dist/build/node/cache.d.ts +2 -4
- package/dist/build/node/cache.js +3 -24
- package/dist/build/node/testJob.js +11 -11
- package/dist/build/rails/build.js +1 -1
- package/dist/build/rails/test.js +8 -8
- package/dist/build/types.d.ts +0 -10
- package/dist/constants.js +1 -1
- package/dist/context/createComponentContext.js +0 -1
- package/dist/context/getEnvConfig.js +2 -1
- package/dist/context/getEnvironment.js +1 -2
- package/dist/context/getEnvironmentVariables.d.ts +5 -6
- package/dist/context/getEnvironmentVariables.js +50 -38
- package/dist/deploy/base/deploy.js +3 -3
- package/dist/deploy/cloudRun/createJobs/getCloudRunDeployScripts.js +2 -2
- package/dist/deploy/cloudRun/index.js +2 -2
- package/dist/deploy/cloudRun/utils/getServiceName.d.ts +1 -1
- package/dist/deploy/kubernetes/cloudSql/index.d.ts +2 -2
- package/dist/deploy/kubernetes/cloudSql/index.js +3 -14
- package/dist/deploy/kubernetes/deployJob.js +1 -3
- package/dist/deploy/kubernetes/index.js +2 -2
- package/dist/deploy/kubernetes/kubeEnv.d.ts +3 -3
- package/dist/deploy/kubernetes/kubeValues.d.ts +3 -4
- package/dist/deploy/kubernetes/kubeValues.js +2 -3
- package/dist/deploy/types/base.d.ts +0 -6
- package/dist/deploy/types/kubernetes.d.ts +1 -34
- package/dist/globalScriptFunctions/index.d.ts +14 -0
- package/dist/globalScriptFunctions/index.js +37 -0
- package/dist/index.d.ts +3 -1
- package/dist/index.js +3 -1
- package/dist/pipeline/gitlab/createGitlabJobs.js +3 -5
- package/dist/pipeline/gitlab/createGitlabPipeline.d.ts +1 -0
- package/dist/pipeline/gitlab/createGitlabPipeline.js +38 -2
- package/dist/pipeline/packageManager.js +1 -1
- package/dist/runner/index.d.ts +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/types/config.d.ts +6 -9
- package/dist/types/context.d.ts +2 -9
- package/dist/types/gitlab-types.d.ts +1 -0
- package/dist/types/jobs.d.ts +0 -8
- package/dist/utils/gitlab.js +4 -1
- package/dist/utils/writeFiles.js +1 -7
- package/dist/variables/VariableValue.d.ts +3 -0
- package/dist/variables/VariableValue.js +5 -0
- package/dist/variables/VariableValueContainingReferences.d.ts +24 -0
- package/dist/variables/VariableValueContainingReferences.js +97 -0
- package/dist/variables/__tests__/resolveAllReferences.test.js +219 -0
- package/dist/variables/__tests__/resolveAllReferencesOnce.test.d.ts +1 -0
- package/dist/variables/__tests__/resolveAllReferencesOnce.test.js +171 -0
- package/dist/variables/__tests__/resolveReferencesOnce.test.d.ts +1 -0
- package/dist/variables/__tests__/resolveReferencesOnce.test.js +202 -0
- package/dist/variables/__tests__/variableValue.test.d.ts +1 -0
- package/dist/variables/__tests__/variableValue.test.js +36 -0
- package/dist/variables/resolveAllReferences.d.ts +3 -0
- package/dist/{bash/replaceAsync.js → variables/resolveAllReferences.js} +60 -41
- package/dist/variables/resolveAllReferencesOnce.d.ts +5 -0
- package/dist/variables/resolveAllReferencesOnce.js +191 -0
- package/dist/variables/resolveReferencesOnce.d.ts +8 -0
- package/dist/variables/resolveReferencesOnce.js +22 -0
- package/examples/__snapshots__/cloud-run-http2.test.ts.snap +312 -238
- package/examples/__snapshots__/cloud-run-memory-limit.test.ts.snap +312 -238
- package/examples/__snapshots__/cloud-run-meteor-with-worker.test.ts.snap +312 -222
- package/examples/__snapshots__/cloud-run-nextjs.test.ts.snap +1436 -0
- package/examples/__snapshots__/cloud-run-no-cpu-throttling.test.ts.snap +312 -238
- package/examples/__snapshots__/cloud-run-no-service.test.ts.snap +316 -238
- package/examples/__snapshots__/cloud-run-non-public.test.ts.snap +312 -238
- package/examples/__snapshots__/cloud-run-post-stop-job.test.ts.snap +313 -238
- package/examples/__snapshots__/cloud-run-service-custom-vpc-connector.test.ts.snap +312 -238
- package/examples/__snapshots__/cloud-run-service-custom-vpc.test.ts.snap +312 -238
- package/examples/__snapshots__/cloud-run-service-gen2.test.ts.snap +312 -238
- package/examples/__snapshots__/cloud-run-service-increase-timout.test.ts.snap +312 -238
- package/examples/__snapshots__/cloud-run-service-with-volumes.test.ts.snap +316 -238
- package/examples/__snapshots__/cloud-run-storybook.test.ts.snap +294 -220
- package/examples/__snapshots__/cloud-run-with-ngnix.test.ts.snap +312 -238
- package/examples/__snapshots__/cloud-run-with-sql-reuse-db.test.ts.snap +652 -486
- package/examples/__snapshots__/cloud-run-with-sql.test.ts.snap +282 -288
- package/examples/__snapshots__/cloud-run-with-worker.test.ts.snap +312 -238
- package/examples/__snapshots__/custom-build-job-with-tests.test.ts.snap +284 -194
- package/examples/__snapshots__/custom-build-job.test.ts.snap +278 -188
- package/examples/__snapshots__/custom-deploy.test.ts.snap +220 -154
- package/examples/__snapshots__/custom-envs.test.ts.snap +216 -126
- package/examples/__snapshots__/custom-sbom-java.test.ts.snap +278 -188
- package/examples/__snapshots__/git-submodule.test.ts.snap +312 -238
- package/examples/__snapshots__/kubernetes-application-customization.test.ts.snap +231 -253
- package/examples/__snapshots__/kubernetes-with-cloud-sql.test.ts.snap +240 -262
- package/examples/__snapshots__/kubernetes-with-jobs.test.ts.snap +504 -506
- package/examples/__snapshots__/kubernetes-with-mongodb.test.ts.snap +239 -261
- package/examples/__snapshots__/local-dot-env.test.ts.snap +236 -238
- package/examples/__snapshots__/meteor-kubernetes.test.ts.snap +236 -242
- package/examples/__snapshots__/multiline-var.test.ts.snap +1355 -973
- package/examples/__snapshots__/native-app.test.ts.snap +438 -392
- package/examples/__snapshots__/node-build-with-custom-image.test.ts.snap +312 -238
- package/examples/__snapshots__/node-build-with-docker-additions.test.ts.snap +312 -238
- package/examples/__snapshots__/rails-k8s-with-worker-dockerfile.test.ts.snap +186 -188
- package/examples/__snapshots__/rails-k8s-with-worker.test.ts.snap +162 -164
- package/examples/__snapshots__/referencing-other-vars.test.ts.snap +4741 -0
- package/examples/__snapshots__/wait-for-other-deploy.test.ts.snap +330 -228
- package/examples/__snapshots__/{workspace-api-www-custom-cache.test.ts.snap → workspace-api-www-turbo-cache.test.ts.snap} +457 -499
- package/examples/__snapshots__/workspace-api-www.test.ts.snap +452 -482
- package/examples/{workspace-api-www-custom-cache.test.ts → cloud-run-nextjs.test.ts} +2 -2
- package/examples/cloud-run-nextjs.ts +28 -0
- package/examples/cloud-run-with-sql.ts +0 -1
- package/examples/kubernetes-application-customization.ts +1 -0
- package/examples/kubernetes-with-cloud-sql.ts +1 -0
- package/examples/kubernetes-with-jobs.ts +1 -0
- package/examples/kubernetes-with-mongodb.ts +1 -0
- package/examples/meteor-kubernetes.ts +1 -1
- package/examples/native-app.ts +10 -7
- package/examples/rails-k8s-with-worker.ts +7 -1
- package/examples/{kubernetes-with-cloud-sql-legacy.test.ts → referencing-other-vars.test.ts} +2 -2
- package/examples/referencing-other-vars.ts +83 -0
- package/examples/workspace-api-www-turbo-cache.test.ts +11 -0
- package/examples/{workspace-api-www-custom-cache.ts → workspace-api-www-turbo-cache.ts} +4 -3
- package/examples/workspace-api-www.ts +3 -2
- package/package.json +2 -6
- package/src/bash/BashExpression.ts +10 -13
- package/src/bash/bashEscape.ts +158 -0
- package/src/bash/bashYaml.ts +36 -2
- package/src/bash/getInjectVarsScript.ts +11 -2
- package/src/bash/index.ts +2 -0
- package/src/build/base/createAppBuildJob.ts +0 -1
- package/src/build/base/writeDotEnv.ts +6 -6
- package/src/build/custom/testJob.ts +0 -1
- package/src/build/node/buildJob.ts +2 -2
- package/src/build/node/cache.ts +0 -29
- package/src/build/node/testJob.ts +0 -1
- package/src/build/rails/build.ts +0 -1
- package/src/build/rails/test.ts +0 -1
- package/src/build/types.ts +0 -13
- package/src/context/createComponentContext.ts +0 -1
- package/src/context/getEnvConfig.ts +2 -2
- package/src/context/getEnvironment.ts +1 -1
- package/src/context/getEnvironmentContext.ts +1 -1
- package/src/context/getEnvironmentVariables.ts +44 -51
- package/src/deploy/base/deploy.ts +1 -1
- package/src/deploy/cloudRun/createJobs/getCloudRunDeployScripts.ts +4 -12
- package/src/deploy/cloudRun/index.ts +2 -2
- package/src/deploy/kubernetes/cloudSql/index.ts +3 -16
- package/src/deploy/kubernetes/deployJob.ts +0 -2
- package/src/deploy/kubernetes/index.ts +2 -2
- package/src/deploy/kubernetes/kubeEnv.ts +3 -3
- package/src/deploy/kubernetes/kubeValues.ts +5 -8
- package/src/deploy/types/base.ts +0 -6
- package/src/deploy/types/kubernetes.ts +1 -36
- package/src/globalScriptFunctions/index.ts +30 -0
- package/src/index.ts +2 -0
- package/src/pipeline/gitlab/createGitlabJobs.ts +1 -4
- package/src/pipeline/gitlab/createGitlabPipeline.ts +8 -1
- package/src/pipeline/packageManager.ts +7 -5
- package/src/runner/index.ts +0 -1
- package/src/types/config.ts +6 -9
- package/src/types/context.ts +3 -9
- package/src/types/gitlab-types.ts +1 -0
- package/src/types/jobs.ts +0 -8
- package/src/utils/gitlab.ts +19 -2
- package/src/utils/writeFiles.ts +1 -2
- package/src/variables/VariableValue.ts +6 -0
- package/src/variables/VariableValueContainingReferences.ts +89 -0
- package/src/variables/__tests__/resolveAllReferences.test.ts +110 -0
- package/src/variables/__tests__/resolveAllReferencesOnce.test.ts +64 -0
- package/src/variables/__tests__/resolveReferencesOnce.test.ts +117 -0
- package/src/variables/__tests__/variableValue.test.ts +73 -0
- package/src/variables/resolveAllReferences.ts +46 -0
- package/src/variables/resolveAllReferencesOnce.ts +44 -0
- package/src/variables/resolveReferencesOnce.ts +29 -0
- package/bin/catladder-gitlab-dev.js +0 -3
- package/bin/catladder-gitlab.js +0 -3
- package/dist/bash/replaceAsync.d.ts +0 -2
- package/dist/bundles/catladder-gitlab/index.js +0 -15
- package/dist/context/__tests__/resolveReferences.test.js +0 -368
- package/dist/context/resolveReferences.d.ts +0 -6
- package/dist/context/resolveReferences.js +0 -286
- package/dist/deploy/kubernetes/processSecretsAsFiles.d.ts +0 -85
- package/dist/deploy/kubernetes/processSecretsAsFiles.js +0 -33
- package/examples/__snapshots__/kubernetes-with-cloud-sql-legacy.test.ts.snap +0 -1795
- package/examples/kubernetes-with-cloud-sql-legacy.ts +0 -35
- package/scripts/bundle +0 -2
- package/src/bash/replaceAsync.ts +0 -54
- package/src/context/__tests__/resolveReferences.test.ts +0 -148
- package/src/context/resolveReferences.ts +0 -93
- package/src/deploy/kubernetes/processSecretsAsFiles.ts +0 -35
- /package/dist/{context/__tests__/resolveReferences.test.d.ts → variables/__tests__/resolveAllReferences.test.d.ts} +0 -0
|
@@ -45,6 +45,36 @@ variables:
|
|
|
45
45
|
CACHE_COMPRESSION_LEVEL: fast
|
|
46
46
|
TRANSFER_METER_FREQUENCY: 5s
|
|
47
47
|
GIT_DEPTH: '1'
|
|
48
|
+
before_script:
|
|
49
|
+
- |-
|
|
50
|
+
function escapeForDotEnv () {
|
|
51
|
+
input="\${1:-$(cat)}"
|
|
52
|
+
input="\${input//$'\\n'/\\\\n}"
|
|
53
|
+
if [[ "$input" == *\\\\n* ]]; then
|
|
54
|
+
if [[ "$input" == *\\"* && "$input" == *\\'* && "$input" == *\\\`* ]]; then
|
|
55
|
+
printf "\\"%s\\"\\n" "$input"
|
|
56
|
+
elif [[ "$input" == *\\"* && "$input" == *\\'* ]]; then
|
|
57
|
+
printf "\`%s\`\\n" "$input"
|
|
58
|
+
elif [[ "$input" == *\\"* ]]; then
|
|
59
|
+
printf "'%s'\\n" "$input"
|
|
60
|
+
else
|
|
61
|
+
printf "\\"%s\\"\\n" "$input"
|
|
62
|
+
fi
|
|
63
|
+
else
|
|
64
|
+
printf "%s\\n" "$input"
|
|
65
|
+
fi
|
|
66
|
+
}
|
|
67
|
+
- |-
|
|
68
|
+
function collapseable_section_start () {
|
|
69
|
+
local section_title="\${1}"
|
|
70
|
+
local section_description="\${2:-$section_title}"
|
|
71
|
+
echo -e "section_start:\`date +%s\`:\${section_title}[collapsed=true]\\r\\e[0K\${section_description}"
|
|
72
|
+
}
|
|
73
|
+
- |-
|
|
74
|
+
function collapseable_section_end () {
|
|
75
|
+
local section_title="\${1}"
|
|
76
|
+
echo -e "section_end:\`date +%s\`:\${section_title}\\r\\e[0K"
|
|
77
|
+
}
|
|
48
78
|
api 🛡 audit:
|
|
49
79
|
stage: test
|
|
50
80
|
image: path/to/docker/jobs-default:the-version
|
|
@@ -53,9 +83,9 @@ api 🛡 audit:
|
|
|
53
83
|
KUBERNETES_MEMORY_REQUEST: 1Gi
|
|
54
84
|
KUBERNETES_MEMORY_LIMIT: 4Gi
|
|
55
85
|
script:
|
|
56
|
-
-
|
|
86
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
57
87
|
- export APP_PATH="api"
|
|
58
|
-
-
|
|
88
|
+
- collapseable_section_end "injectvars"
|
|
59
89
|
- cd api
|
|
60
90
|
- yarn npm audit --environment production
|
|
61
91
|
rules:
|
|
@@ -79,21 +109,21 @@ api 👮 lint:
|
|
|
79
109
|
KUBERNETES_MEMORY_REQUEST: 1Gi
|
|
80
110
|
KUBERNETES_MEMORY_LIMIT: 4Gi
|
|
81
111
|
script:
|
|
82
|
-
-
|
|
112
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
83
113
|
- export APP_PATH="api"
|
|
84
|
-
-
|
|
85
|
-
-
|
|
114
|
+
- collapseable_section_end "injectvars"
|
|
115
|
+
- collapseable_section_start "nodeinstall" "Ensure node version"
|
|
86
116
|
- if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
|
|
87
117
|
- if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
|
|
88
|
-
-
|
|
118
|
+
- collapseable_section_end "nodeinstall"
|
|
89
119
|
- cd api
|
|
90
|
-
-
|
|
120
|
+
- collapseable_section_start "nodeinstall" "Ensure node version"
|
|
91
121
|
- if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
|
|
92
122
|
- if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
|
|
93
|
-
-
|
|
94
|
-
-
|
|
123
|
+
- collapseable_section_end "nodeinstall"
|
|
124
|
+
- collapseable_section_start "yarninstall" "Yarn install"
|
|
95
125
|
- yarn install --immutable
|
|
96
|
-
-
|
|
126
|
+
- collapseable_section_end "yarninstall"
|
|
97
127
|
- yarn lint
|
|
98
128
|
cache:
|
|
99
129
|
- key: api-yarn
|
|
@@ -120,21 +150,21 @@ api 🧪 test:
|
|
|
120
150
|
KUBERNETES_MEMORY_REQUEST: 1Gi
|
|
121
151
|
KUBERNETES_MEMORY_LIMIT: 4Gi
|
|
122
152
|
script:
|
|
123
|
-
-
|
|
153
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
124
154
|
- export APP_PATH="api"
|
|
125
|
-
-
|
|
126
|
-
-
|
|
155
|
+
- collapseable_section_end "injectvars"
|
|
156
|
+
- collapseable_section_start "nodeinstall" "Ensure node version"
|
|
127
157
|
- if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
|
|
128
158
|
- if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
|
|
129
|
-
-
|
|
159
|
+
- collapseable_section_end "nodeinstall"
|
|
130
160
|
- cd api
|
|
131
|
-
-
|
|
161
|
+
- collapseable_section_start "nodeinstall" "Ensure node version"
|
|
132
162
|
- if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
|
|
133
163
|
- if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
|
|
134
|
-
-
|
|
135
|
-
-
|
|
164
|
+
- collapseable_section_end "nodeinstall"
|
|
165
|
+
- collapseable_section_start "yarninstall" "Yarn install"
|
|
136
166
|
- yarn install --immutable
|
|
137
|
-
-
|
|
167
|
+
- collapseable_section_end "yarninstall"
|
|
138
168
|
- yarn test
|
|
139
169
|
cache:
|
|
140
170
|
- key: api-yarn
|
|
@@ -161,37 +191,53 @@ api 🧪 test:
|
|
|
161
191
|
KUBERNETES_MEMORY_REQUEST: 1Gi
|
|
162
192
|
KUBERNETES_MEMORY_LIMIT: 4Gi
|
|
163
193
|
script:
|
|
164
|
-
-
|
|
194
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
165
195
|
- export ENV_SHORT="dev"
|
|
166
196
|
- export APP_DIR="api"
|
|
167
197
|
- export ENV_TYPE="dev"
|
|
168
198
|
- export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
|
|
169
199
|
- export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
|
|
170
200
|
- 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\\/v//'); [ -z "$tag" ] && echo "0.0.0" || echo "$tag")"
|
|
171
|
-
- export
|
|
201
|
+
- export HOSTNAME="$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
172
202
|
- export ROOT_URL="https://$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
173
|
-
- export
|
|
174
|
-
- export HOST_CANONICAL="$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
203
|
+
- export HOSTNAME_INTERNAL="$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
175
204
|
- export ROOT_URL_INTERNAL="https://$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
176
205
|
- export DEPLOY_CLOUD_RUN_PROJECT_ID="google-project-id"
|
|
177
206
|
- export DEPLOY_CLOUD_RUN_REGION="europe-west6"
|
|
178
207
|
- export GCLOUD_DEPLOY_credentialsKey="$CL_dev_api_GCLOUD_DEPLOY_credentialsKey"
|
|
179
208
|
- export GCLOUD_RUN_canonicalHostSuffix="$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix"
|
|
180
|
-
- export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"
|
|
181
|
-
-
|
|
209
|
+
- export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOSTNAME\\",\\"ROOT_URL\\",\\"HOSTNAME_INTERNAL\\",\\"ROOT_URL_INTERNAL\\",\\"DEPLOY_CLOUD_RUN_PROJECT_ID\\",\\"DEPLOY_CLOUD_RUN_REGION\\",\\"GCLOUD_DEPLOY_credentialsKey\\",\\"GCLOUD_RUN_canonicalHostSuffix\\"]"
|
|
210
|
+
- collapseable_section_end "injectvars"
|
|
211
|
+
- collapseable_section_start "write-dotenv-api" "write dot env for api"
|
|
212
|
+
- |-
|
|
213
|
+
cat <<EOF > api/.env
|
|
214
|
+
ENV_SHORT=dev
|
|
215
|
+
APP_DIR=api
|
|
216
|
+
ENV_TYPE=dev
|
|
217
|
+
HOSTNAME=$(printf %s "$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | escapeForDotEnv)
|
|
218
|
+
ROOT_URL=$(printf %s "https://$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | escapeForDotEnv)
|
|
219
|
+
HOSTNAME_INTERNAL=$(printf %s "$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | escapeForDotEnv)
|
|
220
|
+
ROOT_URL_INTERNAL=$(printf %s "https://$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | escapeForDotEnv)
|
|
221
|
+
DEPLOY_CLOUD_RUN_PROJECT_ID=google-project-id
|
|
222
|
+
DEPLOY_CLOUD_RUN_REGION=europe-west6
|
|
223
|
+
GCLOUD_DEPLOY_credentialsKey=$(printf %s "$CL_dev_api_GCLOUD_DEPLOY_credentialsKey" | escapeForDotEnv)
|
|
224
|
+
GCLOUD_RUN_canonicalHostSuffix=$(printf %s "$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | escapeForDotEnv)
|
|
225
|
+
_ALL_ENV_VAR_KEYS=["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOSTNAME","ROOT_URL","HOSTNAME_INTERNAL","ROOT_URL_INTERNAL","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]
|
|
226
|
+
EOF
|
|
227
|
+
- collapseable_section_end "write-dotenv-api"
|
|
182
228
|
- echo '{"id":"$(git describe --tags 2>/dev/null || git rev-parse HEAD)","time":"$CI_JOB_STARTED_AT"}' > api/__build_info.json
|
|
183
|
-
-
|
|
229
|
+
- collapseable_section_start "nodeinstall" "Ensure node version"
|
|
184
230
|
- if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
|
|
185
231
|
- if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
|
|
186
|
-
-
|
|
232
|
+
- collapseable_section_end "nodeinstall"
|
|
187
233
|
- cd api
|
|
188
|
-
-
|
|
234
|
+
- collapseable_section_start "nodeinstall" "Ensure node version"
|
|
189
235
|
- if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
|
|
190
236
|
- if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
|
|
191
|
-
-
|
|
192
|
-
-
|
|
237
|
+
- collapseable_section_end "nodeinstall"
|
|
238
|
+
- collapseable_section_start "yarninstall" "Yarn install"
|
|
193
239
|
- yarn install --immutable
|
|
194
|
-
-
|
|
240
|
+
- collapseable_section_end "yarninstall"
|
|
195
241
|
- yarn build
|
|
196
242
|
cache:
|
|
197
243
|
- key: api-yarn
|
|
@@ -202,15 +248,13 @@ api 🧪 test:
|
|
|
202
248
|
policy: pull-push
|
|
203
249
|
paths:
|
|
204
250
|
- api/node_modules
|
|
205
|
-
- key: api-next-cache
|
|
206
|
-
policy: pull-push
|
|
207
|
-
paths:
|
|
208
|
-
- api/.next/cache
|
|
209
251
|
artifacts:
|
|
210
252
|
paths:
|
|
211
253
|
- api/__build_info.json
|
|
212
254
|
- api/.next
|
|
213
255
|
- api/dist
|
|
256
|
+
exclude:
|
|
257
|
+
- api/.env
|
|
214
258
|
expire_in: 1 day
|
|
215
259
|
when: always
|
|
216
260
|
reports: {}
|
|
@@ -238,7 +282,7 @@ api 🧪 test:
|
|
|
238
282
|
KUBERNETES_MEMORY_REQUEST: 1Gi
|
|
239
283
|
KUBERNETES_MEMORY_LIMIT: 2Gi
|
|
240
284
|
script:
|
|
241
|
-
-
|
|
285
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
242
286
|
- export APP_DIR="api"
|
|
243
287
|
- export DOCKER_BUILD_CONTEXT="."
|
|
244
288
|
- export DOCKER_REGISTRY="europe-west6-docker.pkg.dev"
|
|
@@ -254,20 +298,20 @@ api 🧪 test:
|
|
|
254
298
|
COPY --chown=node:node api/yarn.lock /app/api/yarn.lock
|
|
255
299
|
COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
|
|
256
300
|
COPY --chown=node:node .yarn /app/.yarn"
|
|
257
|
-
-
|
|
301
|
+
- collapseable_section_end "injectvars"
|
|
258
302
|
- ensureNodeDockerfile
|
|
259
|
-
-
|
|
303
|
+
- collapseable_section_start "docker-login" "Docker Login"
|
|
260
304
|
- gcloud auth activate-service-account --key-file=<(echo "$CL_dev_api_GCLOUD_DEPLOY_credentialsKey")
|
|
261
305
|
- gcloud auth configure-docker europe-west6-docker.pkg.dev
|
|
262
|
-
-
|
|
263
|
-
-
|
|
306
|
+
- collapseable_section_end "docker-login"
|
|
307
|
+
- collapseable_section_start "docker-build" "Docker build"
|
|
264
308
|
- docker build --network host --cache-from $DOCKER_CACHE_IMAGE --tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG -f $APP_DIR/Dockerfile $DOCKER_BUILD_CONTEXT --build-arg BUILDKIT_INLINE_CACHE=1
|
|
265
|
-
-
|
|
266
|
-
-
|
|
309
|
+
- collapseable_section_end "docker-build"
|
|
310
|
+
- collapseable_section_start "docker-push" "Docker push and tag"
|
|
267
311
|
- docker push $DOCKER_IMAGE:$DOCKER_IMAGE_TAG
|
|
268
312
|
- docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG $DOCKER_CACHE_IMAGE
|
|
269
313
|
- docker push $DOCKER_CACHE_IMAGE
|
|
270
|
-
-
|
|
314
|
+
- collapseable_section_end "docker-push"
|
|
271
315
|
cache:
|
|
272
316
|
- key: api-yarn
|
|
273
317
|
policy: pull
|
|
@@ -286,8 +330,8 @@ api 🧪 test:
|
|
|
286
330
|
image: aquasec/trivy:0.38.3
|
|
287
331
|
variables: {}
|
|
288
332
|
script:
|
|
289
|
-
-
|
|
290
|
-
-
|
|
333
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
334
|
+
- collapseable_section_end "injectvars"
|
|
291
335
|
- trivy fs --quiet --format cyclonedx --output "__sbom.json" api
|
|
292
336
|
artifacts:
|
|
293
337
|
paths:
|
|
@@ -308,35 +352,34 @@ api 🧪 test:
|
|
|
308
352
|
KUBERNETES_MEMORY_REQUEST: 200Mi
|
|
309
353
|
KUBERNETES_MEMORY_LIMIT: 400Mi
|
|
310
354
|
script:
|
|
311
|
-
-
|
|
355
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
312
356
|
- export ENV_SHORT="dev"
|
|
313
357
|
- export APP_DIR="api"
|
|
314
358
|
- export ENV_TYPE="dev"
|
|
315
359
|
- export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
|
|
316
360
|
- export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
|
|
317
361
|
- 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\\/v//'); [ -z "$tag" ] && echo "0.0.0" || echo "$tag")"
|
|
318
|
-
- export
|
|
362
|
+
- export HOSTNAME="$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
319
363
|
- export ROOT_URL="https://$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
320
|
-
- export
|
|
321
|
-
- export HOST_CANONICAL="$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
364
|
+
- export HOSTNAME_INTERNAL="$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
322
365
|
- export ROOT_URL_INTERNAL="https://$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
323
366
|
- export DEPLOY_CLOUD_RUN_PROJECT_ID="google-project-id"
|
|
324
367
|
- export DEPLOY_CLOUD_RUN_REGION="europe-west6"
|
|
325
368
|
- export GCLOUD_DEPLOY_credentialsKey="$CL_dev_api_GCLOUD_DEPLOY_credentialsKey"
|
|
326
369
|
- export GCLOUD_RUN_canonicalHostSuffix="$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix"
|
|
327
|
-
- export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"
|
|
370
|
+
- export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOSTNAME\\",\\"ROOT_URL\\",\\"HOSTNAME_INTERNAL\\",\\"ROOT_URL_INTERNAL\\",\\"DEPLOY_CLOUD_RUN_PROJECT_ID\\",\\"DEPLOY_CLOUD_RUN_REGION\\",\\"GCLOUD_DEPLOY_credentialsKey\\",\\"GCLOUD_RUN_canonicalHostSuffix\\"]"
|
|
328
371
|
- export DOCKER_REGISTRY="europe-west6-docker.pkg.dev"
|
|
329
372
|
- export DOCKER_IMAGE="europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/dev/api"
|
|
330
373
|
- export DOCKER_CACHE_IMAGE="europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/api"
|
|
331
374
|
- export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"
|
|
332
375
|
- export CLOUDSDK_CORE_DISABLE_PROMPTS="1"
|
|
333
|
-
-
|
|
334
|
-
-
|
|
376
|
+
- collapseable_section_end "injectvars"
|
|
377
|
+
- collapseable_section_start "prepare" "Prepare..."
|
|
335
378
|
- gcloud auth activate-service-account --key-file=<(echo "$CL_dev_api_GCLOUD_DEPLOY_credentialsKey")
|
|
336
379
|
- export GCLOUD_PROJECT_NUMBER=$(gcloud projects describe google-project-id --format="value(projectNumber)")
|
|
337
380
|
- 'echo "GCLOUD_PROJECT_NUMBER: $GCLOUD_PROJECT_NUMBER"'
|
|
338
|
-
-
|
|
339
|
-
-
|
|
381
|
+
- collapseable_section_end "prepare"
|
|
382
|
+
- collapseable_section_start "writeenvvars" "Write env vars to file"
|
|
340
383
|
- |
|
|
341
384
|
cat > ____envvars.yaml <<EOF
|
|
342
385
|
ENV_SHORT: |-
|
|
@@ -346,40 +389,38 @@ api 🧪 test:
|
|
|
346
389
|
ENV_TYPE: |-
|
|
347
390
|
dev
|
|
348
391
|
BUILD_INFO_BUILD_ID: |-
|
|
349
|
-
|
|
392
|
+
$(printf %s "$(git describe --tags 2>/dev/null || git rev-parse HEAD)" | sed '1!s/^/ /')
|
|
350
393
|
BUILD_INFO_BUILD_TIME: |-
|
|
351
|
-
|
|
394
|
+
$(printf %s "$CI_JOB_STARTED_AT" | sed '1!s/^/ /')
|
|
352
395
|
BUILD_INFO_CURRENT_VERSION: |-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
396
|
+
$(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\\/v//'); [ -z "$tag" ] && echo "0.0.0" || echo "$tag")" | sed '1!s/^/ /')
|
|
397
|
+
HOSTNAME: |-
|
|
398
|
+
$(printf %s "$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
|
|
356
399
|
ROOT_URL: |-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
HOST_CANONICAL: |-
|
|
361
|
-
$(printf %s "$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
|
|
400
|
+
$(printf %s "https://$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
|
|
401
|
+
HOSTNAME_INTERNAL: |-
|
|
402
|
+
$(printf %s "$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
|
|
362
403
|
ROOT_URL_INTERNAL: |-
|
|
363
|
-
|
|
404
|
+
$(printf %s "https://$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
|
|
364
405
|
DEPLOY_CLOUD_RUN_PROJECT_ID: |-
|
|
365
406
|
google-project-id
|
|
366
407
|
DEPLOY_CLOUD_RUN_REGION: |-
|
|
367
408
|
europe-west6
|
|
368
409
|
GCLOUD_RUN_canonicalHostSuffix: |-
|
|
369
|
-
|
|
410
|
+
$(printf %s "$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | sed '1!s/^/ /')
|
|
370
411
|
_ALL_ENV_VAR_KEYS: |-
|
|
371
|
-
["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","
|
|
412
|
+
["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOSTNAME","ROOT_URL","HOSTNAME_INTERNAL","ROOT_URL_INTERNAL","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]
|
|
372
413
|
|
|
373
414
|
EOF
|
|
374
|
-
-
|
|
375
|
-
-
|
|
415
|
+
- collapseable_section_end "writeenvvars"
|
|
416
|
+
- collapseable_section_start "deploy" "Deploy to cloud run"
|
|
376
417
|
- gcloud run deploy pan-test-app-dev-api --command="yarn,start" --image=europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/dev/api:$DOCKER_IMAGE_TAG --project=google-project-id --region=europe-west6 --labels=customer-name=pan,component-name=api,app-name=test-app,env-type=dev,env-name=dev,build-type=node,cloud-run-service-name=pan-test-app-dev-api --env-vars-file=____envvars.yaml --min-instances=0 --max-instances=100 --cpu-throttling --allow-unauthenticated --ingress=all --cpu-boost
|
|
377
|
-
-
|
|
378
|
-
-
|
|
418
|
+
- collapseable_section_end "deploy"
|
|
419
|
+
- collapseable_section_start "cleanup" "Cleanup"
|
|
379
420
|
- gcloud run revisions list --project=google-project-id --region=europe-west6 --service=pan-test-app-dev-api --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=google-project-id --region=europe-west6 --quiet $revisionname ; done
|
|
380
421
|
- gcloud artifacts docker images list europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/dev/api --sort-by=~CREATE_TIME --format="value(version)" | tail -n +2 | while read -r version; do gcloud artifacts docker images delete europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/dev/api@$version --quiet --delete-tags; done
|
|
381
422
|
- gcloud artifacts docker images list europe-west6-docker.pkg.dev/google-project-id/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 europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/api@$version --quiet --delete-tags; done
|
|
382
|
-
-
|
|
423
|
+
- collapseable_section_end "cleanup"
|
|
383
424
|
- echo 'Uploading SBOM to Dependency Track'
|
|
384
425
|
- /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
|
|
385
426
|
- 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
|
|
@@ -421,9 +462,9 @@ api 🧪 test:
|
|
|
421
462
|
KUBERNETES_MEMORY_LIMIT: 400Mi
|
|
422
463
|
GIT_STRATEGY: none
|
|
423
464
|
script:
|
|
424
|
-
-
|
|
465
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
425
466
|
- export CLOUDSDK_CORE_DISABLE_PROMPTS="1"
|
|
426
|
-
-
|
|
467
|
+
- collapseable_section_end "injectvars"
|
|
427
468
|
- set +e
|
|
428
469
|
- gcloud auth activate-service-account --key-file=<(echo "$CL_dev_api_GCLOUD_DEPLOY_credentialsKey")
|
|
429
470
|
- gcloud run services delete pan-test-app-dev-api --project=google-project-id --region=europe-west6
|
|
@@ -459,38 +500,55 @@ api 🧪 test:
|
|
|
459
500
|
KUBERNETES_MEMORY_REQUEST: 1Gi
|
|
460
501
|
KUBERNETES_MEMORY_LIMIT: 4Gi
|
|
461
502
|
script:
|
|
462
|
-
-
|
|
503
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
463
504
|
- export ENV_SHORT="review"
|
|
464
505
|
- export APP_DIR="api"
|
|
465
506
|
- export ENV_TYPE="review"
|
|
466
507
|
- export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
|
|
467
508
|
- export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
|
|
468
509
|
- 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\\/v//'); [ -z "$tag" ] && echo "0.0.0" || echo "$tag")"
|
|
469
|
-
- export
|
|
510
|
+
- export HOSTNAME="$(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)}')"
|
|
470
511
|
- 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)}')"
|
|
471
|
-
- export
|
|
472
|
-
- 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)}')"
|
|
512
|
+
- export HOSTNAME_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)}')"
|
|
473
513
|
- 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)}')"
|
|
474
514
|
- export CLOUD_RUN_JOB_TRIGGER_URL_drop_db="https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/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)}')-drop-db:run"
|
|
475
515
|
- export DEPLOY_CLOUD_RUN_PROJECT_ID="google-project-id"
|
|
476
516
|
- export DEPLOY_CLOUD_RUN_REGION="europe-west6"
|
|
477
517
|
- export GCLOUD_DEPLOY_credentialsKey="$CL_review_api_GCLOUD_DEPLOY_credentialsKey"
|
|
478
518
|
- export GCLOUD_RUN_canonicalHostSuffix="$CL_review_api_GCLOUD_RUN_canonicalHostSuffix"
|
|
479
|
-
- export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"
|
|
480
|
-
-
|
|
519
|
+
- export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOSTNAME\\",\\"ROOT_URL\\",\\"HOSTNAME_INTERNAL\\",\\"ROOT_URL_INTERNAL\\",\\"CLOUD_RUN_JOB_TRIGGER_URL_drop_db\\",\\"DEPLOY_CLOUD_RUN_PROJECT_ID\\",\\"DEPLOY_CLOUD_RUN_REGION\\",\\"GCLOUD_DEPLOY_credentialsKey\\",\\"GCLOUD_RUN_canonicalHostSuffix\\"]"
|
|
520
|
+
- collapseable_section_end "injectvars"
|
|
521
|
+
- collapseable_section_start "write-dotenv-api" "write dot env for api"
|
|
522
|
+
- |-
|
|
523
|
+
cat <<EOF > api/.env
|
|
524
|
+
ENV_SHORT=review
|
|
525
|
+
APP_DIR=api
|
|
526
|
+
ENV_TYPE=review
|
|
527
|
+
HOSTNAME=$(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)}')" | escapeForDotEnv)
|
|
528
|
+
ROOT_URL=$(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)}')" | escapeForDotEnv)
|
|
529
|
+
HOSTNAME_INTERNAL=$(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)}')" | escapeForDotEnv)
|
|
530
|
+
ROOT_URL_INTERNAL=$(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)}')" | escapeForDotEnv)
|
|
531
|
+
CLOUD_RUN_JOB_TRIGGER_URL_drop_db=https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/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)}')-drop-db:run
|
|
532
|
+
DEPLOY_CLOUD_RUN_PROJECT_ID=google-project-id
|
|
533
|
+
DEPLOY_CLOUD_RUN_REGION=europe-west6
|
|
534
|
+
GCLOUD_DEPLOY_credentialsKey=$(printf %s "$CL_review_api_GCLOUD_DEPLOY_credentialsKey" | escapeForDotEnv)
|
|
535
|
+
GCLOUD_RUN_canonicalHostSuffix=$(printf %s "$CL_review_api_GCLOUD_RUN_canonicalHostSuffix" | escapeForDotEnv)
|
|
536
|
+
_ALL_ENV_VAR_KEYS=["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOSTNAME","ROOT_URL","HOSTNAME_INTERNAL","ROOT_URL_INTERNAL","CLOUD_RUN_JOB_TRIGGER_URL_drop_db","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]
|
|
537
|
+
EOF
|
|
538
|
+
- collapseable_section_end "write-dotenv-api"
|
|
481
539
|
- echo '{"id":"$(git describe --tags 2>/dev/null || git rev-parse HEAD)","time":"$CI_JOB_STARTED_AT"}' > api/__build_info.json
|
|
482
|
-
-
|
|
540
|
+
- collapseable_section_start "nodeinstall" "Ensure node version"
|
|
483
541
|
- if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
|
|
484
542
|
- if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
|
|
485
|
-
-
|
|
543
|
+
- collapseable_section_end "nodeinstall"
|
|
486
544
|
- cd api
|
|
487
|
-
-
|
|
545
|
+
- collapseable_section_start "nodeinstall" "Ensure node version"
|
|
488
546
|
- if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
|
|
489
547
|
- if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
|
|
490
|
-
-
|
|
491
|
-
-
|
|
548
|
+
- collapseable_section_end "nodeinstall"
|
|
549
|
+
- collapseable_section_start "yarninstall" "Yarn install"
|
|
492
550
|
- yarn install --immutable
|
|
493
|
-
-
|
|
551
|
+
- collapseable_section_end "yarninstall"
|
|
494
552
|
- yarn build
|
|
495
553
|
cache:
|
|
496
554
|
- key: api-yarn
|
|
@@ -501,15 +559,13 @@ api 🧪 test:
|
|
|
501
559
|
policy: pull-push
|
|
502
560
|
paths:
|
|
503
561
|
- api/node_modules
|
|
504
|
-
- key: api-next-cache
|
|
505
|
-
policy: pull-push
|
|
506
|
-
paths:
|
|
507
|
-
- api/.next/cache
|
|
508
562
|
artifacts:
|
|
509
563
|
paths:
|
|
510
564
|
- api/__build_info.json
|
|
511
565
|
- api/.next
|
|
512
566
|
- api/dist
|
|
567
|
+
exclude:
|
|
568
|
+
- api/.env
|
|
513
569
|
expire_in: 1 day
|
|
514
570
|
when: always
|
|
515
571
|
reports: {}
|
|
@@ -535,7 +591,7 @@ api 🧪 test:
|
|
|
535
591
|
KUBERNETES_MEMORY_REQUEST: 1Gi
|
|
536
592
|
KUBERNETES_MEMORY_LIMIT: 2Gi
|
|
537
593
|
script:
|
|
538
|
-
-
|
|
594
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
539
595
|
- export APP_DIR="api"
|
|
540
596
|
- export DOCKER_BUILD_CONTEXT="."
|
|
541
597
|
- export DOCKER_REGISTRY="europe-west6-docker.pkg.dev"
|
|
@@ -551,20 +607,20 @@ api 🧪 test:
|
|
|
551
607
|
COPY --chown=node:node api/yarn.lock /app/api/yarn.lock
|
|
552
608
|
COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
|
|
553
609
|
COPY --chown=node:node .yarn /app/.yarn"
|
|
554
|
-
-
|
|
610
|
+
- collapseable_section_end "injectvars"
|
|
555
611
|
- ensureNodeDockerfile
|
|
556
|
-
-
|
|
612
|
+
- collapseable_section_start "docker-login" "Docker Login"
|
|
557
613
|
- gcloud auth activate-service-account --key-file=<(echo "$CL_review_api_GCLOUD_DEPLOY_credentialsKey")
|
|
558
614
|
- gcloud auth configure-docker europe-west6-docker.pkg.dev
|
|
559
|
-
-
|
|
560
|
-
-
|
|
615
|
+
- collapseable_section_end "docker-login"
|
|
616
|
+
- collapseable_section_start "docker-build" "Docker build"
|
|
561
617
|
- docker build --network host --cache-from $DOCKER_CACHE_IMAGE --tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG -f $APP_DIR/Dockerfile $DOCKER_BUILD_CONTEXT --build-arg BUILDKIT_INLINE_CACHE=1
|
|
562
|
-
-
|
|
563
|
-
-
|
|
618
|
+
- collapseable_section_end "docker-build"
|
|
619
|
+
- collapseable_section_start "docker-push" "Docker push and tag"
|
|
564
620
|
- docker push $DOCKER_IMAGE:$DOCKER_IMAGE_TAG
|
|
565
621
|
- docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG $DOCKER_CACHE_IMAGE
|
|
566
622
|
- docker push $DOCKER_CACHE_IMAGE
|
|
567
|
-
-
|
|
623
|
+
- collapseable_section_end "docker-push"
|
|
568
624
|
cache:
|
|
569
625
|
- key: api-yarn
|
|
570
626
|
policy: pull
|
|
@@ -581,8 +637,8 @@ api 🧪 test:
|
|
|
581
637
|
image: aquasec/trivy:0.38.3
|
|
582
638
|
variables: {}
|
|
583
639
|
script:
|
|
584
|
-
-
|
|
585
|
-
-
|
|
640
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
641
|
+
- collapseable_section_end "injectvars"
|
|
586
642
|
- trivy fs --quiet --format cyclonedx --output "__sbom.json" api
|
|
587
643
|
artifacts:
|
|
588
644
|
paths:
|
|
@@ -601,36 +657,35 @@ api 🧪 test:
|
|
|
601
657
|
KUBERNETES_MEMORY_REQUEST: 200Mi
|
|
602
658
|
KUBERNETES_MEMORY_LIMIT: 400Mi
|
|
603
659
|
script:
|
|
604
|
-
-
|
|
660
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
605
661
|
- export ENV_SHORT="review"
|
|
606
662
|
- export APP_DIR="api"
|
|
607
663
|
- export ENV_TYPE="review"
|
|
608
664
|
- export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
|
|
609
665
|
- export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
|
|
610
666
|
- 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\\/v//'); [ -z "$tag" ] && echo "0.0.0" || echo "$tag")"
|
|
611
|
-
- export
|
|
667
|
+
- export HOSTNAME="$(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)}')"
|
|
612
668
|
- 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)}')"
|
|
613
|
-
- export
|
|
614
|
-
- 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)}')"
|
|
669
|
+
- export HOSTNAME_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)}')"
|
|
615
670
|
- 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)}')"
|
|
616
671
|
- export CLOUD_RUN_JOB_TRIGGER_URL_drop_db="https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/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)}')-drop-db:run"
|
|
617
672
|
- export DEPLOY_CLOUD_RUN_PROJECT_ID="google-project-id"
|
|
618
673
|
- export DEPLOY_CLOUD_RUN_REGION="europe-west6"
|
|
619
674
|
- export GCLOUD_DEPLOY_credentialsKey="$CL_review_api_GCLOUD_DEPLOY_credentialsKey"
|
|
620
675
|
- export GCLOUD_RUN_canonicalHostSuffix="$CL_review_api_GCLOUD_RUN_canonicalHostSuffix"
|
|
621
|
-
- export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"
|
|
676
|
+
- export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOSTNAME\\",\\"ROOT_URL\\",\\"HOSTNAME_INTERNAL\\",\\"ROOT_URL_INTERNAL\\",\\"CLOUD_RUN_JOB_TRIGGER_URL_drop_db\\",\\"DEPLOY_CLOUD_RUN_PROJECT_ID\\",\\"DEPLOY_CLOUD_RUN_REGION\\",\\"GCLOUD_DEPLOY_credentialsKey\\",\\"GCLOUD_RUN_canonicalHostSuffix\\"]"
|
|
622
677
|
- export DOCKER_REGISTRY="europe-west6-docker.pkg.dev"
|
|
623
678
|
- export DOCKER_IMAGE="europe-west6-docker.pkg.dev/google-project-id/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"; })"
|
|
624
679
|
- export DOCKER_CACHE_IMAGE="europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/api"
|
|
625
680
|
- export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"
|
|
626
681
|
- export CLOUDSDK_CORE_DISABLE_PROMPTS="1"
|
|
627
|
-
-
|
|
628
|
-
-
|
|
682
|
+
- collapseable_section_end "injectvars"
|
|
683
|
+
- collapseable_section_start "prepare" "Prepare..."
|
|
629
684
|
- gcloud auth activate-service-account --key-file=<(echo "$CL_review_api_GCLOUD_DEPLOY_credentialsKey")
|
|
630
685
|
- export GCLOUD_PROJECT_NUMBER=$(gcloud projects describe google-project-id --format="value(projectNumber)")
|
|
631
686
|
- 'echo "GCLOUD_PROJECT_NUMBER: $GCLOUD_PROJECT_NUMBER"'
|
|
632
|
-
-
|
|
633
|
-
-
|
|
687
|
+
- collapseable_section_end "prepare"
|
|
688
|
+
- collapseable_section_start "writeenvvars" "Write env vars to file"
|
|
634
689
|
- |
|
|
635
690
|
cat > ____envvars.yaml <<EOF
|
|
636
691
|
ENV_SHORT: |-
|
|
@@ -640,21 +695,19 @@ api 🧪 test:
|
|
|
640
695
|
ENV_TYPE: |-
|
|
641
696
|
review
|
|
642
697
|
BUILD_INFO_BUILD_ID: |-
|
|
643
|
-
|
|
698
|
+
$(printf %s "$(git describe --tags 2>/dev/null || git rev-parse HEAD)" | sed '1!s/^/ /')
|
|
644
699
|
BUILD_INFO_BUILD_TIME: |-
|
|
645
|
-
|
|
700
|
+
$(printf %s "$CI_JOB_STARTED_AT" | sed '1!s/^/ /')
|
|
646
701
|
BUILD_INFO_CURRENT_VERSION: |-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
702
|
+
$(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\\/v//'); [ -z "$tag" ] && echo "0.0.0" || echo "$tag")" | sed '1!s/^/ /')
|
|
703
|
+
HOSTNAME: |-
|
|
704
|
+
$(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 '1!s/^/ /')
|
|
650
705
|
ROOT_URL: |-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
HOST_CANONICAL: |-
|
|
655
|
-
$(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/^/ /')
|
|
706
|
+
$(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 '1!s/^/ /')
|
|
707
|
+
HOSTNAME_INTERNAL: |-
|
|
708
|
+
$(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 '1!s/^/ /')
|
|
656
709
|
ROOT_URL_INTERNAL: |-
|
|
657
|
-
|
|
710
|
+
$(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 '1!s/^/ /')
|
|
658
711
|
CLOUD_RUN_JOB_TRIGGER_URL_drop_db: |-
|
|
659
712
|
https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/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)}')-drop-db:run
|
|
660
713
|
DEPLOY_CLOUD_RUN_PROJECT_ID: |-
|
|
@@ -662,13 +715,13 @@ api 🧪 test:
|
|
|
662
715
|
DEPLOY_CLOUD_RUN_REGION: |-
|
|
663
716
|
europe-west6
|
|
664
717
|
GCLOUD_RUN_canonicalHostSuffix: |-
|
|
665
|
-
|
|
718
|
+
$(printf %s "$CL_review_api_GCLOUD_RUN_canonicalHostSuffix" | sed '1!s/^/ /')
|
|
666
719
|
_ALL_ENV_VAR_KEYS: |-
|
|
667
|
-
["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","
|
|
720
|
+
["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOSTNAME","ROOT_URL","HOSTNAME_INTERNAL","ROOT_URL_INTERNAL","CLOUD_RUN_JOB_TRIGGER_URL_drop_db","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]
|
|
668
721
|
|
|
669
722
|
EOF
|
|
670
|
-
-
|
|
671
|
-
-
|
|
723
|
+
- collapseable_section_end "writeenvvars"
|
|
724
|
+
- collapseable_section_start "deploy" "Deploy to cloud run"
|
|
672
725
|
- |-
|
|
673
726
|
exist_job_names="$(
|
|
674
727
|
gcloud run jobs list --filter='metadata.name ~ review.*api' --format='value(name)' --limit=999 --project='google-project-id' --region='europe-west6'
|
|
@@ -680,15 +733,15 @@ api 🧪 test:
|
|
|
680
733
|
gcloud run jobs create "$current_job_name" --command="/bin/sh,-c,mongosh \\$MONGO_URL --eval 'db.dropDatabase()'" --labels="customer-name=pan,component-name=api,app-name=test-app,env-type=review,env-name=review,build-type=node,cloud-run-job-name=$current_job_name" --image="rtsp/mongosh:latest" --project=google-project-id --region=europe-west6 --memory=512Mi --parallelism=1 --task-timeout=10m --env-vars-file=____envvars.yaml --max-retries=0
|
|
681
734
|
fi
|
|
682
735
|
- gcloud run deploy $(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)}') --command="yarn,start" --image=europe-west6-docker.pkg.dev/google-project-id/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=google-project-id --region=europe-west6 --labels=customer-name=pan,component-name=api,app-name=test-app,env-type=review,env-name=review,build-type=node,cloud-run-service-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)}') --env-vars-file=____envvars.yaml --min-instances=0 --max-instances=100 --cpu-throttling --allow-unauthenticated --ingress=all --cpu-boost
|
|
683
|
-
-
|
|
684
|
-
-
|
|
736
|
+
- collapseable_section_end "deploy"
|
|
737
|
+
- collapseable_section_start "cleanup" "Cleanup"
|
|
685
738
|
- gcloud run revisions list --project=google-project-id --region=europe-west6 --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=google-project-id --region=europe-west6 --quiet $revisionname ; done
|
|
686
739
|
- gcloud artifacts docker images list europe-west6-docker.pkg.dev/google-project-id/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 europe-west6-docker.pkg.dev/google-project-id/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
|
|
687
740
|
- gcloud artifacts docker images list europe-west6-docker.pkg.dev/google-project-id/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 europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/api@$version --quiet --delete-tags; done
|
|
688
741
|
- set +e
|
|
689
742
|
- gcloud artifacts docker images delete europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/review/api --quiet --delete-tags
|
|
690
743
|
- set -e
|
|
691
|
-
-
|
|
744
|
+
- collapseable_section_end "cleanup"
|
|
692
745
|
- echo 'Uploading SBOM to Dependency Track'
|
|
693
746
|
- /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
|
|
694
747
|
- 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
|
|
@@ -728,9 +781,9 @@ api 🧪 test:
|
|
|
728
781
|
KUBERNETES_MEMORY_LIMIT: 400Mi
|
|
729
782
|
GIT_STRATEGY: none
|
|
730
783
|
script:
|
|
731
|
-
-
|
|
784
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
732
785
|
- export CLOUDSDK_CORE_DISABLE_PROMPTS="1"
|
|
733
|
-
-
|
|
786
|
+
- collapseable_section_end "injectvars"
|
|
734
787
|
- set +e
|
|
735
788
|
- gcloud auth activate-service-account --key-file=<(echo "$CL_review_api_GCLOUD_DEPLOY_credentialsKey")
|
|
736
789
|
- gcloud run services 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)}') --project=google-project-id --region=europe-west6
|
|
@@ -770,37 +823,53 @@ api 🧪 test:
|
|
|
770
823
|
KUBERNETES_MEMORY_REQUEST: 1Gi
|
|
771
824
|
KUBERNETES_MEMORY_LIMIT: 4Gi
|
|
772
825
|
script:
|
|
773
|
-
-
|
|
826
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
774
827
|
- export ENV_SHORT="stage"
|
|
775
828
|
- export APP_DIR="api"
|
|
776
829
|
- export ENV_TYPE="stage"
|
|
777
830
|
- export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
|
|
778
831
|
- export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
|
|
779
832
|
- 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\\/v//'); [ -z "$tag" ] && echo "0.0.0" || echo "$tag")"
|
|
780
|
-
- export
|
|
833
|
+
- export HOSTNAME="$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
781
834
|
- export ROOT_URL="https://$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
782
|
-
- export
|
|
783
|
-
- export HOST_CANONICAL="$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
835
|
+
- export HOSTNAME_INTERNAL="$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
784
836
|
- export ROOT_URL_INTERNAL="https://$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
785
837
|
- export DEPLOY_CLOUD_RUN_PROJECT_ID="google-project-id"
|
|
786
838
|
- export DEPLOY_CLOUD_RUN_REGION="europe-west6"
|
|
787
839
|
- export GCLOUD_DEPLOY_credentialsKey="$CL_stage_api_GCLOUD_DEPLOY_credentialsKey"
|
|
788
840
|
- export GCLOUD_RUN_canonicalHostSuffix="$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix"
|
|
789
|
-
- export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"
|
|
790
|
-
-
|
|
841
|
+
- export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOSTNAME\\",\\"ROOT_URL\\",\\"HOSTNAME_INTERNAL\\",\\"ROOT_URL_INTERNAL\\",\\"DEPLOY_CLOUD_RUN_PROJECT_ID\\",\\"DEPLOY_CLOUD_RUN_REGION\\",\\"GCLOUD_DEPLOY_credentialsKey\\",\\"GCLOUD_RUN_canonicalHostSuffix\\"]"
|
|
842
|
+
- collapseable_section_end "injectvars"
|
|
843
|
+
- collapseable_section_start "write-dotenv-api" "write dot env for api"
|
|
844
|
+
- |-
|
|
845
|
+
cat <<EOF > api/.env
|
|
846
|
+
ENV_SHORT=stage
|
|
847
|
+
APP_DIR=api
|
|
848
|
+
ENV_TYPE=stage
|
|
849
|
+
HOSTNAME=$(printf %s "$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | escapeForDotEnv)
|
|
850
|
+
ROOT_URL=$(printf %s "https://$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | escapeForDotEnv)
|
|
851
|
+
HOSTNAME_INTERNAL=$(printf %s "$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | escapeForDotEnv)
|
|
852
|
+
ROOT_URL_INTERNAL=$(printf %s "https://$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | escapeForDotEnv)
|
|
853
|
+
DEPLOY_CLOUD_RUN_PROJECT_ID=google-project-id
|
|
854
|
+
DEPLOY_CLOUD_RUN_REGION=europe-west6
|
|
855
|
+
GCLOUD_DEPLOY_credentialsKey=$(printf %s "$CL_stage_api_GCLOUD_DEPLOY_credentialsKey" | escapeForDotEnv)
|
|
856
|
+
GCLOUD_RUN_canonicalHostSuffix=$(printf %s "$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | escapeForDotEnv)
|
|
857
|
+
_ALL_ENV_VAR_KEYS=["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOSTNAME","ROOT_URL","HOSTNAME_INTERNAL","ROOT_URL_INTERNAL","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]
|
|
858
|
+
EOF
|
|
859
|
+
- collapseable_section_end "write-dotenv-api"
|
|
791
860
|
- echo '{"id":"$(git describe --tags 2>/dev/null || git rev-parse HEAD)","time":"$CI_JOB_STARTED_AT"}' > api/__build_info.json
|
|
792
|
-
-
|
|
861
|
+
- collapseable_section_start "nodeinstall" "Ensure node version"
|
|
793
862
|
- if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
|
|
794
863
|
- if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
|
|
795
|
-
-
|
|
864
|
+
- collapseable_section_end "nodeinstall"
|
|
796
865
|
- cd api
|
|
797
|
-
-
|
|
866
|
+
- collapseable_section_start "nodeinstall" "Ensure node version"
|
|
798
867
|
- if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
|
|
799
868
|
- if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
|
|
800
|
-
-
|
|
801
|
-
-
|
|
869
|
+
- collapseable_section_end "nodeinstall"
|
|
870
|
+
- collapseable_section_start "yarninstall" "Yarn install"
|
|
802
871
|
- yarn install --immutable
|
|
803
|
-
-
|
|
872
|
+
- collapseable_section_end "yarninstall"
|
|
804
873
|
- yarn build
|
|
805
874
|
cache:
|
|
806
875
|
- key: api-yarn
|
|
@@ -811,15 +880,13 @@ api 🧪 test:
|
|
|
811
880
|
policy: pull-push
|
|
812
881
|
paths:
|
|
813
882
|
- api/node_modules
|
|
814
|
-
- key: api-next-cache
|
|
815
|
-
policy: pull-push
|
|
816
|
-
paths:
|
|
817
|
-
- api/.next/cache
|
|
818
883
|
artifacts:
|
|
819
884
|
paths:
|
|
820
885
|
- api/__build_info.json
|
|
821
886
|
- api/.next
|
|
822
887
|
- api/dist
|
|
888
|
+
exclude:
|
|
889
|
+
- api/.env
|
|
823
890
|
expire_in: 1 day
|
|
824
891
|
when: always
|
|
825
892
|
reports: {}
|
|
@@ -845,7 +912,7 @@ api 🧪 test:
|
|
|
845
912
|
KUBERNETES_MEMORY_REQUEST: 1Gi
|
|
846
913
|
KUBERNETES_MEMORY_LIMIT: 2Gi
|
|
847
914
|
script:
|
|
848
|
-
-
|
|
915
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
849
916
|
- export APP_DIR="api"
|
|
850
917
|
- export DOCKER_BUILD_CONTEXT="."
|
|
851
918
|
- export DOCKER_REGISTRY="europe-west6-docker.pkg.dev"
|
|
@@ -861,20 +928,20 @@ api 🧪 test:
|
|
|
861
928
|
COPY --chown=node:node api/yarn.lock /app/api/yarn.lock
|
|
862
929
|
COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
|
|
863
930
|
COPY --chown=node:node .yarn /app/.yarn"
|
|
864
|
-
-
|
|
931
|
+
- collapseable_section_end "injectvars"
|
|
865
932
|
- ensureNodeDockerfile
|
|
866
|
-
-
|
|
933
|
+
- collapseable_section_start "docker-login" "Docker Login"
|
|
867
934
|
- gcloud auth activate-service-account --key-file=<(echo "$CL_stage_api_GCLOUD_DEPLOY_credentialsKey")
|
|
868
935
|
- gcloud auth configure-docker europe-west6-docker.pkg.dev
|
|
869
|
-
-
|
|
870
|
-
-
|
|
936
|
+
- collapseable_section_end "docker-login"
|
|
937
|
+
- collapseable_section_start "docker-build" "Docker build"
|
|
871
938
|
- docker build --network host --cache-from $DOCKER_CACHE_IMAGE --tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG -f $APP_DIR/Dockerfile $DOCKER_BUILD_CONTEXT --build-arg BUILDKIT_INLINE_CACHE=1
|
|
872
|
-
-
|
|
873
|
-
-
|
|
939
|
+
- collapseable_section_end "docker-build"
|
|
940
|
+
- collapseable_section_start "docker-push" "Docker push and tag"
|
|
874
941
|
- docker push $DOCKER_IMAGE:$DOCKER_IMAGE_TAG
|
|
875
942
|
- docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG $DOCKER_CACHE_IMAGE
|
|
876
943
|
- docker push $DOCKER_CACHE_IMAGE
|
|
877
|
-
-
|
|
944
|
+
- collapseable_section_end "docker-push"
|
|
878
945
|
cache:
|
|
879
946
|
- key: api-yarn
|
|
880
947
|
policy: pull
|
|
@@ -891,8 +958,8 @@ api 🧪 test:
|
|
|
891
958
|
image: aquasec/trivy:0.38.3
|
|
892
959
|
variables: {}
|
|
893
960
|
script:
|
|
894
|
-
-
|
|
895
|
-
-
|
|
961
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
962
|
+
- collapseable_section_end "injectvars"
|
|
896
963
|
- trivy fs --quiet --format cyclonedx --output "__sbom.json" api
|
|
897
964
|
artifacts:
|
|
898
965
|
paths:
|
|
@@ -911,35 +978,34 @@ api 🧪 test:
|
|
|
911
978
|
KUBERNETES_MEMORY_REQUEST: 200Mi
|
|
912
979
|
KUBERNETES_MEMORY_LIMIT: 400Mi
|
|
913
980
|
script:
|
|
914
|
-
-
|
|
981
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
915
982
|
- export ENV_SHORT="stage"
|
|
916
983
|
- export APP_DIR="api"
|
|
917
984
|
- export ENV_TYPE="stage"
|
|
918
985
|
- export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
|
|
919
986
|
- export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
|
|
920
987
|
- 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\\/v//'); [ -z "$tag" ] && echo "0.0.0" || echo "$tag")"
|
|
921
|
-
- export
|
|
988
|
+
- export HOSTNAME="$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
922
989
|
- export ROOT_URL="https://$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
923
|
-
- export
|
|
924
|
-
- export HOST_CANONICAL="$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
990
|
+
- export HOSTNAME_INTERNAL="$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
925
991
|
- export ROOT_URL_INTERNAL="https://$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
926
992
|
- export DEPLOY_CLOUD_RUN_PROJECT_ID="google-project-id"
|
|
927
993
|
- export DEPLOY_CLOUD_RUN_REGION="europe-west6"
|
|
928
994
|
- export GCLOUD_DEPLOY_credentialsKey="$CL_stage_api_GCLOUD_DEPLOY_credentialsKey"
|
|
929
995
|
- export GCLOUD_RUN_canonicalHostSuffix="$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix"
|
|
930
|
-
- export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"
|
|
996
|
+
- export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOSTNAME\\",\\"ROOT_URL\\",\\"HOSTNAME_INTERNAL\\",\\"ROOT_URL_INTERNAL\\",\\"DEPLOY_CLOUD_RUN_PROJECT_ID\\",\\"DEPLOY_CLOUD_RUN_REGION\\",\\"GCLOUD_DEPLOY_credentialsKey\\",\\"GCLOUD_RUN_canonicalHostSuffix\\"]"
|
|
931
997
|
- export DOCKER_REGISTRY="europe-west6-docker.pkg.dev"
|
|
932
998
|
- export DOCKER_IMAGE="europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/stage/api"
|
|
933
999
|
- export DOCKER_CACHE_IMAGE="europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/api"
|
|
934
1000
|
- export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"
|
|
935
1001
|
- export CLOUDSDK_CORE_DISABLE_PROMPTS="1"
|
|
936
|
-
-
|
|
937
|
-
-
|
|
1002
|
+
- collapseable_section_end "injectvars"
|
|
1003
|
+
- collapseable_section_start "prepare" "Prepare..."
|
|
938
1004
|
- gcloud auth activate-service-account --key-file=<(echo "$CL_stage_api_GCLOUD_DEPLOY_credentialsKey")
|
|
939
1005
|
- export GCLOUD_PROJECT_NUMBER=$(gcloud projects describe google-project-id --format="value(projectNumber)")
|
|
940
1006
|
- 'echo "GCLOUD_PROJECT_NUMBER: $GCLOUD_PROJECT_NUMBER"'
|
|
941
|
-
-
|
|
942
|
-
-
|
|
1007
|
+
- collapseable_section_end "prepare"
|
|
1008
|
+
- collapseable_section_start "writeenvvars" "Write env vars to file"
|
|
943
1009
|
- |
|
|
944
1010
|
cat > ____envvars.yaml <<EOF
|
|
945
1011
|
ENV_SHORT: |-
|
|
@@ -949,40 +1015,38 @@ api 🧪 test:
|
|
|
949
1015
|
ENV_TYPE: |-
|
|
950
1016
|
stage
|
|
951
1017
|
BUILD_INFO_BUILD_ID: |-
|
|
952
|
-
|
|
1018
|
+
$(printf %s "$(git describe --tags 2>/dev/null || git rev-parse HEAD)" | sed '1!s/^/ /')
|
|
953
1019
|
BUILD_INFO_BUILD_TIME: |-
|
|
954
|
-
|
|
1020
|
+
$(printf %s "$CI_JOB_STARTED_AT" | sed '1!s/^/ /')
|
|
955
1021
|
BUILD_INFO_CURRENT_VERSION: |-
|
|
956
|
-
|
|
957
|
-
|
|
958
|
-
|
|
1022
|
+
$(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\\/v//'); [ -z "$tag" ] && echo "0.0.0" || echo "$tag")" | sed '1!s/^/ /')
|
|
1023
|
+
HOSTNAME: |-
|
|
1024
|
+
$(printf %s "$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
|
|
959
1025
|
ROOT_URL: |-
|
|
960
|
-
|
|
961
|
-
|
|
962
|
-
|
|
963
|
-
HOST_CANONICAL: |-
|
|
964
|
-
$(printf %s "$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
|
|
1026
|
+
$(printf %s "https://$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
|
|
1027
|
+
HOSTNAME_INTERNAL: |-
|
|
1028
|
+
$(printf %s "$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
|
|
965
1029
|
ROOT_URL_INTERNAL: |-
|
|
966
|
-
|
|
1030
|
+
$(printf %s "https://$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
|
|
967
1031
|
DEPLOY_CLOUD_RUN_PROJECT_ID: |-
|
|
968
1032
|
google-project-id
|
|
969
1033
|
DEPLOY_CLOUD_RUN_REGION: |-
|
|
970
1034
|
europe-west6
|
|
971
1035
|
GCLOUD_RUN_canonicalHostSuffix: |-
|
|
972
|
-
|
|
1036
|
+
$(printf %s "$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | sed '1!s/^/ /')
|
|
973
1037
|
_ALL_ENV_VAR_KEYS: |-
|
|
974
|
-
["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","
|
|
1038
|
+
["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOSTNAME","ROOT_URL","HOSTNAME_INTERNAL","ROOT_URL_INTERNAL","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]
|
|
975
1039
|
|
|
976
1040
|
EOF
|
|
977
|
-
-
|
|
978
|
-
-
|
|
1041
|
+
- collapseable_section_end "writeenvvars"
|
|
1042
|
+
- collapseable_section_start "deploy" "Deploy to cloud run"
|
|
979
1043
|
- gcloud run deploy pan-test-app-stage-api --command="yarn,start" --image=europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/stage/api:$DOCKER_IMAGE_TAG --project=google-project-id --region=europe-west6 --labels=customer-name=pan,component-name=api,app-name=test-app,env-type=stage,env-name=stage,build-type=node,cloud-run-service-name=pan-test-app-stage-api --env-vars-file=____envvars.yaml --min-instances=0 --max-instances=100 --cpu-throttling --allow-unauthenticated --ingress=all --cpu-boost
|
|
980
|
-
-
|
|
981
|
-
-
|
|
1044
|
+
- collapseable_section_end "deploy"
|
|
1045
|
+
- collapseable_section_start "cleanup" "Cleanup"
|
|
982
1046
|
- gcloud run revisions list --project=google-project-id --region=europe-west6 --service=pan-test-app-stage-api --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=google-project-id --region=europe-west6 --quiet $revisionname ; done
|
|
983
1047
|
- gcloud artifacts docker images list europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/stage/api --sort-by=~CREATE_TIME --format="value(version)" | tail -n +2 | while read -r version; do gcloud artifacts docker images delete europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/stage/api@$version --quiet --delete-tags; done
|
|
984
1048
|
- gcloud artifacts docker images list europe-west6-docker.pkg.dev/google-project-id/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 europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/api@$version --quiet --delete-tags; done
|
|
985
|
-
-
|
|
1049
|
+
- collapseable_section_end "cleanup"
|
|
986
1050
|
- echo 'Uploading SBOM to Dependency Track'
|
|
987
1051
|
- /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
|
|
988
1052
|
- 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
|
|
@@ -1015,9 +1079,9 @@ api 🧪 test:
|
|
|
1015
1079
|
KUBERNETES_MEMORY_LIMIT: 400Mi
|
|
1016
1080
|
GIT_STRATEGY: none
|
|
1017
1081
|
script:
|
|
1018
|
-
-
|
|
1082
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
1019
1083
|
- export CLOUDSDK_CORE_DISABLE_PROMPTS="1"
|
|
1020
|
-
-
|
|
1084
|
+
- collapseable_section_end "injectvars"
|
|
1021
1085
|
- set +e
|
|
1022
1086
|
- gcloud auth activate-service-account --key-file=<(echo "$CL_stage_api_GCLOUD_DEPLOY_credentialsKey")
|
|
1023
1087
|
- gcloud run services delete pan-test-app-stage-api --project=google-project-id --region=europe-west6
|
|
@@ -1051,37 +1115,53 @@ api 🧪 test:
|
|
|
1051
1115
|
KUBERNETES_MEMORY_REQUEST: 1Gi
|
|
1052
1116
|
KUBERNETES_MEMORY_LIMIT: 4Gi
|
|
1053
1117
|
script:
|
|
1054
|
-
-
|
|
1118
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
1055
1119
|
- export ENV_SHORT="prod"
|
|
1056
1120
|
- export APP_DIR="api"
|
|
1057
1121
|
- export ENV_TYPE="prod"
|
|
1058
1122
|
- export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
|
|
1059
1123
|
- export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
|
|
1060
1124
|
- 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\\/v//'); [ -z "$tag" ] && echo "0.0.0" || echo "$tag")"
|
|
1061
|
-
- export
|
|
1125
|
+
- export HOSTNAME="$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
1062
1126
|
- export ROOT_URL="https://$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
1063
|
-
- export
|
|
1064
|
-
- export HOST_CANONICAL="$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
1127
|
+
- export HOSTNAME_INTERNAL="$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
1065
1128
|
- export ROOT_URL_INTERNAL="https://$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
1066
1129
|
- export DEPLOY_CLOUD_RUN_PROJECT_ID="google-project-id"
|
|
1067
1130
|
- export DEPLOY_CLOUD_RUN_REGION="europe-west6"
|
|
1068
1131
|
- export GCLOUD_DEPLOY_credentialsKey="$CL_prod_api_GCLOUD_DEPLOY_credentialsKey"
|
|
1069
1132
|
- export GCLOUD_RUN_canonicalHostSuffix="$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix"
|
|
1070
|
-
- export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"
|
|
1071
|
-
-
|
|
1133
|
+
- export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOSTNAME\\",\\"ROOT_URL\\",\\"HOSTNAME_INTERNAL\\",\\"ROOT_URL_INTERNAL\\",\\"DEPLOY_CLOUD_RUN_PROJECT_ID\\",\\"DEPLOY_CLOUD_RUN_REGION\\",\\"GCLOUD_DEPLOY_credentialsKey\\",\\"GCLOUD_RUN_canonicalHostSuffix\\"]"
|
|
1134
|
+
- collapseable_section_end "injectvars"
|
|
1135
|
+
- collapseable_section_start "write-dotenv-api" "write dot env for api"
|
|
1136
|
+
- |-
|
|
1137
|
+
cat <<EOF > api/.env
|
|
1138
|
+
ENV_SHORT=prod
|
|
1139
|
+
APP_DIR=api
|
|
1140
|
+
ENV_TYPE=prod
|
|
1141
|
+
HOSTNAME=$(printf %s "$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | escapeForDotEnv)
|
|
1142
|
+
ROOT_URL=$(printf %s "https://$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | escapeForDotEnv)
|
|
1143
|
+
HOSTNAME_INTERNAL=$(printf %s "$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | escapeForDotEnv)
|
|
1144
|
+
ROOT_URL_INTERNAL=$(printf %s "https://$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | escapeForDotEnv)
|
|
1145
|
+
DEPLOY_CLOUD_RUN_PROJECT_ID=google-project-id
|
|
1146
|
+
DEPLOY_CLOUD_RUN_REGION=europe-west6
|
|
1147
|
+
GCLOUD_DEPLOY_credentialsKey=$(printf %s "$CL_prod_api_GCLOUD_DEPLOY_credentialsKey" | escapeForDotEnv)
|
|
1148
|
+
GCLOUD_RUN_canonicalHostSuffix=$(printf %s "$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | escapeForDotEnv)
|
|
1149
|
+
_ALL_ENV_VAR_KEYS=["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOSTNAME","ROOT_URL","HOSTNAME_INTERNAL","ROOT_URL_INTERNAL","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]
|
|
1150
|
+
EOF
|
|
1151
|
+
- collapseable_section_end "write-dotenv-api"
|
|
1072
1152
|
- echo '{"id":"$(git describe --tags 2>/dev/null || git rev-parse HEAD)","time":"$CI_JOB_STARTED_AT"}' > api/__build_info.json
|
|
1073
|
-
-
|
|
1153
|
+
- collapseable_section_start "nodeinstall" "Ensure node version"
|
|
1074
1154
|
- if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
|
|
1075
1155
|
- if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
|
|
1076
|
-
-
|
|
1156
|
+
- collapseable_section_end "nodeinstall"
|
|
1077
1157
|
- cd api
|
|
1078
|
-
-
|
|
1158
|
+
- collapseable_section_start "nodeinstall" "Ensure node version"
|
|
1079
1159
|
- if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
|
|
1080
1160
|
- if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
|
|
1081
|
-
-
|
|
1082
|
-
-
|
|
1161
|
+
- collapseable_section_end "nodeinstall"
|
|
1162
|
+
- collapseable_section_start "yarninstall" "Yarn install"
|
|
1083
1163
|
- yarn install --immutable
|
|
1084
|
-
-
|
|
1164
|
+
- collapseable_section_end "yarninstall"
|
|
1085
1165
|
- yarn build
|
|
1086
1166
|
cache:
|
|
1087
1167
|
- key: api-yarn
|
|
@@ -1092,15 +1172,13 @@ api 🧪 test:
|
|
|
1092
1172
|
policy: pull-push
|
|
1093
1173
|
paths:
|
|
1094
1174
|
- api/node_modules
|
|
1095
|
-
- key: api-next-cache
|
|
1096
|
-
policy: pull-push
|
|
1097
|
-
paths:
|
|
1098
|
-
- api/.next/cache
|
|
1099
1175
|
artifacts:
|
|
1100
1176
|
paths:
|
|
1101
1177
|
- api/__build_info.json
|
|
1102
1178
|
- api/.next
|
|
1103
1179
|
- api/dist
|
|
1180
|
+
exclude:
|
|
1181
|
+
- api/.env
|
|
1104
1182
|
expire_in: 1 day
|
|
1105
1183
|
when: always
|
|
1106
1184
|
reports: {}
|
|
@@ -1126,7 +1204,7 @@ api 🧪 test:
|
|
|
1126
1204
|
KUBERNETES_MEMORY_REQUEST: 1Gi
|
|
1127
1205
|
KUBERNETES_MEMORY_LIMIT: 2Gi
|
|
1128
1206
|
script:
|
|
1129
|
-
-
|
|
1207
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
1130
1208
|
- export APP_DIR="api"
|
|
1131
1209
|
- export DOCKER_BUILD_CONTEXT="."
|
|
1132
1210
|
- export DOCKER_REGISTRY="europe-west6-docker.pkg.dev"
|
|
@@ -1142,20 +1220,20 @@ api 🧪 test:
|
|
|
1142
1220
|
COPY --chown=node:node api/yarn.lock /app/api/yarn.lock
|
|
1143
1221
|
COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
|
|
1144
1222
|
COPY --chown=node:node .yarn /app/.yarn"
|
|
1145
|
-
-
|
|
1223
|
+
- collapseable_section_end "injectvars"
|
|
1146
1224
|
- ensureNodeDockerfile
|
|
1147
|
-
-
|
|
1225
|
+
- collapseable_section_start "docker-login" "Docker Login"
|
|
1148
1226
|
- gcloud auth activate-service-account --key-file=<(echo "$CL_prod_api_GCLOUD_DEPLOY_credentialsKey")
|
|
1149
1227
|
- gcloud auth configure-docker europe-west6-docker.pkg.dev
|
|
1150
|
-
-
|
|
1151
|
-
-
|
|
1228
|
+
- collapseable_section_end "docker-login"
|
|
1229
|
+
- collapseable_section_start "docker-build" "Docker build"
|
|
1152
1230
|
- docker build --network host --cache-from $DOCKER_CACHE_IMAGE --tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG -f $APP_DIR/Dockerfile $DOCKER_BUILD_CONTEXT --build-arg BUILDKIT_INLINE_CACHE=1
|
|
1153
|
-
-
|
|
1154
|
-
-
|
|
1231
|
+
- collapseable_section_end "docker-build"
|
|
1232
|
+
- collapseable_section_start "docker-push" "Docker push and tag"
|
|
1155
1233
|
- docker push $DOCKER_IMAGE:$DOCKER_IMAGE_TAG
|
|
1156
1234
|
- docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG $DOCKER_CACHE_IMAGE
|
|
1157
1235
|
- docker push $DOCKER_CACHE_IMAGE
|
|
1158
|
-
-
|
|
1236
|
+
- collapseable_section_end "docker-push"
|
|
1159
1237
|
cache:
|
|
1160
1238
|
- key: api-yarn
|
|
1161
1239
|
policy: pull
|
|
@@ -1172,8 +1250,8 @@ api 🧪 test:
|
|
|
1172
1250
|
image: aquasec/trivy:0.38.3
|
|
1173
1251
|
variables: {}
|
|
1174
1252
|
script:
|
|
1175
|
-
-
|
|
1176
|
-
-
|
|
1253
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
1254
|
+
- collapseable_section_end "injectvars"
|
|
1177
1255
|
- trivy fs --quiet --format cyclonedx --output "__sbom.json" api
|
|
1178
1256
|
artifacts:
|
|
1179
1257
|
paths:
|
|
@@ -1192,35 +1270,34 @@ api 🧪 test:
|
|
|
1192
1270
|
KUBERNETES_MEMORY_REQUEST: 200Mi
|
|
1193
1271
|
KUBERNETES_MEMORY_LIMIT: 400Mi
|
|
1194
1272
|
script:
|
|
1195
|
-
-
|
|
1273
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
1196
1274
|
- export ENV_SHORT="prod"
|
|
1197
1275
|
- export APP_DIR="api"
|
|
1198
1276
|
- export ENV_TYPE="prod"
|
|
1199
1277
|
- export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
|
|
1200
1278
|
- export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
|
|
1201
1279
|
- 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\\/v//'); [ -z "$tag" ] && echo "0.0.0" || echo "$tag")"
|
|
1202
|
-
- export
|
|
1280
|
+
- export HOSTNAME="$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
1203
1281
|
- export ROOT_URL="https://$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
1204
|
-
- export
|
|
1205
|
-
- export HOST_CANONICAL="$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
1282
|
+
- export HOSTNAME_INTERNAL="$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
1206
1283
|
- export ROOT_URL_INTERNAL="https://$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
1207
1284
|
- export DEPLOY_CLOUD_RUN_PROJECT_ID="google-project-id"
|
|
1208
1285
|
- export DEPLOY_CLOUD_RUN_REGION="europe-west6"
|
|
1209
1286
|
- export GCLOUD_DEPLOY_credentialsKey="$CL_prod_api_GCLOUD_DEPLOY_credentialsKey"
|
|
1210
1287
|
- export GCLOUD_RUN_canonicalHostSuffix="$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix"
|
|
1211
|
-
- export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"
|
|
1288
|
+
- export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOSTNAME\\",\\"ROOT_URL\\",\\"HOSTNAME_INTERNAL\\",\\"ROOT_URL_INTERNAL\\",\\"DEPLOY_CLOUD_RUN_PROJECT_ID\\",\\"DEPLOY_CLOUD_RUN_REGION\\",\\"GCLOUD_DEPLOY_credentialsKey\\",\\"GCLOUD_RUN_canonicalHostSuffix\\"]"
|
|
1212
1289
|
- export DOCKER_REGISTRY="europe-west6-docker.pkg.dev"
|
|
1213
1290
|
- export DOCKER_IMAGE="europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/prod/api"
|
|
1214
1291
|
- export DOCKER_CACHE_IMAGE="europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/api"
|
|
1215
1292
|
- export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"
|
|
1216
1293
|
- export CLOUDSDK_CORE_DISABLE_PROMPTS="1"
|
|
1217
|
-
-
|
|
1218
|
-
-
|
|
1294
|
+
- collapseable_section_end "injectvars"
|
|
1295
|
+
- collapseable_section_start "prepare" "Prepare..."
|
|
1219
1296
|
- gcloud auth activate-service-account --key-file=<(echo "$CL_prod_api_GCLOUD_DEPLOY_credentialsKey")
|
|
1220
1297
|
- export GCLOUD_PROJECT_NUMBER=$(gcloud projects describe google-project-id --format="value(projectNumber)")
|
|
1221
1298
|
- 'echo "GCLOUD_PROJECT_NUMBER: $GCLOUD_PROJECT_NUMBER"'
|
|
1222
|
-
-
|
|
1223
|
-
-
|
|
1299
|
+
- collapseable_section_end "prepare"
|
|
1300
|
+
- collapseable_section_start "writeenvvars" "Write env vars to file"
|
|
1224
1301
|
- |
|
|
1225
1302
|
cat > ____envvars.yaml <<EOF
|
|
1226
1303
|
ENV_SHORT: |-
|
|
@@ -1230,40 +1307,38 @@ api 🧪 test:
|
|
|
1230
1307
|
ENV_TYPE: |-
|
|
1231
1308
|
prod
|
|
1232
1309
|
BUILD_INFO_BUILD_ID: |-
|
|
1233
|
-
|
|
1310
|
+
$(printf %s "$(git describe --tags 2>/dev/null || git rev-parse HEAD)" | sed '1!s/^/ /')
|
|
1234
1311
|
BUILD_INFO_BUILD_TIME: |-
|
|
1235
|
-
|
|
1312
|
+
$(printf %s "$CI_JOB_STARTED_AT" | sed '1!s/^/ /')
|
|
1236
1313
|
BUILD_INFO_CURRENT_VERSION: |-
|
|
1237
|
-
|
|
1238
|
-
|
|
1239
|
-
|
|
1314
|
+
$(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\\/v//'); [ -z "$tag" ] && echo "0.0.0" || echo "$tag")" | sed '1!s/^/ /')
|
|
1315
|
+
HOSTNAME: |-
|
|
1316
|
+
$(printf %s "$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
|
|
1240
1317
|
ROOT_URL: |-
|
|
1241
|
-
|
|
1242
|
-
|
|
1243
|
-
|
|
1244
|
-
HOST_CANONICAL: |-
|
|
1245
|
-
$(printf %s "$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
|
|
1318
|
+
$(printf %s "https://$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
|
|
1319
|
+
HOSTNAME_INTERNAL: |-
|
|
1320
|
+
$(printf %s "$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
|
|
1246
1321
|
ROOT_URL_INTERNAL: |-
|
|
1247
|
-
|
|
1322
|
+
$(printf %s "https://$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
|
|
1248
1323
|
DEPLOY_CLOUD_RUN_PROJECT_ID: |-
|
|
1249
1324
|
google-project-id
|
|
1250
1325
|
DEPLOY_CLOUD_RUN_REGION: |-
|
|
1251
1326
|
europe-west6
|
|
1252
1327
|
GCLOUD_RUN_canonicalHostSuffix: |-
|
|
1253
|
-
|
|
1328
|
+
$(printf %s "$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | sed '1!s/^/ /')
|
|
1254
1329
|
_ALL_ENV_VAR_KEYS: |-
|
|
1255
|
-
["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","
|
|
1330
|
+
["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOSTNAME","ROOT_URL","HOSTNAME_INTERNAL","ROOT_URL_INTERNAL","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]
|
|
1256
1331
|
|
|
1257
1332
|
EOF
|
|
1258
|
-
-
|
|
1259
|
-
-
|
|
1333
|
+
- collapseable_section_end "writeenvvars"
|
|
1334
|
+
- collapseable_section_start "deploy" "Deploy to cloud run"
|
|
1260
1335
|
- gcloud run deploy pan-test-app-prod-api --command="yarn,start" --image=europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/prod/api:$DOCKER_IMAGE_TAG --project=google-project-id --region=europe-west6 --labels=customer-name=pan,component-name=api,app-name=test-app,env-type=prod,env-name=prod,build-type=node,cloud-run-service-name=pan-test-app-prod-api --env-vars-file=____envvars.yaml --min-instances=0 --max-instances=100 --cpu-throttling --allow-unauthenticated --ingress=all --cpu-boost
|
|
1261
|
-
-
|
|
1262
|
-
-
|
|
1336
|
+
- collapseable_section_end "deploy"
|
|
1337
|
+
- collapseable_section_start "cleanup" "Cleanup"
|
|
1263
1338
|
- gcloud run revisions list --project=google-project-id --region=europe-west6 --service=pan-test-app-prod-api --limit=unlimited --sort-by=metadata.creationTimestamp --format="value(name)" --filter='(status.conditions.status=False OR status.conditions.status=Unknown)' | tail -n +6 | while read -r revisionname; do gcloud run revisions delete --project=google-project-id --region=europe-west6 --quiet $revisionname ; done
|
|
1264
1339
|
- gcloud artifacts docker images list europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/prod/api --sort-by=~CREATE_TIME --format="value(version)" | tail -n +7 | while read -r version; do gcloud artifacts docker images delete europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/prod/api@$version --quiet --delete-tags; done
|
|
1265
1340
|
- gcloud artifacts docker images list europe-west6-docker.pkg.dev/google-project-id/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 europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/api@$version --quiet --delete-tags; done
|
|
1266
|
-
-
|
|
1341
|
+
- collapseable_section_end "cleanup"
|
|
1267
1342
|
- echo 'Uploading SBOM to Dependency Track'
|
|
1268
1343
|
- /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
|
|
1269
1344
|
- 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
|
|
@@ -1296,9 +1371,9 @@ api 🧪 test:
|
|
|
1296
1371
|
KUBERNETES_MEMORY_LIMIT: 400Mi
|
|
1297
1372
|
GIT_STRATEGY: none
|
|
1298
1373
|
script:
|
|
1299
|
-
-
|
|
1374
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
1300
1375
|
- export CLOUDSDK_CORE_DISABLE_PROMPTS="1"
|
|
1301
|
-
-
|
|
1376
|
+
- collapseable_section_end "injectvars"
|
|
1302
1377
|
- set +e
|
|
1303
1378
|
- gcloud auth activate-service-account --key-file=<(echo "$CL_prod_api_GCLOUD_DEPLOY_credentialsKey")
|
|
1304
1379
|
- gcloud run services delete pan-test-app-prod-api --project=google-project-id --region=europe-west6
|