@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,38 +191,55 @@ api 🧪 test:
|
|
|
161
191
|
KUBERNETES_MEMORY_REQUEST: 1Gi
|
|
162
192
|
KUBERNETES_MEMORY_LIMIT: 4Gi
|
|
163
193
|
script:
|
|
164
|
-
-
|
|
194
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
165
195
|
- export ENV_SHORT="dev"
|
|
166
196
|
- export APP_DIR="api"
|
|
167
197
|
- export ENV_TYPE="dev"
|
|
168
198
|
- export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
|
|
169
199
|
- export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
|
|
170
200
|
- export BUILD_INFO_CURRENT_VERSION="$(tag=$(git ls-remote origin "refs/tags/v*[0-9]" 2>/dev/null | cut -f 2- | sort -V | tail -1 | sed 's/refs\\/tags\\/v//'); [ -z "$tag" ] && echo "0.0.0" || echo "$tag")"
|
|
171
|
-
- export
|
|
201
|
+
- export HOSTNAME="$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
172
202
|
- export ROOT_URL="https://$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
173
|
-
- export
|
|
174
|
-
- export HOST_CANONICAL="$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
203
|
+
- export HOSTNAME_INTERNAL="$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
175
204
|
- export ROOT_URL_INTERNAL="https://$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
176
205
|
- export CLOUD_RUN_JOB_TRIGGER_URL_migrate="https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/jobs/pan-test-app-dev-api-migrate:run"
|
|
177
206
|
- export DEPLOY_CLOUD_RUN_PROJECT_ID="google-project-id"
|
|
178
207
|
- export DEPLOY_CLOUD_RUN_REGION="europe-west6"
|
|
179
208
|
- export GCLOUD_DEPLOY_credentialsKey="$CL_dev_api_GCLOUD_DEPLOY_credentialsKey"
|
|
180
209
|
- export GCLOUD_RUN_canonicalHostSuffix="$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix"
|
|
181
|
-
- export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"
|
|
182
|
-
-
|
|
210
|
+
- export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOSTNAME\\",\\"ROOT_URL\\",\\"HOSTNAME_INTERNAL\\",\\"ROOT_URL_INTERNAL\\",\\"CLOUD_RUN_JOB_TRIGGER_URL_migrate\\",\\"DEPLOY_CLOUD_RUN_PROJECT_ID\\",\\"DEPLOY_CLOUD_RUN_REGION\\",\\"GCLOUD_DEPLOY_credentialsKey\\",\\"GCLOUD_RUN_canonicalHostSuffix\\"]"
|
|
211
|
+
- collapseable_section_end "injectvars"
|
|
212
|
+
- collapseable_section_start "write-dotenv-api" "write dot env for api"
|
|
213
|
+
- |-
|
|
214
|
+
cat <<EOF > api/.env
|
|
215
|
+
ENV_SHORT=dev
|
|
216
|
+
APP_DIR=api
|
|
217
|
+
ENV_TYPE=dev
|
|
218
|
+
HOSTNAME=$(printf %s "$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | escapeForDotEnv)
|
|
219
|
+
ROOT_URL=$(printf %s "https://$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | escapeForDotEnv)
|
|
220
|
+
HOSTNAME_INTERNAL=$(printf %s "$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | escapeForDotEnv)
|
|
221
|
+
ROOT_URL_INTERNAL=$(printf %s "https://$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | escapeForDotEnv)
|
|
222
|
+
CLOUD_RUN_JOB_TRIGGER_URL_migrate=https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/jobs/pan-test-app-dev-api-migrate:run
|
|
223
|
+
DEPLOY_CLOUD_RUN_PROJECT_ID=google-project-id
|
|
224
|
+
DEPLOY_CLOUD_RUN_REGION=europe-west6
|
|
225
|
+
GCLOUD_DEPLOY_credentialsKey=$(printf %s "$CL_dev_api_GCLOUD_DEPLOY_credentialsKey" | escapeForDotEnv)
|
|
226
|
+
GCLOUD_RUN_canonicalHostSuffix=$(printf %s "$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | escapeForDotEnv)
|
|
227
|
+
_ALL_ENV_VAR_KEYS=["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOSTNAME","ROOT_URL","HOSTNAME_INTERNAL","ROOT_URL_INTERNAL","CLOUD_RUN_JOB_TRIGGER_URL_migrate","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]
|
|
228
|
+
EOF
|
|
229
|
+
- collapseable_section_end "write-dotenv-api"
|
|
183
230
|
- echo '{"id":"$(git describe --tags 2>/dev/null || git rev-parse HEAD)","time":"$CI_JOB_STARTED_AT"}' > api/__build_info.json
|
|
184
|
-
-
|
|
231
|
+
- collapseable_section_start "nodeinstall" "Ensure node version"
|
|
185
232
|
- if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
|
|
186
233
|
- if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
|
|
187
|
-
-
|
|
234
|
+
- collapseable_section_end "nodeinstall"
|
|
188
235
|
- cd api
|
|
189
|
-
-
|
|
236
|
+
- collapseable_section_start "nodeinstall" "Ensure node version"
|
|
190
237
|
- if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
|
|
191
238
|
- if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
|
|
192
|
-
-
|
|
193
|
-
-
|
|
239
|
+
- collapseable_section_end "nodeinstall"
|
|
240
|
+
- collapseable_section_start "yarninstall" "Yarn install"
|
|
194
241
|
- yarn install --immutable
|
|
195
|
-
-
|
|
242
|
+
- collapseable_section_end "yarninstall"
|
|
196
243
|
- yarn build
|
|
197
244
|
cache:
|
|
198
245
|
- key: api-yarn
|
|
@@ -203,15 +250,13 @@ api 🧪 test:
|
|
|
203
250
|
policy: pull-push
|
|
204
251
|
paths:
|
|
205
252
|
- api/node_modules
|
|
206
|
-
- key: api-next-cache
|
|
207
|
-
policy: pull-push
|
|
208
|
-
paths:
|
|
209
|
-
- api/.next/cache
|
|
210
253
|
artifacts:
|
|
211
254
|
paths:
|
|
212
255
|
- api/__build_info.json
|
|
213
256
|
- api/.next
|
|
214
257
|
- api/dist
|
|
258
|
+
exclude:
|
|
259
|
+
- api/.env
|
|
215
260
|
expire_in: 1 day
|
|
216
261
|
when: always
|
|
217
262
|
reports: {}
|
|
@@ -239,7 +284,7 @@ api 🧪 test:
|
|
|
239
284
|
KUBERNETES_MEMORY_REQUEST: 1Gi
|
|
240
285
|
KUBERNETES_MEMORY_LIMIT: 2Gi
|
|
241
286
|
script:
|
|
242
|
-
-
|
|
287
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
243
288
|
- export APP_DIR="api"
|
|
244
289
|
- export DOCKER_BUILD_CONTEXT="."
|
|
245
290
|
- export DOCKER_REGISTRY="europe-west6-docker.pkg.dev"
|
|
@@ -255,20 +300,20 @@ api 🧪 test:
|
|
|
255
300
|
COPY --chown=node:node api/yarn.lock /app/api/yarn.lock
|
|
256
301
|
COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
|
|
257
302
|
COPY --chown=node:node .yarn /app/.yarn"
|
|
258
|
-
-
|
|
303
|
+
- collapseable_section_end "injectvars"
|
|
259
304
|
- ensureNodeDockerfile
|
|
260
|
-
-
|
|
305
|
+
- collapseable_section_start "docker-login" "Docker Login"
|
|
261
306
|
- gcloud auth activate-service-account --key-file=<(echo "$CL_dev_api_GCLOUD_DEPLOY_credentialsKey")
|
|
262
307
|
- gcloud auth configure-docker europe-west6-docker.pkg.dev
|
|
263
|
-
-
|
|
264
|
-
-
|
|
308
|
+
- collapseable_section_end "docker-login"
|
|
309
|
+
- collapseable_section_start "docker-build" "Docker build"
|
|
265
310
|
- 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
|
|
266
|
-
-
|
|
267
|
-
-
|
|
311
|
+
- collapseable_section_end "docker-build"
|
|
312
|
+
- collapseable_section_start "docker-push" "Docker push and tag"
|
|
268
313
|
- docker push $DOCKER_IMAGE:$DOCKER_IMAGE_TAG
|
|
269
314
|
- docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG $DOCKER_CACHE_IMAGE
|
|
270
315
|
- docker push $DOCKER_CACHE_IMAGE
|
|
271
|
-
-
|
|
316
|
+
- collapseable_section_end "docker-push"
|
|
272
317
|
cache:
|
|
273
318
|
- key: api-yarn
|
|
274
319
|
policy: pull
|
|
@@ -287,8 +332,8 @@ api 🧪 test:
|
|
|
287
332
|
image: aquasec/trivy:0.38.3
|
|
288
333
|
variables: {}
|
|
289
334
|
script:
|
|
290
|
-
-
|
|
291
|
-
-
|
|
335
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
336
|
+
- collapseable_section_end "injectvars"
|
|
292
337
|
- trivy fs --quiet --format cyclonedx --output "__sbom.json" api
|
|
293
338
|
artifacts:
|
|
294
339
|
paths:
|
|
@@ -309,36 +354,35 @@ api 🧪 test:
|
|
|
309
354
|
KUBERNETES_MEMORY_REQUEST: 200Mi
|
|
310
355
|
KUBERNETES_MEMORY_LIMIT: 400Mi
|
|
311
356
|
script:
|
|
312
|
-
-
|
|
357
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
313
358
|
- export ENV_SHORT="dev"
|
|
314
359
|
- export APP_DIR="api"
|
|
315
360
|
- export ENV_TYPE="dev"
|
|
316
361
|
- export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
|
|
317
362
|
- export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
|
|
318
363
|
- 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")"
|
|
319
|
-
- export
|
|
364
|
+
- export HOSTNAME="$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
320
365
|
- export ROOT_URL="https://$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
321
|
-
- export
|
|
322
|
-
- export HOST_CANONICAL="$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
366
|
+
- export HOSTNAME_INTERNAL="$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
323
367
|
- export ROOT_URL_INTERNAL="https://$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
324
368
|
- export CLOUD_RUN_JOB_TRIGGER_URL_migrate="https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/jobs/pan-test-app-dev-api-migrate:run"
|
|
325
369
|
- export DEPLOY_CLOUD_RUN_PROJECT_ID="google-project-id"
|
|
326
370
|
- export DEPLOY_CLOUD_RUN_REGION="europe-west6"
|
|
327
371
|
- export GCLOUD_DEPLOY_credentialsKey="$CL_dev_api_GCLOUD_DEPLOY_credentialsKey"
|
|
328
372
|
- export GCLOUD_RUN_canonicalHostSuffix="$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix"
|
|
329
|
-
- export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"
|
|
373
|
+
- export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOSTNAME\\",\\"ROOT_URL\\",\\"HOSTNAME_INTERNAL\\",\\"ROOT_URL_INTERNAL\\",\\"CLOUD_RUN_JOB_TRIGGER_URL_migrate\\",\\"DEPLOY_CLOUD_RUN_PROJECT_ID\\",\\"DEPLOY_CLOUD_RUN_REGION\\",\\"GCLOUD_DEPLOY_credentialsKey\\",\\"GCLOUD_RUN_canonicalHostSuffix\\"]"
|
|
330
374
|
- export DOCKER_REGISTRY="europe-west6-docker.pkg.dev"
|
|
331
375
|
- export DOCKER_IMAGE="europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/dev/api"
|
|
332
376
|
- export DOCKER_CACHE_IMAGE="europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/api"
|
|
333
377
|
- export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"
|
|
334
378
|
- export CLOUDSDK_CORE_DISABLE_PROMPTS="1"
|
|
335
|
-
-
|
|
336
|
-
-
|
|
379
|
+
- collapseable_section_end "injectvars"
|
|
380
|
+
- collapseable_section_start "prepare" "Prepare..."
|
|
337
381
|
- gcloud auth activate-service-account --key-file=<(echo "$CL_dev_api_GCLOUD_DEPLOY_credentialsKey")
|
|
338
382
|
- export GCLOUD_PROJECT_NUMBER=$(gcloud projects describe google-project-id --format="value(projectNumber)")
|
|
339
383
|
- 'echo "GCLOUD_PROJECT_NUMBER: $GCLOUD_PROJECT_NUMBER"'
|
|
340
|
-
-
|
|
341
|
-
-
|
|
384
|
+
- collapseable_section_end "prepare"
|
|
385
|
+
- collapseable_section_start "writeenvvars" "Write env vars to file"
|
|
342
386
|
- |
|
|
343
387
|
cat > ____envvars.yaml <<EOF
|
|
344
388
|
ENV_SHORT: |-
|
|
@@ -348,21 +392,19 @@ api 🧪 test:
|
|
|
348
392
|
ENV_TYPE: |-
|
|
349
393
|
dev
|
|
350
394
|
BUILD_INFO_BUILD_ID: |-
|
|
351
|
-
|
|
395
|
+
$(printf %s "$(git describe --tags 2>/dev/null || git rev-parse HEAD)" | sed '1!s/^/ /')
|
|
352
396
|
BUILD_INFO_BUILD_TIME: |-
|
|
353
|
-
|
|
397
|
+
$(printf %s "$CI_JOB_STARTED_AT" | sed '1!s/^/ /')
|
|
354
398
|
BUILD_INFO_CURRENT_VERSION: |-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
399
|
+
$(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/^/ /')
|
|
400
|
+
HOSTNAME: |-
|
|
401
|
+
$(printf %s "$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
|
|
358
402
|
ROOT_URL: |-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
HOST_CANONICAL: |-
|
|
363
|
-
$(printf %s "$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
|
|
403
|
+
$(printf %s "https://$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
|
|
404
|
+
HOSTNAME_INTERNAL: |-
|
|
405
|
+
$(printf %s "$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
|
|
364
406
|
ROOT_URL_INTERNAL: |-
|
|
365
|
-
|
|
407
|
+
$(printf %s "https://$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
|
|
366
408
|
CLOUD_RUN_JOB_TRIGGER_URL_migrate: |-
|
|
367
409
|
https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/jobs/pan-test-app-dev-api-migrate:run
|
|
368
410
|
DEPLOY_CLOUD_RUN_PROJECT_ID: |-
|
|
@@ -370,13 +412,13 @@ api 🧪 test:
|
|
|
370
412
|
DEPLOY_CLOUD_RUN_REGION: |-
|
|
371
413
|
europe-west6
|
|
372
414
|
GCLOUD_RUN_canonicalHostSuffix: |-
|
|
373
|
-
|
|
415
|
+
$(printf %s "$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | sed '1!s/^/ /')
|
|
374
416
|
_ALL_ENV_VAR_KEYS: |-
|
|
375
|
-
["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","
|
|
417
|
+
["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOSTNAME","ROOT_URL","HOSTNAME_INTERNAL","ROOT_URL_INTERNAL","CLOUD_RUN_JOB_TRIGGER_URL_migrate","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]
|
|
376
418
|
|
|
377
419
|
EOF
|
|
378
|
-
-
|
|
379
|
-
-
|
|
420
|
+
- collapseable_section_end "writeenvvars"
|
|
421
|
+
- collapseable_section_start "deploy" "Deploy to cloud run"
|
|
380
422
|
- |-
|
|
381
423
|
exist_job_names="$(
|
|
382
424
|
gcloud run jobs list --filter='metadata.name ~ dev.*api' --format='value(name)' --limit=999 --project='google-project-id' --region='europe-west6'
|
|
@@ -389,12 +431,12 @@ api 🧪 test:
|
|
|
389
431
|
fi
|
|
390
432
|
- gcloud beta 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 --add-volume=name=myMount,type=cloud-storage,bucket=my-bucket --add-volume-mount=volume=myMount,mount-path=/mnt/my-mount --add-volume=name=myOtherMount,type=cloud-storage,bucket=some-other-bucket,readonly=true --add-volume-mount=volume=myOtherMount,mount-path=/mnt/my-second-mount --execution-environment=gen2
|
|
391
433
|
- gcloud run jobs execute pan-test-app-dev-api-migrate --project=google-project-id --region=europe-west6
|
|
392
|
-
-
|
|
393
|
-
-
|
|
434
|
+
- collapseable_section_end "deploy"
|
|
435
|
+
- collapseable_section_start "cleanup" "Cleanup"
|
|
394
436
|
- 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
|
|
395
437
|
- 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
|
|
396
438
|
- 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
|
|
397
|
-
-
|
|
439
|
+
- collapseable_section_end "cleanup"
|
|
398
440
|
- echo 'Uploading SBOM to Dependency Track'
|
|
399
441
|
- /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
|
|
400
442
|
- 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
|
|
@@ -436,9 +478,9 @@ api 🧪 test:
|
|
|
436
478
|
KUBERNETES_MEMORY_LIMIT: 400Mi
|
|
437
479
|
GIT_STRATEGY: none
|
|
438
480
|
script:
|
|
439
|
-
-
|
|
481
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
440
482
|
- export CLOUDSDK_CORE_DISABLE_PROMPTS="1"
|
|
441
|
-
-
|
|
483
|
+
- collapseable_section_end "injectvars"
|
|
442
484
|
- set +e
|
|
443
485
|
- gcloud auth activate-service-account --key-file=<(echo "$CL_dev_api_GCLOUD_DEPLOY_credentialsKey")
|
|
444
486
|
- gcloud run services delete pan-test-app-dev-api --project=google-project-id --region=europe-west6
|
|
@@ -476,38 +518,55 @@ api 🧪 test:
|
|
|
476
518
|
KUBERNETES_MEMORY_REQUEST: 1Gi
|
|
477
519
|
KUBERNETES_MEMORY_LIMIT: 4Gi
|
|
478
520
|
script:
|
|
479
|
-
-
|
|
521
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
480
522
|
- export ENV_SHORT="review"
|
|
481
523
|
- export APP_DIR="api"
|
|
482
524
|
- export ENV_TYPE="review"
|
|
483
525
|
- export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
|
|
484
526
|
- export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
|
|
485
527
|
- 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")"
|
|
486
|
-
- export
|
|
528
|
+
- 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)}')"
|
|
487
529
|
- 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)}')"
|
|
488
|
-
- export
|
|
489
|
-
- 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)}')"
|
|
530
|
+
- 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)}')"
|
|
490
531
|
- 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)}')"
|
|
491
532
|
- export CLOUD_RUN_JOB_TRIGGER_URL_migrate="https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/jobs/$(printf %s \\"pan-test-app-review-$([ -n \\"$CI_MERGE_REQUEST_IID\\" ] && echo \\"mr$CI_MERGE_REQUEST_IID\\" || { [ -n \\"$CI_COMMIT_REF_SLUG\\" ] && echo \\"$CI_COMMIT_REF_SLUG\\" || echo \\"unknown\\"; })-api\\" | awk '{print tolower($0)}')-migrate:run"
|
|
492
533
|
- export DEPLOY_CLOUD_RUN_PROJECT_ID="google-project-id"
|
|
493
534
|
- export DEPLOY_CLOUD_RUN_REGION="europe-west6"
|
|
494
535
|
- export GCLOUD_DEPLOY_credentialsKey="$CL_review_api_GCLOUD_DEPLOY_credentialsKey"
|
|
495
536
|
- export GCLOUD_RUN_canonicalHostSuffix="$CL_review_api_GCLOUD_RUN_canonicalHostSuffix"
|
|
496
|
-
- export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"
|
|
497
|
-
-
|
|
537
|
+
- export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOSTNAME\\",\\"ROOT_URL\\",\\"HOSTNAME_INTERNAL\\",\\"ROOT_URL_INTERNAL\\",\\"CLOUD_RUN_JOB_TRIGGER_URL_migrate\\",\\"DEPLOY_CLOUD_RUN_PROJECT_ID\\",\\"DEPLOY_CLOUD_RUN_REGION\\",\\"GCLOUD_DEPLOY_credentialsKey\\",\\"GCLOUD_RUN_canonicalHostSuffix\\"]"
|
|
538
|
+
- collapseable_section_end "injectvars"
|
|
539
|
+
- collapseable_section_start "write-dotenv-api" "write dot env for api"
|
|
540
|
+
- |-
|
|
541
|
+
cat <<EOF > api/.env
|
|
542
|
+
ENV_SHORT=review
|
|
543
|
+
APP_DIR=api
|
|
544
|
+
ENV_TYPE=review
|
|
545
|
+
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)
|
|
546
|
+
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)
|
|
547
|
+
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)
|
|
548
|
+
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)
|
|
549
|
+
CLOUD_RUN_JOB_TRIGGER_URL_migrate=https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/jobs/$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api" | awk '{print tolower($0)}')-migrate:run
|
|
550
|
+
DEPLOY_CLOUD_RUN_PROJECT_ID=google-project-id
|
|
551
|
+
DEPLOY_CLOUD_RUN_REGION=europe-west6
|
|
552
|
+
GCLOUD_DEPLOY_credentialsKey=$(printf %s "$CL_review_api_GCLOUD_DEPLOY_credentialsKey" | escapeForDotEnv)
|
|
553
|
+
GCLOUD_RUN_canonicalHostSuffix=$(printf %s "$CL_review_api_GCLOUD_RUN_canonicalHostSuffix" | escapeForDotEnv)
|
|
554
|
+
_ALL_ENV_VAR_KEYS=["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOSTNAME","ROOT_URL","HOSTNAME_INTERNAL","ROOT_URL_INTERNAL","CLOUD_RUN_JOB_TRIGGER_URL_migrate","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]
|
|
555
|
+
EOF
|
|
556
|
+
- collapseable_section_end "write-dotenv-api"
|
|
498
557
|
- echo '{"id":"$(git describe --tags 2>/dev/null || git rev-parse HEAD)","time":"$CI_JOB_STARTED_AT"}' > api/__build_info.json
|
|
499
|
-
-
|
|
558
|
+
- collapseable_section_start "nodeinstall" "Ensure node version"
|
|
500
559
|
- if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
|
|
501
560
|
- if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
|
|
502
|
-
-
|
|
561
|
+
- collapseable_section_end "nodeinstall"
|
|
503
562
|
- cd api
|
|
504
|
-
-
|
|
563
|
+
- collapseable_section_start "nodeinstall" "Ensure node version"
|
|
505
564
|
- if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
|
|
506
565
|
- if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
|
|
507
|
-
-
|
|
508
|
-
-
|
|
566
|
+
- collapseable_section_end "nodeinstall"
|
|
567
|
+
- collapseable_section_start "yarninstall" "Yarn install"
|
|
509
568
|
- yarn install --immutable
|
|
510
|
-
-
|
|
569
|
+
- collapseable_section_end "yarninstall"
|
|
511
570
|
- yarn build
|
|
512
571
|
cache:
|
|
513
572
|
- key: api-yarn
|
|
@@ -518,15 +577,13 @@ api 🧪 test:
|
|
|
518
577
|
policy: pull-push
|
|
519
578
|
paths:
|
|
520
579
|
- api/node_modules
|
|
521
|
-
- key: api-next-cache
|
|
522
|
-
policy: pull-push
|
|
523
|
-
paths:
|
|
524
|
-
- api/.next/cache
|
|
525
580
|
artifacts:
|
|
526
581
|
paths:
|
|
527
582
|
- api/__build_info.json
|
|
528
583
|
- api/.next
|
|
529
584
|
- api/dist
|
|
585
|
+
exclude:
|
|
586
|
+
- api/.env
|
|
530
587
|
expire_in: 1 day
|
|
531
588
|
when: always
|
|
532
589
|
reports: {}
|
|
@@ -552,7 +609,7 @@ api 🧪 test:
|
|
|
552
609
|
KUBERNETES_MEMORY_REQUEST: 1Gi
|
|
553
610
|
KUBERNETES_MEMORY_LIMIT: 2Gi
|
|
554
611
|
script:
|
|
555
|
-
-
|
|
612
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
556
613
|
- export APP_DIR="api"
|
|
557
614
|
- export DOCKER_BUILD_CONTEXT="."
|
|
558
615
|
- export DOCKER_REGISTRY="europe-west6-docker.pkg.dev"
|
|
@@ -568,20 +625,20 @@ api 🧪 test:
|
|
|
568
625
|
COPY --chown=node:node api/yarn.lock /app/api/yarn.lock
|
|
569
626
|
COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
|
|
570
627
|
COPY --chown=node:node .yarn /app/.yarn"
|
|
571
|
-
-
|
|
628
|
+
- collapseable_section_end "injectvars"
|
|
572
629
|
- ensureNodeDockerfile
|
|
573
|
-
-
|
|
630
|
+
- collapseable_section_start "docker-login" "Docker Login"
|
|
574
631
|
- gcloud auth activate-service-account --key-file=<(echo "$CL_review_api_GCLOUD_DEPLOY_credentialsKey")
|
|
575
632
|
- gcloud auth configure-docker europe-west6-docker.pkg.dev
|
|
576
|
-
-
|
|
577
|
-
-
|
|
633
|
+
- collapseable_section_end "docker-login"
|
|
634
|
+
- collapseable_section_start "docker-build" "Docker build"
|
|
578
635
|
- 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
|
|
579
|
-
-
|
|
580
|
-
-
|
|
636
|
+
- collapseable_section_end "docker-build"
|
|
637
|
+
- collapseable_section_start "docker-push" "Docker push and tag"
|
|
581
638
|
- docker push $DOCKER_IMAGE:$DOCKER_IMAGE_TAG
|
|
582
639
|
- docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG $DOCKER_CACHE_IMAGE
|
|
583
640
|
- docker push $DOCKER_CACHE_IMAGE
|
|
584
|
-
-
|
|
641
|
+
- collapseable_section_end "docker-push"
|
|
585
642
|
cache:
|
|
586
643
|
- key: api-yarn
|
|
587
644
|
policy: pull
|
|
@@ -598,8 +655,8 @@ api 🧪 test:
|
|
|
598
655
|
image: aquasec/trivy:0.38.3
|
|
599
656
|
variables: {}
|
|
600
657
|
script:
|
|
601
|
-
-
|
|
602
|
-
-
|
|
658
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
659
|
+
- collapseable_section_end "injectvars"
|
|
603
660
|
- trivy fs --quiet --format cyclonedx --output "__sbom.json" api
|
|
604
661
|
artifacts:
|
|
605
662
|
paths:
|
|
@@ -618,36 +675,35 @@ api 🧪 test:
|
|
|
618
675
|
KUBERNETES_MEMORY_REQUEST: 200Mi
|
|
619
676
|
KUBERNETES_MEMORY_LIMIT: 400Mi
|
|
620
677
|
script:
|
|
621
|
-
-
|
|
678
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
622
679
|
- export ENV_SHORT="review"
|
|
623
680
|
- export APP_DIR="api"
|
|
624
681
|
- export ENV_TYPE="review"
|
|
625
682
|
- export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
|
|
626
683
|
- export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
|
|
627
684
|
- 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")"
|
|
628
|
-
- export
|
|
685
|
+
- 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)}')"
|
|
629
686
|
- 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)}')"
|
|
630
|
-
- export
|
|
631
|
-
- 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)}')"
|
|
687
|
+
- 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)}')"
|
|
632
688
|
- 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)}')"
|
|
633
689
|
- export CLOUD_RUN_JOB_TRIGGER_URL_migrate="https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/jobs/$(printf %s \\"pan-test-app-review-$([ -n \\"$CI_MERGE_REQUEST_IID\\" ] && echo \\"mr$CI_MERGE_REQUEST_IID\\" || { [ -n \\"$CI_COMMIT_REF_SLUG\\" ] && echo \\"$CI_COMMIT_REF_SLUG\\" || echo \\"unknown\\"; })-api\\" | awk '{print tolower($0)}')-migrate:run"
|
|
634
690
|
- export DEPLOY_CLOUD_RUN_PROJECT_ID="google-project-id"
|
|
635
691
|
- export DEPLOY_CLOUD_RUN_REGION="europe-west6"
|
|
636
692
|
- export GCLOUD_DEPLOY_credentialsKey="$CL_review_api_GCLOUD_DEPLOY_credentialsKey"
|
|
637
693
|
- export GCLOUD_RUN_canonicalHostSuffix="$CL_review_api_GCLOUD_RUN_canonicalHostSuffix"
|
|
638
|
-
- export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"
|
|
694
|
+
- export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOSTNAME\\",\\"ROOT_URL\\",\\"HOSTNAME_INTERNAL\\",\\"ROOT_URL_INTERNAL\\",\\"CLOUD_RUN_JOB_TRIGGER_URL_migrate\\",\\"DEPLOY_CLOUD_RUN_PROJECT_ID\\",\\"DEPLOY_CLOUD_RUN_REGION\\",\\"GCLOUD_DEPLOY_credentialsKey\\",\\"GCLOUD_RUN_canonicalHostSuffix\\"]"
|
|
639
695
|
- export DOCKER_REGISTRY="europe-west6-docker.pkg.dev"
|
|
640
696
|
- 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"; })"
|
|
641
697
|
- export DOCKER_CACHE_IMAGE="europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/api"
|
|
642
698
|
- export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"
|
|
643
699
|
- export CLOUDSDK_CORE_DISABLE_PROMPTS="1"
|
|
644
|
-
-
|
|
645
|
-
-
|
|
700
|
+
- collapseable_section_end "injectvars"
|
|
701
|
+
- collapseable_section_start "prepare" "Prepare..."
|
|
646
702
|
- gcloud auth activate-service-account --key-file=<(echo "$CL_review_api_GCLOUD_DEPLOY_credentialsKey")
|
|
647
703
|
- export GCLOUD_PROJECT_NUMBER=$(gcloud projects describe google-project-id --format="value(projectNumber)")
|
|
648
704
|
- 'echo "GCLOUD_PROJECT_NUMBER: $GCLOUD_PROJECT_NUMBER"'
|
|
649
|
-
-
|
|
650
|
-
-
|
|
705
|
+
- collapseable_section_end "prepare"
|
|
706
|
+
- collapseable_section_start "writeenvvars" "Write env vars to file"
|
|
651
707
|
- |
|
|
652
708
|
cat > ____envvars.yaml <<EOF
|
|
653
709
|
ENV_SHORT: |-
|
|
@@ -657,21 +713,19 @@ api 🧪 test:
|
|
|
657
713
|
ENV_TYPE: |-
|
|
658
714
|
review
|
|
659
715
|
BUILD_INFO_BUILD_ID: |-
|
|
660
|
-
|
|
716
|
+
$(printf %s "$(git describe --tags 2>/dev/null || git rev-parse HEAD)" | sed '1!s/^/ /')
|
|
661
717
|
BUILD_INFO_BUILD_TIME: |-
|
|
662
|
-
|
|
718
|
+
$(printf %s "$CI_JOB_STARTED_AT" | sed '1!s/^/ /')
|
|
663
719
|
BUILD_INFO_CURRENT_VERSION: |-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
720
|
+
$(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/^/ /')
|
|
721
|
+
HOSTNAME: |-
|
|
722
|
+
$(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/^/ /')
|
|
667
723
|
ROOT_URL: |-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
HOST_CANONICAL: |-
|
|
672
|
-
$(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/^/ /')
|
|
724
|
+
$(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/^/ /')
|
|
725
|
+
HOSTNAME_INTERNAL: |-
|
|
726
|
+
$(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/^/ /')
|
|
673
727
|
ROOT_URL_INTERNAL: |-
|
|
674
|
-
|
|
728
|
+
$(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/^/ /')
|
|
675
729
|
CLOUD_RUN_JOB_TRIGGER_URL_migrate: |-
|
|
676
730
|
https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/jobs/$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api" | awk '{print tolower($0)}')-migrate:run
|
|
677
731
|
DEPLOY_CLOUD_RUN_PROJECT_ID: |-
|
|
@@ -679,13 +733,13 @@ api 🧪 test:
|
|
|
679
733
|
DEPLOY_CLOUD_RUN_REGION: |-
|
|
680
734
|
europe-west6
|
|
681
735
|
GCLOUD_RUN_canonicalHostSuffix: |-
|
|
682
|
-
|
|
736
|
+
$(printf %s "$CL_review_api_GCLOUD_RUN_canonicalHostSuffix" | sed '1!s/^/ /')
|
|
683
737
|
_ALL_ENV_VAR_KEYS: |-
|
|
684
|
-
["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","
|
|
738
|
+
["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOSTNAME","ROOT_URL","HOSTNAME_INTERNAL","ROOT_URL_INTERNAL","CLOUD_RUN_JOB_TRIGGER_URL_migrate","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]
|
|
685
739
|
|
|
686
740
|
EOF
|
|
687
|
-
-
|
|
688
|
-
-
|
|
741
|
+
- collapseable_section_end "writeenvvars"
|
|
742
|
+
- collapseable_section_start "deploy" "Deploy to cloud run"
|
|
689
743
|
- |-
|
|
690
744
|
exist_job_names="$(
|
|
691
745
|
gcloud run jobs list --filter='metadata.name ~ review.*api' --format='value(name)' --limit=999 --project='google-project-id' --region='europe-west6'
|
|
@@ -698,15 +752,15 @@ api 🧪 test:
|
|
|
698
752
|
fi
|
|
699
753
|
- gcloud beta 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 --add-volume=name=myMount,type=cloud-storage,bucket=my-bucket --add-volume-mount=volume=myMount,mount-path=/mnt/my-mount --add-volume=name=myOtherMount,type=cloud-storage,bucket=some-other-bucket,readonly=true --add-volume-mount=volume=myOtherMount,mount-path=/mnt/my-second-mount --execution-environment=gen2
|
|
700
754
|
- gcloud run jobs execute $(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api" | awk '{print tolower($0)}')-migrate --project=google-project-id --region=europe-west6
|
|
701
|
-
-
|
|
702
|
-
-
|
|
755
|
+
- collapseable_section_end "deploy"
|
|
756
|
+
- collapseable_section_start "cleanup" "Cleanup"
|
|
703
757
|
- 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
|
|
704
758
|
- 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
|
|
705
759
|
- 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
|
|
706
760
|
- set +e
|
|
707
761
|
- gcloud artifacts docker images delete europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/review/api --quiet --delete-tags
|
|
708
762
|
- set -e
|
|
709
|
-
-
|
|
763
|
+
- collapseable_section_end "cleanup"
|
|
710
764
|
- echo 'Uploading SBOM to Dependency Track'
|
|
711
765
|
- /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
|
|
712
766
|
- 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
|
|
@@ -746,9 +800,9 @@ api 🧪 test:
|
|
|
746
800
|
KUBERNETES_MEMORY_LIMIT: 400Mi
|
|
747
801
|
GIT_STRATEGY: none
|
|
748
802
|
script:
|
|
749
|
-
-
|
|
803
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
750
804
|
- export CLOUDSDK_CORE_DISABLE_PROMPTS="1"
|
|
751
|
-
-
|
|
805
|
+
- collapseable_section_end "injectvars"
|
|
752
806
|
- set +e
|
|
753
807
|
- gcloud auth activate-service-account --key-file=<(echo "$CL_review_api_GCLOUD_DEPLOY_credentialsKey")
|
|
754
808
|
- 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
|
|
@@ -787,38 +841,55 @@ api 🧪 test:
|
|
|
787
841
|
KUBERNETES_MEMORY_REQUEST: 1Gi
|
|
788
842
|
KUBERNETES_MEMORY_LIMIT: 4Gi
|
|
789
843
|
script:
|
|
790
|
-
-
|
|
844
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
791
845
|
- export ENV_SHORT="stage"
|
|
792
846
|
- export APP_DIR="api"
|
|
793
847
|
- export ENV_TYPE="stage"
|
|
794
848
|
- export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
|
|
795
849
|
- export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
|
|
796
850
|
- 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")"
|
|
797
|
-
- export
|
|
851
|
+
- export HOSTNAME="$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
798
852
|
- export ROOT_URL="https://$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
799
|
-
- export
|
|
800
|
-
- export HOST_CANONICAL="$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
853
|
+
- export HOSTNAME_INTERNAL="$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
801
854
|
- export ROOT_URL_INTERNAL="https://$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
802
855
|
- export CLOUD_RUN_JOB_TRIGGER_URL_migrate="https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/jobs/pan-test-app-stage-api-migrate:run"
|
|
803
856
|
- export DEPLOY_CLOUD_RUN_PROJECT_ID="google-project-id"
|
|
804
857
|
- export DEPLOY_CLOUD_RUN_REGION="europe-west6"
|
|
805
858
|
- export GCLOUD_DEPLOY_credentialsKey="$CL_stage_api_GCLOUD_DEPLOY_credentialsKey"
|
|
806
859
|
- export GCLOUD_RUN_canonicalHostSuffix="$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix"
|
|
807
|
-
- export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"
|
|
808
|
-
-
|
|
860
|
+
- export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOSTNAME\\",\\"ROOT_URL\\",\\"HOSTNAME_INTERNAL\\",\\"ROOT_URL_INTERNAL\\",\\"CLOUD_RUN_JOB_TRIGGER_URL_migrate\\",\\"DEPLOY_CLOUD_RUN_PROJECT_ID\\",\\"DEPLOY_CLOUD_RUN_REGION\\",\\"GCLOUD_DEPLOY_credentialsKey\\",\\"GCLOUD_RUN_canonicalHostSuffix\\"]"
|
|
861
|
+
- collapseable_section_end "injectvars"
|
|
862
|
+
- collapseable_section_start "write-dotenv-api" "write dot env for api"
|
|
863
|
+
- |-
|
|
864
|
+
cat <<EOF > api/.env
|
|
865
|
+
ENV_SHORT=stage
|
|
866
|
+
APP_DIR=api
|
|
867
|
+
ENV_TYPE=stage
|
|
868
|
+
HOSTNAME=$(printf %s "$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | escapeForDotEnv)
|
|
869
|
+
ROOT_URL=$(printf %s "https://$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | escapeForDotEnv)
|
|
870
|
+
HOSTNAME_INTERNAL=$(printf %s "$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | escapeForDotEnv)
|
|
871
|
+
ROOT_URL_INTERNAL=$(printf %s "https://$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | escapeForDotEnv)
|
|
872
|
+
CLOUD_RUN_JOB_TRIGGER_URL_migrate=https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/jobs/pan-test-app-stage-api-migrate:run
|
|
873
|
+
DEPLOY_CLOUD_RUN_PROJECT_ID=google-project-id
|
|
874
|
+
DEPLOY_CLOUD_RUN_REGION=europe-west6
|
|
875
|
+
GCLOUD_DEPLOY_credentialsKey=$(printf %s "$CL_stage_api_GCLOUD_DEPLOY_credentialsKey" | escapeForDotEnv)
|
|
876
|
+
GCLOUD_RUN_canonicalHostSuffix=$(printf %s "$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | escapeForDotEnv)
|
|
877
|
+
_ALL_ENV_VAR_KEYS=["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOSTNAME","ROOT_URL","HOSTNAME_INTERNAL","ROOT_URL_INTERNAL","CLOUD_RUN_JOB_TRIGGER_URL_migrate","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]
|
|
878
|
+
EOF
|
|
879
|
+
- collapseable_section_end "write-dotenv-api"
|
|
809
880
|
- echo '{"id":"$(git describe --tags 2>/dev/null || git rev-parse HEAD)","time":"$CI_JOB_STARTED_AT"}' > api/__build_info.json
|
|
810
|
-
-
|
|
881
|
+
- collapseable_section_start "nodeinstall" "Ensure node version"
|
|
811
882
|
- if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
|
|
812
883
|
- if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
|
|
813
|
-
-
|
|
884
|
+
- collapseable_section_end "nodeinstall"
|
|
814
885
|
- cd api
|
|
815
|
-
-
|
|
886
|
+
- collapseable_section_start "nodeinstall" "Ensure node version"
|
|
816
887
|
- if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
|
|
817
888
|
- if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
|
|
818
|
-
-
|
|
819
|
-
-
|
|
889
|
+
- collapseable_section_end "nodeinstall"
|
|
890
|
+
- collapseable_section_start "yarninstall" "Yarn install"
|
|
820
891
|
- yarn install --immutable
|
|
821
|
-
-
|
|
892
|
+
- collapseable_section_end "yarninstall"
|
|
822
893
|
- yarn build
|
|
823
894
|
cache:
|
|
824
895
|
- key: api-yarn
|
|
@@ -829,15 +900,13 @@ api 🧪 test:
|
|
|
829
900
|
policy: pull-push
|
|
830
901
|
paths:
|
|
831
902
|
- api/node_modules
|
|
832
|
-
- key: api-next-cache
|
|
833
|
-
policy: pull-push
|
|
834
|
-
paths:
|
|
835
|
-
- api/.next/cache
|
|
836
903
|
artifacts:
|
|
837
904
|
paths:
|
|
838
905
|
- api/__build_info.json
|
|
839
906
|
- api/.next
|
|
840
907
|
- api/dist
|
|
908
|
+
exclude:
|
|
909
|
+
- api/.env
|
|
841
910
|
expire_in: 1 day
|
|
842
911
|
when: always
|
|
843
912
|
reports: {}
|
|
@@ -863,7 +932,7 @@ api 🧪 test:
|
|
|
863
932
|
KUBERNETES_MEMORY_REQUEST: 1Gi
|
|
864
933
|
KUBERNETES_MEMORY_LIMIT: 2Gi
|
|
865
934
|
script:
|
|
866
|
-
-
|
|
935
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
867
936
|
- export APP_DIR="api"
|
|
868
937
|
- export DOCKER_BUILD_CONTEXT="."
|
|
869
938
|
- export DOCKER_REGISTRY="europe-west6-docker.pkg.dev"
|
|
@@ -879,20 +948,20 @@ api 🧪 test:
|
|
|
879
948
|
COPY --chown=node:node api/yarn.lock /app/api/yarn.lock
|
|
880
949
|
COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
|
|
881
950
|
COPY --chown=node:node .yarn /app/.yarn"
|
|
882
|
-
-
|
|
951
|
+
- collapseable_section_end "injectvars"
|
|
883
952
|
- ensureNodeDockerfile
|
|
884
|
-
-
|
|
953
|
+
- collapseable_section_start "docker-login" "Docker Login"
|
|
885
954
|
- gcloud auth activate-service-account --key-file=<(echo "$CL_stage_api_GCLOUD_DEPLOY_credentialsKey")
|
|
886
955
|
- gcloud auth configure-docker europe-west6-docker.pkg.dev
|
|
887
|
-
-
|
|
888
|
-
-
|
|
956
|
+
- collapseable_section_end "docker-login"
|
|
957
|
+
- collapseable_section_start "docker-build" "Docker build"
|
|
889
958
|
- 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
|
|
890
|
-
-
|
|
891
|
-
-
|
|
959
|
+
- collapseable_section_end "docker-build"
|
|
960
|
+
- collapseable_section_start "docker-push" "Docker push and tag"
|
|
892
961
|
- docker push $DOCKER_IMAGE:$DOCKER_IMAGE_TAG
|
|
893
962
|
- docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG $DOCKER_CACHE_IMAGE
|
|
894
963
|
- docker push $DOCKER_CACHE_IMAGE
|
|
895
|
-
-
|
|
964
|
+
- collapseable_section_end "docker-push"
|
|
896
965
|
cache:
|
|
897
966
|
- key: api-yarn
|
|
898
967
|
policy: pull
|
|
@@ -909,8 +978,8 @@ api 🧪 test:
|
|
|
909
978
|
image: aquasec/trivy:0.38.3
|
|
910
979
|
variables: {}
|
|
911
980
|
script:
|
|
912
|
-
-
|
|
913
|
-
-
|
|
981
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
982
|
+
- collapseable_section_end "injectvars"
|
|
914
983
|
- trivy fs --quiet --format cyclonedx --output "__sbom.json" api
|
|
915
984
|
artifacts:
|
|
916
985
|
paths:
|
|
@@ -929,36 +998,35 @@ api 🧪 test:
|
|
|
929
998
|
KUBERNETES_MEMORY_REQUEST: 200Mi
|
|
930
999
|
KUBERNETES_MEMORY_LIMIT: 400Mi
|
|
931
1000
|
script:
|
|
932
|
-
-
|
|
1001
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
933
1002
|
- export ENV_SHORT="stage"
|
|
934
1003
|
- export APP_DIR="api"
|
|
935
1004
|
- export ENV_TYPE="stage"
|
|
936
1005
|
- export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
|
|
937
1006
|
- export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
|
|
938
1007
|
- 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")"
|
|
939
|
-
- export
|
|
1008
|
+
- export HOSTNAME="$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
940
1009
|
- export ROOT_URL="https://$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
941
|
-
- export
|
|
942
|
-
- export HOST_CANONICAL="$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
1010
|
+
- export HOSTNAME_INTERNAL="$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
943
1011
|
- export ROOT_URL_INTERNAL="https://$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
944
1012
|
- export CLOUD_RUN_JOB_TRIGGER_URL_migrate="https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/jobs/pan-test-app-stage-api-migrate:run"
|
|
945
1013
|
- export DEPLOY_CLOUD_RUN_PROJECT_ID="google-project-id"
|
|
946
1014
|
- export DEPLOY_CLOUD_RUN_REGION="europe-west6"
|
|
947
1015
|
- export GCLOUD_DEPLOY_credentialsKey="$CL_stage_api_GCLOUD_DEPLOY_credentialsKey"
|
|
948
1016
|
- export GCLOUD_RUN_canonicalHostSuffix="$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix"
|
|
949
|
-
- export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"
|
|
1017
|
+
- export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOSTNAME\\",\\"ROOT_URL\\",\\"HOSTNAME_INTERNAL\\",\\"ROOT_URL_INTERNAL\\",\\"CLOUD_RUN_JOB_TRIGGER_URL_migrate\\",\\"DEPLOY_CLOUD_RUN_PROJECT_ID\\",\\"DEPLOY_CLOUD_RUN_REGION\\",\\"GCLOUD_DEPLOY_credentialsKey\\",\\"GCLOUD_RUN_canonicalHostSuffix\\"]"
|
|
950
1018
|
- export DOCKER_REGISTRY="europe-west6-docker.pkg.dev"
|
|
951
1019
|
- export DOCKER_IMAGE="europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/stage/api"
|
|
952
1020
|
- export DOCKER_CACHE_IMAGE="europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/api"
|
|
953
1021
|
- export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"
|
|
954
1022
|
- export CLOUDSDK_CORE_DISABLE_PROMPTS="1"
|
|
955
|
-
-
|
|
956
|
-
-
|
|
1023
|
+
- collapseable_section_end "injectvars"
|
|
1024
|
+
- collapseable_section_start "prepare" "Prepare..."
|
|
957
1025
|
- gcloud auth activate-service-account --key-file=<(echo "$CL_stage_api_GCLOUD_DEPLOY_credentialsKey")
|
|
958
1026
|
- export GCLOUD_PROJECT_NUMBER=$(gcloud projects describe google-project-id --format="value(projectNumber)")
|
|
959
1027
|
- 'echo "GCLOUD_PROJECT_NUMBER: $GCLOUD_PROJECT_NUMBER"'
|
|
960
|
-
-
|
|
961
|
-
-
|
|
1028
|
+
- collapseable_section_end "prepare"
|
|
1029
|
+
- collapseable_section_start "writeenvvars" "Write env vars to file"
|
|
962
1030
|
- |
|
|
963
1031
|
cat > ____envvars.yaml <<EOF
|
|
964
1032
|
ENV_SHORT: |-
|
|
@@ -968,21 +1036,19 @@ api 🧪 test:
|
|
|
968
1036
|
ENV_TYPE: |-
|
|
969
1037
|
stage
|
|
970
1038
|
BUILD_INFO_BUILD_ID: |-
|
|
971
|
-
|
|
1039
|
+
$(printf %s "$(git describe --tags 2>/dev/null || git rev-parse HEAD)" | sed '1!s/^/ /')
|
|
972
1040
|
BUILD_INFO_BUILD_TIME: |-
|
|
973
|
-
|
|
1041
|
+
$(printf %s "$CI_JOB_STARTED_AT" | sed '1!s/^/ /')
|
|
974
1042
|
BUILD_INFO_CURRENT_VERSION: |-
|
|
975
|
-
|
|
976
|
-
|
|
977
|
-
|
|
1043
|
+
$(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/^/ /')
|
|
1044
|
+
HOSTNAME: |-
|
|
1045
|
+
$(printf %s "$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
|
|
978
1046
|
ROOT_URL: |-
|
|
979
|
-
|
|
980
|
-
|
|
981
|
-
|
|
982
|
-
HOST_CANONICAL: |-
|
|
983
|
-
$(printf %s "$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
|
|
1047
|
+
$(printf %s "https://$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
|
|
1048
|
+
HOSTNAME_INTERNAL: |-
|
|
1049
|
+
$(printf %s "$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
|
|
984
1050
|
ROOT_URL_INTERNAL: |-
|
|
985
|
-
|
|
1051
|
+
$(printf %s "https://$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
|
|
986
1052
|
CLOUD_RUN_JOB_TRIGGER_URL_migrate: |-
|
|
987
1053
|
https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/jobs/pan-test-app-stage-api-migrate:run
|
|
988
1054
|
DEPLOY_CLOUD_RUN_PROJECT_ID: |-
|
|
@@ -990,13 +1056,13 @@ api 🧪 test:
|
|
|
990
1056
|
DEPLOY_CLOUD_RUN_REGION: |-
|
|
991
1057
|
europe-west6
|
|
992
1058
|
GCLOUD_RUN_canonicalHostSuffix: |-
|
|
993
|
-
|
|
1059
|
+
$(printf %s "$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | sed '1!s/^/ /')
|
|
994
1060
|
_ALL_ENV_VAR_KEYS: |-
|
|
995
|
-
["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","
|
|
1061
|
+
["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOSTNAME","ROOT_URL","HOSTNAME_INTERNAL","ROOT_URL_INTERNAL","CLOUD_RUN_JOB_TRIGGER_URL_migrate","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]
|
|
996
1062
|
|
|
997
1063
|
EOF
|
|
998
|
-
-
|
|
999
|
-
-
|
|
1064
|
+
- collapseable_section_end "writeenvvars"
|
|
1065
|
+
- collapseable_section_start "deploy" "Deploy to cloud run"
|
|
1000
1066
|
- |-
|
|
1001
1067
|
exist_job_names="$(
|
|
1002
1068
|
gcloud run jobs list --filter='metadata.name ~ stage.*api' --format='value(name)' --limit=999 --project='google-project-id' --region='europe-west6'
|
|
@@ -1009,12 +1075,12 @@ api 🧪 test:
|
|
|
1009
1075
|
fi
|
|
1010
1076
|
- gcloud beta 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 --add-volume=name=myMount,type=cloud-storage,bucket=my-bucket --add-volume-mount=volume=myMount,mount-path=/mnt/my-mount --add-volume=name=myOtherMount,type=cloud-storage,bucket=some-other-bucket,readonly=true --add-volume-mount=volume=myOtherMount,mount-path=/mnt/my-second-mount --execution-environment=gen2
|
|
1011
1077
|
- gcloud run jobs execute pan-test-app-stage-api-migrate --project=google-project-id --region=europe-west6
|
|
1012
|
-
-
|
|
1013
|
-
-
|
|
1078
|
+
- collapseable_section_end "deploy"
|
|
1079
|
+
- collapseable_section_start "cleanup" "Cleanup"
|
|
1014
1080
|
- 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
|
|
1015
1081
|
- 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
|
|
1016
1082
|
- 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
|
|
1017
|
-
-
|
|
1083
|
+
- collapseable_section_end "cleanup"
|
|
1018
1084
|
- echo 'Uploading SBOM to Dependency Track'
|
|
1019
1085
|
- /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
|
|
1020
1086
|
- 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
|
|
@@ -1047,9 +1113,9 @@ api 🧪 test:
|
|
|
1047
1113
|
KUBERNETES_MEMORY_LIMIT: 400Mi
|
|
1048
1114
|
GIT_STRATEGY: none
|
|
1049
1115
|
script:
|
|
1050
|
-
-
|
|
1116
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
1051
1117
|
- export CLOUDSDK_CORE_DISABLE_PROMPTS="1"
|
|
1052
|
-
-
|
|
1118
|
+
- collapseable_section_end "injectvars"
|
|
1053
1119
|
- set +e
|
|
1054
1120
|
- gcloud auth activate-service-account --key-file=<(echo "$CL_stage_api_GCLOUD_DEPLOY_credentialsKey")
|
|
1055
1121
|
- gcloud run services delete pan-test-app-stage-api --project=google-project-id --region=europe-west6
|
|
@@ -1085,38 +1151,55 @@ api 🧪 test:
|
|
|
1085
1151
|
KUBERNETES_MEMORY_REQUEST: 1Gi
|
|
1086
1152
|
KUBERNETES_MEMORY_LIMIT: 4Gi
|
|
1087
1153
|
script:
|
|
1088
|
-
-
|
|
1154
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
1089
1155
|
- export ENV_SHORT="prod"
|
|
1090
1156
|
- export APP_DIR="api"
|
|
1091
1157
|
- export ENV_TYPE="prod"
|
|
1092
1158
|
- export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
|
|
1093
1159
|
- export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
|
|
1094
1160
|
- 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")"
|
|
1095
|
-
- export
|
|
1161
|
+
- export HOSTNAME="$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
1096
1162
|
- export ROOT_URL="https://$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
1097
|
-
- export
|
|
1098
|
-
- export HOST_CANONICAL="$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
1163
|
+
- export HOSTNAME_INTERNAL="$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
1099
1164
|
- export ROOT_URL_INTERNAL="https://$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
1100
1165
|
- export CLOUD_RUN_JOB_TRIGGER_URL_migrate="https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/jobs/pan-test-app-prod-api-migrate:run"
|
|
1101
1166
|
- export DEPLOY_CLOUD_RUN_PROJECT_ID="google-project-id"
|
|
1102
1167
|
- export DEPLOY_CLOUD_RUN_REGION="europe-west6"
|
|
1103
1168
|
- export GCLOUD_DEPLOY_credentialsKey="$CL_prod_api_GCLOUD_DEPLOY_credentialsKey"
|
|
1104
1169
|
- export GCLOUD_RUN_canonicalHostSuffix="$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix"
|
|
1105
|
-
- export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"
|
|
1106
|
-
-
|
|
1170
|
+
- export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOSTNAME\\",\\"ROOT_URL\\",\\"HOSTNAME_INTERNAL\\",\\"ROOT_URL_INTERNAL\\",\\"CLOUD_RUN_JOB_TRIGGER_URL_migrate\\",\\"DEPLOY_CLOUD_RUN_PROJECT_ID\\",\\"DEPLOY_CLOUD_RUN_REGION\\",\\"GCLOUD_DEPLOY_credentialsKey\\",\\"GCLOUD_RUN_canonicalHostSuffix\\"]"
|
|
1171
|
+
- collapseable_section_end "injectvars"
|
|
1172
|
+
- collapseable_section_start "write-dotenv-api" "write dot env for api"
|
|
1173
|
+
- |-
|
|
1174
|
+
cat <<EOF > api/.env
|
|
1175
|
+
ENV_SHORT=prod
|
|
1176
|
+
APP_DIR=api
|
|
1177
|
+
ENV_TYPE=prod
|
|
1178
|
+
HOSTNAME=$(printf %s "$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | escapeForDotEnv)
|
|
1179
|
+
ROOT_URL=$(printf %s "https://$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | escapeForDotEnv)
|
|
1180
|
+
HOSTNAME_INTERNAL=$(printf %s "$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | escapeForDotEnv)
|
|
1181
|
+
ROOT_URL_INTERNAL=$(printf %s "https://$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | escapeForDotEnv)
|
|
1182
|
+
CLOUD_RUN_JOB_TRIGGER_URL_migrate=https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/jobs/pan-test-app-prod-api-migrate:run
|
|
1183
|
+
DEPLOY_CLOUD_RUN_PROJECT_ID=google-project-id
|
|
1184
|
+
DEPLOY_CLOUD_RUN_REGION=europe-west6
|
|
1185
|
+
GCLOUD_DEPLOY_credentialsKey=$(printf %s "$CL_prod_api_GCLOUD_DEPLOY_credentialsKey" | escapeForDotEnv)
|
|
1186
|
+
GCLOUD_RUN_canonicalHostSuffix=$(printf %s "$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | escapeForDotEnv)
|
|
1187
|
+
_ALL_ENV_VAR_KEYS=["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOSTNAME","ROOT_URL","HOSTNAME_INTERNAL","ROOT_URL_INTERNAL","CLOUD_RUN_JOB_TRIGGER_URL_migrate","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]
|
|
1188
|
+
EOF
|
|
1189
|
+
- collapseable_section_end "write-dotenv-api"
|
|
1107
1190
|
- echo '{"id":"$(git describe --tags 2>/dev/null || git rev-parse HEAD)","time":"$CI_JOB_STARTED_AT"}' > api/__build_info.json
|
|
1108
|
-
-
|
|
1191
|
+
- collapseable_section_start "nodeinstall" "Ensure node version"
|
|
1109
1192
|
- if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
|
|
1110
1193
|
- if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
|
|
1111
|
-
-
|
|
1194
|
+
- collapseable_section_end "nodeinstall"
|
|
1112
1195
|
- cd api
|
|
1113
|
-
-
|
|
1196
|
+
- collapseable_section_start "nodeinstall" "Ensure node version"
|
|
1114
1197
|
- if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
|
|
1115
1198
|
- if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
|
|
1116
|
-
-
|
|
1117
|
-
-
|
|
1199
|
+
- collapseable_section_end "nodeinstall"
|
|
1200
|
+
- collapseable_section_start "yarninstall" "Yarn install"
|
|
1118
1201
|
- yarn install --immutable
|
|
1119
|
-
-
|
|
1202
|
+
- collapseable_section_end "yarninstall"
|
|
1120
1203
|
- yarn build
|
|
1121
1204
|
cache:
|
|
1122
1205
|
- key: api-yarn
|
|
@@ -1127,15 +1210,13 @@ api 🧪 test:
|
|
|
1127
1210
|
policy: pull-push
|
|
1128
1211
|
paths:
|
|
1129
1212
|
- api/node_modules
|
|
1130
|
-
- key: api-next-cache
|
|
1131
|
-
policy: pull-push
|
|
1132
|
-
paths:
|
|
1133
|
-
- api/.next/cache
|
|
1134
1213
|
artifacts:
|
|
1135
1214
|
paths:
|
|
1136
1215
|
- api/__build_info.json
|
|
1137
1216
|
- api/.next
|
|
1138
1217
|
- api/dist
|
|
1218
|
+
exclude:
|
|
1219
|
+
- api/.env
|
|
1139
1220
|
expire_in: 1 day
|
|
1140
1221
|
when: always
|
|
1141
1222
|
reports: {}
|
|
@@ -1161,7 +1242,7 @@ api 🧪 test:
|
|
|
1161
1242
|
KUBERNETES_MEMORY_REQUEST: 1Gi
|
|
1162
1243
|
KUBERNETES_MEMORY_LIMIT: 2Gi
|
|
1163
1244
|
script:
|
|
1164
|
-
-
|
|
1245
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
1165
1246
|
- export APP_DIR="api"
|
|
1166
1247
|
- export DOCKER_BUILD_CONTEXT="."
|
|
1167
1248
|
- export DOCKER_REGISTRY="europe-west6-docker.pkg.dev"
|
|
@@ -1177,20 +1258,20 @@ api 🧪 test:
|
|
|
1177
1258
|
COPY --chown=node:node api/yarn.lock /app/api/yarn.lock
|
|
1178
1259
|
COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
|
|
1179
1260
|
COPY --chown=node:node .yarn /app/.yarn"
|
|
1180
|
-
-
|
|
1261
|
+
- collapseable_section_end "injectvars"
|
|
1181
1262
|
- ensureNodeDockerfile
|
|
1182
|
-
-
|
|
1263
|
+
- collapseable_section_start "docker-login" "Docker Login"
|
|
1183
1264
|
- gcloud auth activate-service-account --key-file=<(echo "$CL_prod_api_GCLOUD_DEPLOY_credentialsKey")
|
|
1184
1265
|
- gcloud auth configure-docker europe-west6-docker.pkg.dev
|
|
1185
|
-
-
|
|
1186
|
-
-
|
|
1266
|
+
- collapseable_section_end "docker-login"
|
|
1267
|
+
- collapseable_section_start "docker-build" "Docker build"
|
|
1187
1268
|
- 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
|
|
1188
|
-
-
|
|
1189
|
-
-
|
|
1269
|
+
- collapseable_section_end "docker-build"
|
|
1270
|
+
- collapseable_section_start "docker-push" "Docker push and tag"
|
|
1190
1271
|
- docker push $DOCKER_IMAGE:$DOCKER_IMAGE_TAG
|
|
1191
1272
|
- docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG $DOCKER_CACHE_IMAGE
|
|
1192
1273
|
- docker push $DOCKER_CACHE_IMAGE
|
|
1193
|
-
-
|
|
1274
|
+
- collapseable_section_end "docker-push"
|
|
1194
1275
|
cache:
|
|
1195
1276
|
- key: api-yarn
|
|
1196
1277
|
policy: pull
|
|
@@ -1207,8 +1288,8 @@ api 🧪 test:
|
|
|
1207
1288
|
image: aquasec/trivy:0.38.3
|
|
1208
1289
|
variables: {}
|
|
1209
1290
|
script:
|
|
1210
|
-
-
|
|
1211
|
-
-
|
|
1291
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
1292
|
+
- collapseable_section_end "injectvars"
|
|
1212
1293
|
- trivy fs --quiet --format cyclonedx --output "__sbom.json" api
|
|
1213
1294
|
artifacts:
|
|
1214
1295
|
paths:
|
|
@@ -1227,36 +1308,35 @@ api 🧪 test:
|
|
|
1227
1308
|
KUBERNETES_MEMORY_REQUEST: 200Mi
|
|
1228
1309
|
KUBERNETES_MEMORY_LIMIT: 400Mi
|
|
1229
1310
|
script:
|
|
1230
|
-
-
|
|
1311
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
1231
1312
|
- export ENV_SHORT="prod"
|
|
1232
1313
|
- export APP_DIR="api"
|
|
1233
1314
|
- export ENV_TYPE="prod"
|
|
1234
1315
|
- export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
|
|
1235
1316
|
- export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
|
|
1236
1317
|
- 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")"
|
|
1237
|
-
- export
|
|
1318
|
+
- export HOSTNAME="$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
1238
1319
|
- export ROOT_URL="https://$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
1239
|
-
- export
|
|
1240
|
-
- export HOST_CANONICAL="$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
1320
|
+
- export HOSTNAME_INTERNAL="$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
1241
1321
|
- export ROOT_URL_INTERNAL="https://$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
1242
1322
|
- export CLOUD_RUN_JOB_TRIGGER_URL_migrate="https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/jobs/pan-test-app-prod-api-migrate:run"
|
|
1243
1323
|
- export DEPLOY_CLOUD_RUN_PROJECT_ID="google-project-id"
|
|
1244
1324
|
- export DEPLOY_CLOUD_RUN_REGION="europe-west6"
|
|
1245
1325
|
- export GCLOUD_DEPLOY_credentialsKey="$CL_prod_api_GCLOUD_DEPLOY_credentialsKey"
|
|
1246
1326
|
- export GCLOUD_RUN_canonicalHostSuffix="$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix"
|
|
1247
|
-
- export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"
|
|
1327
|
+
- export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOSTNAME\\",\\"ROOT_URL\\",\\"HOSTNAME_INTERNAL\\",\\"ROOT_URL_INTERNAL\\",\\"CLOUD_RUN_JOB_TRIGGER_URL_migrate\\",\\"DEPLOY_CLOUD_RUN_PROJECT_ID\\",\\"DEPLOY_CLOUD_RUN_REGION\\",\\"GCLOUD_DEPLOY_credentialsKey\\",\\"GCLOUD_RUN_canonicalHostSuffix\\"]"
|
|
1248
1328
|
- export DOCKER_REGISTRY="europe-west6-docker.pkg.dev"
|
|
1249
1329
|
- export DOCKER_IMAGE="europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/prod/api"
|
|
1250
1330
|
- export DOCKER_CACHE_IMAGE="europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/api"
|
|
1251
1331
|
- export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"
|
|
1252
1332
|
- export CLOUDSDK_CORE_DISABLE_PROMPTS="1"
|
|
1253
|
-
-
|
|
1254
|
-
-
|
|
1333
|
+
- collapseable_section_end "injectvars"
|
|
1334
|
+
- collapseable_section_start "prepare" "Prepare..."
|
|
1255
1335
|
- gcloud auth activate-service-account --key-file=<(echo "$CL_prod_api_GCLOUD_DEPLOY_credentialsKey")
|
|
1256
1336
|
- export GCLOUD_PROJECT_NUMBER=$(gcloud projects describe google-project-id --format="value(projectNumber)")
|
|
1257
1337
|
- 'echo "GCLOUD_PROJECT_NUMBER: $GCLOUD_PROJECT_NUMBER"'
|
|
1258
|
-
-
|
|
1259
|
-
-
|
|
1338
|
+
- collapseable_section_end "prepare"
|
|
1339
|
+
- collapseable_section_start "writeenvvars" "Write env vars to file"
|
|
1260
1340
|
- |
|
|
1261
1341
|
cat > ____envvars.yaml <<EOF
|
|
1262
1342
|
ENV_SHORT: |-
|
|
@@ -1266,21 +1346,19 @@ api 🧪 test:
|
|
|
1266
1346
|
ENV_TYPE: |-
|
|
1267
1347
|
prod
|
|
1268
1348
|
BUILD_INFO_BUILD_ID: |-
|
|
1269
|
-
|
|
1349
|
+
$(printf %s "$(git describe --tags 2>/dev/null || git rev-parse HEAD)" | sed '1!s/^/ /')
|
|
1270
1350
|
BUILD_INFO_BUILD_TIME: |-
|
|
1271
|
-
|
|
1351
|
+
$(printf %s "$CI_JOB_STARTED_AT" | sed '1!s/^/ /')
|
|
1272
1352
|
BUILD_INFO_CURRENT_VERSION: |-
|
|
1273
|
-
|
|
1274
|
-
|
|
1275
|
-
|
|
1353
|
+
$(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/^/ /')
|
|
1354
|
+
HOSTNAME: |-
|
|
1355
|
+
$(printf %s "$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
|
|
1276
1356
|
ROOT_URL: |-
|
|
1277
|
-
|
|
1278
|
-
|
|
1279
|
-
|
|
1280
|
-
HOST_CANONICAL: |-
|
|
1281
|
-
$(printf %s "$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
|
|
1357
|
+
$(printf %s "https://$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
|
|
1358
|
+
HOSTNAME_INTERNAL: |-
|
|
1359
|
+
$(printf %s "$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
|
|
1282
1360
|
ROOT_URL_INTERNAL: |-
|
|
1283
|
-
|
|
1361
|
+
$(printf %s "https://$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
|
|
1284
1362
|
CLOUD_RUN_JOB_TRIGGER_URL_migrate: |-
|
|
1285
1363
|
https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/jobs/pan-test-app-prod-api-migrate:run
|
|
1286
1364
|
DEPLOY_CLOUD_RUN_PROJECT_ID: |-
|
|
@@ -1288,13 +1366,13 @@ api 🧪 test:
|
|
|
1288
1366
|
DEPLOY_CLOUD_RUN_REGION: |-
|
|
1289
1367
|
europe-west6
|
|
1290
1368
|
GCLOUD_RUN_canonicalHostSuffix: |-
|
|
1291
|
-
|
|
1369
|
+
$(printf %s "$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | sed '1!s/^/ /')
|
|
1292
1370
|
_ALL_ENV_VAR_KEYS: |-
|
|
1293
|
-
["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","
|
|
1371
|
+
["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOSTNAME","ROOT_URL","HOSTNAME_INTERNAL","ROOT_URL_INTERNAL","CLOUD_RUN_JOB_TRIGGER_URL_migrate","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]
|
|
1294
1372
|
|
|
1295
1373
|
EOF
|
|
1296
|
-
-
|
|
1297
|
-
-
|
|
1374
|
+
- collapseable_section_end "writeenvvars"
|
|
1375
|
+
- collapseable_section_start "deploy" "Deploy to cloud run"
|
|
1298
1376
|
- |-
|
|
1299
1377
|
exist_job_names="$(
|
|
1300
1378
|
gcloud run jobs list --filter='metadata.name ~ prod.*api' --format='value(name)' --limit=999 --project='google-project-id' --region='europe-west6'
|
|
@@ -1307,12 +1385,12 @@ api 🧪 test:
|
|
|
1307
1385
|
fi
|
|
1308
1386
|
- gcloud beta 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 --add-volume=name=myMount,type=cloud-storage,bucket=my-bucket --add-volume-mount=volume=myMount,mount-path=/mnt/my-mount --add-volume=name=myOtherMount,type=cloud-storage,bucket=some-other-bucket,readonly=true --add-volume-mount=volume=myOtherMount,mount-path=/mnt/my-second-mount --execution-environment=gen2
|
|
1309
1387
|
- gcloud run jobs execute pan-test-app-prod-api-migrate --project=google-project-id --region=europe-west6
|
|
1310
|
-
-
|
|
1311
|
-
-
|
|
1388
|
+
- collapseable_section_end "deploy"
|
|
1389
|
+
- collapseable_section_start "cleanup" "Cleanup"
|
|
1312
1390
|
- 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
|
|
1313
1391
|
- 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
|
|
1314
1392
|
- 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
|
|
1315
|
-
-
|
|
1393
|
+
- collapseable_section_end "cleanup"
|
|
1316
1394
|
- echo 'Uploading SBOM to Dependency Track'
|
|
1317
1395
|
- /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
|
|
1318
1396
|
- 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
|
|
@@ -1345,9 +1423,9 @@ api 🧪 test:
|
|
|
1345
1423
|
KUBERNETES_MEMORY_LIMIT: 400Mi
|
|
1346
1424
|
GIT_STRATEGY: none
|
|
1347
1425
|
script:
|
|
1348
|
-
-
|
|
1426
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
1349
1427
|
- export CLOUDSDK_CORE_DISABLE_PROMPTS="1"
|
|
1350
|
-
-
|
|
1428
|
+
- collapseable_section_end "injectvars"
|
|
1351
1429
|
- set +e
|
|
1352
1430
|
- gcloud auth activate-service-account --key-file=<(echo "$CL_prod_api_GCLOUD_DEPLOY_credentialsKey")
|
|
1353
1431
|
- gcloud run services delete pan-test-app-prod-api --project=google-project-id --region=europe-west6
|