@catladder/pipeline 1.170.1 → 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 +1 -6
- package/dist/bash/BashExpression.js +2 -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 -40
- 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 +971 -765
- 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 → workspace-api-www-turbo-cache.test.ts} +2 -2
- 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 +0 -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 -49
- 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,17 +191,16 @@ 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 CLOUD_SQL_INSTANCE_CONNECTION_NAME="projectId:region:instancename"
|
|
177
206
|
- export DB_NAME="pan-test-app-dev-api"
|
|
@@ -185,47 +214,46 @@ api 🧪 test:
|
|
|
185
214
|
- export DEPLOY_CLOUD_RUN_REGION="europe-west6"
|
|
186
215
|
- export GCLOUD_DEPLOY_credentialsKey="$CL_dev_api_GCLOUD_DEPLOY_credentialsKey"
|
|
187
216
|
- export GCLOUD_RUN_canonicalHostSuffix="$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix"
|
|
188
|
-
- export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"
|
|
189
|
-
-
|
|
190
|
-
-
|
|
217
|
+
- 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_SQL_INSTANCE_CONNECTION_NAME\\",\\"DB_NAME\\",\\"DB_USER\\",\\"DB_PASSWORD\\",\\"DATABASE_URL\\",\\"DATABASE_JDBC_URL\\",\\"CLOUD_RUN_JOB_TRIGGER_URL_migration\\",\\"CLOUD_RUN_JOB_TRIGGER_URL_send_reminders\\",\\"DEPLOY_CLOUD_RUN_PROJECT_ID\\",\\"DEPLOY_CLOUD_RUN_REGION\\",\\"GCLOUD_DEPLOY_credentialsKey\\",\\"GCLOUD_RUN_canonicalHostSuffix\\"]"
|
|
218
|
+
- collapseable_section_end "injectvars"
|
|
219
|
+
- collapseable_section_start "write-dotenv-api" "write dot env for api"
|
|
191
220
|
- |-
|
|
192
221
|
cat <<EOF > api/.env
|
|
193
222
|
ENV_SHORT=dev
|
|
194
223
|
APP_DIR=api
|
|
195
224
|
ENV_TYPE=dev
|
|
196
|
-
|
|
197
|
-
ROOT_URL
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
ROOT_URL_INTERNAL=https://$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')
|
|
225
|
+
HOSTNAME=$(printf %s "$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | escapeForDotEnv)
|
|
226
|
+
ROOT_URL=$(printf %s "https://$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | escapeForDotEnv)
|
|
227
|
+
HOSTNAME_INTERNAL=$(printf %s "$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | escapeForDotEnv)
|
|
228
|
+
ROOT_URL_INTERNAL=$(printf %s "https://$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | escapeForDotEnv)
|
|
201
229
|
CLOUD_SQL_INSTANCE_CONNECTION_NAME=projectId:region:instancename
|
|
202
230
|
DB_NAME=pan-test-app-dev-api
|
|
203
231
|
DB_USER=my-user
|
|
204
|
-
DB_PASSWORD=$CL_dev_api_DB_PASSWORD
|
|
232
|
+
DB_PASSWORD=$(printf %s "$CL_dev_api_DB_PASSWORD" | escapeForDotEnv)
|
|
205
233
|
DATABASE_URL=postgresql://$DB_USER:$DB_PASSWORD@localhost/$DB_NAME?host=/cloudsql/$CLOUD_SQL_INSTANCE_CONNECTION_NAME
|
|
206
234
|
DATABASE_JDBC_URL=jdbc:postgresql:///$DB_NAME?cloudSqlInstance=$CLOUD_SQL_INSTANCE_CONNECTION_NAME&socketFactory=com.google.cloud.sql.postgres.SocketFactory&user=$DB_USER&password=$DB_PASSWORD
|
|
207
235
|
CLOUD_RUN_JOB_TRIGGER_URL_migration=https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/jobs/pan-test-app-dev-api-migration:run
|
|
208
236
|
CLOUD_RUN_JOB_TRIGGER_URL_send_reminders=https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/jobs/pan-test-app-dev-api-send-reminders:run
|
|
209
237
|
DEPLOY_CLOUD_RUN_PROJECT_ID=google-project-id
|
|
210
238
|
DEPLOY_CLOUD_RUN_REGION=europe-west6
|
|
211
|
-
GCLOUD_DEPLOY_credentialsKey=$CL_dev_api_GCLOUD_DEPLOY_credentialsKey
|
|
212
|
-
GCLOUD_RUN_canonicalHostSuffix=$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix
|
|
213
|
-
_ALL_ENV_VAR_KEYS=["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","
|
|
239
|
+
GCLOUD_DEPLOY_credentialsKey=$(printf %s "$CL_dev_api_GCLOUD_DEPLOY_credentialsKey" | escapeForDotEnv)
|
|
240
|
+
GCLOUD_RUN_canonicalHostSuffix=$(printf %s "$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | escapeForDotEnv)
|
|
241
|
+
_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_SQL_INSTANCE_CONNECTION_NAME","DB_NAME","DB_USER","DB_PASSWORD","DATABASE_URL","DATABASE_JDBC_URL","CLOUD_RUN_JOB_TRIGGER_URL_migration","CLOUD_RUN_JOB_TRIGGER_URL_send_reminders","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]
|
|
214
242
|
EOF
|
|
215
|
-
-
|
|
243
|
+
- collapseable_section_end "write-dotenv-api"
|
|
216
244
|
- echo '{"id":"$(git describe --tags 2>/dev/null || git rev-parse HEAD)","time":"$CI_JOB_STARTED_AT"}' > api/__build_info.json
|
|
217
|
-
-
|
|
245
|
+
- collapseable_section_start "nodeinstall" "Ensure node version"
|
|
218
246
|
- if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
|
|
219
247
|
- if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
|
|
220
|
-
-
|
|
248
|
+
- collapseable_section_end "nodeinstall"
|
|
221
249
|
- cd api
|
|
222
|
-
-
|
|
250
|
+
- collapseable_section_start "nodeinstall" "Ensure node version"
|
|
223
251
|
- if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
|
|
224
252
|
- if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
|
|
225
|
-
-
|
|
226
|
-
-
|
|
253
|
+
- collapseable_section_end "nodeinstall"
|
|
254
|
+
- collapseable_section_start "yarninstall" "Yarn install"
|
|
227
255
|
- yarn install --immutable
|
|
228
|
-
-
|
|
256
|
+
- collapseable_section_end "yarninstall"
|
|
229
257
|
- yarn build
|
|
230
258
|
cache:
|
|
231
259
|
- key: api-yarn
|
|
@@ -236,10 +264,6 @@ api 🧪 test:
|
|
|
236
264
|
policy: pull-push
|
|
237
265
|
paths:
|
|
238
266
|
- api/node_modules
|
|
239
|
-
- key: api-next-cache
|
|
240
|
-
policy: pull-push
|
|
241
|
-
paths:
|
|
242
|
-
- api/.next/cache
|
|
243
267
|
artifacts:
|
|
244
268
|
paths:
|
|
245
269
|
- api/__build_info.json
|
|
@@ -274,7 +298,7 @@ api 🧪 test:
|
|
|
274
298
|
KUBERNETES_MEMORY_REQUEST: 1Gi
|
|
275
299
|
KUBERNETES_MEMORY_LIMIT: 2Gi
|
|
276
300
|
script:
|
|
277
|
-
-
|
|
301
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
278
302
|
- export APP_DIR="api"
|
|
279
303
|
- export DOCKER_BUILD_CONTEXT="."
|
|
280
304
|
- export DOCKER_REGISTRY="europe-west6-docker.pkg.dev"
|
|
@@ -290,20 +314,20 @@ api 🧪 test:
|
|
|
290
314
|
COPY --chown=node:node api/yarn.lock /app/api/yarn.lock
|
|
291
315
|
COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
|
|
292
316
|
COPY --chown=node:node .yarn /app/.yarn"
|
|
293
|
-
-
|
|
317
|
+
- collapseable_section_end "injectvars"
|
|
294
318
|
- ensureNodeDockerfile
|
|
295
|
-
-
|
|
319
|
+
- collapseable_section_start "docker-login" "Docker Login"
|
|
296
320
|
- gcloud auth activate-service-account --key-file=<(echo "$CL_dev_api_GCLOUD_DEPLOY_credentialsKey")
|
|
297
321
|
- gcloud auth configure-docker europe-west6-docker.pkg.dev
|
|
298
|
-
-
|
|
299
|
-
-
|
|
322
|
+
- collapseable_section_end "docker-login"
|
|
323
|
+
- collapseable_section_start "docker-build" "Docker build"
|
|
300
324
|
- 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
|
|
301
|
-
-
|
|
302
|
-
-
|
|
325
|
+
- collapseable_section_end "docker-build"
|
|
326
|
+
- collapseable_section_start "docker-push" "Docker push and tag"
|
|
303
327
|
- docker push $DOCKER_IMAGE:$DOCKER_IMAGE_TAG
|
|
304
328
|
- docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG $DOCKER_CACHE_IMAGE
|
|
305
329
|
- docker push $DOCKER_CACHE_IMAGE
|
|
306
|
-
-
|
|
330
|
+
- collapseable_section_end "docker-push"
|
|
307
331
|
cache:
|
|
308
332
|
- key: api-yarn
|
|
309
333
|
policy: pull
|
|
@@ -322,8 +346,8 @@ api 🧪 test:
|
|
|
322
346
|
image: aquasec/trivy:0.38.3
|
|
323
347
|
variables: {}
|
|
324
348
|
script:
|
|
325
|
-
-
|
|
326
|
-
-
|
|
349
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
350
|
+
- collapseable_section_end "injectvars"
|
|
327
351
|
- trivy fs --quiet --format cyclonedx --output "__sbom.json" api
|
|
328
352
|
artifacts:
|
|
329
353
|
paths:
|
|
@@ -344,17 +368,16 @@ api 🧪 test:
|
|
|
344
368
|
KUBERNETES_MEMORY_REQUEST: 200Mi
|
|
345
369
|
KUBERNETES_MEMORY_LIMIT: 400Mi
|
|
346
370
|
script:
|
|
347
|
-
-
|
|
371
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
348
372
|
- export ENV_SHORT="dev"
|
|
349
373
|
- export APP_DIR="api"
|
|
350
374
|
- export ENV_TYPE="dev"
|
|
351
375
|
- export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
|
|
352
376
|
- export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
|
|
353
377
|
- 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")"
|
|
354
|
-
- export
|
|
378
|
+
- export HOSTNAME="$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
355
379
|
- export ROOT_URL="https://$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
356
|
-
- export
|
|
357
|
-
- export HOST_CANONICAL="$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
380
|
+
- export HOSTNAME_INTERNAL="$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
358
381
|
- export ROOT_URL_INTERNAL="https://$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
359
382
|
- export CLOUD_SQL_INSTANCE_CONNECTION_NAME="projectId:region:instancename"
|
|
360
383
|
- export DB_NAME="pan-test-app-dev-api"
|
|
@@ -368,19 +391,19 @@ api 🧪 test:
|
|
|
368
391
|
- export DEPLOY_CLOUD_RUN_REGION="europe-west6"
|
|
369
392
|
- export GCLOUD_DEPLOY_credentialsKey="$CL_dev_api_GCLOUD_DEPLOY_credentialsKey"
|
|
370
393
|
- export GCLOUD_RUN_canonicalHostSuffix="$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix"
|
|
371
|
-
- export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"
|
|
394
|
+
- 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_SQL_INSTANCE_CONNECTION_NAME\\",\\"DB_NAME\\",\\"DB_USER\\",\\"DB_PASSWORD\\",\\"DATABASE_URL\\",\\"DATABASE_JDBC_URL\\",\\"CLOUD_RUN_JOB_TRIGGER_URL_migration\\",\\"CLOUD_RUN_JOB_TRIGGER_URL_send_reminders\\",\\"DEPLOY_CLOUD_RUN_PROJECT_ID\\",\\"DEPLOY_CLOUD_RUN_REGION\\",\\"GCLOUD_DEPLOY_credentialsKey\\",\\"GCLOUD_RUN_canonicalHostSuffix\\"]"
|
|
372
395
|
- export DOCKER_REGISTRY="europe-west6-docker.pkg.dev"
|
|
373
396
|
- export DOCKER_IMAGE="europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/dev/api"
|
|
374
397
|
- export DOCKER_CACHE_IMAGE="europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/api"
|
|
375
398
|
- export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"
|
|
376
399
|
- export CLOUDSDK_CORE_DISABLE_PROMPTS="1"
|
|
377
|
-
-
|
|
378
|
-
-
|
|
400
|
+
- collapseable_section_end "injectvars"
|
|
401
|
+
- collapseable_section_start "prepare" "Prepare..."
|
|
379
402
|
- gcloud auth activate-service-account --key-file=<(echo "$CL_dev_api_GCLOUD_DEPLOY_credentialsKey")
|
|
380
403
|
- export GCLOUD_PROJECT_NUMBER=$(gcloud projects describe google-project-id --format="value(projectNumber)")
|
|
381
404
|
- 'echo "GCLOUD_PROJECT_NUMBER: $GCLOUD_PROJECT_NUMBER"'
|
|
382
|
-
-
|
|
383
|
-
-
|
|
405
|
+
- collapseable_section_end "prepare"
|
|
406
|
+
- collapseable_section_start "writeenvvars" "Write env vars to file"
|
|
384
407
|
- |
|
|
385
408
|
cat > ____envvars.yaml <<EOF
|
|
386
409
|
ENV_SHORT: |-
|
|
@@ -390,21 +413,19 @@ api 🧪 test:
|
|
|
390
413
|
ENV_TYPE: |-
|
|
391
414
|
dev
|
|
392
415
|
BUILD_INFO_BUILD_ID: |-
|
|
393
|
-
|
|
416
|
+
$(printf %s "$(git describe --tags 2>/dev/null || git rev-parse HEAD)" | sed '1!s/^/ /')
|
|
394
417
|
BUILD_INFO_BUILD_TIME: |-
|
|
395
|
-
|
|
418
|
+
$(printf %s "$CI_JOB_STARTED_AT" | sed '1!s/^/ /')
|
|
396
419
|
BUILD_INFO_CURRENT_VERSION: |-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
420
|
+
$(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/^/ /')
|
|
421
|
+
HOSTNAME: |-
|
|
422
|
+
$(printf %s "$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
|
|
400
423
|
ROOT_URL: |-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
HOST_CANONICAL: |-
|
|
405
|
-
$(printf %s "$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
|
|
424
|
+
$(printf %s "https://$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
|
|
425
|
+
HOSTNAME_INTERNAL: |-
|
|
426
|
+
$(printf %s "$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
|
|
406
427
|
ROOT_URL_INTERNAL: |-
|
|
407
|
-
|
|
428
|
+
$(printf %s "https://$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
|
|
408
429
|
CLOUD_SQL_INSTANCE_CONNECTION_NAME: |-
|
|
409
430
|
projectId:region:instancename
|
|
410
431
|
DB_NAME: |-
|
|
@@ -412,7 +433,7 @@ api 🧪 test:
|
|
|
412
433
|
DB_USER: |-
|
|
413
434
|
my-user
|
|
414
435
|
DB_PASSWORD: |-
|
|
415
|
-
|
|
436
|
+
$(printf %s "$CL_dev_api_DB_PASSWORD" | sed '1!s/^/ /')
|
|
416
437
|
DATABASE_URL: |-
|
|
417
438
|
postgresql://$DB_USER:$DB_PASSWORD@localhost/$DB_NAME?host=/cloudsql/$CLOUD_SQL_INSTANCE_CONNECTION_NAME
|
|
418
439
|
DATABASE_JDBC_URL: |-
|
|
@@ -426,13 +447,13 @@ api 🧪 test:
|
|
|
426
447
|
DEPLOY_CLOUD_RUN_REGION: |-
|
|
427
448
|
europe-west6
|
|
428
449
|
GCLOUD_RUN_canonicalHostSuffix: |-
|
|
429
|
-
|
|
450
|
+
$(printf %s "$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | sed '1!s/^/ /')
|
|
430
451
|
_ALL_ENV_VAR_KEYS: |-
|
|
431
|
-
["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","
|
|
452
|
+
["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_SQL_INSTANCE_CONNECTION_NAME","DB_NAME","DB_USER","DB_PASSWORD","DATABASE_URL","DATABASE_JDBC_URL","CLOUD_RUN_JOB_TRIGGER_URL_migration","CLOUD_RUN_JOB_TRIGGER_URL_send_reminders","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]
|
|
432
453
|
|
|
433
454
|
EOF
|
|
434
|
-
-
|
|
435
|
-
-
|
|
455
|
+
- collapseable_section_end "writeenvvars"
|
|
456
|
+
- collapseable_section_start "deploy" "Deploy to cloud run"
|
|
436
457
|
- set +e
|
|
437
458
|
- echo "ensuring Database..."
|
|
438
459
|
- gcloud sql databases create pan-test-app-dev-api --instance=instancename --project projectId
|
|
@@ -467,12 +488,12 @@ api 🧪 test:
|
|
|
467
488
|
fi
|
|
468
489
|
- 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 --set-cloudsql-instances=projectId:region:instancename --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=5 --cpu-throttling --allow-unauthenticated --ingress=all --cpu-boost
|
|
469
490
|
- gcloud run jobs execute pan-test-app-dev-api-migration --project=google-project-id --region=europe-west6
|
|
470
|
-
-
|
|
471
|
-
-
|
|
491
|
+
- collapseable_section_end "deploy"
|
|
492
|
+
- collapseable_section_start "cleanup" "Cleanup"
|
|
472
493
|
- 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
|
|
473
494
|
- 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
|
|
474
495
|
- 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
|
|
475
|
-
-
|
|
496
|
+
- collapseable_section_end "cleanup"
|
|
476
497
|
- echo 'Uploading SBOM to Dependency Track'
|
|
477
498
|
- /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
|
|
478
499
|
- 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
|
|
@@ -514,9 +535,9 @@ api 🧪 test:
|
|
|
514
535
|
KUBERNETES_MEMORY_LIMIT: 400Mi
|
|
515
536
|
GIT_STRATEGY: none
|
|
516
537
|
script:
|
|
517
|
-
-
|
|
538
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
518
539
|
- export CLOUDSDK_CORE_DISABLE_PROMPTS="1"
|
|
519
|
-
-
|
|
540
|
+
- collapseable_section_end "injectvars"
|
|
520
541
|
- set +e
|
|
521
542
|
- gcloud auth activate-service-account --key-file=<(echo "$CL_dev_api_GCLOUD_DEPLOY_credentialsKey")
|
|
522
543
|
- gcloud run services delete pan-test-app-dev-api --project=google-project-id --region=europe-west6
|
|
@@ -557,17 +578,16 @@ api 🧪 test:
|
|
|
557
578
|
KUBERNETES_MEMORY_REQUEST: 1Gi
|
|
558
579
|
KUBERNETES_MEMORY_LIMIT: 4Gi
|
|
559
580
|
script:
|
|
560
|
-
-
|
|
581
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
561
582
|
- export ENV_SHORT="review"
|
|
562
583
|
- export APP_DIR="api"
|
|
563
584
|
- export ENV_TYPE="review"
|
|
564
585
|
- export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
|
|
565
586
|
- export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
|
|
566
587
|
- 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")"
|
|
567
|
-
- export
|
|
588
|
+
- 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)}')"
|
|
568
589
|
- 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)}')"
|
|
569
|
-
- export
|
|
570
|
-
- 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)}')"
|
|
590
|
+
- 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)}')"
|
|
571
591
|
- 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)}')"
|
|
572
592
|
- export CLOUD_SQL_INSTANCE_CONNECTION_NAME="projectId:region:instancename"
|
|
573
593
|
- export DB_NAME="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"
|
|
@@ -581,47 +601,46 @@ api 🧪 test:
|
|
|
581
601
|
- export DEPLOY_CLOUD_RUN_REGION="europe-west6"
|
|
582
602
|
- export GCLOUD_DEPLOY_credentialsKey="$CL_review_api_GCLOUD_DEPLOY_credentialsKey"
|
|
583
603
|
- export GCLOUD_RUN_canonicalHostSuffix="$CL_review_api_GCLOUD_RUN_canonicalHostSuffix"
|
|
584
|
-
- export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"
|
|
585
|
-
-
|
|
586
|
-
-
|
|
604
|
+
- 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_SQL_INSTANCE_CONNECTION_NAME\\",\\"DB_NAME\\",\\"DB_USER\\",\\"DB_PASSWORD\\",\\"DATABASE_URL\\",\\"DATABASE_JDBC_URL\\",\\"CLOUD_RUN_JOB_TRIGGER_URL_migration\\",\\"CLOUD_RUN_JOB_TRIGGER_URL_send_reminders\\",\\"DEPLOY_CLOUD_RUN_PROJECT_ID\\",\\"DEPLOY_CLOUD_RUN_REGION\\",\\"GCLOUD_DEPLOY_credentialsKey\\",\\"GCLOUD_RUN_canonicalHostSuffix\\"]"
|
|
605
|
+
- collapseable_section_end "injectvars"
|
|
606
|
+
- collapseable_section_start "write-dotenv-api" "write dot env for api"
|
|
587
607
|
- |-
|
|
588
608
|
cat <<EOF > api/.env
|
|
589
609
|
ENV_SHORT=review
|
|
590
610
|
APP_DIR=api
|
|
591
611
|
ENV_TYPE=review
|
|
592
|
-
|
|
593
|
-
ROOT_URL
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
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)}')
|
|
612
|
+
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)
|
|
613
|
+
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)
|
|
614
|
+
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)
|
|
615
|
+
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)
|
|
597
616
|
CLOUD_SQL_INSTANCE_CONNECTION_NAME=projectId:region:instancename
|
|
598
|
-
DB_NAME
|
|
617
|
+
DB_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" | escapeForDotEnv)
|
|
599
618
|
DB_USER=my-user
|
|
600
|
-
DB_PASSWORD=$CL_review_api_DB_PASSWORD
|
|
619
|
+
DB_PASSWORD=$(printf %s "$CL_review_api_DB_PASSWORD" | escapeForDotEnv)
|
|
601
620
|
DATABASE_URL=postgresql://$DB_USER:$DB_PASSWORD@localhost/$DB_NAME?host=/cloudsql/$CLOUD_SQL_INSTANCE_CONNECTION_NAME
|
|
602
621
|
DATABASE_JDBC_URL=jdbc:postgresql:///$DB_NAME?cloudSqlInstance=$CLOUD_SQL_INSTANCE_CONNECTION_NAME&socketFactory=com.google.cloud.sql.postgres.SocketFactory&user=$DB_USER&password=$DB_PASSWORD
|
|
603
622
|
CLOUD_RUN_JOB_TRIGGER_URL_migration=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)}')-migration:run
|
|
604
623
|
CLOUD_RUN_JOB_TRIGGER_URL_send_reminders=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)}')-send-reminders:run
|
|
605
624
|
DEPLOY_CLOUD_RUN_PROJECT_ID=google-project-id
|
|
606
625
|
DEPLOY_CLOUD_RUN_REGION=europe-west6
|
|
607
|
-
GCLOUD_DEPLOY_credentialsKey=$CL_review_api_GCLOUD_DEPLOY_credentialsKey
|
|
608
|
-
GCLOUD_RUN_canonicalHostSuffix=$CL_review_api_GCLOUD_RUN_canonicalHostSuffix
|
|
609
|
-
_ALL_ENV_VAR_KEYS=["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","
|
|
626
|
+
GCLOUD_DEPLOY_credentialsKey=$(printf %s "$CL_review_api_GCLOUD_DEPLOY_credentialsKey" | escapeForDotEnv)
|
|
627
|
+
GCLOUD_RUN_canonicalHostSuffix=$(printf %s "$CL_review_api_GCLOUD_RUN_canonicalHostSuffix" | escapeForDotEnv)
|
|
628
|
+
_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_SQL_INSTANCE_CONNECTION_NAME","DB_NAME","DB_USER","DB_PASSWORD","DATABASE_URL","DATABASE_JDBC_URL","CLOUD_RUN_JOB_TRIGGER_URL_migration","CLOUD_RUN_JOB_TRIGGER_URL_send_reminders","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]
|
|
610
629
|
EOF
|
|
611
|
-
-
|
|
630
|
+
- collapseable_section_end "write-dotenv-api"
|
|
612
631
|
- echo '{"id":"$(git describe --tags 2>/dev/null || git rev-parse HEAD)","time":"$CI_JOB_STARTED_AT"}' > api/__build_info.json
|
|
613
|
-
-
|
|
632
|
+
- collapseable_section_start "nodeinstall" "Ensure node version"
|
|
614
633
|
- if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
|
|
615
634
|
- if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
|
|
616
|
-
-
|
|
635
|
+
- collapseable_section_end "nodeinstall"
|
|
617
636
|
- cd api
|
|
618
|
-
-
|
|
637
|
+
- collapseable_section_start "nodeinstall" "Ensure node version"
|
|
619
638
|
- if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
|
|
620
639
|
- if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
|
|
621
|
-
-
|
|
622
|
-
-
|
|
640
|
+
- collapseable_section_end "nodeinstall"
|
|
641
|
+
- collapseable_section_start "yarninstall" "Yarn install"
|
|
623
642
|
- yarn install --immutable
|
|
624
|
-
-
|
|
643
|
+
- collapseable_section_end "yarninstall"
|
|
625
644
|
- yarn build
|
|
626
645
|
cache:
|
|
627
646
|
- key: api-yarn
|
|
@@ -632,10 +651,6 @@ api 🧪 test:
|
|
|
632
651
|
policy: pull-push
|
|
633
652
|
paths:
|
|
634
653
|
- api/node_modules
|
|
635
|
-
- key: api-next-cache
|
|
636
|
-
policy: pull-push
|
|
637
|
-
paths:
|
|
638
|
-
- api/.next/cache
|
|
639
654
|
artifacts:
|
|
640
655
|
paths:
|
|
641
656
|
- api/__build_info.json
|
|
@@ -668,7 +683,7 @@ api 🧪 test:
|
|
|
668
683
|
KUBERNETES_MEMORY_REQUEST: 1Gi
|
|
669
684
|
KUBERNETES_MEMORY_LIMIT: 2Gi
|
|
670
685
|
script:
|
|
671
|
-
-
|
|
686
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
672
687
|
- export APP_DIR="api"
|
|
673
688
|
- export DOCKER_BUILD_CONTEXT="."
|
|
674
689
|
- export DOCKER_REGISTRY="europe-west6-docker.pkg.dev"
|
|
@@ -684,20 +699,20 @@ api 🧪 test:
|
|
|
684
699
|
COPY --chown=node:node api/yarn.lock /app/api/yarn.lock
|
|
685
700
|
COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
|
|
686
701
|
COPY --chown=node:node .yarn /app/.yarn"
|
|
687
|
-
-
|
|
702
|
+
- collapseable_section_end "injectvars"
|
|
688
703
|
- ensureNodeDockerfile
|
|
689
|
-
-
|
|
704
|
+
- collapseable_section_start "docker-login" "Docker Login"
|
|
690
705
|
- gcloud auth activate-service-account --key-file=<(echo "$CL_review_api_GCLOUD_DEPLOY_credentialsKey")
|
|
691
706
|
- gcloud auth configure-docker europe-west6-docker.pkg.dev
|
|
692
|
-
-
|
|
693
|
-
-
|
|
707
|
+
- collapseable_section_end "docker-login"
|
|
708
|
+
- collapseable_section_start "docker-build" "Docker build"
|
|
694
709
|
- 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
|
|
695
|
-
-
|
|
696
|
-
-
|
|
710
|
+
- collapseable_section_end "docker-build"
|
|
711
|
+
- collapseable_section_start "docker-push" "Docker push and tag"
|
|
697
712
|
- docker push $DOCKER_IMAGE:$DOCKER_IMAGE_TAG
|
|
698
713
|
- docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG $DOCKER_CACHE_IMAGE
|
|
699
714
|
- docker push $DOCKER_CACHE_IMAGE
|
|
700
|
-
-
|
|
715
|
+
- collapseable_section_end "docker-push"
|
|
701
716
|
cache:
|
|
702
717
|
- key: api-yarn
|
|
703
718
|
policy: pull
|
|
@@ -714,8 +729,8 @@ api 🧪 test:
|
|
|
714
729
|
image: aquasec/trivy:0.38.3
|
|
715
730
|
variables: {}
|
|
716
731
|
script:
|
|
717
|
-
-
|
|
718
|
-
-
|
|
732
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
733
|
+
- collapseable_section_end "injectvars"
|
|
719
734
|
- trivy fs --quiet --format cyclonedx --output "__sbom.json" api
|
|
720
735
|
artifacts:
|
|
721
736
|
paths:
|
|
@@ -734,17 +749,16 @@ api 🧪 test:
|
|
|
734
749
|
KUBERNETES_MEMORY_REQUEST: 200Mi
|
|
735
750
|
KUBERNETES_MEMORY_LIMIT: 400Mi
|
|
736
751
|
script:
|
|
737
|
-
-
|
|
752
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
738
753
|
- export ENV_SHORT="review"
|
|
739
754
|
- export APP_DIR="api"
|
|
740
755
|
- export ENV_TYPE="review"
|
|
741
756
|
- export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
|
|
742
757
|
- export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
|
|
743
758
|
- 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")"
|
|
744
|
-
- export
|
|
759
|
+
- 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)}')"
|
|
745
760
|
- 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)}')"
|
|
746
|
-
- export
|
|
747
|
-
- 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)}')"
|
|
761
|
+
- 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)}')"
|
|
748
762
|
- 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)}')"
|
|
749
763
|
- export CLOUD_SQL_INSTANCE_CONNECTION_NAME="projectId:region:instancename"
|
|
750
764
|
- export DB_NAME="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"
|
|
@@ -758,19 +772,19 @@ api 🧪 test:
|
|
|
758
772
|
- export DEPLOY_CLOUD_RUN_REGION="europe-west6"
|
|
759
773
|
- export GCLOUD_DEPLOY_credentialsKey="$CL_review_api_GCLOUD_DEPLOY_credentialsKey"
|
|
760
774
|
- export GCLOUD_RUN_canonicalHostSuffix="$CL_review_api_GCLOUD_RUN_canonicalHostSuffix"
|
|
761
|
-
- export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"
|
|
775
|
+
- 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_SQL_INSTANCE_CONNECTION_NAME\\",\\"DB_NAME\\",\\"DB_USER\\",\\"DB_PASSWORD\\",\\"DATABASE_URL\\",\\"DATABASE_JDBC_URL\\",\\"CLOUD_RUN_JOB_TRIGGER_URL_migration\\",\\"CLOUD_RUN_JOB_TRIGGER_URL_send_reminders\\",\\"DEPLOY_CLOUD_RUN_PROJECT_ID\\",\\"DEPLOY_CLOUD_RUN_REGION\\",\\"GCLOUD_DEPLOY_credentialsKey\\",\\"GCLOUD_RUN_canonicalHostSuffix\\"]"
|
|
762
776
|
- export DOCKER_REGISTRY="europe-west6-docker.pkg.dev"
|
|
763
777
|
- 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"; })"
|
|
764
778
|
- export DOCKER_CACHE_IMAGE="europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/api"
|
|
765
779
|
- export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"
|
|
766
780
|
- export CLOUDSDK_CORE_DISABLE_PROMPTS="1"
|
|
767
|
-
-
|
|
768
|
-
-
|
|
781
|
+
- collapseable_section_end "injectvars"
|
|
782
|
+
- collapseable_section_start "prepare" "Prepare..."
|
|
769
783
|
- gcloud auth activate-service-account --key-file=<(echo "$CL_review_api_GCLOUD_DEPLOY_credentialsKey")
|
|
770
784
|
- export GCLOUD_PROJECT_NUMBER=$(gcloud projects describe google-project-id --format="value(projectNumber)")
|
|
771
785
|
- 'echo "GCLOUD_PROJECT_NUMBER: $GCLOUD_PROJECT_NUMBER"'
|
|
772
|
-
-
|
|
773
|
-
-
|
|
786
|
+
- collapseable_section_end "prepare"
|
|
787
|
+
- collapseable_section_start "writeenvvars" "Write env vars to file"
|
|
774
788
|
- |
|
|
775
789
|
cat > ____envvars.yaml <<EOF
|
|
776
790
|
ENV_SHORT: |-
|
|
@@ -780,29 +794,27 @@ api 🧪 test:
|
|
|
780
794
|
ENV_TYPE: |-
|
|
781
795
|
review
|
|
782
796
|
BUILD_INFO_BUILD_ID: |-
|
|
783
|
-
|
|
797
|
+
$(printf %s "$(git describe --tags 2>/dev/null || git rev-parse HEAD)" | sed '1!s/^/ /')
|
|
784
798
|
BUILD_INFO_BUILD_TIME: |-
|
|
785
|
-
|
|
799
|
+
$(printf %s "$CI_JOB_STARTED_AT" | sed '1!s/^/ /')
|
|
786
800
|
BUILD_INFO_CURRENT_VERSION: |-
|
|
787
|
-
|
|
788
|
-
|
|
789
|
-
|
|
801
|
+
$(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/^/ /')
|
|
802
|
+
HOSTNAME: |-
|
|
803
|
+
$(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/^/ /')
|
|
790
804
|
ROOT_URL: |-
|
|
791
|
-
|
|
792
|
-
|
|
793
|
-
|
|
794
|
-
HOST_CANONICAL: |-
|
|
795
|
-
$(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/^/ /')
|
|
805
|
+
$(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/^/ /')
|
|
806
|
+
HOSTNAME_INTERNAL: |-
|
|
807
|
+
$(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/^/ /')
|
|
796
808
|
ROOT_URL_INTERNAL: |-
|
|
797
|
-
|
|
809
|
+
$(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/^/ /')
|
|
798
810
|
CLOUD_SQL_INSTANCE_CONNECTION_NAME: |-
|
|
799
811
|
projectId:region:instancename
|
|
800
812
|
DB_NAME: |-
|
|
801
|
-
|
|
813
|
+
$(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" | sed '1!s/^/ /')
|
|
802
814
|
DB_USER: |-
|
|
803
815
|
my-user
|
|
804
816
|
DB_PASSWORD: |-
|
|
805
|
-
|
|
817
|
+
$(printf %s "$CL_review_api_DB_PASSWORD" | sed '1!s/^/ /')
|
|
806
818
|
DATABASE_URL: |-
|
|
807
819
|
postgresql://$DB_USER:$DB_PASSWORD@localhost/$DB_NAME?host=/cloudsql/$CLOUD_SQL_INSTANCE_CONNECTION_NAME
|
|
808
820
|
DATABASE_JDBC_URL: |-
|
|
@@ -816,13 +828,13 @@ api 🧪 test:
|
|
|
816
828
|
DEPLOY_CLOUD_RUN_REGION: |-
|
|
817
829
|
europe-west6
|
|
818
830
|
GCLOUD_RUN_canonicalHostSuffix: |-
|
|
819
|
-
|
|
831
|
+
$(printf %s "$CL_review_api_GCLOUD_RUN_canonicalHostSuffix" | sed '1!s/^/ /')
|
|
820
832
|
_ALL_ENV_VAR_KEYS: |-
|
|
821
|
-
["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","
|
|
833
|
+
["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_SQL_INSTANCE_CONNECTION_NAME","DB_NAME","DB_USER","DB_PASSWORD","DATABASE_URL","DATABASE_JDBC_URL","CLOUD_RUN_JOB_TRIGGER_URL_migration","CLOUD_RUN_JOB_TRIGGER_URL_send_reminders","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]
|
|
822
834
|
|
|
823
835
|
EOF
|
|
824
|
-
-
|
|
825
|
-
-
|
|
836
|
+
- collapseable_section_end "writeenvvars"
|
|
837
|
+
- collapseable_section_start "deploy" "Deploy to cloud run"
|
|
826
838
|
- set +e
|
|
827
839
|
- echo "ensuring Database..."
|
|
828
840
|
- gcloud sql databases create 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 --instance=instancename --project projectId
|
|
@@ -857,15 +869,15 @@ api 🧪 test:
|
|
|
857
869
|
fi
|
|
858
870
|
- 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 --set-cloudsql-instances=projectId:region:instancename --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=5 --cpu-throttling --allow-unauthenticated --ingress=all --cpu-boost
|
|
859
871
|
- gcloud run jobs execute $(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)}')-migration --project=google-project-id --region=europe-west6
|
|
860
|
-
-
|
|
861
|
-
-
|
|
872
|
+
- collapseable_section_end "deploy"
|
|
873
|
+
- collapseable_section_start "cleanup" "Cleanup"
|
|
862
874
|
- 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
|
|
863
875
|
- 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
|
|
864
876
|
- 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
|
|
865
877
|
- set +e
|
|
866
878
|
- gcloud artifacts docker images delete europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/review/api --quiet --delete-tags
|
|
867
879
|
- set -e
|
|
868
|
-
-
|
|
880
|
+
- collapseable_section_end "cleanup"
|
|
869
881
|
- echo 'Uploading SBOM to Dependency Track'
|
|
870
882
|
- /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
|
|
871
883
|
- 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
|
|
@@ -905,9 +917,9 @@ api 🧪 test:
|
|
|
905
917
|
KUBERNETES_MEMORY_LIMIT: 400Mi
|
|
906
918
|
GIT_STRATEGY: none
|
|
907
919
|
script:
|
|
908
|
-
-
|
|
920
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
909
921
|
- export CLOUDSDK_CORE_DISABLE_PROMPTS="1"
|
|
910
|
-
-
|
|
922
|
+
- collapseable_section_end "injectvars"
|
|
911
923
|
- set +e
|
|
912
924
|
- gcloud auth activate-service-account --key-file=<(echo "$CL_review_api_GCLOUD_DEPLOY_credentialsKey")
|
|
913
925
|
- 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
|
|
@@ -952,17 +964,16 @@ api 🧪 test:
|
|
|
952
964
|
KUBERNETES_MEMORY_REQUEST: 1Gi
|
|
953
965
|
KUBERNETES_MEMORY_LIMIT: 4Gi
|
|
954
966
|
script:
|
|
955
|
-
-
|
|
967
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
956
968
|
- export ENV_SHORT="stage"
|
|
957
969
|
- export APP_DIR="api"
|
|
958
970
|
- export ENV_TYPE="stage"
|
|
959
971
|
- export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
|
|
960
972
|
- export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
|
|
961
973
|
- 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")"
|
|
962
|
-
- export
|
|
974
|
+
- export HOSTNAME="$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
963
975
|
- export ROOT_URL="https://$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
964
|
-
- export
|
|
965
|
-
- export HOST_CANONICAL="$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
976
|
+
- export HOSTNAME_INTERNAL="$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
966
977
|
- export ROOT_URL_INTERNAL="https://$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
967
978
|
- export CLOUD_SQL_INSTANCE_CONNECTION_NAME="projectId:region:instancename"
|
|
968
979
|
- export DB_NAME="pan-test-app-stage-api"
|
|
@@ -976,47 +987,46 @@ api 🧪 test:
|
|
|
976
987
|
- export DEPLOY_CLOUD_RUN_REGION="europe-west6"
|
|
977
988
|
- export GCLOUD_DEPLOY_credentialsKey="$CL_stage_api_GCLOUD_DEPLOY_credentialsKey"
|
|
978
989
|
- export GCLOUD_RUN_canonicalHostSuffix="$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix"
|
|
979
|
-
- export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"
|
|
980
|
-
-
|
|
981
|
-
-
|
|
990
|
+
- 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_SQL_INSTANCE_CONNECTION_NAME\\",\\"DB_NAME\\",\\"DB_USER\\",\\"DB_PASSWORD\\",\\"DATABASE_URL\\",\\"DATABASE_JDBC_URL\\",\\"CLOUD_RUN_JOB_TRIGGER_URL_migration\\",\\"CLOUD_RUN_JOB_TRIGGER_URL_send_reminders\\",\\"DEPLOY_CLOUD_RUN_PROJECT_ID\\",\\"DEPLOY_CLOUD_RUN_REGION\\",\\"GCLOUD_DEPLOY_credentialsKey\\",\\"GCLOUD_RUN_canonicalHostSuffix\\"]"
|
|
991
|
+
- collapseable_section_end "injectvars"
|
|
992
|
+
- collapseable_section_start "write-dotenv-api" "write dot env for api"
|
|
982
993
|
- |-
|
|
983
994
|
cat <<EOF > api/.env
|
|
984
995
|
ENV_SHORT=stage
|
|
985
996
|
APP_DIR=api
|
|
986
997
|
ENV_TYPE=stage
|
|
987
|
-
|
|
988
|
-
ROOT_URL
|
|
989
|
-
|
|
990
|
-
|
|
991
|
-
ROOT_URL_INTERNAL=https://$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')
|
|
998
|
+
HOSTNAME=$(printf %s "$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | escapeForDotEnv)
|
|
999
|
+
ROOT_URL=$(printf %s "https://$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | escapeForDotEnv)
|
|
1000
|
+
HOSTNAME_INTERNAL=$(printf %s "$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | escapeForDotEnv)
|
|
1001
|
+
ROOT_URL_INTERNAL=$(printf %s "https://$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | escapeForDotEnv)
|
|
992
1002
|
CLOUD_SQL_INSTANCE_CONNECTION_NAME=projectId:region:instancename
|
|
993
1003
|
DB_NAME=pan-test-app-stage-api
|
|
994
1004
|
DB_USER=my-user
|
|
995
|
-
DB_PASSWORD=$CL_stage_api_DB_PASSWORD
|
|
1005
|
+
DB_PASSWORD=$(printf %s "$CL_stage_api_DB_PASSWORD" | escapeForDotEnv)
|
|
996
1006
|
DATABASE_URL=postgresql://$DB_USER:$DB_PASSWORD@localhost/$DB_NAME?host=/cloudsql/$CLOUD_SQL_INSTANCE_CONNECTION_NAME
|
|
997
1007
|
DATABASE_JDBC_URL=jdbc:postgresql:///$DB_NAME?cloudSqlInstance=$CLOUD_SQL_INSTANCE_CONNECTION_NAME&socketFactory=com.google.cloud.sql.postgres.SocketFactory&user=$DB_USER&password=$DB_PASSWORD
|
|
998
1008
|
CLOUD_RUN_JOB_TRIGGER_URL_migration=https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/jobs/pan-test-app-stage-api-migration:run
|
|
999
1009
|
CLOUD_RUN_JOB_TRIGGER_URL_send_reminders=https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/jobs/pan-test-app-stage-api-send-reminders:run
|
|
1000
1010
|
DEPLOY_CLOUD_RUN_PROJECT_ID=google-project-id
|
|
1001
1011
|
DEPLOY_CLOUD_RUN_REGION=europe-west6
|
|
1002
|
-
GCLOUD_DEPLOY_credentialsKey=$CL_stage_api_GCLOUD_DEPLOY_credentialsKey
|
|
1003
|
-
GCLOUD_RUN_canonicalHostSuffix=$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix
|
|
1004
|
-
_ALL_ENV_VAR_KEYS=["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","
|
|
1012
|
+
GCLOUD_DEPLOY_credentialsKey=$(printf %s "$CL_stage_api_GCLOUD_DEPLOY_credentialsKey" | escapeForDotEnv)
|
|
1013
|
+
GCLOUD_RUN_canonicalHostSuffix=$(printf %s "$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | escapeForDotEnv)
|
|
1014
|
+
_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_SQL_INSTANCE_CONNECTION_NAME","DB_NAME","DB_USER","DB_PASSWORD","DATABASE_URL","DATABASE_JDBC_URL","CLOUD_RUN_JOB_TRIGGER_URL_migration","CLOUD_RUN_JOB_TRIGGER_URL_send_reminders","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]
|
|
1005
1015
|
EOF
|
|
1006
|
-
-
|
|
1016
|
+
- collapseable_section_end "write-dotenv-api"
|
|
1007
1017
|
- echo '{"id":"$(git describe --tags 2>/dev/null || git rev-parse HEAD)","time":"$CI_JOB_STARTED_AT"}' > api/__build_info.json
|
|
1008
|
-
-
|
|
1018
|
+
- collapseable_section_start "nodeinstall" "Ensure node version"
|
|
1009
1019
|
- if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
|
|
1010
1020
|
- if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
|
|
1011
|
-
-
|
|
1021
|
+
- collapseable_section_end "nodeinstall"
|
|
1012
1022
|
- cd api
|
|
1013
|
-
-
|
|
1023
|
+
- collapseable_section_start "nodeinstall" "Ensure node version"
|
|
1014
1024
|
- if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
|
|
1015
1025
|
- if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
|
|
1016
|
-
-
|
|
1017
|
-
-
|
|
1026
|
+
- collapseable_section_end "nodeinstall"
|
|
1027
|
+
- collapseable_section_start "yarninstall" "Yarn install"
|
|
1018
1028
|
- yarn install --immutable
|
|
1019
|
-
-
|
|
1029
|
+
- collapseable_section_end "yarninstall"
|
|
1020
1030
|
- yarn build
|
|
1021
1031
|
cache:
|
|
1022
1032
|
- key: api-yarn
|
|
@@ -1027,10 +1037,6 @@ api 🧪 test:
|
|
|
1027
1037
|
policy: pull-push
|
|
1028
1038
|
paths:
|
|
1029
1039
|
- api/node_modules
|
|
1030
|
-
- key: api-next-cache
|
|
1031
|
-
policy: pull-push
|
|
1032
|
-
paths:
|
|
1033
|
-
- api/.next/cache
|
|
1034
1040
|
artifacts:
|
|
1035
1041
|
paths:
|
|
1036
1042
|
- api/__build_info.json
|
|
@@ -1063,7 +1069,7 @@ api 🧪 test:
|
|
|
1063
1069
|
KUBERNETES_MEMORY_REQUEST: 1Gi
|
|
1064
1070
|
KUBERNETES_MEMORY_LIMIT: 2Gi
|
|
1065
1071
|
script:
|
|
1066
|
-
-
|
|
1072
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
1067
1073
|
- export APP_DIR="api"
|
|
1068
1074
|
- export DOCKER_BUILD_CONTEXT="."
|
|
1069
1075
|
- export DOCKER_REGISTRY="europe-west6-docker.pkg.dev"
|
|
@@ -1079,20 +1085,20 @@ api 🧪 test:
|
|
|
1079
1085
|
COPY --chown=node:node api/yarn.lock /app/api/yarn.lock
|
|
1080
1086
|
COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
|
|
1081
1087
|
COPY --chown=node:node .yarn /app/.yarn"
|
|
1082
|
-
-
|
|
1088
|
+
- collapseable_section_end "injectvars"
|
|
1083
1089
|
- ensureNodeDockerfile
|
|
1084
|
-
-
|
|
1090
|
+
- collapseable_section_start "docker-login" "Docker Login"
|
|
1085
1091
|
- gcloud auth activate-service-account --key-file=<(echo "$CL_stage_api_GCLOUD_DEPLOY_credentialsKey")
|
|
1086
1092
|
- gcloud auth configure-docker europe-west6-docker.pkg.dev
|
|
1087
|
-
-
|
|
1088
|
-
-
|
|
1093
|
+
- collapseable_section_end "docker-login"
|
|
1094
|
+
- collapseable_section_start "docker-build" "Docker build"
|
|
1089
1095
|
- 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
|
|
1090
|
-
-
|
|
1091
|
-
-
|
|
1096
|
+
- collapseable_section_end "docker-build"
|
|
1097
|
+
- collapseable_section_start "docker-push" "Docker push and tag"
|
|
1092
1098
|
- docker push $DOCKER_IMAGE:$DOCKER_IMAGE_TAG
|
|
1093
1099
|
- docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG $DOCKER_CACHE_IMAGE
|
|
1094
1100
|
- docker push $DOCKER_CACHE_IMAGE
|
|
1095
|
-
-
|
|
1101
|
+
- collapseable_section_end "docker-push"
|
|
1096
1102
|
cache:
|
|
1097
1103
|
- key: api-yarn
|
|
1098
1104
|
policy: pull
|
|
@@ -1109,8 +1115,8 @@ api 🧪 test:
|
|
|
1109
1115
|
image: aquasec/trivy:0.38.3
|
|
1110
1116
|
variables: {}
|
|
1111
1117
|
script:
|
|
1112
|
-
-
|
|
1113
|
-
-
|
|
1118
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
1119
|
+
- collapseable_section_end "injectvars"
|
|
1114
1120
|
- trivy fs --quiet --format cyclonedx --output "__sbom.json" api
|
|
1115
1121
|
artifacts:
|
|
1116
1122
|
paths:
|
|
@@ -1129,17 +1135,16 @@ api 🧪 test:
|
|
|
1129
1135
|
KUBERNETES_MEMORY_REQUEST: 200Mi
|
|
1130
1136
|
KUBERNETES_MEMORY_LIMIT: 400Mi
|
|
1131
1137
|
script:
|
|
1132
|
-
-
|
|
1138
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
1133
1139
|
- export ENV_SHORT="stage"
|
|
1134
1140
|
- export APP_DIR="api"
|
|
1135
1141
|
- export ENV_TYPE="stage"
|
|
1136
1142
|
- export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
|
|
1137
1143
|
- export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
|
|
1138
1144
|
- 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")"
|
|
1139
|
-
- export
|
|
1145
|
+
- export HOSTNAME="$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
1140
1146
|
- export ROOT_URL="https://$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
1141
|
-
- export
|
|
1142
|
-
- export HOST_CANONICAL="$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
1147
|
+
- export HOSTNAME_INTERNAL="$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
1143
1148
|
- export ROOT_URL_INTERNAL="https://$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
1144
1149
|
- export CLOUD_SQL_INSTANCE_CONNECTION_NAME="projectId:region:instancename"
|
|
1145
1150
|
- export DB_NAME="pan-test-app-stage-api"
|
|
@@ -1153,19 +1158,19 @@ api 🧪 test:
|
|
|
1153
1158
|
- export DEPLOY_CLOUD_RUN_REGION="europe-west6"
|
|
1154
1159
|
- export GCLOUD_DEPLOY_credentialsKey="$CL_stage_api_GCLOUD_DEPLOY_credentialsKey"
|
|
1155
1160
|
- export GCLOUD_RUN_canonicalHostSuffix="$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix"
|
|
1156
|
-
- export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"
|
|
1161
|
+
- 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_SQL_INSTANCE_CONNECTION_NAME\\",\\"DB_NAME\\",\\"DB_USER\\",\\"DB_PASSWORD\\",\\"DATABASE_URL\\",\\"DATABASE_JDBC_URL\\",\\"CLOUD_RUN_JOB_TRIGGER_URL_migration\\",\\"CLOUD_RUN_JOB_TRIGGER_URL_send_reminders\\",\\"DEPLOY_CLOUD_RUN_PROJECT_ID\\",\\"DEPLOY_CLOUD_RUN_REGION\\",\\"GCLOUD_DEPLOY_credentialsKey\\",\\"GCLOUD_RUN_canonicalHostSuffix\\"]"
|
|
1157
1162
|
- export DOCKER_REGISTRY="europe-west6-docker.pkg.dev"
|
|
1158
1163
|
- export DOCKER_IMAGE="europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/stage/api"
|
|
1159
1164
|
- export DOCKER_CACHE_IMAGE="europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/api"
|
|
1160
1165
|
- export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"
|
|
1161
1166
|
- export CLOUDSDK_CORE_DISABLE_PROMPTS="1"
|
|
1162
|
-
-
|
|
1163
|
-
-
|
|
1167
|
+
- collapseable_section_end "injectvars"
|
|
1168
|
+
- collapseable_section_start "prepare" "Prepare..."
|
|
1164
1169
|
- gcloud auth activate-service-account --key-file=<(echo "$CL_stage_api_GCLOUD_DEPLOY_credentialsKey")
|
|
1165
1170
|
- export GCLOUD_PROJECT_NUMBER=$(gcloud projects describe google-project-id --format="value(projectNumber)")
|
|
1166
1171
|
- 'echo "GCLOUD_PROJECT_NUMBER: $GCLOUD_PROJECT_NUMBER"'
|
|
1167
|
-
-
|
|
1168
|
-
-
|
|
1172
|
+
- collapseable_section_end "prepare"
|
|
1173
|
+
- collapseable_section_start "writeenvvars" "Write env vars to file"
|
|
1169
1174
|
- |
|
|
1170
1175
|
cat > ____envvars.yaml <<EOF
|
|
1171
1176
|
ENV_SHORT: |-
|
|
@@ -1175,21 +1180,19 @@ api 🧪 test:
|
|
|
1175
1180
|
ENV_TYPE: |-
|
|
1176
1181
|
stage
|
|
1177
1182
|
BUILD_INFO_BUILD_ID: |-
|
|
1178
|
-
|
|
1183
|
+
$(printf %s "$(git describe --tags 2>/dev/null || git rev-parse HEAD)" | sed '1!s/^/ /')
|
|
1179
1184
|
BUILD_INFO_BUILD_TIME: |-
|
|
1180
|
-
|
|
1185
|
+
$(printf %s "$CI_JOB_STARTED_AT" | sed '1!s/^/ /')
|
|
1181
1186
|
BUILD_INFO_CURRENT_VERSION: |-
|
|
1182
|
-
|
|
1183
|
-
|
|
1184
|
-
|
|
1187
|
+
$(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/^/ /')
|
|
1188
|
+
HOSTNAME: |-
|
|
1189
|
+
$(printf %s "$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
|
|
1185
1190
|
ROOT_URL: |-
|
|
1186
|
-
|
|
1187
|
-
|
|
1188
|
-
|
|
1189
|
-
HOST_CANONICAL: |-
|
|
1190
|
-
$(printf %s "$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
|
|
1191
|
+
$(printf %s "https://$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
|
|
1192
|
+
HOSTNAME_INTERNAL: |-
|
|
1193
|
+
$(printf %s "$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
|
|
1191
1194
|
ROOT_URL_INTERNAL: |-
|
|
1192
|
-
|
|
1195
|
+
$(printf %s "https://$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
|
|
1193
1196
|
CLOUD_SQL_INSTANCE_CONNECTION_NAME: |-
|
|
1194
1197
|
projectId:region:instancename
|
|
1195
1198
|
DB_NAME: |-
|
|
@@ -1197,7 +1200,7 @@ api 🧪 test:
|
|
|
1197
1200
|
DB_USER: |-
|
|
1198
1201
|
my-user
|
|
1199
1202
|
DB_PASSWORD: |-
|
|
1200
|
-
|
|
1203
|
+
$(printf %s "$CL_stage_api_DB_PASSWORD" | sed '1!s/^/ /')
|
|
1201
1204
|
DATABASE_URL: |-
|
|
1202
1205
|
postgresql://$DB_USER:$DB_PASSWORD@localhost/$DB_NAME?host=/cloudsql/$CLOUD_SQL_INSTANCE_CONNECTION_NAME
|
|
1203
1206
|
DATABASE_JDBC_URL: |-
|
|
@@ -1211,13 +1214,13 @@ api 🧪 test:
|
|
|
1211
1214
|
DEPLOY_CLOUD_RUN_REGION: |-
|
|
1212
1215
|
europe-west6
|
|
1213
1216
|
GCLOUD_RUN_canonicalHostSuffix: |-
|
|
1214
|
-
|
|
1217
|
+
$(printf %s "$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | sed '1!s/^/ /')
|
|
1215
1218
|
_ALL_ENV_VAR_KEYS: |-
|
|
1216
|
-
["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","
|
|
1219
|
+
["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_SQL_INSTANCE_CONNECTION_NAME","DB_NAME","DB_USER","DB_PASSWORD","DATABASE_URL","DATABASE_JDBC_URL","CLOUD_RUN_JOB_TRIGGER_URL_migration","CLOUD_RUN_JOB_TRIGGER_URL_send_reminders","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]
|
|
1217
1220
|
|
|
1218
1221
|
EOF
|
|
1219
|
-
-
|
|
1220
|
-
-
|
|
1222
|
+
- collapseable_section_end "writeenvvars"
|
|
1223
|
+
- collapseable_section_start "deploy" "Deploy to cloud run"
|
|
1221
1224
|
- set +e
|
|
1222
1225
|
- echo "ensuring Database..."
|
|
1223
1226
|
- gcloud sql databases create pan-test-app-stage-api --instance=instancename --project projectId
|
|
@@ -1252,12 +1255,12 @@ api 🧪 test:
|
|
|
1252
1255
|
fi
|
|
1253
1256
|
- 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 --set-cloudsql-instances=projectId:region:instancename --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=5 --cpu-throttling --allow-unauthenticated --ingress=all --cpu-boost
|
|
1254
1257
|
- gcloud run jobs execute pan-test-app-stage-api-migration --project=google-project-id --region=europe-west6
|
|
1255
|
-
-
|
|
1256
|
-
-
|
|
1258
|
+
- collapseable_section_end "deploy"
|
|
1259
|
+
- collapseable_section_start "cleanup" "Cleanup"
|
|
1257
1260
|
- 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
|
|
1258
1261
|
- 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
|
|
1259
1262
|
- 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
|
|
1260
|
-
-
|
|
1263
|
+
- collapseable_section_end "cleanup"
|
|
1261
1264
|
- echo 'Uploading SBOM to Dependency Track'
|
|
1262
1265
|
- /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
|
|
1263
1266
|
- 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
|
|
@@ -1290,9 +1293,9 @@ api 🧪 test:
|
|
|
1290
1293
|
KUBERNETES_MEMORY_LIMIT: 400Mi
|
|
1291
1294
|
GIT_STRATEGY: none
|
|
1292
1295
|
script:
|
|
1293
|
-
-
|
|
1296
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
1294
1297
|
- export CLOUDSDK_CORE_DISABLE_PROMPTS="1"
|
|
1295
|
-
-
|
|
1298
|
+
- collapseable_section_end "injectvars"
|
|
1296
1299
|
- set +e
|
|
1297
1300
|
- gcloud auth activate-service-account --key-file=<(echo "$CL_stage_api_GCLOUD_DEPLOY_credentialsKey")
|
|
1298
1301
|
- gcloud run services delete pan-test-app-stage-api --project=google-project-id --region=europe-west6
|
|
@@ -1331,17 +1334,16 @@ api 🧪 test:
|
|
|
1331
1334
|
KUBERNETES_MEMORY_REQUEST: 1Gi
|
|
1332
1335
|
KUBERNETES_MEMORY_LIMIT: 4Gi
|
|
1333
1336
|
script:
|
|
1334
|
-
-
|
|
1337
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
1335
1338
|
- export ENV_SHORT="prod"
|
|
1336
1339
|
- export APP_DIR="api"
|
|
1337
1340
|
- export ENV_TYPE="prod"
|
|
1338
1341
|
- export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
|
|
1339
1342
|
- export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
|
|
1340
1343
|
- 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")"
|
|
1341
|
-
- export
|
|
1344
|
+
- export HOSTNAME="$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
1342
1345
|
- export ROOT_URL="https://$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
1343
|
-
- export
|
|
1344
|
-
- export HOST_CANONICAL="$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
1346
|
+
- export HOSTNAME_INTERNAL="$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
1345
1347
|
- export ROOT_URL_INTERNAL="https://$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
1346
1348
|
- export CLOUD_SQL_INSTANCE_CONNECTION_NAME="projectId:region:instancename"
|
|
1347
1349
|
- export DB_NAME="pan-test-app-prod-api"
|
|
@@ -1355,47 +1357,46 @@ api 🧪 test:
|
|
|
1355
1357
|
- export DEPLOY_CLOUD_RUN_REGION="europe-west6"
|
|
1356
1358
|
- export GCLOUD_DEPLOY_credentialsKey="$CL_prod_api_GCLOUD_DEPLOY_credentialsKey"
|
|
1357
1359
|
- export GCLOUD_RUN_canonicalHostSuffix="$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix"
|
|
1358
|
-
- export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"
|
|
1359
|
-
-
|
|
1360
|
-
-
|
|
1360
|
+
- 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_SQL_INSTANCE_CONNECTION_NAME\\",\\"DB_NAME\\",\\"DB_USER\\",\\"DB_PASSWORD\\",\\"DATABASE_URL\\",\\"DATABASE_JDBC_URL\\",\\"CLOUD_RUN_JOB_TRIGGER_URL_migration\\",\\"CLOUD_RUN_JOB_TRIGGER_URL_send_reminders\\",\\"DEPLOY_CLOUD_RUN_PROJECT_ID\\",\\"DEPLOY_CLOUD_RUN_REGION\\",\\"GCLOUD_DEPLOY_credentialsKey\\",\\"GCLOUD_RUN_canonicalHostSuffix\\"]"
|
|
1361
|
+
- collapseable_section_end "injectvars"
|
|
1362
|
+
- collapseable_section_start "write-dotenv-api" "write dot env for api"
|
|
1361
1363
|
- |-
|
|
1362
1364
|
cat <<EOF > api/.env
|
|
1363
1365
|
ENV_SHORT=prod
|
|
1364
1366
|
APP_DIR=api
|
|
1365
1367
|
ENV_TYPE=prod
|
|
1366
|
-
|
|
1367
|
-
ROOT_URL
|
|
1368
|
-
|
|
1369
|
-
|
|
1370
|
-
ROOT_URL_INTERNAL=https://$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')
|
|
1368
|
+
HOSTNAME=$(printf %s "$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | escapeForDotEnv)
|
|
1369
|
+
ROOT_URL=$(printf %s "https://$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | escapeForDotEnv)
|
|
1370
|
+
HOSTNAME_INTERNAL=$(printf %s "$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | escapeForDotEnv)
|
|
1371
|
+
ROOT_URL_INTERNAL=$(printf %s "https://$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | escapeForDotEnv)
|
|
1371
1372
|
CLOUD_SQL_INSTANCE_CONNECTION_NAME=projectId:region:instancename
|
|
1372
1373
|
DB_NAME=pan-test-app-prod-api
|
|
1373
1374
|
DB_USER=my-user
|
|
1374
|
-
DB_PASSWORD=$CL_prod_api_DB_PASSWORD
|
|
1375
|
+
DB_PASSWORD=$(printf %s "$CL_prod_api_DB_PASSWORD" | escapeForDotEnv)
|
|
1375
1376
|
DATABASE_URL=postgresql://$DB_USER:$DB_PASSWORD@localhost/$DB_NAME?host=/cloudsql/$CLOUD_SQL_INSTANCE_CONNECTION_NAME
|
|
1376
1377
|
DATABASE_JDBC_URL=jdbc:postgresql:///$DB_NAME?cloudSqlInstance=$CLOUD_SQL_INSTANCE_CONNECTION_NAME&socketFactory=com.google.cloud.sql.postgres.SocketFactory&user=$DB_USER&password=$DB_PASSWORD
|
|
1377
1378
|
CLOUD_RUN_JOB_TRIGGER_URL_migration=https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/jobs/pan-test-app-prod-api-migration:run
|
|
1378
1379
|
CLOUD_RUN_JOB_TRIGGER_URL_send_reminders=https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/jobs/pan-test-app-prod-api-send-reminders:run
|
|
1379
1380
|
DEPLOY_CLOUD_RUN_PROJECT_ID=google-project-id
|
|
1380
1381
|
DEPLOY_CLOUD_RUN_REGION=europe-west6
|
|
1381
|
-
GCLOUD_DEPLOY_credentialsKey=$CL_prod_api_GCLOUD_DEPLOY_credentialsKey
|
|
1382
|
-
GCLOUD_RUN_canonicalHostSuffix=$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix
|
|
1383
|
-
_ALL_ENV_VAR_KEYS=["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","
|
|
1382
|
+
GCLOUD_DEPLOY_credentialsKey=$(printf %s "$CL_prod_api_GCLOUD_DEPLOY_credentialsKey" | escapeForDotEnv)
|
|
1383
|
+
GCLOUD_RUN_canonicalHostSuffix=$(printf %s "$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | escapeForDotEnv)
|
|
1384
|
+
_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_SQL_INSTANCE_CONNECTION_NAME","DB_NAME","DB_USER","DB_PASSWORD","DATABASE_URL","DATABASE_JDBC_URL","CLOUD_RUN_JOB_TRIGGER_URL_migration","CLOUD_RUN_JOB_TRIGGER_URL_send_reminders","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]
|
|
1384
1385
|
EOF
|
|
1385
|
-
-
|
|
1386
|
+
- collapseable_section_end "write-dotenv-api"
|
|
1386
1387
|
- echo '{"id":"$(git describe --tags 2>/dev/null || git rev-parse HEAD)","time":"$CI_JOB_STARTED_AT"}' > api/__build_info.json
|
|
1387
|
-
-
|
|
1388
|
+
- collapseable_section_start "nodeinstall" "Ensure node version"
|
|
1388
1389
|
- if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
|
|
1389
1390
|
- if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
|
|
1390
|
-
-
|
|
1391
|
+
- collapseable_section_end "nodeinstall"
|
|
1391
1392
|
- cd api
|
|
1392
|
-
-
|
|
1393
|
+
- collapseable_section_start "nodeinstall" "Ensure node version"
|
|
1393
1394
|
- if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
|
|
1394
1395
|
- if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
|
|
1395
|
-
-
|
|
1396
|
-
-
|
|
1396
|
+
- collapseable_section_end "nodeinstall"
|
|
1397
|
+
- collapseable_section_start "yarninstall" "Yarn install"
|
|
1397
1398
|
- yarn install --immutable
|
|
1398
|
-
-
|
|
1399
|
+
- collapseable_section_end "yarninstall"
|
|
1399
1400
|
- yarn build
|
|
1400
1401
|
cache:
|
|
1401
1402
|
- key: api-yarn
|
|
@@ -1406,10 +1407,6 @@ api 🧪 test:
|
|
|
1406
1407
|
policy: pull-push
|
|
1407
1408
|
paths:
|
|
1408
1409
|
- api/node_modules
|
|
1409
|
-
- key: api-next-cache
|
|
1410
|
-
policy: pull-push
|
|
1411
|
-
paths:
|
|
1412
|
-
- api/.next/cache
|
|
1413
1410
|
artifacts:
|
|
1414
1411
|
paths:
|
|
1415
1412
|
- api/__build_info.json
|
|
@@ -1442,7 +1439,7 @@ api 🧪 test:
|
|
|
1442
1439
|
KUBERNETES_MEMORY_REQUEST: 1Gi
|
|
1443
1440
|
KUBERNETES_MEMORY_LIMIT: 2Gi
|
|
1444
1441
|
script:
|
|
1445
|
-
-
|
|
1442
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
1446
1443
|
- export APP_DIR="api"
|
|
1447
1444
|
- export DOCKER_BUILD_CONTEXT="."
|
|
1448
1445
|
- export DOCKER_REGISTRY="europe-west6-docker.pkg.dev"
|
|
@@ -1458,20 +1455,20 @@ api 🧪 test:
|
|
|
1458
1455
|
COPY --chown=node:node api/yarn.lock /app/api/yarn.lock
|
|
1459
1456
|
COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
|
|
1460
1457
|
COPY --chown=node:node .yarn /app/.yarn"
|
|
1461
|
-
-
|
|
1458
|
+
- collapseable_section_end "injectvars"
|
|
1462
1459
|
- ensureNodeDockerfile
|
|
1463
|
-
-
|
|
1460
|
+
- collapseable_section_start "docker-login" "Docker Login"
|
|
1464
1461
|
- gcloud auth activate-service-account --key-file=<(echo "$CL_prod_api_GCLOUD_DEPLOY_credentialsKey")
|
|
1465
1462
|
- gcloud auth configure-docker europe-west6-docker.pkg.dev
|
|
1466
|
-
-
|
|
1467
|
-
-
|
|
1463
|
+
- collapseable_section_end "docker-login"
|
|
1464
|
+
- collapseable_section_start "docker-build" "Docker build"
|
|
1468
1465
|
- 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
|
|
1469
|
-
-
|
|
1470
|
-
-
|
|
1466
|
+
- collapseable_section_end "docker-build"
|
|
1467
|
+
- collapseable_section_start "docker-push" "Docker push and tag"
|
|
1471
1468
|
- docker push $DOCKER_IMAGE:$DOCKER_IMAGE_TAG
|
|
1472
1469
|
- docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG $DOCKER_CACHE_IMAGE
|
|
1473
1470
|
- docker push $DOCKER_CACHE_IMAGE
|
|
1474
|
-
-
|
|
1471
|
+
- collapseable_section_end "docker-push"
|
|
1475
1472
|
cache:
|
|
1476
1473
|
- key: api-yarn
|
|
1477
1474
|
policy: pull
|
|
@@ -1488,8 +1485,8 @@ api 🧪 test:
|
|
|
1488
1485
|
image: aquasec/trivy:0.38.3
|
|
1489
1486
|
variables: {}
|
|
1490
1487
|
script:
|
|
1491
|
-
-
|
|
1492
|
-
-
|
|
1488
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
1489
|
+
- collapseable_section_end "injectvars"
|
|
1493
1490
|
- trivy fs --quiet --format cyclonedx --output "__sbom.json" api
|
|
1494
1491
|
artifacts:
|
|
1495
1492
|
paths:
|
|
@@ -1508,17 +1505,16 @@ api 🧪 test:
|
|
|
1508
1505
|
KUBERNETES_MEMORY_REQUEST: 200Mi
|
|
1509
1506
|
KUBERNETES_MEMORY_LIMIT: 400Mi
|
|
1510
1507
|
script:
|
|
1511
|
-
-
|
|
1508
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
1512
1509
|
- export ENV_SHORT="prod"
|
|
1513
1510
|
- export APP_DIR="api"
|
|
1514
1511
|
- export ENV_TYPE="prod"
|
|
1515
1512
|
- export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
|
|
1516
1513
|
- export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
|
|
1517
1514
|
- 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")"
|
|
1518
|
-
- export
|
|
1515
|
+
- export HOSTNAME="$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
1519
1516
|
- export ROOT_URL="https://$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
1520
|
-
- export
|
|
1521
|
-
- export HOST_CANONICAL="$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
1517
|
+
- export HOSTNAME_INTERNAL="$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
1522
1518
|
- export ROOT_URL_INTERNAL="https://$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
1523
1519
|
- export CLOUD_SQL_INSTANCE_CONNECTION_NAME="projectId:region:instancename"
|
|
1524
1520
|
- export DB_NAME="pan-test-app-prod-api"
|
|
@@ -1532,19 +1528,19 @@ api 🧪 test:
|
|
|
1532
1528
|
- export DEPLOY_CLOUD_RUN_REGION="europe-west6"
|
|
1533
1529
|
- export GCLOUD_DEPLOY_credentialsKey="$CL_prod_api_GCLOUD_DEPLOY_credentialsKey"
|
|
1534
1530
|
- export GCLOUD_RUN_canonicalHostSuffix="$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix"
|
|
1535
|
-
- export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"
|
|
1531
|
+
- 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_SQL_INSTANCE_CONNECTION_NAME\\",\\"DB_NAME\\",\\"DB_USER\\",\\"DB_PASSWORD\\",\\"DATABASE_URL\\",\\"DATABASE_JDBC_URL\\",\\"CLOUD_RUN_JOB_TRIGGER_URL_migration\\",\\"CLOUD_RUN_JOB_TRIGGER_URL_send_reminders\\",\\"DEPLOY_CLOUD_RUN_PROJECT_ID\\",\\"DEPLOY_CLOUD_RUN_REGION\\",\\"GCLOUD_DEPLOY_credentialsKey\\",\\"GCLOUD_RUN_canonicalHostSuffix\\"]"
|
|
1536
1532
|
- export DOCKER_REGISTRY="europe-west6-docker.pkg.dev"
|
|
1537
1533
|
- export DOCKER_IMAGE="europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/prod/api"
|
|
1538
1534
|
- export DOCKER_CACHE_IMAGE="europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/api"
|
|
1539
1535
|
- export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"
|
|
1540
1536
|
- export CLOUDSDK_CORE_DISABLE_PROMPTS="1"
|
|
1541
|
-
-
|
|
1542
|
-
-
|
|
1537
|
+
- collapseable_section_end "injectvars"
|
|
1538
|
+
- collapseable_section_start "prepare" "Prepare..."
|
|
1543
1539
|
- gcloud auth activate-service-account --key-file=<(echo "$CL_prod_api_GCLOUD_DEPLOY_credentialsKey")
|
|
1544
1540
|
- export GCLOUD_PROJECT_NUMBER=$(gcloud projects describe google-project-id --format="value(projectNumber)")
|
|
1545
1541
|
- 'echo "GCLOUD_PROJECT_NUMBER: $GCLOUD_PROJECT_NUMBER"'
|
|
1546
|
-
-
|
|
1547
|
-
-
|
|
1542
|
+
- collapseable_section_end "prepare"
|
|
1543
|
+
- collapseable_section_start "writeenvvars" "Write env vars to file"
|
|
1548
1544
|
- |
|
|
1549
1545
|
cat > ____envvars.yaml <<EOF
|
|
1550
1546
|
ENV_SHORT: |-
|
|
@@ -1554,21 +1550,19 @@ api 🧪 test:
|
|
|
1554
1550
|
ENV_TYPE: |-
|
|
1555
1551
|
prod
|
|
1556
1552
|
BUILD_INFO_BUILD_ID: |-
|
|
1557
|
-
|
|
1553
|
+
$(printf %s "$(git describe --tags 2>/dev/null || git rev-parse HEAD)" | sed '1!s/^/ /')
|
|
1558
1554
|
BUILD_INFO_BUILD_TIME: |-
|
|
1559
|
-
|
|
1555
|
+
$(printf %s "$CI_JOB_STARTED_AT" | sed '1!s/^/ /')
|
|
1560
1556
|
BUILD_INFO_CURRENT_VERSION: |-
|
|
1561
|
-
|
|
1562
|
-
|
|
1563
|
-
|
|
1557
|
+
$(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/^/ /')
|
|
1558
|
+
HOSTNAME: |-
|
|
1559
|
+
$(printf %s "$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
|
|
1564
1560
|
ROOT_URL: |-
|
|
1565
|
-
|
|
1566
|
-
|
|
1567
|
-
|
|
1568
|
-
HOST_CANONICAL: |-
|
|
1569
|
-
$(printf %s "$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
|
|
1561
|
+
$(printf %s "https://$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
|
|
1562
|
+
HOSTNAME_INTERNAL: |-
|
|
1563
|
+
$(printf %s "$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
|
|
1570
1564
|
ROOT_URL_INTERNAL: |-
|
|
1571
|
-
|
|
1565
|
+
$(printf %s "https://$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
|
|
1572
1566
|
CLOUD_SQL_INSTANCE_CONNECTION_NAME: |-
|
|
1573
1567
|
projectId:region:instancename
|
|
1574
1568
|
DB_NAME: |-
|
|
@@ -1576,7 +1570,7 @@ api 🧪 test:
|
|
|
1576
1570
|
DB_USER: |-
|
|
1577
1571
|
my-user
|
|
1578
1572
|
DB_PASSWORD: |-
|
|
1579
|
-
|
|
1573
|
+
$(printf %s "$CL_prod_api_DB_PASSWORD" | sed '1!s/^/ /')
|
|
1580
1574
|
DATABASE_URL: |-
|
|
1581
1575
|
postgresql://$DB_USER:$DB_PASSWORD@localhost/$DB_NAME?host=/cloudsql/$CLOUD_SQL_INSTANCE_CONNECTION_NAME
|
|
1582
1576
|
DATABASE_JDBC_URL: |-
|
|
@@ -1590,13 +1584,13 @@ api 🧪 test:
|
|
|
1590
1584
|
DEPLOY_CLOUD_RUN_REGION: |-
|
|
1591
1585
|
europe-west6
|
|
1592
1586
|
GCLOUD_RUN_canonicalHostSuffix: |-
|
|
1593
|
-
|
|
1587
|
+
$(printf %s "$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | sed '1!s/^/ /')
|
|
1594
1588
|
_ALL_ENV_VAR_KEYS: |-
|
|
1595
|
-
["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","
|
|
1589
|
+
["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_SQL_INSTANCE_CONNECTION_NAME","DB_NAME","DB_USER","DB_PASSWORD","DATABASE_URL","DATABASE_JDBC_URL","CLOUD_RUN_JOB_TRIGGER_URL_migration","CLOUD_RUN_JOB_TRIGGER_URL_send_reminders","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]
|
|
1596
1590
|
|
|
1597
1591
|
EOF
|
|
1598
|
-
-
|
|
1599
|
-
-
|
|
1592
|
+
- collapseable_section_end "writeenvvars"
|
|
1593
|
+
- collapseable_section_start "deploy" "Deploy to cloud run"
|
|
1600
1594
|
- set +e
|
|
1601
1595
|
- echo "ensuring Database..."
|
|
1602
1596
|
- gcloud sql databases create pan-test-app-prod-api --instance=instancename --project projectId
|
|
@@ -1631,12 +1625,12 @@ api 🧪 test:
|
|
|
1631
1625
|
fi
|
|
1632
1626
|
- 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 --set-cloudsql-instances=projectId:region:instancename --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=5 --cpu-throttling --allow-unauthenticated --ingress=all --cpu-boost
|
|
1633
1627
|
- gcloud run jobs execute pan-test-app-prod-api-migration --project=google-project-id --region=europe-west6
|
|
1634
|
-
-
|
|
1635
|
-
-
|
|
1628
|
+
- collapseable_section_end "deploy"
|
|
1629
|
+
- collapseable_section_start "cleanup" "Cleanup"
|
|
1636
1630
|
- 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
|
|
1637
1631
|
- 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
|
|
1638
1632
|
- 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
|
|
1639
|
-
-
|
|
1633
|
+
- collapseable_section_end "cleanup"
|
|
1640
1634
|
- echo 'Uploading SBOM to Dependency Track'
|
|
1641
1635
|
- /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
|
|
1642
1636
|
- 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
|
|
@@ -1669,9 +1663,9 @@ api 🧪 test:
|
|
|
1669
1663
|
KUBERNETES_MEMORY_LIMIT: 400Mi
|
|
1670
1664
|
GIT_STRATEGY: none
|
|
1671
1665
|
script:
|
|
1672
|
-
-
|
|
1666
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
1673
1667
|
- export CLOUDSDK_CORE_DISABLE_PROMPTS="1"
|
|
1674
|
-
-
|
|
1668
|
+
- collapseable_section_end "injectvars"
|
|
1675
1669
|
- set +e
|
|
1676
1670
|
- gcloud auth activate-service-account --key-file=<(echo "$CL_prod_api_GCLOUD_DEPLOY_credentialsKey")
|
|
1677
1671
|
- gcloud run services delete pan-test-app-prod-api --project=google-project-id --region=europe-west6
|