@catladder/pipeline 1.170.1 → 2.0.1
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/scripts/generate-examples-test.ts +0 -7
- 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"
|
|
@@ -183,21 +212,44 @@ api 🧪 test:
|
|
|
183
212
|
- export DEPLOY_CLOUD_RUN_REGION="europe-west6"
|
|
184
213
|
- export GCLOUD_DEPLOY_credentialsKey="$CL_dev_api_GCLOUD_DEPLOY_credentialsKey"
|
|
185
214
|
- export GCLOUD_RUN_canonicalHostSuffix="$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix"
|
|
186
|
-
- export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"
|
|
187
|
-
-
|
|
215
|
+
- 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\\",\\"DEPLOY_CLOUD_RUN_PROJECT_ID\\",\\"DEPLOY_CLOUD_RUN_REGION\\",\\"GCLOUD_DEPLOY_credentialsKey\\",\\"GCLOUD_RUN_canonicalHostSuffix\\"]"
|
|
216
|
+
- collapseable_section_end "injectvars"
|
|
217
|
+
- collapseable_section_start "write-dotenv-api" "write dot env for api"
|
|
218
|
+
- |-
|
|
219
|
+
cat <<EOF > api/.env
|
|
220
|
+
ENV_SHORT=dev
|
|
221
|
+
APP_DIR=api
|
|
222
|
+
ENV_TYPE=dev
|
|
223
|
+
HOSTNAME=$(printf %s "$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | escapeForDotEnv)
|
|
224
|
+
ROOT_URL=$(printf %s "https://$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | escapeForDotEnv)
|
|
225
|
+
HOSTNAME_INTERNAL=$(printf %s "$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | escapeForDotEnv)
|
|
226
|
+
ROOT_URL_INTERNAL=$(printf %s "https://$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | escapeForDotEnv)
|
|
227
|
+
CLOUD_SQL_INSTANCE_CONNECTION_NAME=projectId:region:instancename
|
|
228
|
+
DB_NAME=pan-test-app-dev-api
|
|
229
|
+
DB_USER=my-user
|
|
230
|
+
DB_PASSWORD=$(printf %s "$CL_dev_api_DB_PASSWORD" | escapeForDotEnv)
|
|
231
|
+
DATABASE_URL=postgresql://$DB_USER:$DB_PASSWORD@localhost/$DB_NAME?host=/cloudsql/$CLOUD_SQL_INSTANCE_CONNECTION_NAME
|
|
232
|
+
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
|
|
233
|
+
DEPLOY_CLOUD_RUN_PROJECT_ID=google-project-id
|
|
234
|
+
DEPLOY_CLOUD_RUN_REGION=europe-west6
|
|
235
|
+
GCLOUD_DEPLOY_credentialsKey=$(printf %s "$CL_dev_api_GCLOUD_DEPLOY_credentialsKey" | escapeForDotEnv)
|
|
236
|
+
GCLOUD_RUN_canonicalHostSuffix=$(printf %s "$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | escapeForDotEnv)
|
|
237
|
+
_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","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]
|
|
238
|
+
EOF
|
|
239
|
+
- collapseable_section_end "write-dotenv-api"
|
|
188
240
|
- echo '{"id":"$(git describe --tags 2>/dev/null || git rev-parse HEAD)","time":"$CI_JOB_STARTED_AT"}' > api/__build_info.json
|
|
189
|
-
-
|
|
241
|
+
- collapseable_section_start "nodeinstall" "Ensure node version"
|
|
190
242
|
- if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
|
|
191
243
|
- if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
|
|
192
|
-
-
|
|
244
|
+
- collapseable_section_end "nodeinstall"
|
|
193
245
|
- cd api
|
|
194
|
-
-
|
|
246
|
+
- collapseable_section_start "nodeinstall" "Ensure node version"
|
|
195
247
|
- if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
|
|
196
248
|
- if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
|
|
197
|
-
-
|
|
198
|
-
-
|
|
249
|
+
- collapseable_section_end "nodeinstall"
|
|
250
|
+
- collapseable_section_start "yarninstall" "Yarn install"
|
|
199
251
|
- yarn install --immutable
|
|
200
|
-
-
|
|
252
|
+
- collapseable_section_end "yarninstall"
|
|
201
253
|
- yarn build
|
|
202
254
|
cache:
|
|
203
255
|
- key: api-yarn
|
|
@@ -208,15 +260,13 @@ api 🧪 test:
|
|
|
208
260
|
policy: pull-push
|
|
209
261
|
paths:
|
|
210
262
|
- api/node_modules
|
|
211
|
-
- key: api-next-cache
|
|
212
|
-
policy: pull-push
|
|
213
|
-
paths:
|
|
214
|
-
- api/.next/cache
|
|
215
263
|
artifacts:
|
|
216
264
|
paths:
|
|
217
265
|
- api/__build_info.json
|
|
218
266
|
- api/.next
|
|
219
267
|
- api/dist
|
|
268
|
+
exclude:
|
|
269
|
+
- api/.env
|
|
220
270
|
expire_in: 1 day
|
|
221
271
|
when: always
|
|
222
272
|
reports: {}
|
|
@@ -244,7 +294,7 @@ api 🧪 test:
|
|
|
244
294
|
KUBERNETES_MEMORY_REQUEST: 1Gi
|
|
245
295
|
KUBERNETES_MEMORY_LIMIT: 2Gi
|
|
246
296
|
script:
|
|
247
|
-
-
|
|
297
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
248
298
|
- export APP_DIR="api"
|
|
249
299
|
- export DOCKER_BUILD_CONTEXT="."
|
|
250
300
|
- export DOCKER_REGISTRY="europe-west6-docker.pkg.dev"
|
|
@@ -260,20 +310,20 @@ api 🧪 test:
|
|
|
260
310
|
COPY --chown=node:node api/yarn.lock /app/api/yarn.lock
|
|
261
311
|
COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
|
|
262
312
|
COPY --chown=node:node .yarn /app/.yarn"
|
|
263
|
-
-
|
|
313
|
+
- collapseable_section_end "injectvars"
|
|
264
314
|
- ensureNodeDockerfile
|
|
265
|
-
-
|
|
315
|
+
- collapseable_section_start "docker-login" "Docker Login"
|
|
266
316
|
- gcloud auth activate-service-account --key-file=<(echo "$CL_dev_api_GCLOUD_DEPLOY_credentialsKey")
|
|
267
317
|
- gcloud auth configure-docker europe-west6-docker.pkg.dev
|
|
268
|
-
-
|
|
269
|
-
-
|
|
318
|
+
- collapseable_section_end "docker-login"
|
|
319
|
+
- collapseable_section_start "docker-build" "Docker build"
|
|
270
320
|
- 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
|
|
271
|
-
-
|
|
272
|
-
-
|
|
321
|
+
- collapseable_section_end "docker-build"
|
|
322
|
+
- collapseable_section_start "docker-push" "Docker push and tag"
|
|
273
323
|
- docker push $DOCKER_IMAGE:$DOCKER_IMAGE_TAG
|
|
274
324
|
- docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG $DOCKER_CACHE_IMAGE
|
|
275
325
|
- docker push $DOCKER_CACHE_IMAGE
|
|
276
|
-
-
|
|
326
|
+
- collapseable_section_end "docker-push"
|
|
277
327
|
cache:
|
|
278
328
|
- key: api-yarn
|
|
279
329
|
policy: pull
|
|
@@ -292,8 +342,8 @@ api 🧪 test:
|
|
|
292
342
|
image: aquasec/trivy:0.38.3
|
|
293
343
|
variables: {}
|
|
294
344
|
script:
|
|
295
|
-
-
|
|
296
|
-
-
|
|
345
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
346
|
+
- collapseable_section_end "injectvars"
|
|
297
347
|
- trivy fs --quiet --format cyclonedx --output "__sbom.json" api
|
|
298
348
|
artifacts:
|
|
299
349
|
paths:
|
|
@@ -314,17 +364,16 @@ api 🧪 test:
|
|
|
314
364
|
KUBERNETES_MEMORY_REQUEST: 200Mi
|
|
315
365
|
KUBERNETES_MEMORY_LIMIT: 400Mi
|
|
316
366
|
script:
|
|
317
|
-
-
|
|
367
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
318
368
|
- export ENV_SHORT="dev"
|
|
319
369
|
- export APP_DIR="api"
|
|
320
370
|
- export ENV_TYPE="dev"
|
|
321
371
|
- export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
|
|
322
372
|
- export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
|
|
323
373
|
- 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")"
|
|
324
|
-
- export
|
|
374
|
+
- export HOSTNAME="$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
325
375
|
- export ROOT_URL="https://$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
326
|
-
- export
|
|
327
|
-
- export HOST_CANONICAL="$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
376
|
+
- export HOSTNAME_INTERNAL="$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
328
377
|
- export ROOT_URL_INTERNAL="https://$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
329
378
|
- export CLOUD_SQL_INSTANCE_CONNECTION_NAME="projectId:region:instancename"
|
|
330
379
|
- export DB_NAME="pan-test-app-dev-api"
|
|
@@ -336,19 +385,19 @@ api 🧪 test:
|
|
|
336
385
|
- export DEPLOY_CLOUD_RUN_REGION="europe-west6"
|
|
337
386
|
- export GCLOUD_DEPLOY_credentialsKey="$CL_dev_api_GCLOUD_DEPLOY_credentialsKey"
|
|
338
387
|
- export GCLOUD_RUN_canonicalHostSuffix="$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix"
|
|
339
|
-
- export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"
|
|
388
|
+
- 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\\",\\"DEPLOY_CLOUD_RUN_PROJECT_ID\\",\\"DEPLOY_CLOUD_RUN_REGION\\",\\"GCLOUD_DEPLOY_credentialsKey\\",\\"GCLOUD_RUN_canonicalHostSuffix\\"]"
|
|
340
389
|
- export DOCKER_REGISTRY="europe-west6-docker.pkg.dev"
|
|
341
390
|
- export DOCKER_IMAGE="europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/dev/api"
|
|
342
391
|
- export DOCKER_CACHE_IMAGE="europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/api"
|
|
343
392
|
- export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"
|
|
344
393
|
- export CLOUDSDK_CORE_DISABLE_PROMPTS="1"
|
|
345
|
-
-
|
|
346
|
-
-
|
|
394
|
+
- collapseable_section_end "injectvars"
|
|
395
|
+
- collapseable_section_start "prepare" "Prepare..."
|
|
347
396
|
- gcloud auth activate-service-account --key-file=<(echo "$CL_dev_api_GCLOUD_DEPLOY_credentialsKey")
|
|
348
397
|
- export GCLOUD_PROJECT_NUMBER=$(gcloud projects describe google-project-id --format="value(projectNumber)")
|
|
349
398
|
- 'echo "GCLOUD_PROJECT_NUMBER: $GCLOUD_PROJECT_NUMBER"'
|
|
350
|
-
-
|
|
351
|
-
-
|
|
399
|
+
- collapseable_section_end "prepare"
|
|
400
|
+
- collapseable_section_start "writeenvvars" "Write env vars to file"
|
|
352
401
|
- |
|
|
353
402
|
cat > ____envvars.yaml <<EOF
|
|
354
403
|
ENV_SHORT: |-
|
|
@@ -358,21 +407,19 @@ api 🧪 test:
|
|
|
358
407
|
ENV_TYPE: |-
|
|
359
408
|
dev
|
|
360
409
|
BUILD_INFO_BUILD_ID: |-
|
|
361
|
-
|
|
410
|
+
$(printf %s "$(git describe --tags 2>/dev/null || git rev-parse HEAD)" | sed '1!s/^/ /')
|
|
362
411
|
BUILD_INFO_BUILD_TIME: |-
|
|
363
|
-
|
|
412
|
+
$(printf %s "$CI_JOB_STARTED_AT" | sed '1!s/^/ /')
|
|
364
413
|
BUILD_INFO_CURRENT_VERSION: |-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
414
|
+
$(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/^/ /')
|
|
415
|
+
HOSTNAME: |-
|
|
416
|
+
$(printf %s "$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
|
|
368
417
|
ROOT_URL: |-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
HOST_CANONICAL: |-
|
|
373
|
-
$(printf %s "$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
|
|
418
|
+
$(printf %s "https://$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
|
|
419
|
+
HOSTNAME_INTERNAL: |-
|
|
420
|
+
$(printf %s "$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
|
|
374
421
|
ROOT_URL_INTERNAL: |-
|
|
375
|
-
|
|
422
|
+
$(printf %s "https://$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
|
|
376
423
|
CLOUD_SQL_INSTANCE_CONNECTION_NAME: |-
|
|
377
424
|
projectId:region:instancename
|
|
378
425
|
DB_NAME: |-
|
|
@@ -380,7 +427,7 @@ api 🧪 test:
|
|
|
380
427
|
DB_USER: |-
|
|
381
428
|
my-user
|
|
382
429
|
DB_PASSWORD: |-
|
|
383
|
-
|
|
430
|
+
$(printf %s "$CL_dev_api_DB_PASSWORD" | sed '1!s/^/ /')
|
|
384
431
|
DATABASE_URL: |-
|
|
385
432
|
postgresql://$DB_USER:$DB_PASSWORD@localhost/$DB_NAME?host=/cloudsql/$CLOUD_SQL_INSTANCE_CONNECTION_NAME
|
|
386
433
|
DATABASE_JDBC_URL: |-
|
|
@@ -390,24 +437,24 @@ api 🧪 test:
|
|
|
390
437
|
DEPLOY_CLOUD_RUN_REGION: |-
|
|
391
438
|
europe-west6
|
|
392
439
|
GCLOUD_RUN_canonicalHostSuffix: |-
|
|
393
|
-
|
|
440
|
+
$(printf %s "$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | sed '1!s/^/ /')
|
|
394
441
|
_ALL_ENV_VAR_KEYS: |-
|
|
395
|
-
["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","
|
|
442
|
+
["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","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]
|
|
396
443
|
|
|
397
444
|
EOF
|
|
398
|
-
-
|
|
399
|
-
-
|
|
445
|
+
- collapseable_section_end "writeenvvars"
|
|
446
|
+
- collapseable_section_start "deploy" "Deploy to cloud run"
|
|
400
447
|
- set +e
|
|
401
448
|
- echo "ensuring Database..."
|
|
402
449
|
- gcloud sql databases create pan-test-app-dev-api --instance=instancename --project projectId
|
|
403
450
|
- set -e
|
|
404
451
|
- 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=100 --cpu-throttling --allow-unauthenticated --ingress=all --cpu-boost
|
|
405
|
-
-
|
|
406
|
-
-
|
|
452
|
+
- collapseable_section_end "deploy"
|
|
453
|
+
- collapseable_section_start "cleanup" "Cleanup"
|
|
407
454
|
- 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
|
|
408
455
|
- 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
|
|
409
456
|
- 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
|
|
410
|
-
-
|
|
457
|
+
- collapseable_section_end "cleanup"
|
|
411
458
|
- echo 'Uploading SBOM to Dependency Track'
|
|
412
459
|
- /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
|
|
413
460
|
- 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
|
|
@@ -449,9 +496,9 @@ api 🧪 test:
|
|
|
449
496
|
KUBERNETES_MEMORY_LIMIT: 400Mi
|
|
450
497
|
GIT_STRATEGY: none
|
|
451
498
|
script:
|
|
452
|
-
-
|
|
499
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
453
500
|
- export CLOUDSDK_CORE_DISABLE_PROMPTS="1"
|
|
454
|
-
-
|
|
501
|
+
- collapseable_section_end "injectvars"
|
|
455
502
|
- set +e
|
|
456
503
|
- gcloud auth activate-service-account --key-file=<(echo "$CL_dev_api_GCLOUD_DEPLOY_credentialsKey")
|
|
457
504
|
- gcloud run services delete pan-test-app-dev-api --project=google-project-id --region=europe-west6
|
|
@@ -487,17 +534,16 @@ api 🧪 test:
|
|
|
487
534
|
KUBERNETES_MEMORY_REQUEST: 1Gi
|
|
488
535
|
KUBERNETES_MEMORY_LIMIT: 4Gi
|
|
489
536
|
script:
|
|
490
|
-
-
|
|
537
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
491
538
|
- export ENV_SHORT="review"
|
|
492
539
|
- export APP_DIR="api"
|
|
493
540
|
- export ENV_TYPE="review"
|
|
494
541
|
- export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
|
|
495
542
|
- export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
|
|
496
543
|
- 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")"
|
|
497
|
-
- export
|
|
544
|
+
- 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)}')"
|
|
498
545
|
- 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)}')"
|
|
499
|
-
- export
|
|
500
|
-
- 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)}')"
|
|
546
|
+
- 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)}')"
|
|
501
547
|
- 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)}')"
|
|
502
548
|
- export CLOUD_SQL_INSTANCE_CONNECTION_NAME="projectId:region:instancename"
|
|
503
549
|
- 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"
|
|
@@ -509,21 +555,44 @@ api 🧪 test:
|
|
|
509
555
|
- export DEPLOY_CLOUD_RUN_REGION="europe-west6"
|
|
510
556
|
- export GCLOUD_DEPLOY_credentialsKey="$CL_review_api_GCLOUD_DEPLOY_credentialsKey"
|
|
511
557
|
- export GCLOUD_RUN_canonicalHostSuffix="$CL_review_api_GCLOUD_RUN_canonicalHostSuffix"
|
|
512
|
-
- export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"
|
|
513
|
-
-
|
|
558
|
+
- 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\\",\\"DEPLOY_CLOUD_RUN_PROJECT_ID\\",\\"DEPLOY_CLOUD_RUN_REGION\\",\\"GCLOUD_DEPLOY_credentialsKey\\",\\"GCLOUD_RUN_canonicalHostSuffix\\"]"
|
|
559
|
+
- collapseable_section_end "injectvars"
|
|
560
|
+
- collapseable_section_start "write-dotenv-api" "write dot env for api"
|
|
561
|
+
- |-
|
|
562
|
+
cat <<EOF > api/.env
|
|
563
|
+
ENV_SHORT=review
|
|
564
|
+
APP_DIR=api
|
|
565
|
+
ENV_TYPE=review
|
|
566
|
+
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)
|
|
567
|
+
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)
|
|
568
|
+
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)
|
|
569
|
+
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)
|
|
570
|
+
CLOUD_SQL_INSTANCE_CONNECTION_NAME=projectId:region:instancename
|
|
571
|
+
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)
|
|
572
|
+
DB_USER=my-user
|
|
573
|
+
DB_PASSWORD=$(printf %s "$CL_review_api_DB_PASSWORD" | escapeForDotEnv)
|
|
574
|
+
DATABASE_URL=postgresql://$DB_USER:$DB_PASSWORD@localhost/$DB_NAME?host=/cloudsql/$CLOUD_SQL_INSTANCE_CONNECTION_NAME
|
|
575
|
+
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
|
|
576
|
+
DEPLOY_CLOUD_RUN_PROJECT_ID=google-project-id
|
|
577
|
+
DEPLOY_CLOUD_RUN_REGION=europe-west6
|
|
578
|
+
GCLOUD_DEPLOY_credentialsKey=$(printf %s "$CL_review_api_GCLOUD_DEPLOY_credentialsKey" | escapeForDotEnv)
|
|
579
|
+
GCLOUD_RUN_canonicalHostSuffix=$(printf %s "$CL_review_api_GCLOUD_RUN_canonicalHostSuffix" | escapeForDotEnv)
|
|
580
|
+
_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","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]
|
|
581
|
+
EOF
|
|
582
|
+
- collapseable_section_end "write-dotenv-api"
|
|
514
583
|
- echo '{"id":"$(git describe --tags 2>/dev/null || git rev-parse HEAD)","time":"$CI_JOB_STARTED_AT"}' > api/__build_info.json
|
|
515
|
-
-
|
|
584
|
+
- collapseable_section_start "nodeinstall" "Ensure node version"
|
|
516
585
|
- if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
|
|
517
586
|
- if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
|
|
518
|
-
-
|
|
587
|
+
- collapseable_section_end "nodeinstall"
|
|
519
588
|
- cd api
|
|
520
|
-
-
|
|
589
|
+
- collapseable_section_start "nodeinstall" "Ensure node version"
|
|
521
590
|
- if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
|
|
522
591
|
- if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
|
|
523
|
-
-
|
|
524
|
-
-
|
|
592
|
+
- collapseable_section_end "nodeinstall"
|
|
593
|
+
- collapseable_section_start "yarninstall" "Yarn install"
|
|
525
594
|
- yarn install --immutable
|
|
526
|
-
-
|
|
595
|
+
- collapseable_section_end "yarninstall"
|
|
527
596
|
- yarn build
|
|
528
597
|
cache:
|
|
529
598
|
- key: api-yarn
|
|
@@ -534,15 +603,13 @@ api 🧪 test:
|
|
|
534
603
|
policy: pull-push
|
|
535
604
|
paths:
|
|
536
605
|
- api/node_modules
|
|
537
|
-
- key: api-next-cache
|
|
538
|
-
policy: pull-push
|
|
539
|
-
paths:
|
|
540
|
-
- api/.next/cache
|
|
541
606
|
artifacts:
|
|
542
607
|
paths:
|
|
543
608
|
- api/__build_info.json
|
|
544
609
|
- api/.next
|
|
545
610
|
- api/dist
|
|
611
|
+
exclude:
|
|
612
|
+
- api/.env
|
|
546
613
|
expire_in: 1 day
|
|
547
614
|
when: always
|
|
548
615
|
reports: {}
|
|
@@ -568,7 +635,7 @@ api 🧪 test:
|
|
|
568
635
|
KUBERNETES_MEMORY_REQUEST: 1Gi
|
|
569
636
|
KUBERNETES_MEMORY_LIMIT: 2Gi
|
|
570
637
|
script:
|
|
571
|
-
-
|
|
638
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
572
639
|
- export APP_DIR="api"
|
|
573
640
|
- export DOCKER_BUILD_CONTEXT="."
|
|
574
641
|
- export DOCKER_REGISTRY="europe-west6-docker.pkg.dev"
|
|
@@ -584,20 +651,20 @@ api 🧪 test:
|
|
|
584
651
|
COPY --chown=node:node api/yarn.lock /app/api/yarn.lock
|
|
585
652
|
COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
|
|
586
653
|
COPY --chown=node:node .yarn /app/.yarn"
|
|
587
|
-
-
|
|
654
|
+
- collapseable_section_end "injectvars"
|
|
588
655
|
- ensureNodeDockerfile
|
|
589
|
-
-
|
|
656
|
+
- collapseable_section_start "docker-login" "Docker Login"
|
|
590
657
|
- gcloud auth activate-service-account --key-file=<(echo "$CL_review_api_GCLOUD_DEPLOY_credentialsKey")
|
|
591
658
|
- gcloud auth configure-docker europe-west6-docker.pkg.dev
|
|
592
|
-
-
|
|
593
|
-
-
|
|
659
|
+
- collapseable_section_end "docker-login"
|
|
660
|
+
- collapseable_section_start "docker-build" "Docker build"
|
|
594
661
|
- 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
|
|
595
|
-
-
|
|
596
|
-
-
|
|
662
|
+
- collapseable_section_end "docker-build"
|
|
663
|
+
- collapseable_section_start "docker-push" "Docker push and tag"
|
|
597
664
|
- docker push $DOCKER_IMAGE:$DOCKER_IMAGE_TAG
|
|
598
665
|
- docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG $DOCKER_CACHE_IMAGE
|
|
599
666
|
- docker push $DOCKER_CACHE_IMAGE
|
|
600
|
-
-
|
|
667
|
+
- collapseable_section_end "docker-push"
|
|
601
668
|
cache:
|
|
602
669
|
- key: api-yarn
|
|
603
670
|
policy: pull
|
|
@@ -614,8 +681,8 @@ api 🧪 test:
|
|
|
614
681
|
image: aquasec/trivy:0.38.3
|
|
615
682
|
variables: {}
|
|
616
683
|
script:
|
|
617
|
-
-
|
|
618
|
-
-
|
|
684
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
685
|
+
- collapseable_section_end "injectvars"
|
|
619
686
|
- trivy fs --quiet --format cyclonedx --output "__sbom.json" api
|
|
620
687
|
artifacts:
|
|
621
688
|
paths:
|
|
@@ -634,17 +701,16 @@ api 🧪 test:
|
|
|
634
701
|
KUBERNETES_MEMORY_REQUEST: 200Mi
|
|
635
702
|
KUBERNETES_MEMORY_LIMIT: 400Mi
|
|
636
703
|
script:
|
|
637
|
-
-
|
|
704
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
638
705
|
- export ENV_SHORT="review"
|
|
639
706
|
- export APP_DIR="api"
|
|
640
707
|
- export ENV_TYPE="review"
|
|
641
708
|
- export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
|
|
642
709
|
- export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
|
|
643
710
|
- 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")"
|
|
644
|
-
- export
|
|
711
|
+
- 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)}')"
|
|
645
712
|
- 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)}')"
|
|
646
|
-
- export
|
|
647
|
-
- 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)}')"
|
|
713
|
+
- 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)}')"
|
|
648
714
|
- 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)}')"
|
|
649
715
|
- export CLOUD_SQL_INSTANCE_CONNECTION_NAME="projectId:region:instancename"
|
|
650
716
|
- 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"
|
|
@@ -656,19 +722,19 @@ api 🧪 test:
|
|
|
656
722
|
- export DEPLOY_CLOUD_RUN_REGION="europe-west6"
|
|
657
723
|
- export GCLOUD_DEPLOY_credentialsKey="$CL_review_api_GCLOUD_DEPLOY_credentialsKey"
|
|
658
724
|
- export GCLOUD_RUN_canonicalHostSuffix="$CL_review_api_GCLOUD_RUN_canonicalHostSuffix"
|
|
659
|
-
- export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"
|
|
725
|
+
- 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\\",\\"DEPLOY_CLOUD_RUN_PROJECT_ID\\",\\"DEPLOY_CLOUD_RUN_REGION\\",\\"GCLOUD_DEPLOY_credentialsKey\\",\\"GCLOUD_RUN_canonicalHostSuffix\\"]"
|
|
660
726
|
- export DOCKER_REGISTRY="europe-west6-docker.pkg.dev"
|
|
661
727
|
- 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"; })"
|
|
662
728
|
- export DOCKER_CACHE_IMAGE="europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/api"
|
|
663
729
|
- export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"
|
|
664
730
|
- export CLOUDSDK_CORE_DISABLE_PROMPTS="1"
|
|
665
|
-
-
|
|
666
|
-
-
|
|
731
|
+
- collapseable_section_end "injectvars"
|
|
732
|
+
- collapseable_section_start "prepare" "Prepare..."
|
|
667
733
|
- gcloud auth activate-service-account --key-file=<(echo "$CL_review_api_GCLOUD_DEPLOY_credentialsKey")
|
|
668
734
|
- export GCLOUD_PROJECT_NUMBER=$(gcloud projects describe google-project-id --format="value(projectNumber)")
|
|
669
735
|
- 'echo "GCLOUD_PROJECT_NUMBER: $GCLOUD_PROJECT_NUMBER"'
|
|
670
|
-
-
|
|
671
|
-
-
|
|
736
|
+
- collapseable_section_end "prepare"
|
|
737
|
+
- collapseable_section_start "writeenvvars" "Write env vars to file"
|
|
672
738
|
- |
|
|
673
739
|
cat > ____envvars.yaml <<EOF
|
|
674
740
|
ENV_SHORT: |-
|
|
@@ -678,29 +744,27 @@ api 🧪 test:
|
|
|
678
744
|
ENV_TYPE: |-
|
|
679
745
|
review
|
|
680
746
|
BUILD_INFO_BUILD_ID: |-
|
|
681
|
-
|
|
747
|
+
$(printf %s "$(git describe --tags 2>/dev/null || git rev-parse HEAD)" | sed '1!s/^/ /')
|
|
682
748
|
BUILD_INFO_BUILD_TIME: |-
|
|
683
|
-
|
|
749
|
+
$(printf %s "$CI_JOB_STARTED_AT" | sed '1!s/^/ /')
|
|
684
750
|
BUILD_INFO_CURRENT_VERSION: |-
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
751
|
+
$(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/^/ /')
|
|
752
|
+
HOSTNAME: |-
|
|
753
|
+
$(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/^/ /')
|
|
688
754
|
ROOT_URL: |-
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
HOST_CANONICAL: |-
|
|
693
|
-
$(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/^/ /')
|
|
755
|
+
$(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/^/ /')
|
|
756
|
+
HOSTNAME_INTERNAL: |-
|
|
757
|
+
$(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/^/ /')
|
|
694
758
|
ROOT_URL_INTERNAL: |-
|
|
695
|
-
|
|
759
|
+
$(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/^/ /')
|
|
696
760
|
CLOUD_SQL_INSTANCE_CONNECTION_NAME: |-
|
|
697
761
|
projectId:region:instancename
|
|
698
762
|
DB_NAME: |-
|
|
699
|
-
|
|
763
|
+
$(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/^/ /')
|
|
700
764
|
DB_USER: |-
|
|
701
765
|
my-user
|
|
702
766
|
DB_PASSWORD: |-
|
|
703
|
-
|
|
767
|
+
$(printf %s "$CL_review_api_DB_PASSWORD" | sed '1!s/^/ /')
|
|
704
768
|
DATABASE_URL: |-
|
|
705
769
|
postgresql://$DB_USER:$DB_PASSWORD@localhost/$DB_NAME?host=/cloudsql/$CLOUD_SQL_INSTANCE_CONNECTION_NAME
|
|
706
770
|
DATABASE_JDBC_URL: |-
|
|
@@ -710,27 +774,27 @@ api 🧪 test:
|
|
|
710
774
|
DEPLOY_CLOUD_RUN_REGION: |-
|
|
711
775
|
europe-west6
|
|
712
776
|
GCLOUD_RUN_canonicalHostSuffix: |-
|
|
713
|
-
|
|
777
|
+
$(printf %s "$CL_review_api_GCLOUD_RUN_canonicalHostSuffix" | sed '1!s/^/ /')
|
|
714
778
|
_ALL_ENV_VAR_KEYS: |-
|
|
715
|
-
["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","
|
|
779
|
+
["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","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]
|
|
716
780
|
|
|
717
781
|
EOF
|
|
718
|
-
-
|
|
719
|
-
-
|
|
782
|
+
- collapseable_section_end "writeenvvars"
|
|
783
|
+
- collapseable_section_start "deploy" "Deploy to cloud run"
|
|
720
784
|
- set +e
|
|
721
785
|
- echo "ensuring Database..."
|
|
722
786
|
- 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
|
|
723
787
|
- set -e
|
|
724
788
|
- 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=100 --cpu-throttling --allow-unauthenticated --ingress=all --cpu-boost
|
|
725
|
-
-
|
|
726
|
-
-
|
|
789
|
+
- collapseable_section_end "deploy"
|
|
790
|
+
- collapseable_section_start "cleanup" "Cleanup"
|
|
727
791
|
- 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
|
|
728
792
|
- 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
|
|
729
793
|
- 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
|
|
730
794
|
- set +e
|
|
731
795
|
- gcloud artifacts docker images delete europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/review/api --quiet --delete-tags
|
|
732
796
|
- set -e
|
|
733
|
-
-
|
|
797
|
+
- collapseable_section_end "cleanup"
|
|
734
798
|
- echo 'Uploading SBOM to Dependency Track'
|
|
735
799
|
- /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
|
|
736
800
|
- 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
|
|
@@ -770,9 +834,9 @@ api 🧪 test:
|
|
|
770
834
|
KUBERNETES_MEMORY_LIMIT: 400Mi
|
|
771
835
|
GIT_STRATEGY: none
|
|
772
836
|
script:
|
|
773
|
-
-
|
|
837
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
774
838
|
- export CLOUDSDK_CORE_DISABLE_PROMPTS="1"
|
|
775
|
-
-
|
|
839
|
+
- collapseable_section_end "injectvars"
|
|
776
840
|
- set +e
|
|
777
841
|
- gcloud auth activate-service-account --key-file=<(echo "$CL_review_api_GCLOUD_DEPLOY_credentialsKey")
|
|
778
842
|
- 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
|
|
@@ -812,17 +876,16 @@ api 🧪 test:
|
|
|
812
876
|
KUBERNETES_MEMORY_REQUEST: 1Gi
|
|
813
877
|
KUBERNETES_MEMORY_LIMIT: 4Gi
|
|
814
878
|
script:
|
|
815
|
-
-
|
|
879
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
816
880
|
- export ENV_SHORT="stage"
|
|
817
881
|
- export APP_DIR="api"
|
|
818
882
|
- export ENV_TYPE="stage"
|
|
819
883
|
- export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
|
|
820
884
|
- export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
|
|
821
885
|
- 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")"
|
|
822
|
-
- export
|
|
886
|
+
- export HOSTNAME="$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
823
887
|
- export ROOT_URL="https://$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
824
|
-
- export
|
|
825
|
-
- export HOST_CANONICAL="$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
888
|
+
- export HOSTNAME_INTERNAL="$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
826
889
|
- export ROOT_URL_INTERNAL="https://$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
827
890
|
- export CLOUD_SQL_INSTANCE_CONNECTION_NAME="projectId:region:instancename"
|
|
828
891
|
- export DB_NAME="pan-test-app-stage-api"
|
|
@@ -834,21 +897,44 @@ api 🧪 test:
|
|
|
834
897
|
- export DEPLOY_CLOUD_RUN_REGION="europe-west6"
|
|
835
898
|
- export GCLOUD_DEPLOY_credentialsKey="$CL_stage_api_GCLOUD_DEPLOY_credentialsKey"
|
|
836
899
|
- export GCLOUD_RUN_canonicalHostSuffix="$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix"
|
|
837
|
-
- export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"
|
|
838
|
-
-
|
|
900
|
+
- 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\\",\\"DEPLOY_CLOUD_RUN_PROJECT_ID\\",\\"DEPLOY_CLOUD_RUN_REGION\\",\\"GCLOUD_DEPLOY_credentialsKey\\",\\"GCLOUD_RUN_canonicalHostSuffix\\"]"
|
|
901
|
+
- collapseable_section_end "injectvars"
|
|
902
|
+
- collapseable_section_start "write-dotenv-api" "write dot env for api"
|
|
903
|
+
- |-
|
|
904
|
+
cat <<EOF > api/.env
|
|
905
|
+
ENV_SHORT=stage
|
|
906
|
+
APP_DIR=api
|
|
907
|
+
ENV_TYPE=stage
|
|
908
|
+
HOSTNAME=$(printf %s "$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | escapeForDotEnv)
|
|
909
|
+
ROOT_URL=$(printf %s "https://$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | escapeForDotEnv)
|
|
910
|
+
HOSTNAME_INTERNAL=$(printf %s "$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | escapeForDotEnv)
|
|
911
|
+
ROOT_URL_INTERNAL=$(printf %s "https://$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | escapeForDotEnv)
|
|
912
|
+
CLOUD_SQL_INSTANCE_CONNECTION_NAME=projectId:region:instancename
|
|
913
|
+
DB_NAME=pan-test-app-stage-api
|
|
914
|
+
DB_USER=my-user
|
|
915
|
+
DB_PASSWORD=$(printf %s "$CL_stage_api_DB_PASSWORD" | escapeForDotEnv)
|
|
916
|
+
DATABASE_URL=postgresql://$DB_USER:$DB_PASSWORD@localhost/$DB_NAME?host=/cloudsql/$CLOUD_SQL_INSTANCE_CONNECTION_NAME
|
|
917
|
+
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
|
|
918
|
+
DEPLOY_CLOUD_RUN_PROJECT_ID=google-project-id
|
|
919
|
+
DEPLOY_CLOUD_RUN_REGION=europe-west6
|
|
920
|
+
GCLOUD_DEPLOY_credentialsKey=$(printf %s "$CL_stage_api_GCLOUD_DEPLOY_credentialsKey" | escapeForDotEnv)
|
|
921
|
+
GCLOUD_RUN_canonicalHostSuffix=$(printf %s "$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | escapeForDotEnv)
|
|
922
|
+
_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","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]
|
|
923
|
+
EOF
|
|
924
|
+
- collapseable_section_end "write-dotenv-api"
|
|
839
925
|
- echo '{"id":"$(git describe --tags 2>/dev/null || git rev-parse HEAD)","time":"$CI_JOB_STARTED_AT"}' > api/__build_info.json
|
|
840
|
-
-
|
|
926
|
+
- collapseable_section_start "nodeinstall" "Ensure node version"
|
|
841
927
|
- if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
|
|
842
928
|
- if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
|
|
843
|
-
-
|
|
929
|
+
- collapseable_section_end "nodeinstall"
|
|
844
930
|
- cd api
|
|
845
|
-
-
|
|
931
|
+
- collapseable_section_start "nodeinstall" "Ensure node version"
|
|
846
932
|
- if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
|
|
847
933
|
- if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
|
|
848
|
-
-
|
|
849
|
-
-
|
|
934
|
+
- collapseable_section_end "nodeinstall"
|
|
935
|
+
- collapseable_section_start "yarninstall" "Yarn install"
|
|
850
936
|
- yarn install --immutable
|
|
851
|
-
-
|
|
937
|
+
- collapseable_section_end "yarninstall"
|
|
852
938
|
- yarn build
|
|
853
939
|
cache:
|
|
854
940
|
- key: api-yarn
|
|
@@ -859,15 +945,13 @@ api 🧪 test:
|
|
|
859
945
|
policy: pull-push
|
|
860
946
|
paths:
|
|
861
947
|
- api/node_modules
|
|
862
|
-
- key: api-next-cache
|
|
863
|
-
policy: pull-push
|
|
864
|
-
paths:
|
|
865
|
-
- api/.next/cache
|
|
866
948
|
artifacts:
|
|
867
949
|
paths:
|
|
868
950
|
- api/__build_info.json
|
|
869
951
|
- api/.next
|
|
870
952
|
- api/dist
|
|
953
|
+
exclude:
|
|
954
|
+
- api/.env
|
|
871
955
|
expire_in: 1 day
|
|
872
956
|
when: always
|
|
873
957
|
reports: {}
|
|
@@ -893,7 +977,7 @@ api 🧪 test:
|
|
|
893
977
|
KUBERNETES_MEMORY_REQUEST: 1Gi
|
|
894
978
|
KUBERNETES_MEMORY_LIMIT: 2Gi
|
|
895
979
|
script:
|
|
896
|
-
-
|
|
980
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
897
981
|
- export APP_DIR="api"
|
|
898
982
|
- export DOCKER_BUILD_CONTEXT="."
|
|
899
983
|
- export DOCKER_REGISTRY="europe-west6-docker.pkg.dev"
|
|
@@ -909,20 +993,20 @@ api 🧪 test:
|
|
|
909
993
|
COPY --chown=node:node api/yarn.lock /app/api/yarn.lock
|
|
910
994
|
COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
|
|
911
995
|
COPY --chown=node:node .yarn /app/.yarn"
|
|
912
|
-
-
|
|
996
|
+
- collapseable_section_end "injectvars"
|
|
913
997
|
- ensureNodeDockerfile
|
|
914
|
-
-
|
|
998
|
+
- collapseable_section_start "docker-login" "Docker Login"
|
|
915
999
|
- gcloud auth activate-service-account --key-file=<(echo "$CL_stage_api_GCLOUD_DEPLOY_credentialsKey")
|
|
916
1000
|
- gcloud auth configure-docker europe-west6-docker.pkg.dev
|
|
917
|
-
-
|
|
918
|
-
-
|
|
1001
|
+
- collapseable_section_end "docker-login"
|
|
1002
|
+
- collapseable_section_start "docker-build" "Docker build"
|
|
919
1003
|
- 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
|
|
920
|
-
-
|
|
921
|
-
-
|
|
1004
|
+
- collapseable_section_end "docker-build"
|
|
1005
|
+
- collapseable_section_start "docker-push" "Docker push and tag"
|
|
922
1006
|
- docker push $DOCKER_IMAGE:$DOCKER_IMAGE_TAG
|
|
923
1007
|
- docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG $DOCKER_CACHE_IMAGE
|
|
924
1008
|
- docker push $DOCKER_CACHE_IMAGE
|
|
925
|
-
-
|
|
1009
|
+
- collapseable_section_end "docker-push"
|
|
926
1010
|
cache:
|
|
927
1011
|
- key: api-yarn
|
|
928
1012
|
policy: pull
|
|
@@ -939,8 +1023,8 @@ api 🧪 test:
|
|
|
939
1023
|
image: aquasec/trivy:0.38.3
|
|
940
1024
|
variables: {}
|
|
941
1025
|
script:
|
|
942
|
-
-
|
|
943
|
-
-
|
|
1026
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
1027
|
+
- collapseable_section_end "injectvars"
|
|
944
1028
|
- trivy fs --quiet --format cyclonedx --output "__sbom.json" api
|
|
945
1029
|
artifacts:
|
|
946
1030
|
paths:
|
|
@@ -959,17 +1043,16 @@ api 🧪 test:
|
|
|
959
1043
|
KUBERNETES_MEMORY_REQUEST: 200Mi
|
|
960
1044
|
KUBERNETES_MEMORY_LIMIT: 400Mi
|
|
961
1045
|
script:
|
|
962
|
-
-
|
|
1046
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
963
1047
|
- export ENV_SHORT="stage"
|
|
964
1048
|
- export APP_DIR="api"
|
|
965
1049
|
- export ENV_TYPE="stage"
|
|
966
1050
|
- export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
|
|
967
1051
|
- export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
|
|
968
1052
|
- 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")"
|
|
969
|
-
- export
|
|
1053
|
+
- export HOSTNAME="$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
970
1054
|
- export ROOT_URL="https://$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
971
|
-
- export
|
|
972
|
-
- export HOST_CANONICAL="$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
1055
|
+
- export HOSTNAME_INTERNAL="$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
973
1056
|
- export ROOT_URL_INTERNAL="https://$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
974
1057
|
- export CLOUD_SQL_INSTANCE_CONNECTION_NAME="projectId:region:instancename"
|
|
975
1058
|
- export DB_NAME="pan-test-app-stage-api"
|
|
@@ -981,19 +1064,19 @@ api 🧪 test:
|
|
|
981
1064
|
- export DEPLOY_CLOUD_RUN_REGION="europe-west6"
|
|
982
1065
|
- export GCLOUD_DEPLOY_credentialsKey="$CL_stage_api_GCLOUD_DEPLOY_credentialsKey"
|
|
983
1066
|
- export GCLOUD_RUN_canonicalHostSuffix="$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix"
|
|
984
|
-
- export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"
|
|
1067
|
+
- 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\\",\\"DEPLOY_CLOUD_RUN_PROJECT_ID\\",\\"DEPLOY_CLOUD_RUN_REGION\\",\\"GCLOUD_DEPLOY_credentialsKey\\",\\"GCLOUD_RUN_canonicalHostSuffix\\"]"
|
|
985
1068
|
- export DOCKER_REGISTRY="europe-west6-docker.pkg.dev"
|
|
986
1069
|
- export DOCKER_IMAGE="europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/stage/api"
|
|
987
1070
|
- export DOCKER_CACHE_IMAGE="europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/api"
|
|
988
1071
|
- export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"
|
|
989
1072
|
- export CLOUDSDK_CORE_DISABLE_PROMPTS="1"
|
|
990
|
-
-
|
|
991
|
-
-
|
|
1073
|
+
- collapseable_section_end "injectvars"
|
|
1074
|
+
- collapseable_section_start "prepare" "Prepare..."
|
|
992
1075
|
- gcloud auth activate-service-account --key-file=<(echo "$CL_stage_api_GCLOUD_DEPLOY_credentialsKey")
|
|
993
1076
|
- export GCLOUD_PROJECT_NUMBER=$(gcloud projects describe google-project-id --format="value(projectNumber)")
|
|
994
1077
|
- 'echo "GCLOUD_PROJECT_NUMBER: $GCLOUD_PROJECT_NUMBER"'
|
|
995
|
-
-
|
|
996
|
-
-
|
|
1078
|
+
- collapseable_section_end "prepare"
|
|
1079
|
+
- collapseable_section_start "writeenvvars" "Write env vars to file"
|
|
997
1080
|
- |
|
|
998
1081
|
cat > ____envvars.yaml <<EOF
|
|
999
1082
|
ENV_SHORT: |-
|
|
@@ -1003,21 +1086,19 @@ api 🧪 test:
|
|
|
1003
1086
|
ENV_TYPE: |-
|
|
1004
1087
|
stage
|
|
1005
1088
|
BUILD_INFO_BUILD_ID: |-
|
|
1006
|
-
|
|
1089
|
+
$(printf %s "$(git describe --tags 2>/dev/null || git rev-parse HEAD)" | sed '1!s/^/ /')
|
|
1007
1090
|
BUILD_INFO_BUILD_TIME: |-
|
|
1008
|
-
|
|
1091
|
+
$(printf %s "$CI_JOB_STARTED_AT" | sed '1!s/^/ /')
|
|
1009
1092
|
BUILD_INFO_CURRENT_VERSION: |-
|
|
1010
|
-
|
|
1011
|
-
|
|
1012
|
-
|
|
1093
|
+
$(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/^/ /')
|
|
1094
|
+
HOSTNAME: |-
|
|
1095
|
+
$(printf %s "$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
|
|
1013
1096
|
ROOT_URL: |-
|
|
1014
|
-
|
|
1015
|
-
|
|
1016
|
-
|
|
1017
|
-
HOST_CANONICAL: |-
|
|
1018
|
-
$(printf %s "$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
|
|
1097
|
+
$(printf %s "https://$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
|
|
1098
|
+
HOSTNAME_INTERNAL: |-
|
|
1099
|
+
$(printf %s "$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
|
|
1019
1100
|
ROOT_URL_INTERNAL: |-
|
|
1020
|
-
|
|
1101
|
+
$(printf %s "https://$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
|
|
1021
1102
|
CLOUD_SQL_INSTANCE_CONNECTION_NAME: |-
|
|
1022
1103
|
projectId:region:instancename
|
|
1023
1104
|
DB_NAME: |-
|
|
@@ -1025,7 +1106,7 @@ api 🧪 test:
|
|
|
1025
1106
|
DB_USER: |-
|
|
1026
1107
|
my-user
|
|
1027
1108
|
DB_PASSWORD: |-
|
|
1028
|
-
|
|
1109
|
+
$(printf %s "$CL_stage_api_DB_PASSWORD" | sed '1!s/^/ /')
|
|
1029
1110
|
DATABASE_URL: |-
|
|
1030
1111
|
postgresql://$DB_USER:$DB_PASSWORD@localhost/$DB_NAME?host=/cloudsql/$CLOUD_SQL_INSTANCE_CONNECTION_NAME
|
|
1031
1112
|
DATABASE_JDBC_URL: |-
|
|
@@ -1035,24 +1116,24 @@ api 🧪 test:
|
|
|
1035
1116
|
DEPLOY_CLOUD_RUN_REGION: |-
|
|
1036
1117
|
europe-west6
|
|
1037
1118
|
GCLOUD_RUN_canonicalHostSuffix: |-
|
|
1038
|
-
|
|
1119
|
+
$(printf %s "$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | sed '1!s/^/ /')
|
|
1039
1120
|
_ALL_ENV_VAR_KEYS: |-
|
|
1040
|
-
["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","
|
|
1121
|
+
["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","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]
|
|
1041
1122
|
|
|
1042
1123
|
EOF
|
|
1043
|
-
-
|
|
1044
|
-
-
|
|
1124
|
+
- collapseable_section_end "writeenvvars"
|
|
1125
|
+
- collapseable_section_start "deploy" "Deploy to cloud run"
|
|
1045
1126
|
- set +e
|
|
1046
1127
|
- echo "ensuring Database..."
|
|
1047
1128
|
- gcloud sql databases create pan-test-app-stage-api --instance=instancename --project projectId
|
|
1048
1129
|
- set -e
|
|
1049
1130
|
- 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=100 --cpu-throttling --allow-unauthenticated --ingress=all --cpu-boost
|
|
1050
|
-
-
|
|
1051
|
-
-
|
|
1131
|
+
- collapseable_section_end "deploy"
|
|
1132
|
+
- collapseable_section_start "cleanup" "Cleanup"
|
|
1052
1133
|
- 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
|
|
1053
1134
|
- 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
|
|
1054
1135
|
- 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
|
|
1055
|
-
-
|
|
1136
|
+
- collapseable_section_end "cleanup"
|
|
1056
1137
|
- echo 'Uploading SBOM to Dependency Track'
|
|
1057
1138
|
- /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
|
|
1058
1139
|
- 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
|
|
@@ -1085,9 +1166,9 @@ api 🧪 test:
|
|
|
1085
1166
|
KUBERNETES_MEMORY_LIMIT: 400Mi
|
|
1086
1167
|
GIT_STRATEGY: none
|
|
1087
1168
|
script:
|
|
1088
|
-
-
|
|
1169
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
1089
1170
|
- export CLOUDSDK_CORE_DISABLE_PROMPTS="1"
|
|
1090
|
-
-
|
|
1171
|
+
- collapseable_section_end "injectvars"
|
|
1091
1172
|
- set +e
|
|
1092
1173
|
- gcloud auth activate-service-account --key-file=<(echo "$CL_stage_api_GCLOUD_DEPLOY_credentialsKey")
|
|
1093
1174
|
- gcloud run services delete pan-test-app-stage-api --project=google-project-id --region=europe-west6
|
|
@@ -1121,17 +1202,16 @@ api 🧪 test:
|
|
|
1121
1202
|
KUBERNETES_MEMORY_REQUEST: 1Gi
|
|
1122
1203
|
KUBERNETES_MEMORY_LIMIT: 4Gi
|
|
1123
1204
|
script:
|
|
1124
|
-
-
|
|
1205
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
1125
1206
|
- export ENV_SHORT="prod"
|
|
1126
1207
|
- export APP_DIR="api"
|
|
1127
1208
|
- export ENV_TYPE="prod"
|
|
1128
1209
|
- export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
|
|
1129
1210
|
- export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
|
|
1130
1211
|
- 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")"
|
|
1131
|
-
- export
|
|
1212
|
+
- export HOSTNAME="$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
1132
1213
|
- export ROOT_URL="https://$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
1133
|
-
- export
|
|
1134
|
-
- export HOST_CANONICAL="$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
1214
|
+
- export HOSTNAME_INTERNAL="$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
1135
1215
|
- export ROOT_URL_INTERNAL="https://$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
1136
1216
|
- export CLOUD_SQL_INSTANCE_CONNECTION_NAME="projectId:region:instancename"
|
|
1137
1217
|
- export DB_NAME="pan-test-app-prod-api"
|
|
@@ -1143,21 +1223,44 @@ api 🧪 test:
|
|
|
1143
1223
|
- export DEPLOY_CLOUD_RUN_REGION="europe-west6"
|
|
1144
1224
|
- export GCLOUD_DEPLOY_credentialsKey="$CL_prod_api_GCLOUD_DEPLOY_credentialsKey"
|
|
1145
1225
|
- export GCLOUD_RUN_canonicalHostSuffix="$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix"
|
|
1146
|
-
- export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"
|
|
1147
|
-
-
|
|
1226
|
+
- 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\\",\\"DEPLOY_CLOUD_RUN_PROJECT_ID\\",\\"DEPLOY_CLOUD_RUN_REGION\\",\\"GCLOUD_DEPLOY_credentialsKey\\",\\"GCLOUD_RUN_canonicalHostSuffix\\"]"
|
|
1227
|
+
- collapseable_section_end "injectvars"
|
|
1228
|
+
- collapseable_section_start "write-dotenv-api" "write dot env for api"
|
|
1229
|
+
- |-
|
|
1230
|
+
cat <<EOF > api/.env
|
|
1231
|
+
ENV_SHORT=prod
|
|
1232
|
+
APP_DIR=api
|
|
1233
|
+
ENV_TYPE=prod
|
|
1234
|
+
HOSTNAME=$(printf %s "$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | escapeForDotEnv)
|
|
1235
|
+
ROOT_URL=$(printf %s "https://$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | escapeForDotEnv)
|
|
1236
|
+
HOSTNAME_INTERNAL=$(printf %s "$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | escapeForDotEnv)
|
|
1237
|
+
ROOT_URL_INTERNAL=$(printf %s "https://$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | escapeForDotEnv)
|
|
1238
|
+
CLOUD_SQL_INSTANCE_CONNECTION_NAME=projectId:region:instancename
|
|
1239
|
+
DB_NAME=pan-test-app-prod-api
|
|
1240
|
+
DB_USER=my-user
|
|
1241
|
+
DB_PASSWORD=$(printf %s "$CL_prod_api_DB_PASSWORD" | escapeForDotEnv)
|
|
1242
|
+
DATABASE_URL=postgresql://$DB_USER:$DB_PASSWORD@localhost/$DB_NAME?host=/cloudsql/$CLOUD_SQL_INSTANCE_CONNECTION_NAME
|
|
1243
|
+
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
|
|
1244
|
+
DEPLOY_CLOUD_RUN_PROJECT_ID=google-project-id
|
|
1245
|
+
DEPLOY_CLOUD_RUN_REGION=europe-west6
|
|
1246
|
+
GCLOUD_DEPLOY_credentialsKey=$(printf %s "$CL_prod_api_GCLOUD_DEPLOY_credentialsKey" | escapeForDotEnv)
|
|
1247
|
+
GCLOUD_RUN_canonicalHostSuffix=$(printf %s "$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | escapeForDotEnv)
|
|
1248
|
+
_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","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]
|
|
1249
|
+
EOF
|
|
1250
|
+
- collapseable_section_end "write-dotenv-api"
|
|
1148
1251
|
- echo '{"id":"$(git describe --tags 2>/dev/null || git rev-parse HEAD)","time":"$CI_JOB_STARTED_AT"}' > api/__build_info.json
|
|
1149
|
-
-
|
|
1252
|
+
- collapseable_section_start "nodeinstall" "Ensure node version"
|
|
1150
1253
|
- if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
|
|
1151
1254
|
- if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
|
|
1152
|
-
-
|
|
1255
|
+
- collapseable_section_end "nodeinstall"
|
|
1153
1256
|
- cd api
|
|
1154
|
-
-
|
|
1257
|
+
- collapseable_section_start "nodeinstall" "Ensure node version"
|
|
1155
1258
|
- if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
|
|
1156
1259
|
- if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
|
|
1157
|
-
-
|
|
1158
|
-
-
|
|
1260
|
+
- collapseable_section_end "nodeinstall"
|
|
1261
|
+
- collapseable_section_start "yarninstall" "Yarn install"
|
|
1159
1262
|
- yarn install --immutable
|
|
1160
|
-
-
|
|
1263
|
+
- collapseable_section_end "yarninstall"
|
|
1161
1264
|
- yarn build
|
|
1162
1265
|
cache:
|
|
1163
1266
|
- key: api-yarn
|
|
@@ -1168,15 +1271,13 @@ api 🧪 test:
|
|
|
1168
1271
|
policy: pull-push
|
|
1169
1272
|
paths:
|
|
1170
1273
|
- api/node_modules
|
|
1171
|
-
- key: api-next-cache
|
|
1172
|
-
policy: pull-push
|
|
1173
|
-
paths:
|
|
1174
|
-
- api/.next/cache
|
|
1175
1274
|
artifacts:
|
|
1176
1275
|
paths:
|
|
1177
1276
|
- api/__build_info.json
|
|
1178
1277
|
- api/.next
|
|
1179
1278
|
- api/dist
|
|
1279
|
+
exclude:
|
|
1280
|
+
- api/.env
|
|
1180
1281
|
expire_in: 1 day
|
|
1181
1282
|
when: always
|
|
1182
1283
|
reports: {}
|
|
@@ -1202,7 +1303,7 @@ api 🧪 test:
|
|
|
1202
1303
|
KUBERNETES_MEMORY_REQUEST: 1Gi
|
|
1203
1304
|
KUBERNETES_MEMORY_LIMIT: 2Gi
|
|
1204
1305
|
script:
|
|
1205
|
-
-
|
|
1306
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
1206
1307
|
- export APP_DIR="api"
|
|
1207
1308
|
- export DOCKER_BUILD_CONTEXT="."
|
|
1208
1309
|
- export DOCKER_REGISTRY="europe-west6-docker.pkg.dev"
|
|
@@ -1218,20 +1319,20 @@ api 🧪 test:
|
|
|
1218
1319
|
COPY --chown=node:node api/yarn.lock /app/api/yarn.lock
|
|
1219
1320
|
COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
|
|
1220
1321
|
COPY --chown=node:node .yarn /app/.yarn"
|
|
1221
|
-
-
|
|
1322
|
+
- collapseable_section_end "injectvars"
|
|
1222
1323
|
- ensureNodeDockerfile
|
|
1223
|
-
-
|
|
1324
|
+
- collapseable_section_start "docker-login" "Docker Login"
|
|
1224
1325
|
- gcloud auth activate-service-account --key-file=<(echo "$CL_prod_api_GCLOUD_DEPLOY_credentialsKey")
|
|
1225
1326
|
- gcloud auth configure-docker europe-west6-docker.pkg.dev
|
|
1226
|
-
-
|
|
1227
|
-
-
|
|
1327
|
+
- collapseable_section_end "docker-login"
|
|
1328
|
+
- collapseable_section_start "docker-build" "Docker build"
|
|
1228
1329
|
- 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
|
|
1229
|
-
-
|
|
1230
|
-
-
|
|
1330
|
+
- collapseable_section_end "docker-build"
|
|
1331
|
+
- collapseable_section_start "docker-push" "Docker push and tag"
|
|
1231
1332
|
- docker push $DOCKER_IMAGE:$DOCKER_IMAGE_TAG
|
|
1232
1333
|
- docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG $DOCKER_CACHE_IMAGE
|
|
1233
1334
|
- docker push $DOCKER_CACHE_IMAGE
|
|
1234
|
-
-
|
|
1335
|
+
- collapseable_section_end "docker-push"
|
|
1235
1336
|
cache:
|
|
1236
1337
|
- key: api-yarn
|
|
1237
1338
|
policy: pull
|
|
@@ -1248,8 +1349,8 @@ api 🧪 test:
|
|
|
1248
1349
|
image: aquasec/trivy:0.38.3
|
|
1249
1350
|
variables: {}
|
|
1250
1351
|
script:
|
|
1251
|
-
-
|
|
1252
|
-
-
|
|
1352
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
1353
|
+
- collapseable_section_end "injectvars"
|
|
1253
1354
|
- trivy fs --quiet --format cyclonedx --output "__sbom.json" api
|
|
1254
1355
|
artifacts:
|
|
1255
1356
|
paths:
|
|
@@ -1268,17 +1369,16 @@ api 🧪 test:
|
|
|
1268
1369
|
KUBERNETES_MEMORY_REQUEST: 200Mi
|
|
1269
1370
|
KUBERNETES_MEMORY_LIMIT: 400Mi
|
|
1270
1371
|
script:
|
|
1271
|
-
-
|
|
1372
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
1272
1373
|
- export ENV_SHORT="prod"
|
|
1273
1374
|
- export APP_DIR="api"
|
|
1274
1375
|
- export ENV_TYPE="prod"
|
|
1275
1376
|
- export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
|
|
1276
1377
|
- export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
|
|
1277
1378
|
- 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")"
|
|
1278
|
-
- export
|
|
1379
|
+
- export HOSTNAME="$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
1279
1380
|
- export ROOT_URL="https://$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
1280
|
-
- export
|
|
1281
|
-
- export HOST_CANONICAL="$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
1381
|
+
- export HOSTNAME_INTERNAL="$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
1282
1382
|
- export ROOT_URL_INTERNAL="https://$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
1283
1383
|
- export CLOUD_SQL_INSTANCE_CONNECTION_NAME="projectId:region:instancename"
|
|
1284
1384
|
- export DB_NAME="pan-test-app-prod-api"
|
|
@@ -1290,19 +1390,19 @@ api 🧪 test:
|
|
|
1290
1390
|
- export DEPLOY_CLOUD_RUN_REGION="europe-west6"
|
|
1291
1391
|
- export GCLOUD_DEPLOY_credentialsKey="$CL_prod_api_GCLOUD_DEPLOY_credentialsKey"
|
|
1292
1392
|
- export GCLOUD_RUN_canonicalHostSuffix="$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix"
|
|
1293
|
-
- export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"
|
|
1393
|
+
- 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\\",\\"DEPLOY_CLOUD_RUN_PROJECT_ID\\",\\"DEPLOY_CLOUD_RUN_REGION\\",\\"GCLOUD_DEPLOY_credentialsKey\\",\\"GCLOUD_RUN_canonicalHostSuffix\\"]"
|
|
1294
1394
|
- export DOCKER_REGISTRY="europe-west6-docker.pkg.dev"
|
|
1295
1395
|
- export DOCKER_IMAGE="europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/prod/api"
|
|
1296
1396
|
- export DOCKER_CACHE_IMAGE="europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/api"
|
|
1297
1397
|
- export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"
|
|
1298
1398
|
- export CLOUDSDK_CORE_DISABLE_PROMPTS="1"
|
|
1299
|
-
-
|
|
1300
|
-
-
|
|
1399
|
+
- collapseable_section_end "injectvars"
|
|
1400
|
+
- collapseable_section_start "prepare" "Prepare..."
|
|
1301
1401
|
- gcloud auth activate-service-account --key-file=<(echo "$CL_prod_api_GCLOUD_DEPLOY_credentialsKey")
|
|
1302
1402
|
- export GCLOUD_PROJECT_NUMBER=$(gcloud projects describe google-project-id --format="value(projectNumber)")
|
|
1303
1403
|
- 'echo "GCLOUD_PROJECT_NUMBER: $GCLOUD_PROJECT_NUMBER"'
|
|
1304
|
-
-
|
|
1305
|
-
-
|
|
1404
|
+
- collapseable_section_end "prepare"
|
|
1405
|
+
- collapseable_section_start "writeenvvars" "Write env vars to file"
|
|
1306
1406
|
- |
|
|
1307
1407
|
cat > ____envvars.yaml <<EOF
|
|
1308
1408
|
ENV_SHORT: |-
|
|
@@ -1312,21 +1412,19 @@ api 🧪 test:
|
|
|
1312
1412
|
ENV_TYPE: |-
|
|
1313
1413
|
prod
|
|
1314
1414
|
BUILD_INFO_BUILD_ID: |-
|
|
1315
|
-
|
|
1415
|
+
$(printf %s "$(git describe --tags 2>/dev/null || git rev-parse HEAD)" | sed '1!s/^/ /')
|
|
1316
1416
|
BUILD_INFO_BUILD_TIME: |-
|
|
1317
|
-
|
|
1417
|
+
$(printf %s "$CI_JOB_STARTED_AT" | sed '1!s/^/ /')
|
|
1318
1418
|
BUILD_INFO_CURRENT_VERSION: |-
|
|
1319
|
-
|
|
1320
|
-
|
|
1321
|
-
|
|
1419
|
+
$(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/^/ /')
|
|
1420
|
+
HOSTNAME: |-
|
|
1421
|
+
$(printf %s "$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
|
|
1322
1422
|
ROOT_URL: |-
|
|
1323
|
-
|
|
1324
|
-
|
|
1325
|
-
|
|
1326
|
-
HOST_CANONICAL: |-
|
|
1327
|
-
$(printf %s "$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
|
|
1423
|
+
$(printf %s "https://$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
|
|
1424
|
+
HOSTNAME_INTERNAL: |-
|
|
1425
|
+
$(printf %s "$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
|
|
1328
1426
|
ROOT_URL_INTERNAL: |-
|
|
1329
|
-
|
|
1427
|
+
$(printf %s "https://$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
|
|
1330
1428
|
CLOUD_SQL_INSTANCE_CONNECTION_NAME: |-
|
|
1331
1429
|
projectId:region:instancename
|
|
1332
1430
|
DB_NAME: |-
|
|
@@ -1334,7 +1432,7 @@ api 🧪 test:
|
|
|
1334
1432
|
DB_USER: |-
|
|
1335
1433
|
my-user
|
|
1336
1434
|
DB_PASSWORD: |-
|
|
1337
|
-
|
|
1435
|
+
$(printf %s "$CL_prod_api_DB_PASSWORD" | sed '1!s/^/ /')
|
|
1338
1436
|
DATABASE_URL: |-
|
|
1339
1437
|
postgresql://$DB_USER:$DB_PASSWORD@localhost/$DB_NAME?host=/cloudsql/$CLOUD_SQL_INSTANCE_CONNECTION_NAME
|
|
1340
1438
|
DATABASE_JDBC_URL: |-
|
|
@@ -1344,24 +1442,24 @@ api 🧪 test:
|
|
|
1344
1442
|
DEPLOY_CLOUD_RUN_REGION: |-
|
|
1345
1443
|
europe-west6
|
|
1346
1444
|
GCLOUD_RUN_canonicalHostSuffix: |-
|
|
1347
|
-
|
|
1445
|
+
$(printf %s "$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | sed '1!s/^/ /')
|
|
1348
1446
|
_ALL_ENV_VAR_KEYS: |-
|
|
1349
|
-
["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","
|
|
1447
|
+
["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","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]
|
|
1350
1448
|
|
|
1351
1449
|
EOF
|
|
1352
|
-
-
|
|
1353
|
-
-
|
|
1450
|
+
- collapseable_section_end "writeenvvars"
|
|
1451
|
+
- collapseable_section_start "deploy" "Deploy to cloud run"
|
|
1354
1452
|
- set +e
|
|
1355
1453
|
- echo "ensuring Database..."
|
|
1356
1454
|
- gcloud sql databases create pan-test-app-prod-api --instance=instancename --project projectId
|
|
1357
1455
|
- set -e
|
|
1358
1456
|
- 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=100 --cpu-throttling --allow-unauthenticated --ingress=all --cpu-boost
|
|
1359
|
-
-
|
|
1360
|
-
-
|
|
1457
|
+
- collapseable_section_end "deploy"
|
|
1458
|
+
- collapseable_section_start "cleanup" "Cleanup"
|
|
1361
1459
|
- 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
|
|
1362
1460
|
- 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
|
|
1363
1461
|
- 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
|
|
1364
|
-
-
|
|
1462
|
+
- collapseable_section_end "cleanup"
|
|
1365
1463
|
- echo 'Uploading SBOM to Dependency Track'
|
|
1366
1464
|
- /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
|
|
1367
1465
|
- 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
|
|
@@ -1394,9 +1492,9 @@ api 🧪 test:
|
|
|
1394
1492
|
KUBERNETES_MEMORY_LIMIT: 400Mi
|
|
1395
1493
|
GIT_STRATEGY: none
|
|
1396
1494
|
script:
|
|
1397
|
-
-
|
|
1495
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
1398
1496
|
- export CLOUDSDK_CORE_DISABLE_PROMPTS="1"
|
|
1399
|
-
-
|
|
1497
|
+
- collapseable_section_end "injectvars"
|
|
1400
1498
|
- set +e
|
|
1401
1499
|
- gcloud auth activate-service-account --key-file=<(echo "$CL_prod_api_GCLOUD_DEPLOY_credentialsKey")
|
|
1402
1500
|
- gcloud run services delete pan-test-app-prod-api --project=google-project-id --region=europe-west6
|
|
@@ -1430,9 +1528,9 @@ worker 🛡 audit:
|
|
|
1430
1528
|
KUBERNETES_MEMORY_REQUEST: 1Gi
|
|
1431
1529
|
KUBERNETES_MEMORY_LIMIT: 4Gi
|
|
1432
1530
|
script:
|
|
1433
|
-
-
|
|
1531
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
1434
1532
|
- export APP_PATH="api"
|
|
1435
|
-
-
|
|
1533
|
+
- collapseable_section_end "injectvars"
|
|
1436
1534
|
- cd api
|
|
1437
1535
|
- yarn npm audit --environment production
|
|
1438
1536
|
rules:
|
|
@@ -1452,21 +1550,21 @@ worker 👮 lint:
|
|
|
1452
1550
|
KUBERNETES_MEMORY_REQUEST: 1Gi
|
|
1453
1551
|
KUBERNETES_MEMORY_LIMIT: 4Gi
|
|
1454
1552
|
script:
|
|
1455
|
-
-
|
|
1553
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
1456
1554
|
- export APP_PATH="api"
|
|
1457
|
-
-
|
|
1458
|
-
-
|
|
1555
|
+
- collapseable_section_end "injectvars"
|
|
1556
|
+
- collapseable_section_start "nodeinstall" "Ensure node version"
|
|
1459
1557
|
- if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
|
|
1460
1558
|
- if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
|
|
1461
|
-
-
|
|
1559
|
+
- collapseable_section_end "nodeinstall"
|
|
1462
1560
|
- cd api
|
|
1463
|
-
-
|
|
1561
|
+
- collapseable_section_start "nodeinstall" "Ensure node version"
|
|
1464
1562
|
- if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
|
|
1465
1563
|
- if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
|
|
1466
|
-
-
|
|
1467
|
-
-
|
|
1564
|
+
- collapseable_section_end "nodeinstall"
|
|
1565
|
+
- collapseable_section_start "yarninstall" "Yarn install"
|
|
1468
1566
|
- yarn install --immutable
|
|
1469
|
-
-
|
|
1567
|
+
- collapseable_section_end "yarninstall"
|
|
1470
1568
|
- yarn lint
|
|
1471
1569
|
cache:
|
|
1472
1570
|
- key: api-yarn
|
|
@@ -1493,21 +1591,21 @@ worker 🧪 test:
|
|
|
1493
1591
|
KUBERNETES_MEMORY_REQUEST: 1Gi
|
|
1494
1592
|
KUBERNETES_MEMORY_LIMIT: 4Gi
|
|
1495
1593
|
script:
|
|
1496
|
-
-
|
|
1594
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
1497
1595
|
- export APP_PATH="api"
|
|
1498
|
-
-
|
|
1499
|
-
-
|
|
1596
|
+
- collapseable_section_end "injectvars"
|
|
1597
|
+
- collapseable_section_start "nodeinstall" "Ensure node version"
|
|
1500
1598
|
- if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
|
|
1501
1599
|
- if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
|
|
1502
|
-
-
|
|
1600
|
+
- collapseable_section_end "nodeinstall"
|
|
1503
1601
|
- cd api
|
|
1504
|
-
-
|
|
1602
|
+
- collapseable_section_start "nodeinstall" "Ensure node version"
|
|
1505
1603
|
- if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
|
|
1506
1604
|
- if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
|
|
1507
|
-
-
|
|
1508
|
-
-
|
|
1605
|
+
- collapseable_section_end "nodeinstall"
|
|
1606
|
+
- collapseable_section_start "yarninstall" "Yarn install"
|
|
1509
1607
|
- yarn install --immutable
|
|
1510
|
-
-
|
|
1608
|
+
- collapseable_section_end "yarninstall"
|
|
1511
1609
|
- yarn test
|
|
1512
1610
|
cache:
|
|
1513
1611
|
- key: api-yarn
|
|
@@ -1534,17 +1632,16 @@ worker 🧪 test:
|
|
|
1534
1632
|
KUBERNETES_MEMORY_REQUEST: 1Gi
|
|
1535
1633
|
KUBERNETES_MEMORY_LIMIT: 4Gi
|
|
1536
1634
|
script:
|
|
1537
|
-
-
|
|
1635
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
1538
1636
|
- export ENV_SHORT="dev"
|
|
1539
1637
|
- export APP_DIR="api"
|
|
1540
1638
|
- export ENV_TYPE="dev"
|
|
1541
1639
|
- export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
|
|
1542
1640
|
- export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
|
|
1543
1641
|
- 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")"
|
|
1544
|
-
- export
|
|
1642
|
+
- export HOSTNAME="$(printf %s "pan-test-app-dev-worker-$CL_dev_worker_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
1545
1643
|
- export ROOT_URL="https://$(printf %s "pan-test-app-dev-worker-$CL_dev_worker_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
1546
|
-
- export
|
|
1547
|
-
- export HOST_CANONICAL="$(printf %s "pan-test-app-dev-worker-$CL_dev_worker_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
1644
|
+
- export HOSTNAME_INTERNAL="$(printf %s "pan-test-app-dev-worker-$CL_dev_worker_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
1548
1645
|
- export ROOT_URL_INTERNAL="https://$(printf %s "pan-test-app-dev-worker-$CL_dev_worker_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
1549
1646
|
- export CLOUD_SQL_INSTANCE_CONNECTION_NAME="projectId:region:instancename"
|
|
1550
1647
|
- export DB_NAME="pan-test-app-dev-api"
|
|
@@ -1556,21 +1653,44 @@ worker 🧪 test:
|
|
|
1556
1653
|
- export DEPLOY_CLOUD_RUN_REGION="europe-west6"
|
|
1557
1654
|
- export GCLOUD_DEPLOY_credentialsKey="$CL_dev_worker_GCLOUD_DEPLOY_credentialsKey"
|
|
1558
1655
|
- export GCLOUD_RUN_canonicalHostSuffix="$CL_dev_worker_GCLOUD_RUN_canonicalHostSuffix"
|
|
1559
|
-
- export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"
|
|
1560
|
-
-
|
|
1656
|
+
- 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\\",\\"DEPLOY_CLOUD_RUN_PROJECT_ID\\",\\"DEPLOY_CLOUD_RUN_REGION\\",\\"GCLOUD_DEPLOY_credentialsKey\\",\\"GCLOUD_RUN_canonicalHostSuffix\\"]"
|
|
1657
|
+
- collapseable_section_end "injectvars"
|
|
1658
|
+
- collapseable_section_start "write-dotenv-worker" "write dot env for worker"
|
|
1659
|
+
- |-
|
|
1660
|
+
cat <<EOF > api/.env
|
|
1661
|
+
ENV_SHORT=dev
|
|
1662
|
+
APP_DIR=api
|
|
1663
|
+
ENV_TYPE=dev
|
|
1664
|
+
HOSTNAME=$(printf %s "$(printf %s "pan-test-app-dev-worker-$CL_dev_worker_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | escapeForDotEnv)
|
|
1665
|
+
ROOT_URL=$(printf %s "https://$(printf %s "pan-test-app-dev-worker-$CL_dev_worker_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | escapeForDotEnv)
|
|
1666
|
+
HOSTNAME_INTERNAL=$(printf %s "$(printf %s "pan-test-app-dev-worker-$CL_dev_worker_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | escapeForDotEnv)
|
|
1667
|
+
ROOT_URL_INTERNAL=$(printf %s "https://$(printf %s "pan-test-app-dev-worker-$CL_dev_worker_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | escapeForDotEnv)
|
|
1668
|
+
CLOUD_SQL_INSTANCE_CONNECTION_NAME=projectId:region:instancename
|
|
1669
|
+
DB_NAME=pan-test-app-dev-api
|
|
1670
|
+
DB_USER=my-user
|
|
1671
|
+
DB_PASSWORD=$(printf %s "$CL_dev_api_DB_PASSWORD" | escapeForDotEnv)
|
|
1672
|
+
DATABASE_URL=postgresql://$DB_USER:$DB_PASSWORD@localhost/$DB_NAME?host=/cloudsql/$CLOUD_SQL_INSTANCE_CONNECTION_NAME
|
|
1673
|
+
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
|
|
1674
|
+
DEPLOY_CLOUD_RUN_PROJECT_ID=google-project-id
|
|
1675
|
+
DEPLOY_CLOUD_RUN_REGION=europe-west6
|
|
1676
|
+
GCLOUD_DEPLOY_credentialsKey=$(printf %s "$CL_dev_worker_GCLOUD_DEPLOY_credentialsKey" | escapeForDotEnv)
|
|
1677
|
+
GCLOUD_RUN_canonicalHostSuffix=$(printf %s "$CL_dev_worker_GCLOUD_RUN_canonicalHostSuffix" | escapeForDotEnv)
|
|
1678
|
+
_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","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]
|
|
1679
|
+
EOF
|
|
1680
|
+
- collapseable_section_end "write-dotenv-worker"
|
|
1561
1681
|
- echo '{"id":"$(git describe --tags 2>/dev/null || git rev-parse HEAD)","time":"$CI_JOB_STARTED_AT"}' > api/__build_info.json
|
|
1562
|
-
-
|
|
1682
|
+
- collapseable_section_start "nodeinstall" "Ensure node version"
|
|
1563
1683
|
- if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
|
|
1564
1684
|
- if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
|
|
1565
|
-
-
|
|
1685
|
+
- collapseable_section_end "nodeinstall"
|
|
1566
1686
|
- cd api
|
|
1567
|
-
-
|
|
1687
|
+
- collapseable_section_start "nodeinstall" "Ensure node version"
|
|
1568
1688
|
- if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
|
|
1569
1689
|
- if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
|
|
1570
|
-
-
|
|
1571
|
-
-
|
|
1690
|
+
- collapseable_section_end "nodeinstall"
|
|
1691
|
+
- collapseable_section_start "yarninstall" "Yarn install"
|
|
1572
1692
|
- yarn install --immutable
|
|
1573
|
-
-
|
|
1693
|
+
- collapseable_section_end "yarninstall"
|
|
1574
1694
|
- yarn build:worker
|
|
1575
1695
|
cache:
|
|
1576
1696
|
- key: api-yarn
|
|
@@ -1581,15 +1701,13 @@ worker 🧪 test:
|
|
|
1581
1701
|
policy: pull-push
|
|
1582
1702
|
paths:
|
|
1583
1703
|
- api/node_modules
|
|
1584
|
-
- key: worker-next-cache
|
|
1585
|
-
policy: pull-push
|
|
1586
|
-
paths:
|
|
1587
|
-
- api/.next/cache
|
|
1588
1704
|
artifacts:
|
|
1589
1705
|
paths:
|
|
1590
1706
|
- api/__build_info.json
|
|
1591
1707
|
- api/.next
|
|
1592
1708
|
- api/dist
|
|
1709
|
+
exclude:
|
|
1710
|
+
- api/.env
|
|
1593
1711
|
expire_in: 1 day
|
|
1594
1712
|
when: always
|
|
1595
1713
|
reports: {}
|
|
@@ -1617,7 +1735,7 @@ worker 🧪 test:
|
|
|
1617
1735
|
KUBERNETES_MEMORY_REQUEST: 1Gi
|
|
1618
1736
|
KUBERNETES_MEMORY_LIMIT: 2Gi
|
|
1619
1737
|
script:
|
|
1620
|
-
-
|
|
1738
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
1621
1739
|
- export APP_DIR="api"
|
|
1622
1740
|
- export DOCKER_BUILD_CONTEXT="."
|
|
1623
1741
|
- export DOCKER_REGISTRY="europe-west6-docker.pkg.dev"
|
|
@@ -1633,20 +1751,20 @@ worker 🧪 test:
|
|
|
1633
1751
|
COPY --chown=node:node api/yarn.lock /app/api/yarn.lock
|
|
1634
1752
|
COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
|
|
1635
1753
|
COPY --chown=node:node .yarn /app/.yarn"
|
|
1636
|
-
-
|
|
1754
|
+
- collapseable_section_end "injectvars"
|
|
1637
1755
|
- ensureNodeDockerfile
|
|
1638
|
-
-
|
|
1756
|
+
- collapseable_section_start "docker-login" "Docker Login"
|
|
1639
1757
|
- gcloud auth activate-service-account --key-file=<(echo "$CL_dev_worker_GCLOUD_DEPLOY_credentialsKey")
|
|
1640
1758
|
- gcloud auth configure-docker europe-west6-docker.pkg.dev
|
|
1641
|
-
-
|
|
1642
|
-
-
|
|
1759
|
+
- collapseable_section_end "docker-login"
|
|
1760
|
+
- collapseable_section_start "docker-build" "Docker build"
|
|
1643
1761
|
- 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
|
|
1644
|
-
-
|
|
1645
|
-
-
|
|
1762
|
+
- collapseable_section_end "docker-build"
|
|
1763
|
+
- collapseable_section_start "docker-push" "Docker push and tag"
|
|
1646
1764
|
- docker push $DOCKER_IMAGE:$DOCKER_IMAGE_TAG
|
|
1647
1765
|
- docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG $DOCKER_CACHE_IMAGE
|
|
1648
1766
|
- docker push $DOCKER_CACHE_IMAGE
|
|
1649
|
-
-
|
|
1767
|
+
- collapseable_section_end "docker-push"
|
|
1650
1768
|
cache:
|
|
1651
1769
|
- key: api-yarn
|
|
1652
1770
|
policy: pull
|
|
@@ -1665,8 +1783,8 @@ worker 🧪 test:
|
|
|
1665
1783
|
image: aquasec/trivy:0.38.3
|
|
1666
1784
|
variables: {}
|
|
1667
1785
|
script:
|
|
1668
|
-
-
|
|
1669
|
-
-
|
|
1786
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
1787
|
+
- collapseable_section_end "injectvars"
|
|
1670
1788
|
- trivy fs --quiet --format cyclonedx --output "__sbom.json" api
|
|
1671
1789
|
artifacts:
|
|
1672
1790
|
paths:
|
|
@@ -1687,17 +1805,16 @@ worker 🧪 test:
|
|
|
1687
1805
|
KUBERNETES_MEMORY_REQUEST: 200Mi
|
|
1688
1806
|
KUBERNETES_MEMORY_LIMIT: 400Mi
|
|
1689
1807
|
script:
|
|
1690
|
-
-
|
|
1808
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
1691
1809
|
- export ENV_SHORT="dev"
|
|
1692
1810
|
- export APP_DIR="api"
|
|
1693
1811
|
- export ENV_TYPE="dev"
|
|
1694
1812
|
- export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
|
|
1695
1813
|
- export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
|
|
1696
1814
|
- 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")"
|
|
1697
|
-
- export
|
|
1815
|
+
- export HOSTNAME="$(printf %s "pan-test-app-dev-worker-$CL_dev_worker_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
1698
1816
|
- export ROOT_URL="https://$(printf %s "pan-test-app-dev-worker-$CL_dev_worker_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
1699
|
-
- export
|
|
1700
|
-
- export HOST_CANONICAL="$(printf %s "pan-test-app-dev-worker-$CL_dev_worker_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
1817
|
+
- export HOSTNAME_INTERNAL="$(printf %s "pan-test-app-dev-worker-$CL_dev_worker_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
1701
1818
|
- export ROOT_URL_INTERNAL="https://$(printf %s "pan-test-app-dev-worker-$CL_dev_worker_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
1702
1819
|
- export CLOUD_SQL_INSTANCE_CONNECTION_NAME="projectId:region:instancename"
|
|
1703
1820
|
- export DB_NAME="pan-test-app-dev-api"
|
|
@@ -1709,19 +1826,19 @@ worker 🧪 test:
|
|
|
1709
1826
|
- export DEPLOY_CLOUD_RUN_REGION="europe-west6"
|
|
1710
1827
|
- export GCLOUD_DEPLOY_credentialsKey="$CL_dev_worker_GCLOUD_DEPLOY_credentialsKey"
|
|
1711
1828
|
- export GCLOUD_RUN_canonicalHostSuffix="$CL_dev_worker_GCLOUD_RUN_canonicalHostSuffix"
|
|
1712
|
-
- export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"
|
|
1829
|
+
- 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\\",\\"DEPLOY_CLOUD_RUN_PROJECT_ID\\",\\"DEPLOY_CLOUD_RUN_REGION\\",\\"GCLOUD_DEPLOY_credentialsKey\\",\\"GCLOUD_RUN_canonicalHostSuffix\\"]"
|
|
1713
1830
|
- export DOCKER_REGISTRY="europe-west6-docker.pkg.dev"
|
|
1714
1831
|
- export DOCKER_IMAGE="europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/dev/worker"
|
|
1715
1832
|
- export DOCKER_CACHE_IMAGE="europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/worker"
|
|
1716
1833
|
- export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"
|
|
1717
1834
|
- export CLOUDSDK_CORE_DISABLE_PROMPTS="1"
|
|
1718
|
-
-
|
|
1719
|
-
-
|
|
1835
|
+
- collapseable_section_end "injectvars"
|
|
1836
|
+
- collapseable_section_start "prepare" "Prepare..."
|
|
1720
1837
|
- gcloud auth activate-service-account --key-file=<(echo "$CL_dev_worker_GCLOUD_DEPLOY_credentialsKey")
|
|
1721
1838
|
- export GCLOUD_PROJECT_NUMBER=$(gcloud projects describe google-project-id --format="value(projectNumber)")
|
|
1722
1839
|
- 'echo "GCLOUD_PROJECT_NUMBER: $GCLOUD_PROJECT_NUMBER"'
|
|
1723
|
-
-
|
|
1724
|
-
-
|
|
1840
|
+
- collapseable_section_end "prepare"
|
|
1841
|
+
- collapseable_section_start "writeenvvars" "Write env vars to file"
|
|
1725
1842
|
- |
|
|
1726
1843
|
cat > ____envvars.yaml <<EOF
|
|
1727
1844
|
ENV_SHORT: |-
|
|
@@ -1731,21 +1848,19 @@ worker 🧪 test:
|
|
|
1731
1848
|
ENV_TYPE: |-
|
|
1732
1849
|
dev
|
|
1733
1850
|
BUILD_INFO_BUILD_ID: |-
|
|
1734
|
-
|
|
1851
|
+
$(printf %s "$(git describe --tags 2>/dev/null || git rev-parse HEAD)" | sed '1!s/^/ /')
|
|
1735
1852
|
BUILD_INFO_BUILD_TIME: |-
|
|
1736
|
-
|
|
1853
|
+
$(printf %s "$CI_JOB_STARTED_AT" | sed '1!s/^/ /')
|
|
1737
1854
|
BUILD_INFO_CURRENT_VERSION: |-
|
|
1738
|
-
|
|
1739
|
-
|
|
1740
|
-
|
|
1855
|
+
$(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/^/ /')
|
|
1856
|
+
HOSTNAME: |-
|
|
1857
|
+
$(printf %s "$(printf %s "pan-test-app-dev-worker-$CL_dev_worker_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
|
|
1741
1858
|
ROOT_URL: |-
|
|
1742
|
-
|
|
1743
|
-
|
|
1744
|
-
|
|
1745
|
-
HOST_CANONICAL: |-
|
|
1746
|
-
$(printf %s "$(printf %s "pan-test-app-dev-worker-$CL_dev_worker_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
|
|
1859
|
+
$(printf %s "https://$(printf %s "pan-test-app-dev-worker-$CL_dev_worker_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
|
|
1860
|
+
HOSTNAME_INTERNAL: |-
|
|
1861
|
+
$(printf %s "$(printf %s "pan-test-app-dev-worker-$CL_dev_worker_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
|
|
1747
1862
|
ROOT_URL_INTERNAL: |-
|
|
1748
|
-
|
|
1863
|
+
$(printf %s "https://$(printf %s "pan-test-app-dev-worker-$CL_dev_worker_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
|
|
1749
1864
|
CLOUD_SQL_INSTANCE_CONNECTION_NAME: |-
|
|
1750
1865
|
projectId:region:instancename
|
|
1751
1866
|
DB_NAME: |-
|
|
@@ -1753,7 +1868,7 @@ worker 🧪 test:
|
|
|
1753
1868
|
DB_USER: |-
|
|
1754
1869
|
my-user
|
|
1755
1870
|
DB_PASSWORD: |-
|
|
1756
|
-
|
|
1871
|
+
$(printf %s "$CL_dev_api_DB_PASSWORD" | sed '1!s/^/ /')
|
|
1757
1872
|
DATABASE_URL: |-
|
|
1758
1873
|
postgresql://$DB_USER:$DB_PASSWORD@localhost/$DB_NAME?host=/cloudsql/$CLOUD_SQL_INSTANCE_CONNECTION_NAME
|
|
1759
1874
|
DATABASE_JDBC_URL: |-
|
|
@@ -1763,24 +1878,24 @@ worker 🧪 test:
|
|
|
1763
1878
|
DEPLOY_CLOUD_RUN_REGION: |-
|
|
1764
1879
|
europe-west6
|
|
1765
1880
|
GCLOUD_RUN_canonicalHostSuffix: |-
|
|
1766
|
-
|
|
1881
|
+
$(printf %s "$CL_dev_worker_GCLOUD_RUN_canonicalHostSuffix" | sed '1!s/^/ /')
|
|
1767
1882
|
_ALL_ENV_VAR_KEYS: |-
|
|
1768
|
-
["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","
|
|
1883
|
+
["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","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]
|
|
1769
1884
|
|
|
1770
1885
|
EOF
|
|
1771
|
-
-
|
|
1772
|
-
-
|
|
1886
|
+
- collapseable_section_end "writeenvvars"
|
|
1887
|
+
- collapseable_section_start "deploy" "Deploy to cloud run"
|
|
1773
1888
|
- set +e
|
|
1774
1889
|
- echo "ensuring Database..."
|
|
1775
1890
|
- gcloud sql databases create pan-test-app-dev-api --instance=instancename --project projectId
|
|
1776
1891
|
- set -e
|
|
1777
1892
|
- gcloud run deploy pan-test-app-dev-worker --command="yarn,start" --image=europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/dev/worker:$DOCKER_IMAGE_TAG --project=google-project-id --region=europe-west6 --set-cloudsql-instances=projectId:region:instancename --labels=customer-name=pan,component-name=worker,app-name=test-app,env-type=dev,env-name=dev,build-type=node,cloud-run-service-name=pan-test-app-dev-worker --env-vars-file=____envvars.yaml --min-instances=0 --max-instances=100 --cpu-throttling --allow-unauthenticated --ingress=all --cpu-boost
|
|
1778
|
-
-
|
|
1779
|
-
-
|
|
1893
|
+
- collapseable_section_end "deploy"
|
|
1894
|
+
- collapseable_section_start "cleanup" "Cleanup"
|
|
1780
1895
|
- gcloud run revisions list --project=google-project-id --region=europe-west6 --service=pan-test-app-dev-worker --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
|
|
1781
1896
|
- gcloud artifacts docker images list europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/dev/worker --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/worker@$version --quiet --delete-tags; done
|
|
1782
1897
|
- gcloud artifacts docker images list europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/worker --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/worker@$version --quiet --delete-tags; done
|
|
1783
|
-
-
|
|
1898
|
+
- collapseable_section_end "cleanup"
|
|
1784
1899
|
- echo 'Uploading SBOM to Dependency Track'
|
|
1785
1900
|
- /dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/worker" "https://$(printf %s "pan-test-app-dev-worker-$CL_dev_worker_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" "__sbom.json" vex.json || true
|
|
1786
1901
|
- echo "CL_GITLAB_ENVIRONMENT_URL=https://$(printf %s "pan-test-app-dev-worker-$CL_dev_worker_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" >> gitlab_environment.env
|
|
@@ -1822,9 +1937,9 @@ worker 🧪 test:
|
|
|
1822
1937
|
KUBERNETES_MEMORY_LIMIT: 400Mi
|
|
1823
1938
|
GIT_STRATEGY: none
|
|
1824
1939
|
script:
|
|
1825
|
-
-
|
|
1940
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
1826
1941
|
- export CLOUDSDK_CORE_DISABLE_PROMPTS="1"
|
|
1827
|
-
-
|
|
1942
|
+
- collapseable_section_end "injectvars"
|
|
1828
1943
|
- set +e
|
|
1829
1944
|
- gcloud auth activate-service-account --key-file=<(echo "$CL_dev_worker_GCLOUD_DEPLOY_credentialsKey")
|
|
1830
1945
|
- gcloud run services delete pan-test-app-dev-worker --project=google-project-id --region=europe-west6
|
|
@@ -1860,17 +1975,16 @@ worker 🧪 test:
|
|
|
1860
1975
|
KUBERNETES_MEMORY_REQUEST: 1Gi
|
|
1861
1976
|
KUBERNETES_MEMORY_LIMIT: 4Gi
|
|
1862
1977
|
script:
|
|
1863
|
-
-
|
|
1978
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
1864
1979
|
- export ENV_SHORT="review"
|
|
1865
1980
|
- export APP_DIR="api"
|
|
1866
1981
|
- export ENV_TYPE="review"
|
|
1867
1982
|
- export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
|
|
1868
1983
|
- export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
|
|
1869
1984
|
- 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")"
|
|
1870
|
-
- export
|
|
1985
|
+
- 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"; })-worker-$CL_review_worker_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
1871
1986
|
- 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"; })-worker-$CL_review_worker_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
1872
|
-
- export
|
|
1873
|
-
- 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"; })-worker-$CL_review_worker_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
1987
|
+
- 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"; })-worker-$CL_review_worker_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
1874
1988
|
- 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"; })-worker-$CL_review_worker_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
1875
1989
|
- export CLOUD_SQL_INSTANCE_CONNECTION_NAME="projectId:region:instancename"
|
|
1876
1990
|
- 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"
|
|
@@ -1882,21 +1996,44 @@ worker 🧪 test:
|
|
|
1882
1996
|
- export DEPLOY_CLOUD_RUN_REGION="europe-west6"
|
|
1883
1997
|
- export GCLOUD_DEPLOY_credentialsKey="$CL_review_worker_GCLOUD_DEPLOY_credentialsKey"
|
|
1884
1998
|
- export GCLOUD_RUN_canonicalHostSuffix="$CL_review_worker_GCLOUD_RUN_canonicalHostSuffix"
|
|
1885
|
-
- export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"
|
|
1886
|
-
-
|
|
1999
|
+
- 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\\",\\"DEPLOY_CLOUD_RUN_PROJECT_ID\\",\\"DEPLOY_CLOUD_RUN_REGION\\",\\"GCLOUD_DEPLOY_credentialsKey\\",\\"GCLOUD_RUN_canonicalHostSuffix\\"]"
|
|
2000
|
+
- collapseable_section_end "injectvars"
|
|
2001
|
+
- collapseable_section_start "write-dotenv-worker" "write dot env for worker"
|
|
2002
|
+
- |-
|
|
2003
|
+
cat <<EOF > api/.env
|
|
2004
|
+
ENV_SHORT=review
|
|
2005
|
+
APP_DIR=api
|
|
2006
|
+
ENV_TYPE=review
|
|
2007
|
+
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"; })-worker-$CL_review_worker_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | escapeForDotEnv)
|
|
2008
|
+
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"; })-worker-$CL_review_worker_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | escapeForDotEnv)
|
|
2009
|
+
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"; })-worker-$CL_review_worker_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | escapeForDotEnv)
|
|
2010
|
+
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"; })-worker-$CL_review_worker_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | escapeForDotEnv)
|
|
2011
|
+
CLOUD_SQL_INSTANCE_CONNECTION_NAME=projectId:region:instancename
|
|
2012
|
+
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)
|
|
2013
|
+
DB_USER=my-user
|
|
2014
|
+
DB_PASSWORD=$(printf %s "$CL_review_api_DB_PASSWORD" | escapeForDotEnv)
|
|
2015
|
+
DATABASE_URL=postgresql://$DB_USER:$DB_PASSWORD@localhost/$DB_NAME?host=/cloudsql/$CLOUD_SQL_INSTANCE_CONNECTION_NAME
|
|
2016
|
+
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
|
|
2017
|
+
DEPLOY_CLOUD_RUN_PROJECT_ID=google-project-id
|
|
2018
|
+
DEPLOY_CLOUD_RUN_REGION=europe-west6
|
|
2019
|
+
GCLOUD_DEPLOY_credentialsKey=$(printf %s "$CL_review_worker_GCLOUD_DEPLOY_credentialsKey" | escapeForDotEnv)
|
|
2020
|
+
GCLOUD_RUN_canonicalHostSuffix=$(printf %s "$CL_review_worker_GCLOUD_RUN_canonicalHostSuffix" | escapeForDotEnv)
|
|
2021
|
+
_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","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]
|
|
2022
|
+
EOF
|
|
2023
|
+
- collapseable_section_end "write-dotenv-worker"
|
|
1887
2024
|
- echo '{"id":"$(git describe --tags 2>/dev/null || git rev-parse HEAD)","time":"$CI_JOB_STARTED_AT"}' > api/__build_info.json
|
|
1888
|
-
-
|
|
2025
|
+
- collapseable_section_start "nodeinstall" "Ensure node version"
|
|
1889
2026
|
- if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
|
|
1890
2027
|
- if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
|
|
1891
|
-
-
|
|
2028
|
+
- collapseable_section_end "nodeinstall"
|
|
1892
2029
|
- cd api
|
|
1893
|
-
-
|
|
2030
|
+
- collapseable_section_start "nodeinstall" "Ensure node version"
|
|
1894
2031
|
- if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
|
|
1895
2032
|
- if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
|
|
1896
|
-
-
|
|
1897
|
-
-
|
|
2033
|
+
- collapseable_section_end "nodeinstall"
|
|
2034
|
+
- collapseable_section_start "yarninstall" "Yarn install"
|
|
1898
2035
|
- yarn install --immutable
|
|
1899
|
-
-
|
|
2036
|
+
- collapseable_section_end "yarninstall"
|
|
1900
2037
|
- yarn build:worker
|
|
1901
2038
|
cache:
|
|
1902
2039
|
- key: api-yarn
|
|
@@ -1907,15 +2044,13 @@ worker 🧪 test:
|
|
|
1907
2044
|
policy: pull-push
|
|
1908
2045
|
paths:
|
|
1909
2046
|
- api/node_modules
|
|
1910
|
-
- key: worker-next-cache
|
|
1911
|
-
policy: pull-push
|
|
1912
|
-
paths:
|
|
1913
|
-
- api/.next/cache
|
|
1914
2047
|
artifacts:
|
|
1915
2048
|
paths:
|
|
1916
2049
|
- api/__build_info.json
|
|
1917
2050
|
- api/.next
|
|
1918
2051
|
- api/dist
|
|
2052
|
+
exclude:
|
|
2053
|
+
- api/.env
|
|
1919
2054
|
expire_in: 1 day
|
|
1920
2055
|
when: always
|
|
1921
2056
|
reports: {}
|
|
@@ -1941,7 +2076,7 @@ worker 🧪 test:
|
|
|
1941
2076
|
KUBERNETES_MEMORY_REQUEST: 1Gi
|
|
1942
2077
|
KUBERNETES_MEMORY_LIMIT: 2Gi
|
|
1943
2078
|
script:
|
|
1944
|
-
-
|
|
2079
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
1945
2080
|
- export APP_DIR="api"
|
|
1946
2081
|
- export DOCKER_BUILD_CONTEXT="."
|
|
1947
2082
|
- export DOCKER_REGISTRY="europe-west6-docker.pkg.dev"
|
|
@@ -1957,20 +2092,20 @@ worker 🧪 test:
|
|
|
1957
2092
|
COPY --chown=node:node api/yarn.lock /app/api/yarn.lock
|
|
1958
2093
|
COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
|
|
1959
2094
|
COPY --chown=node:node .yarn /app/.yarn"
|
|
1960
|
-
-
|
|
2095
|
+
- collapseable_section_end "injectvars"
|
|
1961
2096
|
- ensureNodeDockerfile
|
|
1962
|
-
-
|
|
2097
|
+
- collapseable_section_start "docker-login" "Docker Login"
|
|
1963
2098
|
- gcloud auth activate-service-account --key-file=<(echo "$CL_review_worker_GCLOUD_DEPLOY_credentialsKey")
|
|
1964
2099
|
- gcloud auth configure-docker europe-west6-docker.pkg.dev
|
|
1965
|
-
-
|
|
1966
|
-
-
|
|
2100
|
+
- collapseable_section_end "docker-login"
|
|
2101
|
+
- collapseable_section_start "docker-build" "Docker build"
|
|
1967
2102
|
- 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
|
|
1968
|
-
-
|
|
1969
|
-
-
|
|
2103
|
+
- collapseable_section_end "docker-build"
|
|
2104
|
+
- collapseable_section_start "docker-push" "Docker push and tag"
|
|
1970
2105
|
- docker push $DOCKER_IMAGE:$DOCKER_IMAGE_TAG
|
|
1971
2106
|
- docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG $DOCKER_CACHE_IMAGE
|
|
1972
2107
|
- docker push $DOCKER_CACHE_IMAGE
|
|
1973
|
-
-
|
|
2108
|
+
- collapseable_section_end "docker-push"
|
|
1974
2109
|
cache:
|
|
1975
2110
|
- key: api-yarn
|
|
1976
2111
|
policy: pull
|
|
@@ -1987,8 +2122,8 @@ worker 🧪 test:
|
|
|
1987
2122
|
image: aquasec/trivy:0.38.3
|
|
1988
2123
|
variables: {}
|
|
1989
2124
|
script:
|
|
1990
|
-
-
|
|
1991
|
-
-
|
|
2125
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
2126
|
+
- collapseable_section_end "injectvars"
|
|
1992
2127
|
- trivy fs --quiet --format cyclonedx --output "__sbom.json" api
|
|
1993
2128
|
artifacts:
|
|
1994
2129
|
paths:
|
|
@@ -2007,17 +2142,16 @@ worker 🧪 test:
|
|
|
2007
2142
|
KUBERNETES_MEMORY_REQUEST: 200Mi
|
|
2008
2143
|
KUBERNETES_MEMORY_LIMIT: 400Mi
|
|
2009
2144
|
script:
|
|
2010
|
-
-
|
|
2145
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
2011
2146
|
- export ENV_SHORT="review"
|
|
2012
2147
|
- export APP_DIR="api"
|
|
2013
2148
|
- export ENV_TYPE="review"
|
|
2014
2149
|
- export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
|
|
2015
2150
|
- export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
|
|
2016
2151
|
- 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")"
|
|
2017
|
-
- export
|
|
2152
|
+
- 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"; })-worker-$CL_review_worker_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
2018
2153
|
- 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"; })-worker-$CL_review_worker_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
2019
|
-
- export
|
|
2020
|
-
- 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"; })-worker-$CL_review_worker_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
2154
|
+
- 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"; })-worker-$CL_review_worker_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
2021
2155
|
- 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"; })-worker-$CL_review_worker_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
2022
2156
|
- export CLOUD_SQL_INSTANCE_CONNECTION_NAME="projectId:region:instancename"
|
|
2023
2157
|
- 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"
|
|
@@ -2029,19 +2163,19 @@ worker 🧪 test:
|
|
|
2029
2163
|
- export DEPLOY_CLOUD_RUN_REGION="europe-west6"
|
|
2030
2164
|
- export GCLOUD_DEPLOY_credentialsKey="$CL_review_worker_GCLOUD_DEPLOY_credentialsKey"
|
|
2031
2165
|
- export GCLOUD_RUN_canonicalHostSuffix="$CL_review_worker_GCLOUD_RUN_canonicalHostSuffix"
|
|
2032
|
-
- export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"
|
|
2166
|
+
- 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\\",\\"DEPLOY_CLOUD_RUN_PROJECT_ID\\",\\"DEPLOY_CLOUD_RUN_REGION\\",\\"GCLOUD_DEPLOY_credentialsKey\\",\\"GCLOUD_RUN_canonicalHostSuffix\\"]"
|
|
2033
2167
|
- export DOCKER_REGISTRY="europe-west6-docker.pkg.dev"
|
|
2034
2168
|
- export DOCKER_IMAGE="europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/review/worker/$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })"
|
|
2035
2169
|
- export DOCKER_CACHE_IMAGE="europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/worker"
|
|
2036
2170
|
- export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"
|
|
2037
2171
|
- export CLOUDSDK_CORE_DISABLE_PROMPTS="1"
|
|
2038
|
-
-
|
|
2039
|
-
-
|
|
2172
|
+
- collapseable_section_end "injectvars"
|
|
2173
|
+
- collapseable_section_start "prepare" "Prepare..."
|
|
2040
2174
|
- gcloud auth activate-service-account --key-file=<(echo "$CL_review_worker_GCLOUD_DEPLOY_credentialsKey")
|
|
2041
2175
|
- export GCLOUD_PROJECT_NUMBER=$(gcloud projects describe google-project-id --format="value(projectNumber)")
|
|
2042
2176
|
- 'echo "GCLOUD_PROJECT_NUMBER: $GCLOUD_PROJECT_NUMBER"'
|
|
2043
|
-
-
|
|
2044
|
-
-
|
|
2177
|
+
- collapseable_section_end "prepare"
|
|
2178
|
+
- collapseable_section_start "writeenvvars" "Write env vars to file"
|
|
2045
2179
|
- |
|
|
2046
2180
|
cat > ____envvars.yaml <<EOF
|
|
2047
2181
|
ENV_SHORT: |-
|
|
@@ -2051,29 +2185,27 @@ worker 🧪 test:
|
|
|
2051
2185
|
ENV_TYPE: |-
|
|
2052
2186
|
review
|
|
2053
2187
|
BUILD_INFO_BUILD_ID: |-
|
|
2054
|
-
|
|
2188
|
+
$(printf %s "$(git describe --tags 2>/dev/null || git rev-parse HEAD)" | sed '1!s/^/ /')
|
|
2055
2189
|
BUILD_INFO_BUILD_TIME: |-
|
|
2056
|
-
|
|
2190
|
+
$(printf %s "$CI_JOB_STARTED_AT" | sed '1!s/^/ /')
|
|
2057
2191
|
BUILD_INFO_CURRENT_VERSION: |-
|
|
2058
|
-
|
|
2059
|
-
|
|
2060
|
-
|
|
2192
|
+
$(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/^/ /')
|
|
2193
|
+
HOSTNAME: |-
|
|
2194
|
+
$(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"; })-worker-$CL_review_worker_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
|
|
2061
2195
|
ROOT_URL: |-
|
|
2062
|
-
|
|
2063
|
-
|
|
2064
|
-
|
|
2065
|
-
HOST_CANONICAL: |-
|
|
2066
|
-
$(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"; })-worker-$CL_review_worker_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
|
|
2196
|
+
$(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"; })-worker-$CL_review_worker_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
|
|
2197
|
+
HOSTNAME_INTERNAL: |-
|
|
2198
|
+
$(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"; })-worker-$CL_review_worker_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
|
|
2067
2199
|
ROOT_URL_INTERNAL: |-
|
|
2068
|
-
|
|
2200
|
+
$(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"; })-worker-$CL_review_worker_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
|
|
2069
2201
|
CLOUD_SQL_INSTANCE_CONNECTION_NAME: |-
|
|
2070
2202
|
projectId:region:instancename
|
|
2071
2203
|
DB_NAME: |-
|
|
2072
|
-
|
|
2204
|
+
$(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/^/ /')
|
|
2073
2205
|
DB_USER: |-
|
|
2074
2206
|
my-user
|
|
2075
2207
|
DB_PASSWORD: |-
|
|
2076
|
-
|
|
2208
|
+
$(printf %s "$CL_review_api_DB_PASSWORD" | sed '1!s/^/ /')
|
|
2077
2209
|
DATABASE_URL: |-
|
|
2078
2210
|
postgresql://$DB_USER:$DB_PASSWORD@localhost/$DB_NAME?host=/cloudsql/$CLOUD_SQL_INSTANCE_CONNECTION_NAME
|
|
2079
2211
|
DATABASE_JDBC_URL: |-
|
|
@@ -2083,27 +2215,27 @@ worker 🧪 test:
|
|
|
2083
2215
|
DEPLOY_CLOUD_RUN_REGION: |-
|
|
2084
2216
|
europe-west6
|
|
2085
2217
|
GCLOUD_RUN_canonicalHostSuffix: |-
|
|
2086
|
-
|
|
2218
|
+
$(printf %s "$CL_review_worker_GCLOUD_RUN_canonicalHostSuffix" | sed '1!s/^/ /')
|
|
2087
2219
|
_ALL_ENV_VAR_KEYS: |-
|
|
2088
|
-
["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","
|
|
2220
|
+
["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","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]
|
|
2089
2221
|
|
|
2090
2222
|
EOF
|
|
2091
|
-
-
|
|
2092
|
-
-
|
|
2223
|
+
- collapseable_section_end "writeenvvars"
|
|
2224
|
+
- collapseable_section_start "deploy" "Deploy to cloud run"
|
|
2093
2225
|
- set +e
|
|
2094
2226
|
- echo "ensuring Database..."
|
|
2095
2227
|
- 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
|
|
2096
2228
|
- set -e
|
|
2097
2229
|
- 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"; })-worker" | awk '{print tolower($0)}') --command="yarn,start" --image=europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/review/worker/$([ -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=worker,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"; })-worker" | awk '{print tolower($0)}') --env-vars-file=____envvars.yaml --min-instances=0 --max-instances=100 --cpu-throttling --allow-unauthenticated --ingress=all --cpu-boost
|
|
2098
|
-
-
|
|
2099
|
-
-
|
|
2230
|
+
- collapseable_section_end "deploy"
|
|
2231
|
+
- collapseable_section_start "cleanup" "Cleanup"
|
|
2100
2232
|
- 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"; })-worker" | 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
|
|
2101
2233
|
- gcloud artifacts docker images list europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/review/worker/$([ -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/worker/$([ -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
|
|
2102
2234
|
- gcloud artifacts docker images list europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/worker --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/worker@$version --quiet --delete-tags; done
|
|
2103
2235
|
- set +e
|
|
2104
2236
|
- gcloud artifacts docker images delete europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/review/worker --quiet --delete-tags
|
|
2105
2237
|
- set -e
|
|
2106
|
-
-
|
|
2238
|
+
- collapseable_section_end "cleanup"
|
|
2107
2239
|
- echo 'Uploading SBOM to Dependency Track'
|
|
2108
2240
|
- /dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/worker" "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"; })-worker-$CL_review_worker_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" "__sbom.json" vex.json || true
|
|
2109
2241
|
- 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"; })-worker-$CL_review_worker_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" >> gitlab_environment.env
|
|
@@ -2143,9 +2275,9 @@ worker 🧪 test:
|
|
|
2143
2275
|
KUBERNETES_MEMORY_LIMIT: 400Mi
|
|
2144
2276
|
GIT_STRATEGY: none
|
|
2145
2277
|
script:
|
|
2146
|
-
-
|
|
2278
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
2147
2279
|
- export CLOUDSDK_CORE_DISABLE_PROMPTS="1"
|
|
2148
|
-
-
|
|
2280
|
+
- collapseable_section_end "injectvars"
|
|
2149
2281
|
- set +e
|
|
2150
2282
|
- gcloud auth activate-service-account --key-file=<(echo "$CL_review_worker_GCLOUD_DEPLOY_credentialsKey")
|
|
2151
2283
|
- 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"; })-worker" | awk '{print tolower($0)}') --project=google-project-id --region=europe-west6
|
|
@@ -2185,17 +2317,16 @@ worker 🧪 test:
|
|
|
2185
2317
|
KUBERNETES_MEMORY_REQUEST: 1Gi
|
|
2186
2318
|
KUBERNETES_MEMORY_LIMIT: 4Gi
|
|
2187
2319
|
script:
|
|
2188
|
-
-
|
|
2320
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
2189
2321
|
- export ENV_SHORT="stage"
|
|
2190
2322
|
- export APP_DIR="api"
|
|
2191
2323
|
- export ENV_TYPE="stage"
|
|
2192
2324
|
- export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
|
|
2193
2325
|
- export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
|
|
2194
2326
|
- 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")"
|
|
2195
|
-
- export
|
|
2327
|
+
- export HOSTNAME="$(printf %s "pan-test-app-stage-worker-$CL_stage_worker_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
2196
2328
|
- export ROOT_URL="https://$(printf %s "pan-test-app-stage-worker-$CL_stage_worker_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
2197
|
-
- export
|
|
2198
|
-
- export HOST_CANONICAL="$(printf %s "pan-test-app-stage-worker-$CL_stage_worker_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
2329
|
+
- export HOSTNAME_INTERNAL="$(printf %s "pan-test-app-stage-worker-$CL_stage_worker_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
2199
2330
|
- export ROOT_URL_INTERNAL="https://$(printf %s "pan-test-app-stage-worker-$CL_stage_worker_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
2200
2331
|
- export CLOUD_SQL_INSTANCE_CONNECTION_NAME="projectId:region:instancename"
|
|
2201
2332
|
- export DB_NAME="pan-test-app-stage-api"
|
|
@@ -2207,21 +2338,44 @@ worker 🧪 test:
|
|
|
2207
2338
|
- export DEPLOY_CLOUD_RUN_REGION="europe-west6"
|
|
2208
2339
|
- export GCLOUD_DEPLOY_credentialsKey="$CL_stage_worker_GCLOUD_DEPLOY_credentialsKey"
|
|
2209
2340
|
- export GCLOUD_RUN_canonicalHostSuffix="$CL_stage_worker_GCLOUD_RUN_canonicalHostSuffix"
|
|
2210
|
-
- export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"
|
|
2211
|
-
-
|
|
2341
|
+
- 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\\",\\"DEPLOY_CLOUD_RUN_PROJECT_ID\\",\\"DEPLOY_CLOUD_RUN_REGION\\",\\"GCLOUD_DEPLOY_credentialsKey\\",\\"GCLOUD_RUN_canonicalHostSuffix\\"]"
|
|
2342
|
+
- collapseable_section_end "injectvars"
|
|
2343
|
+
- collapseable_section_start "write-dotenv-worker" "write dot env for worker"
|
|
2344
|
+
- |-
|
|
2345
|
+
cat <<EOF > api/.env
|
|
2346
|
+
ENV_SHORT=stage
|
|
2347
|
+
APP_DIR=api
|
|
2348
|
+
ENV_TYPE=stage
|
|
2349
|
+
HOSTNAME=$(printf %s "$(printf %s "pan-test-app-stage-worker-$CL_stage_worker_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | escapeForDotEnv)
|
|
2350
|
+
ROOT_URL=$(printf %s "https://$(printf %s "pan-test-app-stage-worker-$CL_stage_worker_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | escapeForDotEnv)
|
|
2351
|
+
HOSTNAME_INTERNAL=$(printf %s "$(printf %s "pan-test-app-stage-worker-$CL_stage_worker_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | escapeForDotEnv)
|
|
2352
|
+
ROOT_URL_INTERNAL=$(printf %s "https://$(printf %s "pan-test-app-stage-worker-$CL_stage_worker_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | escapeForDotEnv)
|
|
2353
|
+
CLOUD_SQL_INSTANCE_CONNECTION_NAME=projectId:region:instancename
|
|
2354
|
+
DB_NAME=pan-test-app-stage-api
|
|
2355
|
+
DB_USER=my-user
|
|
2356
|
+
DB_PASSWORD=$(printf %s "$CL_stage_api_DB_PASSWORD" | escapeForDotEnv)
|
|
2357
|
+
DATABASE_URL=postgresql://$DB_USER:$DB_PASSWORD@localhost/$DB_NAME?host=/cloudsql/$CLOUD_SQL_INSTANCE_CONNECTION_NAME
|
|
2358
|
+
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
|
|
2359
|
+
DEPLOY_CLOUD_RUN_PROJECT_ID=google-project-id
|
|
2360
|
+
DEPLOY_CLOUD_RUN_REGION=europe-west6
|
|
2361
|
+
GCLOUD_DEPLOY_credentialsKey=$(printf %s "$CL_stage_worker_GCLOUD_DEPLOY_credentialsKey" | escapeForDotEnv)
|
|
2362
|
+
GCLOUD_RUN_canonicalHostSuffix=$(printf %s "$CL_stage_worker_GCLOUD_RUN_canonicalHostSuffix" | escapeForDotEnv)
|
|
2363
|
+
_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","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]
|
|
2364
|
+
EOF
|
|
2365
|
+
- collapseable_section_end "write-dotenv-worker"
|
|
2212
2366
|
- echo '{"id":"$(git describe --tags 2>/dev/null || git rev-parse HEAD)","time":"$CI_JOB_STARTED_AT"}' > api/__build_info.json
|
|
2213
|
-
-
|
|
2367
|
+
- collapseable_section_start "nodeinstall" "Ensure node version"
|
|
2214
2368
|
- if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
|
|
2215
2369
|
- if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
|
|
2216
|
-
-
|
|
2370
|
+
- collapseable_section_end "nodeinstall"
|
|
2217
2371
|
- cd api
|
|
2218
|
-
-
|
|
2372
|
+
- collapseable_section_start "nodeinstall" "Ensure node version"
|
|
2219
2373
|
- if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
|
|
2220
2374
|
- if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
|
|
2221
|
-
-
|
|
2222
|
-
-
|
|
2375
|
+
- collapseable_section_end "nodeinstall"
|
|
2376
|
+
- collapseable_section_start "yarninstall" "Yarn install"
|
|
2223
2377
|
- yarn install --immutable
|
|
2224
|
-
-
|
|
2378
|
+
- collapseable_section_end "yarninstall"
|
|
2225
2379
|
- yarn build:worker
|
|
2226
2380
|
cache:
|
|
2227
2381
|
- key: api-yarn
|
|
@@ -2232,15 +2386,13 @@ worker 🧪 test:
|
|
|
2232
2386
|
policy: pull-push
|
|
2233
2387
|
paths:
|
|
2234
2388
|
- api/node_modules
|
|
2235
|
-
- key: worker-next-cache
|
|
2236
|
-
policy: pull-push
|
|
2237
|
-
paths:
|
|
2238
|
-
- api/.next/cache
|
|
2239
2389
|
artifacts:
|
|
2240
2390
|
paths:
|
|
2241
2391
|
- api/__build_info.json
|
|
2242
2392
|
- api/.next
|
|
2243
2393
|
- api/dist
|
|
2394
|
+
exclude:
|
|
2395
|
+
- api/.env
|
|
2244
2396
|
expire_in: 1 day
|
|
2245
2397
|
when: always
|
|
2246
2398
|
reports: {}
|
|
@@ -2266,7 +2418,7 @@ worker 🧪 test:
|
|
|
2266
2418
|
KUBERNETES_MEMORY_REQUEST: 1Gi
|
|
2267
2419
|
KUBERNETES_MEMORY_LIMIT: 2Gi
|
|
2268
2420
|
script:
|
|
2269
|
-
-
|
|
2421
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
2270
2422
|
- export APP_DIR="api"
|
|
2271
2423
|
- export DOCKER_BUILD_CONTEXT="."
|
|
2272
2424
|
- export DOCKER_REGISTRY="europe-west6-docker.pkg.dev"
|
|
@@ -2282,20 +2434,20 @@ worker 🧪 test:
|
|
|
2282
2434
|
COPY --chown=node:node api/yarn.lock /app/api/yarn.lock
|
|
2283
2435
|
COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
|
|
2284
2436
|
COPY --chown=node:node .yarn /app/.yarn"
|
|
2285
|
-
-
|
|
2437
|
+
- collapseable_section_end "injectvars"
|
|
2286
2438
|
- ensureNodeDockerfile
|
|
2287
|
-
-
|
|
2439
|
+
- collapseable_section_start "docker-login" "Docker Login"
|
|
2288
2440
|
- gcloud auth activate-service-account --key-file=<(echo "$CL_stage_worker_GCLOUD_DEPLOY_credentialsKey")
|
|
2289
2441
|
- gcloud auth configure-docker europe-west6-docker.pkg.dev
|
|
2290
|
-
-
|
|
2291
|
-
-
|
|
2442
|
+
- collapseable_section_end "docker-login"
|
|
2443
|
+
- collapseable_section_start "docker-build" "Docker build"
|
|
2292
2444
|
- 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
|
|
2293
|
-
-
|
|
2294
|
-
-
|
|
2445
|
+
- collapseable_section_end "docker-build"
|
|
2446
|
+
- collapseable_section_start "docker-push" "Docker push and tag"
|
|
2295
2447
|
- docker push $DOCKER_IMAGE:$DOCKER_IMAGE_TAG
|
|
2296
2448
|
- docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG $DOCKER_CACHE_IMAGE
|
|
2297
2449
|
- docker push $DOCKER_CACHE_IMAGE
|
|
2298
|
-
-
|
|
2450
|
+
- collapseable_section_end "docker-push"
|
|
2299
2451
|
cache:
|
|
2300
2452
|
- key: api-yarn
|
|
2301
2453
|
policy: pull
|
|
@@ -2312,8 +2464,8 @@ worker 🧪 test:
|
|
|
2312
2464
|
image: aquasec/trivy:0.38.3
|
|
2313
2465
|
variables: {}
|
|
2314
2466
|
script:
|
|
2315
|
-
-
|
|
2316
|
-
-
|
|
2467
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
2468
|
+
- collapseable_section_end "injectvars"
|
|
2317
2469
|
- trivy fs --quiet --format cyclonedx --output "__sbom.json" api
|
|
2318
2470
|
artifacts:
|
|
2319
2471
|
paths:
|
|
@@ -2332,17 +2484,16 @@ worker 🧪 test:
|
|
|
2332
2484
|
KUBERNETES_MEMORY_REQUEST: 200Mi
|
|
2333
2485
|
KUBERNETES_MEMORY_LIMIT: 400Mi
|
|
2334
2486
|
script:
|
|
2335
|
-
-
|
|
2487
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
2336
2488
|
- export ENV_SHORT="stage"
|
|
2337
2489
|
- export APP_DIR="api"
|
|
2338
2490
|
- export ENV_TYPE="stage"
|
|
2339
2491
|
- export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
|
|
2340
2492
|
- export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
|
|
2341
2493
|
- 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")"
|
|
2342
|
-
- export
|
|
2494
|
+
- export HOSTNAME="$(printf %s "pan-test-app-stage-worker-$CL_stage_worker_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
2343
2495
|
- export ROOT_URL="https://$(printf %s "pan-test-app-stage-worker-$CL_stage_worker_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
2344
|
-
- export
|
|
2345
|
-
- export HOST_CANONICAL="$(printf %s "pan-test-app-stage-worker-$CL_stage_worker_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
2496
|
+
- export HOSTNAME_INTERNAL="$(printf %s "pan-test-app-stage-worker-$CL_stage_worker_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
2346
2497
|
- export ROOT_URL_INTERNAL="https://$(printf %s "pan-test-app-stage-worker-$CL_stage_worker_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
2347
2498
|
- export CLOUD_SQL_INSTANCE_CONNECTION_NAME="projectId:region:instancename"
|
|
2348
2499
|
- export DB_NAME="pan-test-app-stage-api"
|
|
@@ -2354,19 +2505,19 @@ worker 🧪 test:
|
|
|
2354
2505
|
- export DEPLOY_CLOUD_RUN_REGION="europe-west6"
|
|
2355
2506
|
- export GCLOUD_DEPLOY_credentialsKey="$CL_stage_worker_GCLOUD_DEPLOY_credentialsKey"
|
|
2356
2507
|
- export GCLOUD_RUN_canonicalHostSuffix="$CL_stage_worker_GCLOUD_RUN_canonicalHostSuffix"
|
|
2357
|
-
- export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"
|
|
2508
|
+
- 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\\",\\"DEPLOY_CLOUD_RUN_PROJECT_ID\\",\\"DEPLOY_CLOUD_RUN_REGION\\",\\"GCLOUD_DEPLOY_credentialsKey\\",\\"GCLOUD_RUN_canonicalHostSuffix\\"]"
|
|
2358
2509
|
- export DOCKER_REGISTRY="europe-west6-docker.pkg.dev"
|
|
2359
2510
|
- export DOCKER_IMAGE="europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/stage/worker"
|
|
2360
2511
|
- export DOCKER_CACHE_IMAGE="europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/worker"
|
|
2361
2512
|
- export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"
|
|
2362
2513
|
- export CLOUDSDK_CORE_DISABLE_PROMPTS="1"
|
|
2363
|
-
-
|
|
2364
|
-
-
|
|
2514
|
+
- collapseable_section_end "injectvars"
|
|
2515
|
+
- collapseable_section_start "prepare" "Prepare..."
|
|
2365
2516
|
- gcloud auth activate-service-account --key-file=<(echo "$CL_stage_worker_GCLOUD_DEPLOY_credentialsKey")
|
|
2366
2517
|
- export GCLOUD_PROJECT_NUMBER=$(gcloud projects describe google-project-id --format="value(projectNumber)")
|
|
2367
2518
|
- 'echo "GCLOUD_PROJECT_NUMBER: $GCLOUD_PROJECT_NUMBER"'
|
|
2368
|
-
-
|
|
2369
|
-
-
|
|
2519
|
+
- collapseable_section_end "prepare"
|
|
2520
|
+
- collapseable_section_start "writeenvvars" "Write env vars to file"
|
|
2370
2521
|
- |
|
|
2371
2522
|
cat > ____envvars.yaml <<EOF
|
|
2372
2523
|
ENV_SHORT: |-
|
|
@@ -2376,21 +2527,19 @@ worker 🧪 test:
|
|
|
2376
2527
|
ENV_TYPE: |-
|
|
2377
2528
|
stage
|
|
2378
2529
|
BUILD_INFO_BUILD_ID: |-
|
|
2379
|
-
|
|
2530
|
+
$(printf %s "$(git describe --tags 2>/dev/null || git rev-parse HEAD)" | sed '1!s/^/ /')
|
|
2380
2531
|
BUILD_INFO_BUILD_TIME: |-
|
|
2381
|
-
|
|
2532
|
+
$(printf %s "$CI_JOB_STARTED_AT" | sed '1!s/^/ /')
|
|
2382
2533
|
BUILD_INFO_CURRENT_VERSION: |-
|
|
2383
|
-
|
|
2384
|
-
|
|
2385
|
-
|
|
2534
|
+
$(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/^/ /')
|
|
2535
|
+
HOSTNAME: |-
|
|
2536
|
+
$(printf %s "$(printf %s "pan-test-app-stage-worker-$CL_stage_worker_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
|
|
2386
2537
|
ROOT_URL: |-
|
|
2387
|
-
|
|
2388
|
-
|
|
2389
|
-
|
|
2390
|
-
HOST_CANONICAL: |-
|
|
2391
|
-
$(printf %s "$(printf %s "pan-test-app-stage-worker-$CL_stage_worker_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
|
|
2538
|
+
$(printf %s "https://$(printf %s "pan-test-app-stage-worker-$CL_stage_worker_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
|
|
2539
|
+
HOSTNAME_INTERNAL: |-
|
|
2540
|
+
$(printf %s "$(printf %s "pan-test-app-stage-worker-$CL_stage_worker_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
|
|
2392
2541
|
ROOT_URL_INTERNAL: |-
|
|
2393
|
-
|
|
2542
|
+
$(printf %s "https://$(printf %s "pan-test-app-stage-worker-$CL_stage_worker_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
|
|
2394
2543
|
CLOUD_SQL_INSTANCE_CONNECTION_NAME: |-
|
|
2395
2544
|
projectId:region:instancename
|
|
2396
2545
|
DB_NAME: |-
|
|
@@ -2398,7 +2547,7 @@ worker 🧪 test:
|
|
|
2398
2547
|
DB_USER: |-
|
|
2399
2548
|
my-user
|
|
2400
2549
|
DB_PASSWORD: |-
|
|
2401
|
-
|
|
2550
|
+
$(printf %s "$CL_stage_api_DB_PASSWORD" | sed '1!s/^/ /')
|
|
2402
2551
|
DATABASE_URL: |-
|
|
2403
2552
|
postgresql://$DB_USER:$DB_PASSWORD@localhost/$DB_NAME?host=/cloudsql/$CLOUD_SQL_INSTANCE_CONNECTION_NAME
|
|
2404
2553
|
DATABASE_JDBC_URL: |-
|
|
@@ -2408,24 +2557,24 @@ worker 🧪 test:
|
|
|
2408
2557
|
DEPLOY_CLOUD_RUN_REGION: |-
|
|
2409
2558
|
europe-west6
|
|
2410
2559
|
GCLOUD_RUN_canonicalHostSuffix: |-
|
|
2411
|
-
|
|
2560
|
+
$(printf %s "$CL_stage_worker_GCLOUD_RUN_canonicalHostSuffix" | sed '1!s/^/ /')
|
|
2412
2561
|
_ALL_ENV_VAR_KEYS: |-
|
|
2413
|
-
["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","
|
|
2562
|
+
["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","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]
|
|
2414
2563
|
|
|
2415
2564
|
EOF
|
|
2416
|
-
-
|
|
2417
|
-
-
|
|
2565
|
+
- collapseable_section_end "writeenvvars"
|
|
2566
|
+
- collapseable_section_start "deploy" "Deploy to cloud run"
|
|
2418
2567
|
- set +e
|
|
2419
2568
|
- echo "ensuring Database..."
|
|
2420
2569
|
- gcloud sql databases create pan-test-app-stage-api --instance=instancename --project projectId
|
|
2421
2570
|
- set -e
|
|
2422
2571
|
- gcloud run deploy pan-test-app-stage-worker --command="yarn,start" --image=europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/stage/worker:$DOCKER_IMAGE_TAG --project=google-project-id --region=europe-west6 --set-cloudsql-instances=projectId:region:instancename --labels=customer-name=pan,component-name=worker,app-name=test-app,env-type=stage,env-name=stage,build-type=node,cloud-run-service-name=pan-test-app-stage-worker --env-vars-file=____envvars.yaml --min-instances=0 --max-instances=100 --cpu-throttling --allow-unauthenticated --ingress=all --cpu-boost
|
|
2423
|
-
-
|
|
2424
|
-
-
|
|
2572
|
+
- collapseable_section_end "deploy"
|
|
2573
|
+
- collapseable_section_start "cleanup" "Cleanup"
|
|
2425
2574
|
- gcloud run revisions list --project=google-project-id --region=europe-west6 --service=pan-test-app-stage-worker --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
|
|
2426
2575
|
- gcloud artifacts docker images list europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/stage/worker --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/worker@$version --quiet --delete-tags; done
|
|
2427
2576
|
- gcloud artifacts docker images list europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/worker --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/worker@$version --quiet --delete-tags; done
|
|
2428
|
-
-
|
|
2577
|
+
- collapseable_section_end "cleanup"
|
|
2429
2578
|
- echo 'Uploading SBOM to Dependency Track'
|
|
2430
2579
|
- /dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/worker" "https://$(printf %s "pan-test-app-stage-worker-$CL_stage_worker_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" "__sbom.json" vex.json || true
|
|
2431
2580
|
- echo "CL_GITLAB_ENVIRONMENT_URL=https://$(printf %s "pan-test-app-stage-worker-$CL_stage_worker_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" >> gitlab_environment.env
|
|
@@ -2458,9 +2607,9 @@ worker 🧪 test:
|
|
|
2458
2607
|
KUBERNETES_MEMORY_LIMIT: 400Mi
|
|
2459
2608
|
GIT_STRATEGY: none
|
|
2460
2609
|
script:
|
|
2461
|
-
-
|
|
2610
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
2462
2611
|
- export CLOUDSDK_CORE_DISABLE_PROMPTS="1"
|
|
2463
|
-
-
|
|
2612
|
+
- collapseable_section_end "injectvars"
|
|
2464
2613
|
- set +e
|
|
2465
2614
|
- gcloud auth activate-service-account --key-file=<(echo "$CL_stage_worker_GCLOUD_DEPLOY_credentialsKey")
|
|
2466
2615
|
- gcloud run services delete pan-test-app-stage-worker --project=google-project-id --region=europe-west6
|
|
@@ -2494,17 +2643,16 @@ worker 🧪 test:
|
|
|
2494
2643
|
KUBERNETES_MEMORY_REQUEST: 1Gi
|
|
2495
2644
|
KUBERNETES_MEMORY_LIMIT: 4Gi
|
|
2496
2645
|
script:
|
|
2497
|
-
-
|
|
2646
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
2498
2647
|
- export ENV_SHORT="prod"
|
|
2499
2648
|
- export APP_DIR="api"
|
|
2500
2649
|
- export ENV_TYPE="prod"
|
|
2501
2650
|
- export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
|
|
2502
2651
|
- export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
|
|
2503
2652
|
- 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")"
|
|
2504
|
-
- export
|
|
2653
|
+
- export HOSTNAME="$(printf %s "pan-test-app-prod-worker-$CL_prod_worker_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
2505
2654
|
- export ROOT_URL="https://$(printf %s "pan-test-app-prod-worker-$CL_prod_worker_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
2506
|
-
- export
|
|
2507
|
-
- export HOST_CANONICAL="$(printf %s "pan-test-app-prod-worker-$CL_prod_worker_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
2655
|
+
- export HOSTNAME_INTERNAL="$(printf %s "pan-test-app-prod-worker-$CL_prod_worker_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
2508
2656
|
- export ROOT_URL_INTERNAL="https://$(printf %s "pan-test-app-prod-worker-$CL_prod_worker_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
2509
2657
|
- export CLOUD_SQL_INSTANCE_CONNECTION_NAME="projectId:region:instancename"
|
|
2510
2658
|
- export DB_NAME="pan-test-app-prod-api"
|
|
@@ -2516,21 +2664,44 @@ worker 🧪 test:
|
|
|
2516
2664
|
- export DEPLOY_CLOUD_RUN_REGION="europe-west6"
|
|
2517
2665
|
- export GCLOUD_DEPLOY_credentialsKey="$CL_prod_worker_GCLOUD_DEPLOY_credentialsKey"
|
|
2518
2666
|
- export GCLOUD_RUN_canonicalHostSuffix="$CL_prod_worker_GCLOUD_RUN_canonicalHostSuffix"
|
|
2519
|
-
- export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"
|
|
2520
|
-
-
|
|
2667
|
+
- 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\\",\\"DEPLOY_CLOUD_RUN_PROJECT_ID\\",\\"DEPLOY_CLOUD_RUN_REGION\\",\\"GCLOUD_DEPLOY_credentialsKey\\",\\"GCLOUD_RUN_canonicalHostSuffix\\"]"
|
|
2668
|
+
- collapseable_section_end "injectvars"
|
|
2669
|
+
- collapseable_section_start "write-dotenv-worker" "write dot env for worker"
|
|
2670
|
+
- |-
|
|
2671
|
+
cat <<EOF > api/.env
|
|
2672
|
+
ENV_SHORT=prod
|
|
2673
|
+
APP_DIR=api
|
|
2674
|
+
ENV_TYPE=prod
|
|
2675
|
+
HOSTNAME=$(printf %s "$(printf %s "pan-test-app-prod-worker-$CL_prod_worker_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | escapeForDotEnv)
|
|
2676
|
+
ROOT_URL=$(printf %s "https://$(printf %s "pan-test-app-prod-worker-$CL_prod_worker_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | escapeForDotEnv)
|
|
2677
|
+
HOSTNAME_INTERNAL=$(printf %s "$(printf %s "pan-test-app-prod-worker-$CL_prod_worker_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | escapeForDotEnv)
|
|
2678
|
+
ROOT_URL_INTERNAL=$(printf %s "https://$(printf %s "pan-test-app-prod-worker-$CL_prod_worker_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | escapeForDotEnv)
|
|
2679
|
+
CLOUD_SQL_INSTANCE_CONNECTION_NAME=projectId:region:instancename
|
|
2680
|
+
DB_NAME=pan-test-app-prod-api
|
|
2681
|
+
DB_USER=my-user
|
|
2682
|
+
DB_PASSWORD=$(printf %s "$CL_prod_api_DB_PASSWORD" | escapeForDotEnv)
|
|
2683
|
+
DATABASE_URL=postgresql://$DB_USER:$DB_PASSWORD@localhost/$DB_NAME?host=/cloudsql/$CLOUD_SQL_INSTANCE_CONNECTION_NAME
|
|
2684
|
+
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
|
|
2685
|
+
DEPLOY_CLOUD_RUN_PROJECT_ID=google-project-id
|
|
2686
|
+
DEPLOY_CLOUD_RUN_REGION=europe-west6
|
|
2687
|
+
GCLOUD_DEPLOY_credentialsKey=$(printf %s "$CL_prod_worker_GCLOUD_DEPLOY_credentialsKey" | escapeForDotEnv)
|
|
2688
|
+
GCLOUD_RUN_canonicalHostSuffix=$(printf %s "$CL_prod_worker_GCLOUD_RUN_canonicalHostSuffix" | escapeForDotEnv)
|
|
2689
|
+
_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","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]
|
|
2690
|
+
EOF
|
|
2691
|
+
- collapseable_section_end "write-dotenv-worker"
|
|
2521
2692
|
- echo '{"id":"$(git describe --tags 2>/dev/null || git rev-parse HEAD)","time":"$CI_JOB_STARTED_AT"}' > api/__build_info.json
|
|
2522
|
-
-
|
|
2693
|
+
- collapseable_section_start "nodeinstall" "Ensure node version"
|
|
2523
2694
|
- if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
|
|
2524
2695
|
- if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
|
|
2525
|
-
-
|
|
2696
|
+
- collapseable_section_end "nodeinstall"
|
|
2526
2697
|
- cd api
|
|
2527
|
-
-
|
|
2698
|
+
- collapseable_section_start "nodeinstall" "Ensure node version"
|
|
2528
2699
|
- if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
|
|
2529
2700
|
- if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
|
|
2530
|
-
-
|
|
2531
|
-
-
|
|
2701
|
+
- collapseable_section_end "nodeinstall"
|
|
2702
|
+
- collapseable_section_start "yarninstall" "Yarn install"
|
|
2532
2703
|
- yarn install --immutable
|
|
2533
|
-
-
|
|
2704
|
+
- collapseable_section_end "yarninstall"
|
|
2534
2705
|
- yarn build:worker
|
|
2535
2706
|
cache:
|
|
2536
2707
|
- key: api-yarn
|
|
@@ -2541,15 +2712,13 @@ worker 🧪 test:
|
|
|
2541
2712
|
policy: pull-push
|
|
2542
2713
|
paths:
|
|
2543
2714
|
- api/node_modules
|
|
2544
|
-
- key: worker-next-cache
|
|
2545
|
-
policy: pull-push
|
|
2546
|
-
paths:
|
|
2547
|
-
- api/.next/cache
|
|
2548
2715
|
artifacts:
|
|
2549
2716
|
paths:
|
|
2550
2717
|
- api/__build_info.json
|
|
2551
2718
|
- api/.next
|
|
2552
2719
|
- api/dist
|
|
2720
|
+
exclude:
|
|
2721
|
+
- api/.env
|
|
2553
2722
|
expire_in: 1 day
|
|
2554
2723
|
when: always
|
|
2555
2724
|
reports: {}
|
|
@@ -2575,7 +2744,7 @@ worker 🧪 test:
|
|
|
2575
2744
|
KUBERNETES_MEMORY_REQUEST: 1Gi
|
|
2576
2745
|
KUBERNETES_MEMORY_LIMIT: 2Gi
|
|
2577
2746
|
script:
|
|
2578
|
-
-
|
|
2747
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
2579
2748
|
- export APP_DIR="api"
|
|
2580
2749
|
- export DOCKER_BUILD_CONTEXT="."
|
|
2581
2750
|
- export DOCKER_REGISTRY="europe-west6-docker.pkg.dev"
|
|
@@ -2591,20 +2760,20 @@ worker 🧪 test:
|
|
|
2591
2760
|
COPY --chown=node:node api/yarn.lock /app/api/yarn.lock
|
|
2592
2761
|
COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
|
|
2593
2762
|
COPY --chown=node:node .yarn /app/.yarn"
|
|
2594
|
-
-
|
|
2763
|
+
- collapseable_section_end "injectvars"
|
|
2595
2764
|
- ensureNodeDockerfile
|
|
2596
|
-
-
|
|
2765
|
+
- collapseable_section_start "docker-login" "Docker Login"
|
|
2597
2766
|
- gcloud auth activate-service-account --key-file=<(echo "$CL_prod_worker_GCLOUD_DEPLOY_credentialsKey")
|
|
2598
2767
|
- gcloud auth configure-docker europe-west6-docker.pkg.dev
|
|
2599
|
-
-
|
|
2600
|
-
-
|
|
2768
|
+
- collapseable_section_end "docker-login"
|
|
2769
|
+
- collapseable_section_start "docker-build" "Docker build"
|
|
2601
2770
|
- 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
|
|
2602
|
-
-
|
|
2603
|
-
-
|
|
2771
|
+
- collapseable_section_end "docker-build"
|
|
2772
|
+
- collapseable_section_start "docker-push" "Docker push and tag"
|
|
2604
2773
|
- docker push $DOCKER_IMAGE:$DOCKER_IMAGE_TAG
|
|
2605
2774
|
- docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG $DOCKER_CACHE_IMAGE
|
|
2606
2775
|
- docker push $DOCKER_CACHE_IMAGE
|
|
2607
|
-
-
|
|
2776
|
+
- collapseable_section_end "docker-push"
|
|
2608
2777
|
cache:
|
|
2609
2778
|
- key: api-yarn
|
|
2610
2779
|
policy: pull
|
|
@@ -2621,8 +2790,8 @@ worker 🧪 test:
|
|
|
2621
2790
|
image: aquasec/trivy:0.38.3
|
|
2622
2791
|
variables: {}
|
|
2623
2792
|
script:
|
|
2624
|
-
-
|
|
2625
|
-
-
|
|
2793
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
2794
|
+
- collapseable_section_end "injectvars"
|
|
2626
2795
|
- trivy fs --quiet --format cyclonedx --output "__sbom.json" api
|
|
2627
2796
|
artifacts:
|
|
2628
2797
|
paths:
|
|
@@ -2641,17 +2810,16 @@ worker 🧪 test:
|
|
|
2641
2810
|
KUBERNETES_MEMORY_REQUEST: 200Mi
|
|
2642
2811
|
KUBERNETES_MEMORY_LIMIT: 400Mi
|
|
2643
2812
|
script:
|
|
2644
|
-
-
|
|
2813
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
2645
2814
|
- export ENV_SHORT="prod"
|
|
2646
2815
|
- export APP_DIR="api"
|
|
2647
2816
|
- export ENV_TYPE="prod"
|
|
2648
2817
|
- export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
|
|
2649
2818
|
- export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
|
|
2650
2819
|
- 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")"
|
|
2651
|
-
- export
|
|
2820
|
+
- export HOSTNAME="$(printf %s "pan-test-app-prod-worker-$CL_prod_worker_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
2652
2821
|
- export ROOT_URL="https://$(printf %s "pan-test-app-prod-worker-$CL_prod_worker_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
2653
|
-
- export
|
|
2654
|
-
- export HOST_CANONICAL="$(printf %s "pan-test-app-prod-worker-$CL_prod_worker_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
2822
|
+
- export HOSTNAME_INTERNAL="$(printf %s "pan-test-app-prod-worker-$CL_prod_worker_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
2655
2823
|
- export ROOT_URL_INTERNAL="https://$(printf %s "pan-test-app-prod-worker-$CL_prod_worker_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
2656
2824
|
- export CLOUD_SQL_INSTANCE_CONNECTION_NAME="projectId:region:instancename"
|
|
2657
2825
|
- export DB_NAME="pan-test-app-prod-api"
|
|
@@ -2663,19 +2831,19 @@ worker 🧪 test:
|
|
|
2663
2831
|
- export DEPLOY_CLOUD_RUN_REGION="europe-west6"
|
|
2664
2832
|
- export GCLOUD_DEPLOY_credentialsKey="$CL_prod_worker_GCLOUD_DEPLOY_credentialsKey"
|
|
2665
2833
|
- export GCLOUD_RUN_canonicalHostSuffix="$CL_prod_worker_GCLOUD_RUN_canonicalHostSuffix"
|
|
2666
|
-
- export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"
|
|
2834
|
+
- 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\\",\\"DEPLOY_CLOUD_RUN_PROJECT_ID\\",\\"DEPLOY_CLOUD_RUN_REGION\\",\\"GCLOUD_DEPLOY_credentialsKey\\",\\"GCLOUD_RUN_canonicalHostSuffix\\"]"
|
|
2667
2835
|
- export DOCKER_REGISTRY="europe-west6-docker.pkg.dev"
|
|
2668
2836
|
- export DOCKER_IMAGE="europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/prod/worker"
|
|
2669
2837
|
- export DOCKER_CACHE_IMAGE="europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/worker"
|
|
2670
2838
|
- export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"
|
|
2671
2839
|
- export CLOUDSDK_CORE_DISABLE_PROMPTS="1"
|
|
2672
|
-
-
|
|
2673
|
-
-
|
|
2840
|
+
- collapseable_section_end "injectvars"
|
|
2841
|
+
- collapseable_section_start "prepare" "Prepare..."
|
|
2674
2842
|
- gcloud auth activate-service-account --key-file=<(echo "$CL_prod_worker_GCLOUD_DEPLOY_credentialsKey")
|
|
2675
2843
|
- export GCLOUD_PROJECT_NUMBER=$(gcloud projects describe google-project-id --format="value(projectNumber)")
|
|
2676
2844
|
- 'echo "GCLOUD_PROJECT_NUMBER: $GCLOUD_PROJECT_NUMBER"'
|
|
2677
|
-
-
|
|
2678
|
-
-
|
|
2845
|
+
- collapseable_section_end "prepare"
|
|
2846
|
+
- collapseable_section_start "writeenvvars" "Write env vars to file"
|
|
2679
2847
|
- |
|
|
2680
2848
|
cat > ____envvars.yaml <<EOF
|
|
2681
2849
|
ENV_SHORT: |-
|
|
@@ -2685,21 +2853,19 @@ worker 🧪 test:
|
|
|
2685
2853
|
ENV_TYPE: |-
|
|
2686
2854
|
prod
|
|
2687
2855
|
BUILD_INFO_BUILD_ID: |-
|
|
2688
|
-
|
|
2856
|
+
$(printf %s "$(git describe --tags 2>/dev/null || git rev-parse HEAD)" | sed '1!s/^/ /')
|
|
2689
2857
|
BUILD_INFO_BUILD_TIME: |-
|
|
2690
|
-
|
|
2858
|
+
$(printf %s "$CI_JOB_STARTED_AT" | sed '1!s/^/ /')
|
|
2691
2859
|
BUILD_INFO_CURRENT_VERSION: |-
|
|
2692
|
-
|
|
2693
|
-
|
|
2694
|
-
|
|
2860
|
+
$(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/^/ /')
|
|
2861
|
+
HOSTNAME: |-
|
|
2862
|
+
$(printf %s "$(printf %s "pan-test-app-prod-worker-$CL_prod_worker_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
|
|
2695
2863
|
ROOT_URL: |-
|
|
2696
|
-
|
|
2697
|
-
|
|
2698
|
-
|
|
2699
|
-
HOST_CANONICAL: |-
|
|
2700
|
-
$(printf %s "$(printf %s "pan-test-app-prod-worker-$CL_prod_worker_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
|
|
2864
|
+
$(printf %s "https://$(printf %s "pan-test-app-prod-worker-$CL_prod_worker_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
|
|
2865
|
+
HOSTNAME_INTERNAL: |-
|
|
2866
|
+
$(printf %s "$(printf %s "pan-test-app-prod-worker-$CL_prod_worker_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
|
|
2701
2867
|
ROOT_URL_INTERNAL: |-
|
|
2702
|
-
|
|
2868
|
+
$(printf %s "https://$(printf %s "pan-test-app-prod-worker-$CL_prod_worker_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
|
|
2703
2869
|
CLOUD_SQL_INSTANCE_CONNECTION_NAME: |-
|
|
2704
2870
|
projectId:region:instancename
|
|
2705
2871
|
DB_NAME: |-
|
|
@@ -2707,7 +2873,7 @@ worker 🧪 test:
|
|
|
2707
2873
|
DB_USER: |-
|
|
2708
2874
|
my-user
|
|
2709
2875
|
DB_PASSWORD: |-
|
|
2710
|
-
|
|
2876
|
+
$(printf %s "$CL_prod_api_DB_PASSWORD" | sed '1!s/^/ /')
|
|
2711
2877
|
DATABASE_URL: |-
|
|
2712
2878
|
postgresql://$DB_USER:$DB_PASSWORD@localhost/$DB_NAME?host=/cloudsql/$CLOUD_SQL_INSTANCE_CONNECTION_NAME
|
|
2713
2879
|
DATABASE_JDBC_URL: |-
|
|
@@ -2717,24 +2883,24 @@ worker 🧪 test:
|
|
|
2717
2883
|
DEPLOY_CLOUD_RUN_REGION: |-
|
|
2718
2884
|
europe-west6
|
|
2719
2885
|
GCLOUD_RUN_canonicalHostSuffix: |-
|
|
2720
|
-
|
|
2886
|
+
$(printf %s "$CL_prod_worker_GCLOUD_RUN_canonicalHostSuffix" | sed '1!s/^/ /')
|
|
2721
2887
|
_ALL_ENV_VAR_KEYS: |-
|
|
2722
|
-
["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","
|
|
2888
|
+
["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","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]
|
|
2723
2889
|
|
|
2724
2890
|
EOF
|
|
2725
|
-
-
|
|
2726
|
-
-
|
|
2891
|
+
- collapseable_section_end "writeenvvars"
|
|
2892
|
+
- collapseable_section_start "deploy" "Deploy to cloud run"
|
|
2727
2893
|
- set +e
|
|
2728
2894
|
- echo "ensuring Database..."
|
|
2729
2895
|
- gcloud sql databases create pan-test-app-prod-api --instance=instancename --project projectId
|
|
2730
2896
|
- set -e
|
|
2731
2897
|
- gcloud run deploy pan-test-app-prod-worker --command="yarn,start" --image=europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/prod/worker:$DOCKER_IMAGE_TAG --project=google-project-id --region=europe-west6 --set-cloudsql-instances=projectId:region:instancename --labels=customer-name=pan,component-name=worker,app-name=test-app,env-type=prod,env-name=prod,build-type=node,cloud-run-service-name=pan-test-app-prod-worker --env-vars-file=____envvars.yaml --min-instances=0 --max-instances=100 --cpu-throttling --allow-unauthenticated --ingress=all --cpu-boost
|
|
2732
|
-
-
|
|
2733
|
-
-
|
|
2898
|
+
- collapseable_section_end "deploy"
|
|
2899
|
+
- collapseable_section_start "cleanup" "Cleanup"
|
|
2734
2900
|
- gcloud run revisions list --project=google-project-id --region=europe-west6 --service=pan-test-app-prod-worker --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
|
|
2735
2901
|
- gcloud artifacts docker images list europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/prod/worker --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/worker@$version --quiet --delete-tags; done
|
|
2736
2902
|
- gcloud artifacts docker images list europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/worker --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/worker@$version --quiet --delete-tags; done
|
|
2737
|
-
-
|
|
2903
|
+
- collapseable_section_end "cleanup"
|
|
2738
2904
|
- echo 'Uploading SBOM to Dependency Track'
|
|
2739
2905
|
- /dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/worker" "https://$(printf %s "pan-test-app-prod-worker-$CL_prod_worker_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" "__sbom.json" vex.json || true
|
|
2740
2906
|
- echo "CL_GITLAB_ENVIRONMENT_URL=https://$(printf %s "pan-test-app-prod-worker-$CL_prod_worker_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" >> gitlab_environment.env
|
|
@@ -2767,9 +2933,9 @@ worker 🧪 test:
|
|
|
2767
2933
|
KUBERNETES_MEMORY_LIMIT: 400Mi
|
|
2768
2934
|
GIT_STRATEGY: none
|
|
2769
2935
|
script:
|
|
2770
|
-
-
|
|
2936
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
2771
2937
|
- export CLOUDSDK_CORE_DISABLE_PROMPTS="1"
|
|
2772
|
-
-
|
|
2938
|
+
- collapseable_section_end "injectvars"
|
|
2773
2939
|
- set +e
|
|
2774
2940
|
- gcloud auth activate-service-account --key-file=<(echo "$CL_prod_worker_GCLOUD_DEPLOY_credentialsKey")
|
|
2775
2941
|
- gcloud run services delete pan-test-app-prod-worker --project=google-project-id --region=europe-west6
|