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