@catladder/pipeline 1.170.0 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bash/BashExpression.d.ts +2 -6
- package/dist/bash/BashExpression.js +5 -15
- package/dist/bash/bashEscape.d.ts +34 -0
- package/dist/bash/bashEscape.js +114 -0
- package/dist/bash/bashYaml.js +25 -2
- package/dist/bash/getInjectVarsScript.js +4 -2
- package/dist/bash/index.d.ts +2 -0
- package/dist/bash/index.js +26 -0
- package/dist/build/base/createAppBuildJob.js +3 -3
- package/dist/build/base/writeDotEnv.js +6 -4
- package/dist/build/custom/testJob.js +12 -12
- package/dist/build/docker.d.ts +3 -3
- package/dist/build/node/buildJob.js +1 -1
- package/dist/build/node/cache.d.ts +2 -4
- package/dist/build/node/cache.js +3 -24
- package/dist/build/node/testJob.js +11 -11
- package/dist/build/rails/build.js +1 -1
- package/dist/build/rails/test.js +8 -8
- package/dist/build/types.d.ts +0 -10
- package/dist/constants.js +1 -1
- package/dist/context/createComponentContext.js +0 -1
- package/dist/context/getEnvConfig.js +2 -1
- package/dist/context/getEnvironment.js +1 -2
- package/dist/context/getEnvironmentVariables.d.ts +5 -6
- package/dist/context/getEnvironmentVariables.js +50 -38
- package/dist/deploy/base/deploy.js +3 -3
- package/dist/deploy/cloudRun/createJobs/getCloudRunDeployScripts.js +2 -2
- package/dist/deploy/cloudRun/index.js +2 -2
- package/dist/deploy/cloudRun/utils/getServiceName.d.ts +1 -1
- package/dist/deploy/kubernetes/cloudSql/index.d.ts +2 -2
- package/dist/deploy/kubernetes/cloudSql/index.js +3 -14
- package/dist/deploy/kubernetes/deployJob.js +1 -3
- package/dist/deploy/kubernetes/index.js +2 -2
- package/dist/deploy/kubernetes/kubeEnv.d.ts +3 -3
- package/dist/deploy/kubernetes/kubeValues.d.ts +3 -4
- package/dist/deploy/kubernetes/kubeValues.js +2 -3
- package/dist/deploy/types/base.d.ts +0 -6
- package/dist/deploy/types/kubernetes.d.ts +1 -34
- package/dist/globalScriptFunctions/index.d.ts +14 -0
- package/dist/globalScriptFunctions/index.js +37 -0
- package/dist/index.d.ts +3 -1
- package/dist/index.js +3 -1
- package/dist/pipeline/gitlab/createGitlabJobs.js +3 -5
- package/dist/pipeline/gitlab/createGitlabPipeline.d.ts +1 -0
- package/dist/pipeline/gitlab/createGitlabPipeline.js +38 -2
- package/dist/pipeline/packageManager.js +1 -1
- package/dist/runner/index.d.ts +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/types/config.d.ts +6 -9
- package/dist/types/context.d.ts +2 -9
- package/dist/types/gitlab-types.d.ts +1 -0
- package/dist/types/jobs.d.ts +0 -8
- package/dist/utils/gitlab.js +4 -1
- package/dist/utils/writeFiles.js +1 -7
- package/dist/variables/VariableValue.d.ts +3 -0
- package/dist/variables/VariableValue.js +5 -0
- package/dist/variables/VariableValueContainingReferences.d.ts +24 -0
- package/dist/variables/VariableValueContainingReferences.js +97 -0
- package/dist/variables/__tests__/resolveAllReferences.test.js +219 -0
- package/dist/variables/__tests__/resolveAllReferencesOnce.test.d.ts +1 -0
- package/dist/variables/__tests__/resolveAllReferencesOnce.test.js +171 -0
- package/dist/variables/__tests__/resolveReferencesOnce.test.d.ts +1 -0
- package/dist/variables/__tests__/resolveReferencesOnce.test.js +202 -0
- package/dist/variables/__tests__/variableValue.test.d.ts +1 -0
- package/dist/variables/__tests__/variableValue.test.js +36 -0
- package/dist/variables/resolveAllReferences.d.ts +3 -0
- package/dist/{bash/replaceAsync.js → variables/resolveAllReferences.js} +60 -41
- package/dist/variables/resolveAllReferencesOnce.d.ts +5 -0
- package/dist/variables/resolveAllReferencesOnce.js +191 -0
- package/dist/variables/resolveReferencesOnce.d.ts +8 -0
- package/dist/variables/resolveReferencesOnce.js +22 -0
- package/examples/__snapshots__/cloud-run-http2.test.ts.snap +312 -238
- package/examples/__snapshots__/cloud-run-memory-limit.test.ts.snap +312 -238
- package/examples/__snapshots__/cloud-run-meteor-with-worker.test.ts.snap +312 -222
- package/examples/__snapshots__/cloud-run-nextjs.test.ts.snap +1436 -0
- package/examples/__snapshots__/cloud-run-no-cpu-throttling.test.ts.snap +312 -238
- package/examples/__snapshots__/cloud-run-no-service.test.ts.snap +316 -238
- package/examples/__snapshots__/cloud-run-non-public.test.ts.snap +312 -238
- package/examples/__snapshots__/cloud-run-post-stop-job.test.ts.snap +313 -238
- package/examples/__snapshots__/cloud-run-service-custom-vpc-connector.test.ts.snap +312 -238
- package/examples/__snapshots__/cloud-run-service-custom-vpc.test.ts.snap +312 -238
- package/examples/__snapshots__/cloud-run-service-gen2.test.ts.snap +312 -238
- package/examples/__snapshots__/cloud-run-service-increase-timout.test.ts.snap +312 -238
- package/examples/__snapshots__/cloud-run-service-with-volumes.test.ts.snap +316 -238
- package/examples/__snapshots__/cloud-run-storybook.test.ts.snap +294 -220
- package/examples/__snapshots__/cloud-run-with-ngnix.test.ts.snap +312 -238
- package/examples/__snapshots__/cloud-run-with-sql-reuse-db.test.ts.snap +652 -486
- package/examples/__snapshots__/cloud-run-with-sql.test.ts.snap +282 -288
- package/examples/__snapshots__/cloud-run-with-worker.test.ts.snap +312 -238
- package/examples/__snapshots__/custom-build-job-with-tests.test.ts.snap +284 -194
- package/examples/__snapshots__/custom-build-job.test.ts.snap +278 -188
- package/examples/__snapshots__/custom-deploy.test.ts.snap +220 -154
- package/examples/__snapshots__/custom-envs.test.ts.snap +216 -126
- package/examples/__snapshots__/custom-sbom-java.test.ts.snap +278 -188
- package/examples/__snapshots__/git-submodule.test.ts.snap +312 -238
- package/examples/__snapshots__/kubernetes-application-customization.test.ts.snap +231 -253
- package/examples/__snapshots__/kubernetes-with-cloud-sql.test.ts.snap +240 -262
- package/examples/__snapshots__/kubernetes-with-jobs.test.ts.snap +504 -506
- package/examples/__snapshots__/kubernetes-with-mongodb.test.ts.snap +239 -261
- package/examples/__snapshots__/local-dot-env.test.ts.snap +236 -238
- package/examples/__snapshots__/meteor-kubernetes.test.ts.snap +236 -242
- package/examples/__snapshots__/multiline-var.test.ts.snap +1355 -973
- package/examples/__snapshots__/native-app.test.ts.snap +438 -392
- package/examples/__snapshots__/node-build-with-custom-image.test.ts.snap +312 -238
- package/examples/__snapshots__/node-build-with-docker-additions.test.ts.snap +312 -238
- package/examples/__snapshots__/rails-k8s-with-worker-dockerfile.test.ts.snap +186 -188
- package/examples/__snapshots__/rails-k8s-with-worker.test.ts.snap +162 -164
- package/examples/__snapshots__/referencing-other-vars.test.ts.snap +4741 -0
- package/examples/__snapshots__/wait-for-other-deploy.test.ts.snap +330 -228
- package/examples/__snapshots__/{workspace-api-www-custom-cache.test.ts.snap → workspace-api-www-turbo-cache.test.ts.snap} +457 -499
- package/examples/__snapshots__/workspace-api-www.test.ts.snap +452 -482
- package/examples/{workspace-api-www-custom-cache.test.ts → cloud-run-nextjs.test.ts} +2 -2
- package/examples/cloud-run-nextjs.ts +28 -0
- package/examples/cloud-run-with-sql.ts +0 -1
- package/examples/kubernetes-application-customization.ts +1 -0
- package/examples/kubernetes-with-cloud-sql.ts +1 -0
- package/examples/kubernetes-with-jobs.ts +1 -0
- package/examples/kubernetes-with-mongodb.ts +1 -0
- package/examples/meteor-kubernetes.ts +1 -1
- package/examples/native-app.ts +10 -7
- package/examples/rails-k8s-with-worker.ts +7 -1
- package/examples/{kubernetes-with-cloud-sql-legacy.test.ts → referencing-other-vars.test.ts} +2 -2
- package/examples/referencing-other-vars.ts +83 -0
- package/examples/workspace-api-www-turbo-cache.test.ts +11 -0
- package/examples/{workspace-api-www-custom-cache.ts → workspace-api-www-turbo-cache.ts} +4 -3
- package/examples/workspace-api-www.ts +3 -2
- package/package.json +2 -6
- package/src/bash/BashExpression.ts +10 -13
- package/src/bash/bashEscape.ts +158 -0
- package/src/bash/bashYaml.ts +36 -2
- package/src/bash/getInjectVarsScript.ts +11 -2
- package/src/bash/index.ts +2 -0
- package/src/build/base/createAppBuildJob.ts +0 -1
- package/src/build/base/writeDotEnv.ts +6 -6
- package/src/build/custom/testJob.ts +0 -1
- package/src/build/node/buildJob.ts +2 -2
- package/src/build/node/cache.ts +0 -29
- package/src/build/node/testJob.ts +0 -1
- package/src/build/rails/build.ts +0 -1
- package/src/build/rails/test.ts +0 -1
- package/src/build/types.ts +0 -13
- package/src/context/createComponentContext.ts +0 -1
- package/src/context/getEnvConfig.ts +2 -2
- package/src/context/getEnvironment.ts +1 -1
- package/src/context/getEnvironmentContext.ts +1 -1
- package/src/context/getEnvironmentVariables.ts +44 -51
- package/src/deploy/base/deploy.ts +1 -1
- package/src/deploy/cloudRun/createJobs/getCloudRunDeployScripts.ts +4 -12
- package/src/deploy/cloudRun/index.ts +2 -2
- package/src/deploy/kubernetes/cloudSql/index.ts +3 -16
- package/src/deploy/kubernetes/deployJob.ts +0 -2
- package/src/deploy/kubernetes/index.ts +2 -2
- package/src/deploy/kubernetes/kubeEnv.ts +3 -3
- package/src/deploy/kubernetes/kubeValues.ts +5 -8
- package/src/deploy/types/base.ts +0 -6
- package/src/deploy/types/kubernetes.ts +1 -36
- package/src/globalScriptFunctions/index.ts +30 -0
- package/src/index.ts +2 -0
- package/src/pipeline/gitlab/createGitlabJobs.ts +1 -4
- package/src/pipeline/gitlab/createGitlabPipeline.ts +8 -1
- package/src/pipeline/packageManager.ts +7 -5
- package/src/runner/index.ts +0 -1
- package/src/types/config.ts +6 -9
- package/src/types/context.ts +3 -9
- package/src/types/gitlab-types.ts +1 -0
- package/src/types/jobs.ts +0 -8
- package/src/utils/gitlab.ts +19 -2
- package/src/utils/writeFiles.ts +1 -2
- package/src/variables/VariableValue.ts +6 -0
- package/src/variables/VariableValueContainingReferences.ts +89 -0
- package/src/variables/__tests__/resolveAllReferences.test.ts +110 -0
- package/src/variables/__tests__/resolveAllReferencesOnce.test.ts +64 -0
- package/src/variables/__tests__/resolveReferencesOnce.test.ts +117 -0
- package/src/variables/__tests__/variableValue.test.ts +73 -0
- package/src/variables/resolveAllReferences.ts +46 -0
- package/src/variables/resolveAllReferencesOnce.ts +44 -0
- package/src/variables/resolveReferencesOnce.ts +29 -0
- package/bin/catladder-gitlab-dev.js +0 -3
- package/bin/catladder-gitlab.js +0 -3
- package/dist/bash/replaceAsync.d.ts +0 -2
- package/dist/bundles/catladder-gitlab/index.js +0 -15
- package/dist/context/__tests__/resolveReferences.test.js +0 -368
- package/dist/context/resolveReferences.d.ts +0 -6
- package/dist/context/resolveReferences.js +0 -286
- package/dist/deploy/kubernetes/processSecretsAsFiles.d.ts +0 -85
- package/dist/deploy/kubernetes/processSecretsAsFiles.js +0 -33
- package/examples/__snapshots__/kubernetes-with-cloud-sql-legacy.test.ts.snap +0 -1795
- package/examples/kubernetes-with-cloud-sql-legacy.ts +0 -35
- package/scripts/bundle +0 -2
- package/src/bash/replaceAsync.ts +0 -54
- package/src/context/__tests__/resolveReferences.test.ts +0 -148
- package/src/context/resolveReferences.ts +0 -93
- package/src/deploy/kubernetes/processSecretsAsFiles.ts +0 -35
- /package/dist/{context/__tests__/resolveReferences.test.d.ts → variables/__tests__/resolveAllReferences.test.d.ts} +0 -0
|
@@ -45,6 +45,36 @@ variables:
|
|
|
45
45
|
CACHE_COMPRESSION_LEVEL: fast
|
|
46
46
|
TRANSFER_METER_FREQUENCY: 5s
|
|
47
47
|
GIT_DEPTH: '1'
|
|
48
|
+
before_script:
|
|
49
|
+
- |-
|
|
50
|
+
function escapeForDotEnv () {
|
|
51
|
+
input="\${1:-$(cat)}"
|
|
52
|
+
input="\${input//$'\\n'/\\\\n}"
|
|
53
|
+
if [[ "$input" == *\\\\n* ]]; then
|
|
54
|
+
if [[ "$input" == *\\"* && "$input" == *\\'* && "$input" == *\\\`* ]]; then
|
|
55
|
+
printf "\\"%s\\"\\n" "$input"
|
|
56
|
+
elif [[ "$input" == *\\"* && "$input" == *\\'* ]]; then
|
|
57
|
+
printf "\`%s\`\\n" "$input"
|
|
58
|
+
elif [[ "$input" == *\\"* ]]; then
|
|
59
|
+
printf "'%s'\\n" "$input"
|
|
60
|
+
else
|
|
61
|
+
printf "\\"%s\\"\\n" "$input"
|
|
62
|
+
fi
|
|
63
|
+
else
|
|
64
|
+
printf "%s\\n" "$input"
|
|
65
|
+
fi
|
|
66
|
+
}
|
|
67
|
+
- |-
|
|
68
|
+
function collapseable_section_start () {
|
|
69
|
+
local section_title="\${1}"
|
|
70
|
+
local section_description="\${2:-$section_title}"
|
|
71
|
+
echo -e "section_start:\`date +%s\`:\${section_title}[collapsed=true]\\r\\e[0K\${section_description}"
|
|
72
|
+
}
|
|
73
|
+
- |-
|
|
74
|
+
function collapseable_section_end () {
|
|
75
|
+
local section_title="\${1}"
|
|
76
|
+
echo -e "section_end:\`date +%s\`:\${section_title}\\r\\e[0K"
|
|
77
|
+
}
|
|
48
78
|
api 🛡 audit:
|
|
49
79
|
stage: test
|
|
50
80
|
image: path/to/docker/jobs-default:the-version
|
|
@@ -53,9 +83,9 @@ api 🛡 audit:
|
|
|
53
83
|
KUBERNETES_MEMORY_REQUEST: 1Gi
|
|
54
84
|
KUBERNETES_MEMORY_LIMIT: 4Gi
|
|
55
85
|
script:
|
|
56
|
-
-
|
|
86
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
57
87
|
- export APP_PATH="api"
|
|
58
|
-
-
|
|
88
|
+
- collapseable_section_end "injectvars"
|
|
59
89
|
- cd api
|
|
60
90
|
- yarn npm audit --environment production
|
|
61
91
|
rules:
|
|
@@ -79,21 +109,21 @@ api 👮 lint:
|
|
|
79
109
|
KUBERNETES_MEMORY_REQUEST: 1Gi
|
|
80
110
|
KUBERNETES_MEMORY_LIMIT: 4Gi
|
|
81
111
|
script:
|
|
82
|
-
-
|
|
112
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
83
113
|
- export APP_PATH="api"
|
|
84
|
-
-
|
|
85
|
-
-
|
|
114
|
+
- collapseable_section_end "injectvars"
|
|
115
|
+
- collapseable_section_start "nodeinstall" "Ensure node version"
|
|
86
116
|
- if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
|
|
87
117
|
- if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
|
|
88
|
-
-
|
|
118
|
+
- collapseable_section_end "nodeinstall"
|
|
89
119
|
- cd api
|
|
90
|
-
-
|
|
120
|
+
- collapseable_section_start "nodeinstall" "Ensure node version"
|
|
91
121
|
- if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
|
|
92
122
|
- if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
|
|
93
|
-
-
|
|
94
|
-
-
|
|
123
|
+
- collapseable_section_end "nodeinstall"
|
|
124
|
+
- collapseable_section_start "yarninstall" "Yarn install"
|
|
95
125
|
- yarn install --immutable
|
|
96
|
-
-
|
|
126
|
+
- collapseable_section_end "yarninstall"
|
|
97
127
|
- yarn lint
|
|
98
128
|
cache:
|
|
99
129
|
- key: api-yarn
|
|
@@ -120,21 +150,21 @@ api 🧪 test:
|
|
|
120
150
|
KUBERNETES_MEMORY_REQUEST: 1Gi
|
|
121
151
|
KUBERNETES_MEMORY_LIMIT: 4Gi
|
|
122
152
|
script:
|
|
123
|
-
-
|
|
153
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
124
154
|
- export APP_PATH="api"
|
|
125
|
-
-
|
|
126
|
-
-
|
|
155
|
+
- collapseable_section_end "injectvars"
|
|
156
|
+
- collapseable_section_start "nodeinstall" "Ensure node version"
|
|
127
157
|
- if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
|
|
128
158
|
- if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
|
|
129
|
-
-
|
|
159
|
+
- collapseable_section_end "nodeinstall"
|
|
130
160
|
- cd api
|
|
131
|
-
-
|
|
161
|
+
- collapseable_section_start "nodeinstall" "Ensure node version"
|
|
132
162
|
- if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
|
|
133
163
|
- if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
|
|
134
|
-
-
|
|
135
|
-
-
|
|
164
|
+
- collapseable_section_end "nodeinstall"
|
|
165
|
+
- collapseable_section_start "yarninstall" "Yarn install"
|
|
136
166
|
- yarn install --immutable
|
|
137
|
-
-
|
|
167
|
+
- collapseable_section_end "yarninstall"
|
|
138
168
|
- yarn test
|
|
139
169
|
cache:
|
|
140
170
|
- key: api-yarn
|
|
@@ -161,37 +191,36 @@ 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"
|
|
182
211
|
- echo '{"id":"$(git describe --tags 2>/dev/null || git rev-parse HEAD)","time":"$CI_JOB_STARTED_AT"}' > api/__build_info.json
|
|
183
|
-
-
|
|
212
|
+
- collapseable_section_start "nodeinstall" "Ensure node version"
|
|
184
213
|
- if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
|
|
185
214
|
- if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
|
|
186
|
-
-
|
|
215
|
+
- collapseable_section_end "nodeinstall"
|
|
187
216
|
- cd api
|
|
188
|
-
-
|
|
217
|
+
- collapseable_section_start "nodeinstall" "Ensure node version"
|
|
189
218
|
- if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
|
|
190
219
|
- if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
|
|
191
|
-
-
|
|
192
|
-
-
|
|
220
|
+
- collapseable_section_end "nodeinstall"
|
|
221
|
+
- collapseable_section_start "yarninstall" "Yarn install"
|
|
193
222
|
- yarn install --immutable
|
|
194
|
-
-
|
|
223
|
+
- collapseable_section_end "yarninstall"
|
|
195
224
|
- yarn build
|
|
196
225
|
cache:
|
|
197
226
|
- key: api-yarn
|
|
@@ -202,10 +231,6 @@ api 🧪 test:
|
|
|
202
231
|
policy: pull-push
|
|
203
232
|
paths:
|
|
204
233
|
- api/node_modules
|
|
205
|
-
- key: api-next-cache
|
|
206
|
-
policy: pull-push
|
|
207
|
-
paths:
|
|
208
|
-
- api/.next/cache
|
|
209
234
|
artifacts:
|
|
210
235
|
paths:
|
|
211
236
|
- api/__build_info.json
|
|
@@ -238,7 +263,7 @@ api 🧪 test:
|
|
|
238
263
|
KUBERNETES_MEMORY_REQUEST: 1Gi
|
|
239
264
|
KUBERNETES_MEMORY_LIMIT: 2Gi
|
|
240
265
|
script:
|
|
241
|
-
-
|
|
266
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
242
267
|
- export APP_DIR="api"
|
|
243
268
|
- export DOCKER_BUILD_CONTEXT="."
|
|
244
269
|
- export DOCKER_REGISTRY="europe-west6-docker.pkg.dev"
|
|
@@ -254,20 +279,20 @@ api 🧪 test:
|
|
|
254
279
|
COPY --chown=node:node api/yarn.lock /app/api/yarn.lock
|
|
255
280
|
COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
|
|
256
281
|
COPY --chown=node:node .yarn /app/.yarn"
|
|
257
|
-
-
|
|
282
|
+
- collapseable_section_end "injectvars"
|
|
258
283
|
- ensureNodeDockerfile
|
|
259
|
-
-
|
|
284
|
+
- collapseable_section_start "docker-login" "Docker Login"
|
|
260
285
|
- gcloud auth activate-service-account --key-file=<(echo "$CL_dev_api_GCLOUD_DEPLOY_credentialsKey")
|
|
261
286
|
- gcloud auth configure-docker europe-west6-docker.pkg.dev
|
|
262
|
-
-
|
|
263
|
-
-
|
|
287
|
+
- collapseable_section_end "docker-login"
|
|
288
|
+
- collapseable_section_start "docker-build" "Docker build"
|
|
264
289
|
- 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
|
-
-
|
|
290
|
+
- collapseable_section_end "docker-build"
|
|
291
|
+
- collapseable_section_start "docker-push" "Docker push and tag"
|
|
267
292
|
- docker push $DOCKER_IMAGE:$DOCKER_IMAGE_TAG
|
|
268
293
|
- docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG $DOCKER_CACHE_IMAGE
|
|
269
294
|
- docker push $DOCKER_CACHE_IMAGE
|
|
270
|
-
-
|
|
295
|
+
- collapseable_section_end "docker-push"
|
|
271
296
|
cache:
|
|
272
297
|
- key: api-yarn
|
|
273
298
|
policy: pull
|
|
@@ -286,8 +311,8 @@ api 🧪 test:
|
|
|
286
311
|
image: aquasec/trivy:0.38.3
|
|
287
312
|
variables: {}
|
|
288
313
|
script:
|
|
289
|
-
-
|
|
290
|
-
-
|
|
314
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
315
|
+
- collapseable_section_end "injectvars"
|
|
291
316
|
- trivy fs --quiet --format cyclonedx --output "__sbom.json" api
|
|
292
317
|
artifacts:
|
|
293
318
|
paths:
|
|
@@ -308,35 +333,34 @@ api 🧪 test:
|
|
|
308
333
|
KUBERNETES_MEMORY_REQUEST: 200Mi
|
|
309
334
|
KUBERNETES_MEMORY_LIMIT: 400Mi
|
|
310
335
|
script:
|
|
311
|
-
-
|
|
336
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
312
337
|
- export ENV_SHORT="dev"
|
|
313
338
|
- export APP_DIR="api"
|
|
314
339
|
- export ENV_TYPE="dev"
|
|
315
340
|
- export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
|
|
316
341
|
- export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
|
|
317
342
|
- 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
|
|
343
|
+
- export HOSTNAME="$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
319
344
|
- 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)}')"
|
|
345
|
+
- export HOSTNAME_INTERNAL="$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
322
346
|
- export ROOT_URL_INTERNAL="https://$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
323
347
|
- export DEPLOY_CLOUD_RUN_PROJECT_ID="google-project-id"
|
|
324
348
|
- export DEPLOY_CLOUD_RUN_REGION="europe-west6"
|
|
325
349
|
- export GCLOUD_DEPLOY_credentialsKey="$CL_dev_api_GCLOUD_DEPLOY_credentialsKey"
|
|
326
350
|
- 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\\",\\"
|
|
351
|
+
- 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
352
|
- export DOCKER_REGISTRY="europe-west6-docker.pkg.dev"
|
|
329
353
|
- export DOCKER_IMAGE="europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/dev/api"
|
|
330
354
|
- export DOCKER_CACHE_IMAGE="europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/api"
|
|
331
355
|
- export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"
|
|
332
356
|
- export CLOUDSDK_CORE_DISABLE_PROMPTS="1"
|
|
333
|
-
-
|
|
334
|
-
-
|
|
357
|
+
- collapseable_section_end "injectvars"
|
|
358
|
+
- collapseable_section_start "prepare" "Prepare..."
|
|
335
359
|
- gcloud auth activate-service-account --key-file=<(echo "$CL_dev_api_GCLOUD_DEPLOY_credentialsKey")
|
|
336
360
|
- export GCLOUD_PROJECT_NUMBER=$(gcloud projects describe google-project-id --format="value(projectNumber)")
|
|
337
361
|
- 'echo "GCLOUD_PROJECT_NUMBER: $GCLOUD_PROJECT_NUMBER"'
|
|
338
|
-
-
|
|
339
|
-
-
|
|
362
|
+
- collapseable_section_end "prepare"
|
|
363
|
+
- collapseable_section_start "writeenvvars" "Write env vars to file"
|
|
340
364
|
- |
|
|
341
365
|
cat > ____envvars.yaml <<EOF
|
|
342
366
|
ENV_SHORT: |-
|
|
@@ -346,40 +370,38 @@ api 🧪 test:
|
|
|
346
370
|
ENV_TYPE: |-
|
|
347
371
|
dev
|
|
348
372
|
BUILD_INFO_BUILD_ID: |-
|
|
349
|
-
|
|
373
|
+
$(printf %s "$(git describe --tags 2>/dev/null || git rev-parse HEAD)" | sed '1!s/^/ /')
|
|
350
374
|
BUILD_INFO_BUILD_TIME: |-
|
|
351
|
-
|
|
375
|
+
$(printf %s "$CI_JOB_STARTED_AT" | sed '1!s/^/ /')
|
|
352
376
|
BUILD_INFO_CURRENT_VERSION: |-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
377
|
+
$(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/^/ /')
|
|
378
|
+
HOSTNAME: |-
|
|
379
|
+
$(printf %s "$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
|
|
356
380
|
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/^/ /')
|
|
381
|
+
$(printf %s "https://$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
|
|
382
|
+
HOSTNAME_INTERNAL: |-
|
|
383
|
+
$(printf %s "$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
|
|
362
384
|
ROOT_URL_INTERNAL: |-
|
|
363
|
-
|
|
385
|
+
$(printf %s "https://$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
|
|
364
386
|
DEPLOY_CLOUD_RUN_PROJECT_ID: |-
|
|
365
387
|
google-project-id
|
|
366
388
|
DEPLOY_CLOUD_RUN_REGION: |-
|
|
367
389
|
europe-west6
|
|
368
390
|
GCLOUD_RUN_canonicalHostSuffix: |-
|
|
369
|
-
|
|
391
|
+
$(printf %s "$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | sed '1!s/^/ /')
|
|
370
392
|
_ALL_ENV_VAR_KEYS: |-
|
|
371
|
-
["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","
|
|
393
|
+
["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
394
|
|
|
373
395
|
EOF
|
|
374
|
-
-
|
|
375
|
-
-
|
|
396
|
+
- collapseable_section_end "writeenvvars"
|
|
397
|
+
- collapseable_section_start "deploy" "Deploy to cloud run"
|
|
376
398
|
- gcloud run deploy pan-test-app-dev-api --command="yarn,start" --image=europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/dev/api:$DOCKER_IMAGE_TAG --project=google-project-id --region=europe-west6 --labels=customer-name=pan,component-name=api,app-name=test-app,env-type=dev,env-name=dev,build-type=node,cloud-run-service-name=pan-test-app-dev-api --env-vars-file=____envvars.yaml --min-instances=0 --max-instances=100 --cpu-throttling --allow-unauthenticated --ingress=all --cpu-boost
|
|
377
|
-
-
|
|
378
|
-
-
|
|
399
|
+
- collapseable_section_end "deploy"
|
|
400
|
+
- collapseable_section_start "cleanup" "Cleanup"
|
|
379
401
|
- gcloud run revisions list --project=google-project-id --region=europe-west6 --service=pan-test-app-dev-api --limit=unlimited --sort-by=metadata.creationTimestamp --format="value(name)" --filter='(status.conditions.status=False OR status.conditions.status=Unknown)' | while read -r revisionname; do gcloud run revisions delete --project=google-project-id --region=europe-west6 --quiet $revisionname ; done
|
|
380
402
|
- gcloud artifacts docker images list europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/dev/api --sort-by=~CREATE_TIME --format="value(version)" | tail -n +2 | while read -r version; do gcloud artifacts docker images delete europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/dev/api@$version --quiet --delete-tags; done
|
|
381
403
|
- gcloud artifacts docker images list europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/api --sort-by=~CREATE_TIME --format="value(version)" | tail -n +2 | while read -r version; do gcloud artifacts docker images delete europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/api@$version --quiet --delete-tags; done
|
|
382
|
-
-
|
|
404
|
+
- collapseable_section_end "cleanup"
|
|
383
405
|
- echo 'Uploading SBOM to Dependency Track'
|
|
384
406
|
- /dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/api" "https://$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" "__sbom.json" vex.json || true
|
|
385
407
|
- echo "CL_GITLAB_ENVIRONMENT_URL=https://$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" >> gitlab_environment.env
|
|
@@ -421,9 +443,9 @@ api 🧪 test:
|
|
|
421
443
|
KUBERNETES_MEMORY_LIMIT: 400Mi
|
|
422
444
|
GIT_STRATEGY: none
|
|
423
445
|
script:
|
|
424
|
-
-
|
|
446
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
425
447
|
- export CLOUDSDK_CORE_DISABLE_PROMPTS="1"
|
|
426
|
-
-
|
|
448
|
+
- collapseable_section_end "injectvars"
|
|
427
449
|
- set +e
|
|
428
450
|
- gcloud auth activate-service-account --key-file=<(echo "$CL_dev_api_GCLOUD_DEPLOY_credentialsKey")
|
|
429
451
|
- gcloud run services delete pan-test-app-dev-api --project=google-project-id --region=europe-west6
|
|
@@ -459,37 +481,36 @@ api 🧪 test:
|
|
|
459
481
|
KUBERNETES_MEMORY_REQUEST: 1Gi
|
|
460
482
|
KUBERNETES_MEMORY_LIMIT: 4Gi
|
|
461
483
|
script:
|
|
462
|
-
-
|
|
484
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
463
485
|
- export ENV_SHORT="review"
|
|
464
486
|
- export APP_DIR="api"
|
|
465
487
|
- export ENV_TYPE="review"
|
|
466
488
|
- export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
|
|
467
489
|
- export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
|
|
468
490
|
- export BUILD_INFO_CURRENT_VERSION="$(tag=$(git ls-remote origin "refs/tags/v*[0-9]" 2>/dev/null | cut -f 2- | sort -V | tail -1 | sed 's/refs\\/tags\\/v//'); [ -z "$tag" ] && echo "0.0.0" || echo "$tag")"
|
|
469
|
-
- export
|
|
491
|
+
- export HOSTNAME="$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api-$CL_review_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
470
492
|
- export ROOT_URL="https://$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api-$CL_review_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
471
|
-
- export
|
|
472
|
-
- export HOST_CANONICAL="$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api-$CL_review_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
493
|
+
- export HOSTNAME_INTERNAL="$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api-$CL_review_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
473
494
|
- export ROOT_URL_INTERNAL="https://$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api-$CL_review_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
474
495
|
- export DEPLOY_CLOUD_RUN_PROJECT_ID="google-project-id"
|
|
475
496
|
- export DEPLOY_CLOUD_RUN_REGION="europe-west6"
|
|
476
497
|
- export GCLOUD_DEPLOY_credentialsKey="$CL_review_api_GCLOUD_DEPLOY_credentialsKey"
|
|
477
498
|
- export GCLOUD_RUN_canonicalHostSuffix="$CL_review_api_GCLOUD_RUN_canonicalHostSuffix"
|
|
478
|
-
- export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"
|
|
479
|
-
-
|
|
499
|
+
- 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\\"]"
|
|
500
|
+
- collapseable_section_end "injectvars"
|
|
480
501
|
- echo '{"id":"$(git describe --tags 2>/dev/null || git rev-parse HEAD)","time":"$CI_JOB_STARTED_AT"}' > api/__build_info.json
|
|
481
|
-
-
|
|
502
|
+
- collapseable_section_start "nodeinstall" "Ensure node version"
|
|
482
503
|
- if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
|
|
483
504
|
- if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
|
|
484
|
-
-
|
|
505
|
+
- collapseable_section_end "nodeinstall"
|
|
485
506
|
- cd api
|
|
486
|
-
-
|
|
507
|
+
- collapseable_section_start "nodeinstall" "Ensure node version"
|
|
487
508
|
- if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
|
|
488
509
|
- if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
|
|
489
|
-
-
|
|
490
|
-
-
|
|
510
|
+
- collapseable_section_end "nodeinstall"
|
|
511
|
+
- collapseable_section_start "yarninstall" "Yarn install"
|
|
491
512
|
- yarn install --immutable
|
|
492
|
-
-
|
|
513
|
+
- collapseable_section_end "yarninstall"
|
|
493
514
|
- yarn build
|
|
494
515
|
cache:
|
|
495
516
|
- key: api-yarn
|
|
@@ -500,10 +521,6 @@ api 🧪 test:
|
|
|
500
521
|
policy: pull-push
|
|
501
522
|
paths:
|
|
502
523
|
- api/node_modules
|
|
503
|
-
- key: api-next-cache
|
|
504
|
-
policy: pull-push
|
|
505
|
-
paths:
|
|
506
|
-
- api/.next/cache
|
|
507
524
|
artifacts:
|
|
508
525
|
paths:
|
|
509
526
|
- api/__build_info.json
|
|
@@ -534,7 +551,7 @@ api 🧪 test:
|
|
|
534
551
|
KUBERNETES_MEMORY_REQUEST: 1Gi
|
|
535
552
|
KUBERNETES_MEMORY_LIMIT: 2Gi
|
|
536
553
|
script:
|
|
537
|
-
-
|
|
554
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
538
555
|
- export APP_DIR="api"
|
|
539
556
|
- export DOCKER_BUILD_CONTEXT="."
|
|
540
557
|
- export DOCKER_REGISTRY="europe-west6-docker.pkg.dev"
|
|
@@ -550,20 +567,20 @@ api 🧪 test:
|
|
|
550
567
|
COPY --chown=node:node api/yarn.lock /app/api/yarn.lock
|
|
551
568
|
COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
|
|
552
569
|
COPY --chown=node:node .yarn /app/.yarn"
|
|
553
|
-
-
|
|
570
|
+
- collapseable_section_end "injectvars"
|
|
554
571
|
- ensureNodeDockerfile
|
|
555
|
-
-
|
|
572
|
+
- collapseable_section_start "docker-login" "Docker Login"
|
|
556
573
|
- gcloud auth activate-service-account --key-file=<(echo "$CL_review_api_GCLOUD_DEPLOY_credentialsKey")
|
|
557
574
|
- gcloud auth configure-docker europe-west6-docker.pkg.dev
|
|
558
|
-
-
|
|
559
|
-
-
|
|
575
|
+
- collapseable_section_end "docker-login"
|
|
576
|
+
- collapseable_section_start "docker-build" "Docker build"
|
|
560
577
|
- 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
|
|
561
|
-
-
|
|
562
|
-
-
|
|
578
|
+
- collapseable_section_end "docker-build"
|
|
579
|
+
- collapseable_section_start "docker-push" "Docker push and tag"
|
|
563
580
|
- docker push $DOCKER_IMAGE:$DOCKER_IMAGE_TAG
|
|
564
581
|
- docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG $DOCKER_CACHE_IMAGE
|
|
565
582
|
- docker push $DOCKER_CACHE_IMAGE
|
|
566
|
-
-
|
|
583
|
+
- collapseable_section_end "docker-push"
|
|
567
584
|
cache:
|
|
568
585
|
- key: api-yarn
|
|
569
586
|
policy: pull
|
|
@@ -580,8 +597,8 @@ api 🧪 test:
|
|
|
580
597
|
image: aquasec/trivy:0.38.3
|
|
581
598
|
variables: {}
|
|
582
599
|
script:
|
|
583
|
-
-
|
|
584
|
-
-
|
|
600
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
601
|
+
- collapseable_section_end "injectvars"
|
|
585
602
|
- trivy fs --quiet --format cyclonedx --output "__sbom.json" api
|
|
586
603
|
artifacts:
|
|
587
604
|
paths:
|
|
@@ -600,35 +617,34 @@ api 🧪 test:
|
|
|
600
617
|
KUBERNETES_MEMORY_REQUEST: 200Mi
|
|
601
618
|
KUBERNETES_MEMORY_LIMIT: 400Mi
|
|
602
619
|
script:
|
|
603
|
-
-
|
|
620
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
604
621
|
- export ENV_SHORT="review"
|
|
605
622
|
- export APP_DIR="api"
|
|
606
623
|
- export ENV_TYPE="review"
|
|
607
624
|
- export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
|
|
608
625
|
- export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
|
|
609
626
|
- 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")"
|
|
610
|
-
- export
|
|
627
|
+
- 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)}')"
|
|
611
628
|
- 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)}')"
|
|
612
|
-
- export
|
|
613
|
-
- 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)}')"
|
|
629
|
+
- 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)}')"
|
|
614
630
|
- 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)}')"
|
|
615
631
|
- export DEPLOY_CLOUD_RUN_PROJECT_ID="google-project-id"
|
|
616
632
|
- export DEPLOY_CLOUD_RUN_REGION="europe-west6"
|
|
617
633
|
- export GCLOUD_DEPLOY_credentialsKey="$CL_review_api_GCLOUD_DEPLOY_credentialsKey"
|
|
618
634
|
- export GCLOUD_RUN_canonicalHostSuffix="$CL_review_api_GCLOUD_RUN_canonicalHostSuffix"
|
|
619
|
-
- export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"
|
|
635
|
+
- 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\\"]"
|
|
620
636
|
- export DOCKER_REGISTRY="europe-west6-docker.pkg.dev"
|
|
621
637
|
- 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"; })"
|
|
622
638
|
- export DOCKER_CACHE_IMAGE="europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/api"
|
|
623
639
|
- export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"
|
|
624
640
|
- export CLOUDSDK_CORE_DISABLE_PROMPTS="1"
|
|
625
|
-
-
|
|
626
|
-
-
|
|
641
|
+
- collapseable_section_end "injectvars"
|
|
642
|
+
- collapseable_section_start "prepare" "Prepare..."
|
|
627
643
|
- gcloud auth activate-service-account --key-file=<(echo "$CL_review_api_GCLOUD_DEPLOY_credentialsKey")
|
|
628
644
|
- export GCLOUD_PROJECT_NUMBER=$(gcloud projects describe google-project-id --format="value(projectNumber)")
|
|
629
645
|
- 'echo "GCLOUD_PROJECT_NUMBER: $GCLOUD_PROJECT_NUMBER"'
|
|
630
|
-
-
|
|
631
|
-
-
|
|
646
|
+
- collapseable_section_end "prepare"
|
|
647
|
+
- collapseable_section_start "writeenvvars" "Write env vars to file"
|
|
632
648
|
- |
|
|
633
649
|
cat > ____envvars.yaml <<EOF
|
|
634
650
|
ENV_SHORT: |-
|
|
@@ -638,43 +654,41 @@ api 🧪 test:
|
|
|
638
654
|
ENV_TYPE: |-
|
|
639
655
|
review
|
|
640
656
|
BUILD_INFO_BUILD_ID: |-
|
|
641
|
-
|
|
657
|
+
$(printf %s "$(git describe --tags 2>/dev/null || git rev-parse HEAD)" | sed '1!s/^/ /')
|
|
642
658
|
BUILD_INFO_BUILD_TIME: |-
|
|
643
|
-
|
|
659
|
+
$(printf %s "$CI_JOB_STARTED_AT" | sed '1!s/^/ /')
|
|
644
660
|
BUILD_INFO_CURRENT_VERSION: |-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
661
|
+
$(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/^/ /')
|
|
662
|
+
HOSTNAME: |-
|
|
663
|
+
$(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/^/ /')
|
|
648
664
|
ROOT_URL: |-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
HOST_CANONICAL: |-
|
|
653
|
-
$(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/^/ /')
|
|
665
|
+
$(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/^/ /')
|
|
666
|
+
HOSTNAME_INTERNAL: |-
|
|
667
|
+
$(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/^/ /')
|
|
654
668
|
ROOT_URL_INTERNAL: |-
|
|
655
|
-
|
|
669
|
+
$(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/^/ /')
|
|
656
670
|
DEPLOY_CLOUD_RUN_PROJECT_ID: |-
|
|
657
671
|
google-project-id
|
|
658
672
|
DEPLOY_CLOUD_RUN_REGION: |-
|
|
659
673
|
europe-west6
|
|
660
674
|
GCLOUD_RUN_canonicalHostSuffix: |-
|
|
661
|
-
|
|
675
|
+
$(printf %s "$CL_review_api_GCLOUD_RUN_canonicalHostSuffix" | sed '1!s/^/ /')
|
|
662
676
|
_ALL_ENV_VAR_KEYS: |-
|
|
663
|
-
["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","
|
|
677
|
+
["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"]
|
|
664
678
|
|
|
665
679
|
EOF
|
|
666
|
-
-
|
|
667
|
-
-
|
|
680
|
+
- collapseable_section_end "writeenvvars"
|
|
681
|
+
- collapseable_section_start "deploy" "Deploy to cloud run"
|
|
668
682
|
- 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
|
|
669
|
-
-
|
|
670
|
-
-
|
|
683
|
+
- collapseable_section_end "deploy"
|
|
684
|
+
- collapseable_section_start "cleanup" "Cleanup"
|
|
671
685
|
- 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
|
|
672
686
|
- 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
|
|
673
687
|
- 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
|
|
674
688
|
- set +e
|
|
675
689
|
- gcloud artifacts docker images delete europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/review/api --quiet --delete-tags
|
|
676
690
|
- set -e
|
|
677
|
-
-
|
|
691
|
+
- collapseable_section_end "cleanup"
|
|
678
692
|
- echo 'Uploading SBOM to Dependency Track'
|
|
679
693
|
- /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
|
|
680
694
|
- 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
|
|
@@ -714,9 +728,9 @@ api 🧪 test:
|
|
|
714
728
|
KUBERNETES_MEMORY_LIMIT: 400Mi
|
|
715
729
|
GIT_STRATEGY: none
|
|
716
730
|
script:
|
|
717
|
-
-
|
|
731
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
718
732
|
- export CLOUDSDK_CORE_DISABLE_PROMPTS="1"
|
|
719
|
-
-
|
|
733
|
+
- collapseable_section_end "injectvars"
|
|
720
734
|
- set +e
|
|
721
735
|
- gcloud auth activate-service-account --key-file=<(echo "$CL_review_api_GCLOUD_DEPLOY_credentialsKey")
|
|
722
736
|
- 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
|
|
@@ -753,37 +767,36 @@ api 🧪 test:
|
|
|
753
767
|
KUBERNETES_MEMORY_REQUEST: 1Gi
|
|
754
768
|
KUBERNETES_MEMORY_LIMIT: 4Gi
|
|
755
769
|
script:
|
|
756
|
-
-
|
|
770
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
757
771
|
- export ENV_SHORT="stage"
|
|
758
772
|
- export APP_DIR="api"
|
|
759
773
|
- export ENV_TYPE="stage"
|
|
760
774
|
- export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
|
|
761
775
|
- export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
|
|
762
776
|
- 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")"
|
|
763
|
-
- export
|
|
777
|
+
- export HOSTNAME="$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
764
778
|
- export ROOT_URL="https://$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
765
|
-
- export
|
|
766
|
-
- export HOST_CANONICAL="$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
779
|
+
- export HOSTNAME_INTERNAL="$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
767
780
|
- export ROOT_URL_INTERNAL="https://$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
768
781
|
- export DEPLOY_CLOUD_RUN_PROJECT_ID="google-project-id"
|
|
769
782
|
- export DEPLOY_CLOUD_RUN_REGION="europe-west6"
|
|
770
783
|
- export GCLOUD_DEPLOY_credentialsKey="$CL_stage_api_GCLOUD_DEPLOY_credentialsKey"
|
|
771
784
|
- export GCLOUD_RUN_canonicalHostSuffix="$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix"
|
|
772
|
-
- export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"
|
|
773
|
-
-
|
|
785
|
+
- 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\\"]"
|
|
786
|
+
- collapseable_section_end "injectvars"
|
|
774
787
|
- echo '{"id":"$(git describe --tags 2>/dev/null || git rev-parse HEAD)","time":"$CI_JOB_STARTED_AT"}' > api/__build_info.json
|
|
775
|
-
-
|
|
788
|
+
- collapseable_section_start "nodeinstall" "Ensure node version"
|
|
776
789
|
- if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
|
|
777
790
|
- if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
|
|
778
|
-
-
|
|
791
|
+
- collapseable_section_end "nodeinstall"
|
|
779
792
|
- cd api
|
|
780
|
-
-
|
|
793
|
+
- collapseable_section_start "nodeinstall" "Ensure node version"
|
|
781
794
|
- if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
|
|
782
795
|
- if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
|
|
783
|
-
-
|
|
784
|
-
-
|
|
796
|
+
- collapseable_section_end "nodeinstall"
|
|
797
|
+
- collapseable_section_start "yarninstall" "Yarn install"
|
|
785
798
|
- yarn install --immutable
|
|
786
|
-
-
|
|
799
|
+
- collapseable_section_end "yarninstall"
|
|
787
800
|
- yarn build
|
|
788
801
|
cache:
|
|
789
802
|
- key: api-yarn
|
|
@@ -794,10 +807,6 @@ api 🧪 test:
|
|
|
794
807
|
policy: pull-push
|
|
795
808
|
paths:
|
|
796
809
|
- api/node_modules
|
|
797
|
-
- key: api-next-cache
|
|
798
|
-
policy: pull-push
|
|
799
|
-
paths:
|
|
800
|
-
- api/.next/cache
|
|
801
810
|
artifacts:
|
|
802
811
|
paths:
|
|
803
812
|
- api/__build_info.json
|
|
@@ -828,7 +837,7 @@ api 🧪 test:
|
|
|
828
837
|
KUBERNETES_MEMORY_REQUEST: 1Gi
|
|
829
838
|
KUBERNETES_MEMORY_LIMIT: 2Gi
|
|
830
839
|
script:
|
|
831
|
-
-
|
|
840
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
832
841
|
- export APP_DIR="api"
|
|
833
842
|
- export DOCKER_BUILD_CONTEXT="."
|
|
834
843
|
- export DOCKER_REGISTRY="europe-west6-docker.pkg.dev"
|
|
@@ -844,20 +853,20 @@ api 🧪 test:
|
|
|
844
853
|
COPY --chown=node:node api/yarn.lock /app/api/yarn.lock
|
|
845
854
|
COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
|
|
846
855
|
COPY --chown=node:node .yarn /app/.yarn"
|
|
847
|
-
-
|
|
856
|
+
- collapseable_section_end "injectvars"
|
|
848
857
|
- ensureNodeDockerfile
|
|
849
|
-
-
|
|
858
|
+
- collapseable_section_start "docker-login" "Docker Login"
|
|
850
859
|
- gcloud auth activate-service-account --key-file=<(echo "$CL_stage_api_GCLOUD_DEPLOY_credentialsKey")
|
|
851
860
|
- gcloud auth configure-docker europe-west6-docker.pkg.dev
|
|
852
|
-
-
|
|
853
|
-
-
|
|
861
|
+
- collapseable_section_end "docker-login"
|
|
862
|
+
- collapseable_section_start "docker-build" "Docker build"
|
|
854
863
|
- 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
|
|
855
|
-
-
|
|
856
|
-
-
|
|
864
|
+
- collapseable_section_end "docker-build"
|
|
865
|
+
- collapseable_section_start "docker-push" "Docker push and tag"
|
|
857
866
|
- docker push $DOCKER_IMAGE:$DOCKER_IMAGE_TAG
|
|
858
867
|
- docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG $DOCKER_CACHE_IMAGE
|
|
859
868
|
- docker push $DOCKER_CACHE_IMAGE
|
|
860
|
-
-
|
|
869
|
+
- collapseable_section_end "docker-push"
|
|
861
870
|
cache:
|
|
862
871
|
- key: api-yarn
|
|
863
872
|
policy: pull
|
|
@@ -874,8 +883,8 @@ api 🧪 test:
|
|
|
874
883
|
image: aquasec/trivy:0.38.3
|
|
875
884
|
variables: {}
|
|
876
885
|
script:
|
|
877
|
-
-
|
|
878
|
-
-
|
|
886
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
887
|
+
- collapseable_section_end "injectvars"
|
|
879
888
|
- trivy fs --quiet --format cyclonedx --output "__sbom.json" api
|
|
880
889
|
artifacts:
|
|
881
890
|
paths:
|
|
@@ -894,35 +903,34 @@ api 🧪 test:
|
|
|
894
903
|
KUBERNETES_MEMORY_REQUEST: 200Mi
|
|
895
904
|
KUBERNETES_MEMORY_LIMIT: 400Mi
|
|
896
905
|
script:
|
|
897
|
-
-
|
|
906
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
898
907
|
- export ENV_SHORT="stage"
|
|
899
908
|
- export APP_DIR="api"
|
|
900
909
|
- export ENV_TYPE="stage"
|
|
901
910
|
- export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
|
|
902
911
|
- export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
|
|
903
912
|
- 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")"
|
|
904
|
-
- export
|
|
913
|
+
- export HOSTNAME="$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
905
914
|
- export ROOT_URL="https://$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
906
|
-
- export
|
|
907
|
-
- export HOST_CANONICAL="$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
915
|
+
- export HOSTNAME_INTERNAL="$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
908
916
|
- export ROOT_URL_INTERNAL="https://$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
909
917
|
- export DEPLOY_CLOUD_RUN_PROJECT_ID="google-project-id"
|
|
910
918
|
- export DEPLOY_CLOUD_RUN_REGION="europe-west6"
|
|
911
919
|
- export GCLOUD_DEPLOY_credentialsKey="$CL_stage_api_GCLOUD_DEPLOY_credentialsKey"
|
|
912
920
|
- export GCLOUD_RUN_canonicalHostSuffix="$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix"
|
|
913
|
-
- export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"
|
|
921
|
+
- 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\\"]"
|
|
914
922
|
- export DOCKER_REGISTRY="europe-west6-docker.pkg.dev"
|
|
915
923
|
- export DOCKER_IMAGE="europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/stage/api"
|
|
916
924
|
- export DOCKER_CACHE_IMAGE="europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/api"
|
|
917
925
|
- export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"
|
|
918
926
|
- export CLOUDSDK_CORE_DISABLE_PROMPTS="1"
|
|
919
|
-
-
|
|
920
|
-
-
|
|
927
|
+
- collapseable_section_end "injectvars"
|
|
928
|
+
- collapseable_section_start "prepare" "Prepare..."
|
|
921
929
|
- gcloud auth activate-service-account --key-file=<(echo "$CL_stage_api_GCLOUD_DEPLOY_credentialsKey")
|
|
922
930
|
- export GCLOUD_PROJECT_NUMBER=$(gcloud projects describe google-project-id --format="value(projectNumber)")
|
|
923
931
|
- 'echo "GCLOUD_PROJECT_NUMBER: $GCLOUD_PROJECT_NUMBER"'
|
|
924
|
-
-
|
|
925
|
-
-
|
|
932
|
+
- collapseable_section_end "prepare"
|
|
933
|
+
- collapseable_section_start "writeenvvars" "Write env vars to file"
|
|
926
934
|
- |
|
|
927
935
|
cat > ____envvars.yaml <<EOF
|
|
928
936
|
ENV_SHORT: |-
|
|
@@ -932,40 +940,38 @@ api 🧪 test:
|
|
|
932
940
|
ENV_TYPE: |-
|
|
933
941
|
stage
|
|
934
942
|
BUILD_INFO_BUILD_ID: |-
|
|
935
|
-
|
|
943
|
+
$(printf %s "$(git describe --tags 2>/dev/null || git rev-parse HEAD)" | sed '1!s/^/ /')
|
|
936
944
|
BUILD_INFO_BUILD_TIME: |-
|
|
937
|
-
|
|
945
|
+
$(printf %s "$CI_JOB_STARTED_AT" | sed '1!s/^/ /')
|
|
938
946
|
BUILD_INFO_CURRENT_VERSION: |-
|
|
939
|
-
|
|
940
|
-
|
|
941
|
-
|
|
947
|
+
$(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/^/ /')
|
|
948
|
+
HOSTNAME: |-
|
|
949
|
+
$(printf %s "$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
|
|
942
950
|
ROOT_URL: |-
|
|
943
|
-
|
|
944
|
-
|
|
945
|
-
|
|
946
|
-
HOST_CANONICAL: |-
|
|
947
|
-
$(printf %s "$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
|
|
951
|
+
$(printf %s "https://$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
|
|
952
|
+
HOSTNAME_INTERNAL: |-
|
|
953
|
+
$(printf %s "$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
|
|
948
954
|
ROOT_URL_INTERNAL: |-
|
|
949
|
-
|
|
955
|
+
$(printf %s "https://$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
|
|
950
956
|
DEPLOY_CLOUD_RUN_PROJECT_ID: |-
|
|
951
957
|
google-project-id
|
|
952
958
|
DEPLOY_CLOUD_RUN_REGION: |-
|
|
953
959
|
europe-west6
|
|
954
960
|
GCLOUD_RUN_canonicalHostSuffix: |-
|
|
955
|
-
|
|
961
|
+
$(printf %s "$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | sed '1!s/^/ /')
|
|
956
962
|
_ALL_ENV_VAR_KEYS: |-
|
|
957
|
-
["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","
|
|
963
|
+
["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"]
|
|
958
964
|
|
|
959
965
|
EOF
|
|
960
|
-
-
|
|
961
|
-
-
|
|
966
|
+
- collapseable_section_end "writeenvvars"
|
|
967
|
+
- collapseable_section_start "deploy" "Deploy to cloud run"
|
|
962
968
|
- 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
|
|
963
|
-
-
|
|
964
|
-
-
|
|
969
|
+
- collapseable_section_end "deploy"
|
|
970
|
+
- collapseable_section_start "cleanup" "Cleanup"
|
|
965
971
|
- 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
|
|
966
972
|
- 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
|
|
967
973
|
- 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
|
|
968
|
-
-
|
|
974
|
+
- collapseable_section_end "cleanup"
|
|
969
975
|
- echo 'Uploading SBOM to Dependency Track'
|
|
970
976
|
- /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
|
|
971
977
|
- 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
|
|
@@ -998,9 +1004,9 @@ api 🧪 test:
|
|
|
998
1004
|
KUBERNETES_MEMORY_LIMIT: 400Mi
|
|
999
1005
|
GIT_STRATEGY: none
|
|
1000
1006
|
script:
|
|
1001
|
-
-
|
|
1007
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
1002
1008
|
- export CLOUDSDK_CORE_DISABLE_PROMPTS="1"
|
|
1003
|
-
-
|
|
1009
|
+
- collapseable_section_end "injectvars"
|
|
1004
1010
|
- set +e
|
|
1005
1011
|
- gcloud auth activate-service-account --key-file=<(echo "$CL_stage_api_GCLOUD_DEPLOY_credentialsKey")
|
|
1006
1012
|
- gcloud run services delete pan-test-app-stage-api --project=google-project-id --region=europe-west6
|
|
@@ -1034,37 +1040,36 @@ api 🧪 test:
|
|
|
1034
1040
|
KUBERNETES_MEMORY_REQUEST: 1Gi
|
|
1035
1041
|
KUBERNETES_MEMORY_LIMIT: 4Gi
|
|
1036
1042
|
script:
|
|
1037
|
-
-
|
|
1043
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
1038
1044
|
- export ENV_SHORT="prod"
|
|
1039
1045
|
- export APP_DIR="api"
|
|
1040
1046
|
- export ENV_TYPE="prod"
|
|
1041
1047
|
- export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
|
|
1042
1048
|
- export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
|
|
1043
1049
|
- 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")"
|
|
1044
|
-
- export
|
|
1050
|
+
- export HOSTNAME="$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
1045
1051
|
- export ROOT_URL="https://$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
1046
|
-
- export
|
|
1047
|
-
- export HOST_CANONICAL="$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
1052
|
+
- export HOSTNAME_INTERNAL="$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
1048
1053
|
- export ROOT_URL_INTERNAL="https://$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
1049
1054
|
- export DEPLOY_CLOUD_RUN_PROJECT_ID="google-project-id"
|
|
1050
1055
|
- export DEPLOY_CLOUD_RUN_REGION="europe-west6"
|
|
1051
1056
|
- export GCLOUD_DEPLOY_credentialsKey="$CL_prod_api_GCLOUD_DEPLOY_credentialsKey"
|
|
1052
1057
|
- export GCLOUD_RUN_canonicalHostSuffix="$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix"
|
|
1053
|
-
- export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"
|
|
1054
|
-
-
|
|
1058
|
+
- 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\\"]"
|
|
1059
|
+
- collapseable_section_end "injectvars"
|
|
1055
1060
|
- echo '{"id":"$(git describe --tags 2>/dev/null || git rev-parse HEAD)","time":"$CI_JOB_STARTED_AT"}' > api/__build_info.json
|
|
1056
|
-
-
|
|
1061
|
+
- collapseable_section_start "nodeinstall" "Ensure node version"
|
|
1057
1062
|
- if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
|
|
1058
1063
|
- if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
|
|
1059
|
-
-
|
|
1064
|
+
- collapseable_section_end "nodeinstall"
|
|
1060
1065
|
- cd api
|
|
1061
|
-
-
|
|
1066
|
+
- collapseable_section_start "nodeinstall" "Ensure node version"
|
|
1062
1067
|
- if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
|
|
1063
1068
|
- if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
|
|
1064
|
-
-
|
|
1065
|
-
-
|
|
1069
|
+
- collapseable_section_end "nodeinstall"
|
|
1070
|
+
- collapseable_section_start "yarninstall" "Yarn install"
|
|
1066
1071
|
- yarn install --immutable
|
|
1067
|
-
-
|
|
1072
|
+
- collapseable_section_end "yarninstall"
|
|
1068
1073
|
- yarn build
|
|
1069
1074
|
cache:
|
|
1070
1075
|
- key: api-yarn
|
|
@@ -1075,10 +1080,6 @@ api 🧪 test:
|
|
|
1075
1080
|
policy: pull-push
|
|
1076
1081
|
paths:
|
|
1077
1082
|
- api/node_modules
|
|
1078
|
-
- key: api-next-cache
|
|
1079
|
-
policy: pull-push
|
|
1080
|
-
paths:
|
|
1081
|
-
- api/.next/cache
|
|
1082
1083
|
artifacts:
|
|
1083
1084
|
paths:
|
|
1084
1085
|
- api/__build_info.json
|
|
@@ -1109,7 +1110,7 @@ api 🧪 test:
|
|
|
1109
1110
|
KUBERNETES_MEMORY_REQUEST: 1Gi
|
|
1110
1111
|
KUBERNETES_MEMORY_LIMIT: 2Gi
|
|
1111
1112
|
script:
|
|
1112
|
-
-
|
|
1113
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
1113
1114
|
- export APP_DIR="api"
|
|
1114
1115
|
- export DOCKER_BUILD_CONTEXT="."
|
|
1115
1116
|
- export DOCKER_REGISTRY="europe-west6-docker.pkg.dev"
|
|
@@ -1125,20 +1126,20 @@ api 🧪 test:
|
|
|
1125
1126
|
COPY --chown=node:node api/yarn.lock /app/api/yarn.lock
|
|
1126
1127
|
COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
|
|
1127
1128
|
COPY --chown=node:node .yarn /app/.yarn"
|
|
1128
|
-
-
|
|
1129
|
+
- collapseable_section_end "injectvars"
|
|
1129
1130
|
- ensureNodeDockerfile
|
|
1130
|
-
-
|
|
1131
|
+
- collapseable_section_start "docker-login" "Docker Login"
|
|
1131
1132
|
- gcloud auth activate-service-account --key-file=<(echo "$CL_prod_api_GCLOUD_DEPLOY_credentialsKey")
|
|
1132
1133
|
- gcloud auth configure-docker europe-west6-docker.pkg.dev
|
|
1133
|
-
-
|
|
1134
|
-
-
|
|
1134
|
+
- collapseable_section_end "docker-login"
|
|
1135
|
+
- collapseable_section_start "docker-build" "Docker build"
|
|
1135
1136
|
- 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
|
|
1136
|
-
-
|
|
1137
|
-
-
|
|
1137
|
+
- collapseable_section_end "docker-build"
|
|
1138
|
+
- collapseable_section_start "docker-push" "Docker push and tag"
|
|
1138
1139
|
- docker push $DOCKER_IMAGE:$DOCKER_IMAGE_TAG
|
|
1139
1140
|
- docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG $DOCKER_CACHE_IMAGE
|
|
1140
1141
|
- docker push $DOCKER_CACHE_IMAGE
|
|
1141
|
-
-
|
|
1142
|
+
- collapseable_section_end "docker-push"
|
|
1142
1143
|
cache:
|
|
1143
1144
|
- key: api-yarn
|
|
1144
1145
|
policy: pull
|
|
@@ -1155,8 +1156,8 @@ api 🧪 test:
|
|
|
1155
1156
|
image: aquasec/trivy:0.38.3
|
|
1156
1157
|
variables: {}
|
|
1157
1158
|
script:
|
|
1158
|
-
-
|
|
1159
|
-
-
|
|
1159
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
1160
|
+
- collapseable_section_end "injectvars"
|
|
1160
1161
|
- trivy fs --quiet --format cyclonedx --output "__sbom.json" api
|
|
1161
1162
|
artifacts:
|
|
1162
1163
|
paths:
|
|
@@ -1175,35 +1176,34 @@ api 🧪 test:
|
|
|
1175
1176
|
KUBERNETES_MEMORY_REQUEST: 200Mi
|
|
1176
1177
|
KUBERNETES_MEMORY_LIMIT: 400Mi
|
|
1177
1178
|
script:
|
|
1178
|
-
-
|
|
1179
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
1179
1180
|
- export ENV_SHORT="prod"
|
|
1180
1181
|
- export APP_DIR="api"
|
|
1181
1182
|
- export ENV_TYPE="prod"
|
|
1182
1183
|
- export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
|
|
1183
1184
|
- export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
|
|
1184
1185
|
- 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")"
|
|
1185
|
-
- export
|
|
1186
|
+
- export HOSTNAME="$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
1186
1187
|
- export ROOT_URL="https://$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
1187
|
-
- export
|
|
1188
|
-
- export HOST_CANONICAL="$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
1188
|
+
- export HOSTNAME_INTERNAL="$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
1189
1189
|
- export ROOT_URL_INTERNAL="https://$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
1190
1190
|
- export DEPLOY_CLOUD_RUN_PROJECT_ID="google-project-id"
|
|
1191
1191
|
- export DEPLOY_CLOUD_RUN_REGION="europe-west6"
|
|
1192
1192
|
- export GCLOUD_DEPLOY_credentialsKey="$CL_prod_api_GCLOUD_DEPLOY_credentialsKey"
|
|
1193
1193
|
- export GCLOUD_RUN_canonicalHostSuffix="$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix"
|
|
1194
|
-
- export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"
|
|
1194
|
+
- 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\\"]"
|
|
1195
1195
|
- export DOCKER_REGISTRY="europe-west6-docker.pkg.dev"
|
|
1196
1196
|
- export DOCKER_IMAGE="europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/prod/api"
|
|
1197
1197
|
- export DOCKER_CACHE_IMAGE="europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/api"
|
|
1198
1198
|
- export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"
|
|
1199
1199
|
- export CLOUDSDK_CORE_DISABLE_PROMPTS="1"
|
|
1200
|
-
-
|
|
1201
|
-
-
|
|
1200
|
+
- collapseable_section_end "injectvars"
|
|
1201
|
+
- collapseable_section_start "prepare" "Prepare..."
|
|
1202
1202
|
- gcloud auth activate-service-account --key-file=<(echo "$CL_prod_api_GCLOUD_DEPLOY_credentialsKey")
|
|
1203
1203
|
- export GCLOUD_PROJECT_NUMBER=$(gcloud projects describe google-project-id --format="value(projectNumber)")
|
|
1204
1204
|
- 'echo "GCLOUD_PROJECT_NUMBER: $GCLOUD_PROJECT_NUMBER"'
|
|
1205
|
-
-
|
|
1206
|
-
-
|
|
1205
|
+
- collapseable_section_end "prepare"
|
|
1206
|
+
- collapseable_section_start "writeenvvars" "Write env vars to file"
|
|
1207
1207
|
- |
|
|
1208
1208
|
cat > ____envvars.yaml <<EOF
|
|
1209
1209
|
ENV_SHORT: |-
|
|
@@ -1213,40 +1213,38 @@ api 🧪 test:
|
|
|
1213
1213
|
ENV_TYPE: |-
|
|
1214
1214
|
prod
|
|
1215
1215
|
BUILD_INFO_BUILD_ID: |-
|
|
1216
|
-
|
|
1216
|
+
$(printf %s "$(git describe --tags 2>/dev/null || git rev-parse HEAD)" | sed '1!s/^/ /')
|
|
1217
1217
|
BUILD_INFO_BUILD_TIME: |-
|
|
1218
|
-
|
|
1218
|
+
$(printf %s "$CI_JOB_STARTED_AT" | sed '1!s/^/ /')
|
|
1219
1219
|
BUILD_INFO_CURRENT_VERSION: |-
|
|
1220
|
-
|
|
1221
|
-
|
|
1222
|
-
|
|
1220
|
+
$(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/^/ /')
|
|
1221
|
+
HOSTNAME: |-
|
|
1222
|
+
$(printf %s "$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
|
|
1223
1223
|
ROOT_URL: |-
|
|
1224
|
-
|
|
1225
|
-
|
|
1226
|
-
|
|
1227
|
-
HOST_CANONICAL: |-
|
|
1228
|
-
$(printf %s "$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
|
|
1224
|
+
$(printf %s "https://$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
|
|
1225
|
+
HOSTNAME_INTERNAL: |-
|
|
1226
|
+
$(printf %s "$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
|
|
1229
1227
|
ROOT_URL_INTERNAL: |-
|
|
1230
|
-
|
|
1228
|
+
$(printf %s "https://$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
|
|
1231
1229
|
DEPLOY_CLOUD_RUN_PROJECT_ID: |-
|
|
1232
1230
|
google-project-id
|
|
1233
1231
|
DEPLOY_CLOUD_RUN_REGION: |-
|
|
1234
1232
|
europe-west6
|
|
1235
1233
|
GCLOUD_RUN_canonicalHostSuffix: |-
|
|
1236
|
-
|
|
1234
|
+
$(printf %s "$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | sed '1!s/^/ /')
|
|
1237
1235
|
_ALL_ENV_VAR_KEYS: |-
|
|
1238
|
-
["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","
|
|
1236
|
+
["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"]
|
|
1239
1237
|
|
|
1240
1238
|
EOF
|
|
1241
|
-
-
|
|
1242
|
-
-
|
|
1239
|
+
- collapseable_section_end "writeenvvars"
|
|
1240
|
+
- collapseable_section_start "deploy" "Deploy to cloud run"
|
|
1243
1241
|
- 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
|
|
1244
|
-
-
|
|
1245
|
-
-
|
|
1242
|
+
- collapseable_section_end "deploy"
|
|
1243
|
+
- collapseable_section_start "cleanup" "Cleanup"
|
|
1246
1244
|
- 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
|
|
1247
1245
|
- 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
|
|
1248
1246
|
- 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
|
|
1249
|
-
-
|
|
1247
|
+
- collapseable_section_end "cleanup"
|
|
1250
1248
|
- echo 'Uploading SBOM to Dependency Track'
|
|
1251
1249
|
- /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
|
|
1252
1250
|
- 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
|
|
@@ -1279,9 +1277,9 @@ api 🧪 test:
|
|
|
1279
1277
|
KUBERNETES_MEMORY_LIMIT: 400Mi
|
|
1280
1278
|
GIT_STRATEGY: none
|
|
1281
1279
|
script:
|
|
1282
|
-
-
|
|
1280
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
1283
1281
|
- export CLOUDSDK_CORE_DISABLE_PROMPTS="1"
|
|
1284
|
-
-
|
|
1282
|
+
- collapseable_section_end "injectvars"
|
|
1285
1283
|
- set +e
|
|
1286
1284
|
- gcloud auth activate-service-account --key-file=<(echo "$CL_prod_api_GCLOUD_DEPLOY_credentialsKey")
|
|
1287
1285
|
- gcloud run services delete pan-test-app-prod-api --project=google-project-id --region=europe-west6
|