@catladder/pipeline 1.165.1 โ 1.166.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/build/base/createAppBuildJob.d.ts +3 -1
- package/dist/build/base/createAppBuildJob.js +6 -4
- package/dist/build/base/createBuildJobDefinition.d.ts +7 -0
- package/dist/build/base/createBuildJobDefinition.js +58 -0
- package/dist/build/cache/createJobCache.d.ts +6 -0
- package/dist/build/cache/createJobCache.js +109 -0
- package/dist/build/cache/getAllCacheConfigsFromConfig.d.ts +3 -0
- package/dist/build/cache/getAllCacheConfigsFromConfig.js +66 -0
- package/dist/build/cache/transformLegacyJobCache.d.ts +3 -0
- package/dist/build/cache/transformLegacyJobCache.js +29 -0
- package/dist/build/custom/buildJob.js +2 -45
- package/dist/build/custom/testJob.d.ts +1 -1
- package/dist/build/custom/testJob.js +12 -11
- package/dist/build/docker.d.ts +4 -3
- package/dist/build/docker.js +5 -2
- package/dist/build/node/buildJob.js +5 -17
- package/dist/build/node/cache.d.ts +6 -6
- package/dist/build/node/cache.js +9 -9
- package/dist/build/node/meteor.js +2 -3
- package/dist/build/node/testJob.js +6 -5
- package/dist/build/node/yarn.js +1 -2
- package/dist/build/rails/test.js +3 -3
- package/dist/build/sbom.js +1 -1
- package/dist/build/types.d.ts +43 -4
- package/dist/bundles/catladder-gitlab/index.js +2 -2
- package/dist/constants.js +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/types/gitlab-types.d.ts +2 -2
- package/dist/types/index.d.ts +1 -0
- package/dist/types/index.js +1 -0
- package/dist/types/jobDefinition.d.ts +5 -0
- package/dist/types/jobDefinition.js +5 -0
- package/dist/types/jobs.d.ts +3 -2
- package/dist/utils/index.d.ts +2 -1
- package/dist/utils/index.js +7 -2
- package/examples/__snapshots__/cloud-run-with-sql.test.ts.snap +817 -1717
- package/examples/__snapshots__/custom-build-job-with-tests.test.ts.snap +0 -4
- package/examples/__snapshots__/custom-build-job.test.ts.snap +0 -4
- package/examples/__snapshots__/custom-sbom-java.test.ts.snap +0 -4
- package/examples/__snapshots__/native-app.test.ts.snap +24 -20
- package/examples/__snapshots__/workspace-api-www-custom-cache.test.ts.snap +2374 -0
- package/examples/__snapshots__/workspace-api-www.test.ts.snap +2354 -0
- package/examples/cloud-run-with-sql.ts +1 -23
- package/examples/workspace-api-www-custom-cache.test.ts +11 -0
- package/examples/workspace-api-www-custom-cache.ts +51 -0
- package/examples/workspace-api-www.test.ts +11 -0
- package/examples/workspace-api-www.ts +45 -0
- package/package.json +1 -1
- package/src/build/base/createAppBuildJob.ts +6 -4
- package/src/build/base/createBuildJobDefinition.ts +38 -0
- package/src/build/cache/createJobCache.ts +85 -0
- package/src/build/cache/getAllCacheConfigsFromConfig.ts +33 -0
- package/src/build/cache/transformLegacyJobCache.ts +14 -0
- package/src/build/custom/buildJob.ts +2 -14
- package/src/build/custom/testJob.ts +7 -6
- package/src/build/docker.ts +5 -3
- package/src/build/node/buildJob.ts +6 -29
- package/src/build/node/cache.ts +21 -21
- package/src/build/node/meteor.ts +7 -8
- package/src/build/node/testJob.ts +7 -6
- package/src/build/node/yarn.ts +1 -1
- package/src/build/rails/test.ts +4 -4
- package/src/build/sbom.ts +2 -2
- package/src/build/types.ts +54 -4
- package/src/types/gitlab-types.ts +2 -2
- package/src/types/index.ts +1 -0
- package/src/types/jobDefinition.ts +9 -0
- package/src/types/jobs.ts +5 -8
- package/src/utils/index.ts +4 -1
|
@@ -45,7 +45,7 @@ variables:
|
|
|
45
45
|
CACHE_COMPRESSION_LEVEL: fast
|
|
46
46
|
TRANSFER_METER_FREQUENCY: 5s
|
|
47
47
|
GIT_DEPTH: '1'
|
|
48
|
-
|
|
48
|
+
api ๐ก audit:
|
|
49
49
|
stage: test
|
|
50
50
|
image: path/to/docker/jobs-default:the-version
|
|
51
51
|
variables:
|
|
@@ -54,9 +54,9 @@ variables:
|
|
|
54
54
|
KUBERNETES_MEMORY_LIMIT: 4Gi
|
|
55
55
|
script:
|
|
56
56
|
- echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
|
|
57
|
-
- export APP_PATH="
|
|
57
|
+
- export APP_PATH="api"
|
|
58
58
|
- echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
|
|
59
|
-
- cd
|
|
59
|
+
- cd api
|
|
60
60
|
- yarn npm audit --environment production
|
|
61
61
|
rules:
|
|
62
62
|
- when: never
|
|
@@ -71,7 +71,7 @@ variables:
|
|
|
71
71
|
- stuck_or_timeout_failure
|
|
72
72
|
interruptible: true
|
|
73
73
|
allow_failure: true
|
|
74
|
-
|
|
74
|
+
api ๐ฎ lint:
|
|
75
75
|
stage: test
|
|
76
76
|
image: path/to/docker/jobs-default:the-version
|
|
77
77
|
variables:
|
|
@@ -80,13 +80,13 @@ variables:
|
|
|
80
80
|
KUBERNETES_MEMORY_LIMIT: 4Gi
|
|
81
81
|
script:
|
|
82
82
|
- echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
|
|
83
|
-
- export APP_PATH="
|
|
83
|
+
- export APP_PATH="api"
|
|
84
84
|
- echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
|
|
85
85
|
- echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"
|
|
86
86
|
- if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
|
|
87
87
|
- if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
|
|
88
88
|
- echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"
|
|
89
|
-
- cd
|
|
89
|
+
- cd api
|
|
90
90
|
- echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"
|
|
91
91
|
- if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
|
|
92
92
|
- if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
|
|
@@ -96,18 +96,14 @@ variables:
|
|
|
96
96
|
- echo -e "\\e[0Ksection_end:$(date +%s):yarninstall\\r\\e[0K"
|
|
97
97
|
- yarn lint
|
|
98
98
|
cache:
|
|
99
|
-
- key:
|
|
100
|
-
policy: pull-push
|
|
101
|
-
paths:
|
|
102
|
-
- .yarn
|
|
103
|
-
- key: .-node-modules
|
|
99
|
+
- key: api-yarn
|
|
104
100
|
policy: pull-push
|
|
105
101
|
paths:
|
|
106
|
-
-
|
|
107
|
-
- key:
|
|
102
|
+
- api/.yarn
|
|
103
|
+
- key: api-node-modules
|
|
108
104
|
policy: pull-push
|
|
109
105
|
paths:
|
|
110
|
-
-
|
|
106
|
+
- api/node_modules
|
|
111
107
|
rules:
|
|
112
108
|
- when: never
|
|
113
109
|
if: $CI_COMMIT_MESSAGE =~ /^chore\\(release\\).*/
|
|
@@ -116,7 +112,7 @@ variables:
|
|
|
116
112
|
needs: []
|
|
117
113
|
retry: *a1
|
|
118
114
|
interruptible: true
|
|
119
|
-
|
|
115
|
+
api ๐งช test:
|
|
120
116
|
stage: test
|
|
121
117
|
image: path/to/docker/jobs-testing-chrome:the-version
|
|
122
118
|
variables:
|
|
@@ -125,13 +121,13 @@ variables:
|
|
|
125
121
|
KUBERNETES_MEMORY_LIMIT: 4Gi
|
|
126
122
|
script:
|
|
127
123
|
- echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
|
|
128
|
-
- export APP_PATH="
|
|
124
|
+
- export APP_PATH="api"
|
|
129
125
|
- echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
|
|
130
126
|
- echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"
|
|
131
127
|
- if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
|
|
132
128
|
- if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
|
|
133
129
|
- echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"
|
|
134
|
-
- cd
|
|
130
|
+
- cd api
|
|
135
131
|
- echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"
|
|
136
132
|
- if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
|
|
137
133
|
- if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
|
|
@@ -141,526 +137,29 @@ variables:
|
|
|
141
137
|
- echo -e "\\e[0Ksection_end:$(date +%s):yarninstall\\r\\e[0K"
|
|
142
138
|
- yarn test
|
|
143
139
|
cache:
|
|
144
|
-
- key:
|
|
145
|
-
policy: pull-push
|
|
146
|
-
paths:
|
|
147
|
-
- .yarn
|
|
148
|
-
- key: .-node-modules
|
|
149
|
-
policy: pull-push
|
|
150
|
-
paths:
|
|
151
|
-
- node_modules
|
|
152
|
-
- key: myWorkspace-turbo
|
|
153
|
-
policy: pull-push
|
|
154
|
-
paths:
|
|
155
|
-
- .turbo
|
|
156
|
-
rules:
|
|
157
|
-
- when: never
|
|
158
|
-
if: $CI_COMMIT_MESSAGE =~ /^chore\\(release\\).*/
|
|
159
|
-
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
|
|
160
|
-
- if: $CI_MERGE_REQUEST_ID
|
|
161
|
-
needs: []
|
|
162
|
-
retry: *a1
|
|
163
|
-
interruptible: true
|
|
164
|
-
'๐ธ myWorkspace ๐จ app | dev ':
|
|
165
|
-
stage: build
|
|
166
|
-
image: path/to/docker/jobs-default:the-version
|
|
167
|
-
variables:
|
|
168
|
-
KUBERNETES_CPU_REQUEST: '0.45'
|
|
169
|
-
KUBERNETES_MEMORY_REQUEST: 1Gi
|
|
170
|
-
KUBERNETES_MEMORY_LIMIT: 4Gi
|
|
171
|
-
script:
|
|
172
|
-
- echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
|
|
173
|
-
- echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
|
|
174
|
-
- echo -e "\\e[0Ksection_start:$(date +%s):write-dotenv-api[collapsed=true]\\r\\e[0Kwrite dot env"
|
|
175
|
-
- |-
|
|
176
|
-
cat <<EOF > api/.env
|
|
177
|
-
ENV_SHORT=dev
|
|
178
|
-
APP_DIR=api
|
|
179
|
-
ENV_TYPE=dev
|
|
180
|
-
HOST=$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')
|
|
181
|
-
ROOT_URL=https://$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')
|
|
182
|
-
HOST_INTERNAL=$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')
|
|
183
|
-
HOST_CANONICAL=$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')
|
|
184
|
-
ROOT_URL_INTERNAL=https://$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')
|
|
185
|
-
CLOUD_SQL_INSTANCE_CONNECTION_NAME=projectId:region:instancename
|
|
186
|
-
DB_NAME=pan-test-app-dev-api
|
|
187
|
-
DB_USER=my-user
|
|
188
|
-
DB_PASSWORD=$CL_dev_api_DB_PASSWORD
|
|
189
|
-
DATABASE_URL=postgresql://$DB_USER:$DB_PASSWORD@localhost/$DB_NAME?host=/cloudsql/$CLOUD_SQL_INSTANCE_CONNECTION_NAME
|
|
190
|
-
DATABASE_JDBC_URL=jdbc:postgresql:///$DB_NAME?cloudSqlInstance=$CLOUD_SQL_INSTANCE_CONNECTION_NAME&socketFactory=com.google.cloud.sql.postgres.SocketFactory&user=$DB_USER&password=$DB_PASSWORD
|
|
191
|
-
CLOUD_RUN_JOB_TRIGGER_URL_migration=https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/jobs/pan-test-app-dev-api-migration:run
|
|
192
|
-
CLOUD_RUN_JOB_TRIGGER_URL_send_reminders=https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/jobs/pan-test-app-dev-api-send-reminders:run
|
|
193
|
-
DEPLOY_CLOUD_RUN_PROJECT_ID=google-project-id
|
|
194
|
-
DEPLOY_CLOUD_RUN_REGION=europe-west6
|
|
195
|
-
GCLOUD_DEPLOY_credentialsKey=$CL_dev_api_GCLOUD_DEPLOY_credentialsKey
|
|
196
|
-
GCLOUD_RUN_canonicalHostSuffix=$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix
|
|
197
|
-
_ALL_ENV_VAR_KEYS=["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","HOST_INTERNAL","HOST_CANONICAL","ROOT_URL_INTERNAL","CLOUD_SQL_INSTANCE_CONNECTION_NAME","DB_NAME","DB_USER","DB_PASSWORD","DATABASE_URL","DATABASE_JDBC_URL","CLOUD_RUN_JOB_TRIGGER_URL_migration","CLOUD_RUN_JOB_TRIGGER_URL_send_reminders","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]
|
|
198
|
-
EOF
|
|
199
|
-
- echo -e "\\e[0Ksection_end:$(date +%s):write-dotenv-api\\r\\e[0K"
|
|
200
|
-
- echo -e "\\e[0Ksection_start:$(date +%s):write-dotenv-www[collapsed=true]\\r\\e[0Kwrite dot env"
|
|
201
|
-
- |-
|
|
202
|
-
cat <<EOF > www/.env
|
|
203
|
-
ENV_SHORT=dev
|
|
204
|
-
APP_DIR=www
|
|
205
|
-
ENV_TYPE=dev
|
|
206
|
-
HOST=$(printf %s "pan-test-app-dev-www-$CL_dev_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')
|
|
207
|
-
ROOT_URL=https://$(printf %s "pan-test-app-dev-www-$CL_dev_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')
|
|
208
|
-
HOST_INTERNAL=$(printf %s "pan-test-app-dev-www-$CL_dev_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')
|
|
209
|
-
HOST_CANONICAL=$(printf %s "pan-test-app-dev-www-$CL_dev_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')
|
|
210
|
-
ROOT_URL_INTERNAL=https://$(printf %s "pan-test-app-dev-www-$CL_dev_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')
|
|
211
|
-
DEPLOY_CLOUD_RUN_PROJECT_ID=google-project-id
|
|
212
|
-
DEPLOY_CLOUD_RUN_REGION=europe-west6
|
|
213
|
-
GCLOUD_DEPLOY_credentialsKey=$CL_dev_www_GCLOUD_DEPLOY_credentialsKey
|
|
214
|
-
GCLOUD_RUN_canonicalHostSuffix=$CL_dev_www_GCLOUD_RUN_canonicalHostSuffix
|
|
215
|
-
API_URL=https://$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')/graphql
|
|
216
|
-
_ALL_ENV_VAR_KEYS=["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","HOST_INTERNAL","HOST_CANONICAL","ROOT_URL_INTERNAL","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix","API_URL"]
|
|
217
|
-
EOF
|
|
218
|
-
- echo -e "\\e[0Ksection_end:$(date +%s):write-dotenv-www\\r\\e[0K"
|
|
219
|
-
- echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"
|
|
220
|
-
- if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
|
|
221
|
-
- if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
|
|
222
|
-
- echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"
|
|
223
|
-
- cd .
|
|
224
|
-
- echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"
|
|
225
|
-
- if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
|
|
226
|
-
- if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
|
|
227
|
-
- echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"
|
|
228
|
-
- echo -e "\\e[0Ksection_start:$(date +%s):yarninstall[collapsed=true]\\r\\e[0KYarn install"
|
|
229
|
-
- yarn install --immutable
|
|
230
|
-
- echo -e "\\e[0Ksection_end:$(date +%s):yarninstall\\r\\e[0K"
|
|
231
|
-
- yarn build
|
|
232
|
-
cache:
|
|
233
|
-
- key: .-yarn
|
|
234
|
-
policy: pull-push
|
|
235
|
-
paths:
|
|
236
|
-
- .yarn
|
|
237
|
-
- key: .-node-modules
|
|
238
|
-
policy: pull-push
|
|
239
|
-
paths:
|
|
240
|
-
- node_modules
|
|
241
|
-
- key: myWorkspace-turbo
|
|
140
|
+
- key: api-yarn
|
|
242
141
|
policy: pull-push
|
|
243
142
|
paths:
|
|
244
|
-
-
|
|
245
|
-
- key:
|
|
143
|
+
- api/.yarn
|
|
144
|
+
- key: api-node-modules
|
|
246
145
|
policy: pull-push
|
|
247
146
|
paths:
|
|
248
|
-
- api
|
|
249
|
-
- www/.next/cache
|
|
250
|
-
artifacts:
|
|
251
|
-
paths:
|
|
252
|
-
- api/.next
|
|
253
|
-
- api/dist
|
|
254
|
-
- www/.next
|
|
255
|
-
- www/dist
|
|
256
|
-
exclude:
|
|
257
|
-
- api/.env
|
|
258
|
-
- www/.env
|
|
259
|
-
expire_in: 1 day
|
|
260
|
-
when: always
|
|
261
|
-
reports: {}
|
|
147
|
+
- api/node_modules
|
|
262
148
|
rules:
|
|
263
149
|
- when: never
|
|
264
150
|
if: $CI_COMMIT_MESSAGE =~ /^chore\\(release\\).*/
|
|
265
151
|
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
|
|
266
|
-
needs: []
|
|
267
|
-
retry: *a1
|
|
268
|
-
interruptible: true
|
|
269
|
-
'๐ธ myWorkspace ๐จ app | review ':
|
|
270
|
-
stage: build
|
|
271
|
-
image: path/to/docker/jobs-default:the-version
|
|
272
|
-
variables:
|
|
273
|
-
KUBERNETES_CPU_REQUEST: '0.45'
|
|
274
|
-
KUBERNETES_MEMORY_REQUEST: 1Gi
|
|
275
|
-
KUBERNETES_MEMORY_LIMIT: 4Gi
|
|
276
|
-
script:
|
|
277
|
-
- echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
|
|
278
|
-
- echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
|
|
279
|
-
- echo -e "\\e[0Ksection_start:$(date +%s):write-dotenv-api[collapsed=true]\\r\\e[0Kwrite dot env"
|
|
280
|
-
- |-
|
|
281
|
-
cat <<EOF > api/.env
|
|
282
|
-
ENV_SHORT=review
|
|
283
|
-
APP_DIR=api
|
|
284
|
-
ENV_TYPE=review
|
|
285
|
-
HOST=$(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)}')
|
|
286
|
-
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)}')
|
|
287
|
-
HOST_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)}')
|
|
288
|
-
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)}')
|
|
289
|
-
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)}')
|
|
290
|
-
CLOUD_SQL_INSTANCE_CONNECTION_NAME=projectId:region:instancename
|
|
291
|
-
DB_NAME=pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api
|
|
292
|
-
DB_USER=my-user
|
|
293
|
-
DB_PASSWORD=$CL_review_api_DB_PASSWORD
|
|
294
|
-
DATABASE_URL=postgresql://$DB_USER:$DB_PASSWORD@localhost/$DB_NAME?host=/cloudsql/$CLOUD_SQL_INSTANCE_CONNECTION_NAME
|
|
295
|
-
DATABASE_JDBC_URL=jdbc:postgresql:///$DB_NAME?cloudSqlInstance=$CLOUD_SQL_INSTANCE_CONNECTION_NAME&socketFactory=com.google.cloud.sql.postgres.SocketFactory&user=$DB_USER&password=$DB_PASSWORD
|
|
296
|
-
CLOUD_RUN_JOB_TRIGGER_URL_migration=https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/jobs/$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api" | awk '{print tolower($0)}')-migration:run
|
|
297
|
-
CLOUD_RUN_JOB_TRIGGER_URL_send_reminders=https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/jobs/$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api" | awk '{print tolower($0)}')-send-reminders:run
|
|
298
|
-
DEPLOY_CLOUD_RUN_PROJECT_ID=google-project-id
|
|
299
|
-
DEPLOY_CLOUD_RUN_REGION=europe-west6
|
|
300
|
-
GCLOUD_DEPLOY_credentialsKey=$CL_review_api_GCLOUD_DEPLOY_credentialsKey
|
|
301
|
-
GCLOUD_RUN_canonicalHostSuffix=$CL_review_api_GCLOUD_RUN_canonicalHostSuffix
|
|
302
|
-
_ALL_ENV_VAR_KEYS=["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","HOST_INTERNAL","HOST_CANONICAL","ROOT_URL_INTERNAL","CLOUD_SQL_INSTANCE_CONNECTION_NAME","DB_NAME","DB_USER","DB_PASSWORD","DATABASE_URL","DATABASE_JDBC_URL","CLOUD_RUN_JOB_TRIGGER_URL_migration","CLOUD_RUN_JOB_TRIGGER_URL_send_reminders","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]
|
|
303
|
-
EOF
|
|
304
|
-
- echo -e "\\e[0Ksection_end:$(date +%s):write-dotenv-api\\r\\e[0K"
|
|
305
|
-
- echo -e "\\e[0Ksection_start:$(date +%s):write-dotenv-www[collapsed=true]\\r\\e[0Kwrite dot env"
|
|
306
|
-
- |-
|
|
307
|
-
cat <<EOF > www/.env
|
|
308
|
-
ENV_SHORT=review
|
|
309
|
-
APP_DIR=www
|
|
310
|
-
ENV_TYPE=review
|
|
311
|
-
HOST=$(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"; })-www-$CL_review_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')
|
|
312
|
-
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"; })-www-$CL_review_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')
|
|
313
|
-
HOST_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"; })-www-$CL_review_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')
|
|
314
|
-
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"; })-www-$CL_review_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')
|
|
315
|
-
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"; })-www-$CL_review_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')
|
|
316
|
-
DEPLOY_CLOUD_RUN_PROJECT_ID=google-project-id
|
|
317
|
-
DEPLOY_CLOUD_RUN_REGION=europe-west6
|
|
318
|
-
GCLOUD_DEPLOY_credentialsKey=$CL_review_www_GCLOUD_DEPLOY_credentialsKey
|
|
319
|
-
GCLOUD_RUN_canonicalHostSuffix=$CL_review_www_GCLOUD_RUN_canonicalHostSuffix
|
|
320
|
-
API_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)}')/graphql
|
|
321
|
-
_ALL_ENV_VAR_KEYS=["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","HOST_INTERNAL","HOST_CANONICAL","ROOT_URL_INTERNAL","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix","API_URL"]
|
|
322
|
-
EOF
|
|
323
|
-
- echo -e "\\e[0Ksection_end:$(date +%s):write-dotenv-www\\r\\e[0K"
|
|
324
|
-
- echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"
|
|
325
|
-
- if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
|
|
326
|
-
- if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
|
|
327
|
-
- echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"
|
|
328
|
-
- cd .
|
|
329
|
-
- echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"
|
|
330
|
-
- if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
|
|
331
|
-
- if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
|
|
332
|
-
- echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"
|
|
333
|
-
- echo -e "\\e[0Ksection_start:$(date +%s):yarninstall[collapsed=true]\\r\\e[0KYarn install"
|
|
334
|
-
- yarn install --immutable
|
|
335
|
-
- echo -e "\\e[0Ksection_end:$(date +%s):yarninstall\\r\\e[0K"
|
|
336
|
-
- yarn build
|
|
337
|
-
cache:
|
|
338
|
-
- key: .-yarn
|
|
339
|
-
policy: pull-push
|
|
340
|
-
paths:
|
|
341
|
-
- .yarn
|
|
342
|
-
- key: .-node-modules
|
|
343
|
-
policy: pull-push
|
|
344
|
-
paths:
|
|
345
|
-
- node_modules
|
|
346
|
-
- key: myWorkspace-turbo
|
|
347
|
-
policy: pull-push
|
|
348
|
-
paths:
|
|
349
|
-
- .turbo
|
|
350
|
-
- key: myWorkspace-next-cache
|
|
351
|
-
policy: pull-push
|
|
352
|
-
paths:
|
|
353
|
-
- api/.next/cache
|
|
354
|
-
- www/.next/cache
|
|
355
|
-
artifacts:
|
|
356
|
-
paths:
|
|
357
|
-
- api/.next
|
|
358
|
-
- api/dist
|
|
359
|
-
- www/.next
|
|
360
|
-
- www/dist
|
|
361
|
-
exclude:
|
|
362
|
-
- api/.env
|
|
363
|
-
- www/.env
|
|
364
|
-
expire_in: 1 day
|
|
365
|
-
when: always
|
|
366
|
-
reports: {}
|
|
367
|
-
rules:
|
|
368
152
|
- if: $CI_MERGE_REQUEST_ID
|
|
369
153
|
needs: []
|
|
370
154
|
retry: *a1
|
|
371
155
|
interruptible: true
|
|
372
|
-
'
|
|
373
|
-
stage: build
|
|
374
|
-
image: path/to/docker/jobs-default:the-version
|
|
375
|
-
variables:
|
|
376
|
-
KUBERNETES_CPU_REQUEST: '0.45'
|
|
377
|
-
KUBERNETES_MEMORY_REQUEST: 1Gi
|
|
378
|
-
KUBERNETES_MEMORY_LIMIT: 4Gi
|
|
379
|
-
script:
|
|
380
|
-
- echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
|
|
381
|
-
- echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
|
|
382
|
-
- echo -e "\\e[0Ksection_start:$(date +%s):write-dotenv-api[collapsed=true]\\r\\e[0Kwrite dot env"
|
|
383
|
-
- |-
|
|
384
|
-
cat <<EOF > api/.env
|
|
385
|
-
ENV_SHORT=stage
|
|
386
|
-
APP_DIR=api
|
|
387
|
-
ENV_TYPE=stage
|
|
388
|
-
HOST=$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')
|
|
389
|
-
ROOT_URL=https://$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')
|
|
390
|
-
HOST_INTERNAL=$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')
|
|
391
|
-
HOST_CANONICAL=$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')
|
|
392
|
-
ROOT_URL_INTERNAL=https://$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')
|
|
393
|
-
CLOUD_SQL_INSTANCE_CONNECTION_NAME=projectId:region:instancename
|
|
394
|
-
DB_NAME=pan-test-app-stage-api
|
|
395
|
-
DB_USER=my-user
|
|
396
|
-
DB_PASSWORD=$CL_stage_api_DB_PASSWORD
|
|
397
|
-
DATABASE_URL=postgresql://$DB_USER:$DB_PASSWORD@localhost/$DB_NAME?host=/cloudsql/$CLOUD_SQL_INSTANCE_CONNECTION_NAME
|
|
398
|
-
DATABASE_JDBC_URL=jdbc:postgresql:///$DB_NAME?cloudSqlInstance=$CLOUD_SQL_INSTANCE_CONNECTION_NAME&socketFactory=com.google.cloud.sql.postgres.SocketFactory&user=$DB_USER&password=$DB_PASSWORD
|
|
399
|
-
CLOUD_RUN_JOB_TRIGGER_URL_migration=https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/jobs/pan-test-app-stage-api-migration:run
|
|
400
|
-
CLOUD_RUN_JOB_TRIGGER_URL_send_reminders=https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/jobs/pan-test-app-stage-api-send-reminders:run
|
|
401
|
-
DEPLOY_CLOUD_RUN_PROJECT_ID=google-project-id
|
|
402
|
-
DEPLOY_CLOUD_RUN_REGION=europe-west6
|
|
403
|
-
GCLOUD_DEPLOY_credentialsKey=$CL_stage_api_GCLOUD_DEPLOY_credentialsKey
|
|
404
|
-
GCLOUD_RUN_canonicalHostSuffix=$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix
|
|
405
|
-
_ALL_ENV_VAR_KEYS=["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","HOST_INTERNAL","HOST_CANONICAL","ROOT_URL_INTERNAL","CLOUD_SQL_INSTANCE_CONNECTION_NAME","DB_NAME","DB_USER","DB_PASSWORD","DATABASE_URL","DATABASE_JDBC_URL","CLOUD_RUN_JOB_TRIGGER_URL_migration","CLOUD_RUN_JOB_TRIGGER_URL_send_reminders","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]
|
|
406
|
-
EOF
|
|
407
|
-
- echo -e "\\e[0Ksection_end:$(date +%s):write-dotenv-api\\r\\e[0K"
|
|
408
|
-
- echo -e "\\e[0Ksection_start:$(date +%s):write-dotenv-www[collapsed=true]\\r\\e[0Kwrite dot env"
|
|
409
|
-
- |-
|
|
410
|
-
cat <<EOF > www/.env
|
|
411
|
-
ENV_SHORT=stage
|
|
412
|
-
APP_DIR=www
|
|
413
|
-
ENV_TYPE=stage
|
|
414
|
-
HOST=$(printf %s "pan-test-app-stage-www-$CL_stage_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')
|
|
415
|
-
ROOT_URL=https://$(printf %s "pan-test-app-stage-www-$CL_stage_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')
|
|
416
|
-
HOST_INTERNAL=$(printf %s "pan-test-app-stage-www-$CL_stage_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')
|
|
417
|
-
HOST_CANONICAL=$(printf %s "pan-test-app-stage-www-$CL_stage_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')
|
|
418
|
-
ROOT_URL_INTERNAL=https://$(printf %s "pan-test-app-stage-www-$CL_stage_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')
|
|
419
|
-
DEPLOY_CLOUD_RUN_PROJECT_ID=google-project-id
|
|
420
|
-
DEPLOY_CLOUD_RUN_REGION=europe-west6
|
|
421
|
-
GCLOUD_DEPLOY_credentialsKey=$CL_stage_www_GCLOUD_DEPLOY_credentialsKey
|
|
422
|
-
GCLOUD_RUN_canonicalHostSuffix=$CL_stage_www_GCLOUD_RUN_canonicalHostSuffix
|
|
423
|
-
API_URL=https://$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')/graphql
|
|
424
|
-
_ALL_ENV_VAR_KEYS=["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","HOST_INTERNAL","HOST_CANONICAL","ROOT_URL_INTERNAL","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix","API_URL"]
|
|
425
|
-
EOF
|
|
426
|
-
- echo -e "\\e[0Ksection_end:$(date +%s):write-dotenv-www\\r\\e[0K"
|
|
427
|
-
- echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"
|
|
428
|
-
- if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
|
|
429
|
-
- if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
|
|
430
|
-
- echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"
|
|
431
|
-
- cd .
|
|
432
|
-
- echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"
|
|
433
|
-
- if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
|
|
434
|
-
- if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
|
|
435
|
-
- echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"
|
|
436
|
-
- echo -e "\\e[0Ksection_start:$(date +%s):yarninstall[collapsed=true]\\r\\e[0KYarn install"
|
|
437
|
-
- yarn install --immutable
|
|
438
|
-
- echo -e "\\e[0Ksection_end:$(date +%s):yarninstall\\r\\e[0K"
|
|
439
|
-
- yarn build
|
|
440
|
-
cache:
|
|
441
|
-
- key: .-yarn
|
|
442
|
-
policy: pull-push
|
|
443
|
-
paths:
|
|
444
|
-
- .yarn
|
|
445
|
-
- key: .-node-modules
|
|
446
|
-
policy: pull-push
|
|
447
|
-
paths:
|
|
448
|
-
- node_modules
|
|
449
|
-
- key: myWorkspace-turbo
|
|
450
|
-
policy: pull-push
|
|
451
|
-
paths:
|
|
452
|
-
- .turbo
|
|
453
|
-
- key: myWorkspace-next-cache
|
|
454
|
-
policy: pull-push
|
|
455
|
-
paths:
|
|
456
|
-
- api/.next/cache
|
|
457
|
-
- www/.next/cache
|
|
458
|
-
artifacts:
|
|
459
|
-
paths:
|
|
460
|
-
- api/.next
|
|
461
|
-
- api/dist
|
|
462
|
-
- www/.next
|
|
463
|
-
- www/dist
|
|
464
|
-
exclude:
|
|
465
|
-
- api/.env
|
|
466
|
-
- www/.env
|
|
467
|
-
expire_in: 1 day
|
|
468
|
-
when: always
|
|
469
|
-
reports: {}
|
|
470
|
-
rules:
|
|
471
|
-
- if: $CI_COMMIT_TAG
|
|
472
|
-
needs: []
|
|
473
|
-
retry: *a1
|
|
474
|
-
interruptible: true
|
|
475
|
-
'๐ธ myWorkspace ๐จ app | prod ':
|
|
156
|
+
'api ๐จ app | dev ':
|
|
476
157
|
stage: build
|
|
477
158
|
image: path/to/docker/jobs-default:the-version
|
|
478
159
|
variables:
|
|
479
160
|
KUBERNETES_CPU_REQUEST: '0.45'
|
|
480
161
|
KUBERNETES_MEMORY_REQUEST: 1Gi
|
|
481
162
|
KUBERNETES_MEMORY_LIMIT: 4Gi
|
|
482
|
-
script:
|
|
483
|
-
- echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
|
|
484
|
-
- echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
|
|
485
|
-
- echo -e "\\e[0Ksection_start:$(date +%s):write-dotenv-api[collapsed=true]\\r\\e[0Kwrite dot env"
|
|
486
|
-
- |-
|
|
487
|
-
cat <<EOF > api/.env
|
|
488
|
-
ENV_SHORT=prod
|
|
489
|
-
APP_DIR=api
|
|
490
|
-
ENV_TYPE=prod
|
|
491
|
-
HOST=$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')
|
|
492
|
-
ROOT_URL=https://$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')
|
|
493
|
-
HOST_INTERNAL=$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')
|
|
494
|
-
HOST_CANONICAL=$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')
|
|
495
|
-
ROOT_URL_INTERNAL=https://$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')
|
|
496
|
-
CLOUD_SQL_INSTANCE_CONNECTION_NAME=projectId:region:instancename
|
|
497
|
-
DB_NAME=pan-test-app-prod-api
|
|
498
|
-
DB_USER=my-user
|
|
499
|
-
DB_PASSWORD=$CL_prod_api_DB_PASSWORD
|
|
500
|
-
DATABASE_URL=postgresql://$DB_USER:$DB_PASSWORD@localhost/$DB_NAME?host=/cloudsql/$CLOUD_SQL_INSTANCE_CONNECTION_NAME
|
|
501
|
-
DATABASE_JDBC_URL=jdbc:postgresql:///$DB_NAME?cloudSqlInstance=$CLOUD_SQL_INSTANCE_CONNECTION_NAME&socketFactory=com.google.cloud.sql.postgres.SocketFactory&user=$DB_USER&password=$DB_PASSWORD
|
|
502
|
-
CLOUD_RUN_JOB_TRIGGER_URL_migration=https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/jobs/pan-test-app-prod-api-migration:run
|
|
503
|
-
CLOUD_RUN_JOB_TRIGGER_URL_send_reminders=https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/jobs/pan-test-app-prod-api-send-reminders:run
|
|
504
|
-
DEPLOY_CLOUD_RUN_PROJECT_ID=google-project-id
|
|
505
|
-
DEPLOY_CLOUD_RUN_REGION=europe-west6
|
|
506
|
-
GCLOUD_DEPLOY_credentialsKey=$CL_prod_api_GCLOUD_DEPLOY_credentialsKey
|
|
507
|
-
GCLOUD_RUN_canonicalHostSuffix=$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix
|
|
508
|
-
_ALL_ENV_VAR_KEYS=["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","HOST_INTERNAL","HOST_CANONICAL","ROOT_URL_INTERNAL","CLOUD_SQL_INSTANCE_CONNECTION_NAME","DB_NAME","DB_USER","DB_PASSWORD","DATABASE_URL","DATABASE_JDBC_URL","CLOUD_RUN_JOB_TRIGGER_URL_migration","CLOUD_RUN_JOB_TRIGGER_URL_send_reminders","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]
|
|
509
|
-
EOF
|
|
510
|
-
- echo -e "\\e[0Ksection_end:$(date +%s):write-dotenv-api\\r\\e[0K"
|
|
511
|
-
- echo -e "\\e[0Ksection_start:$(date +%s):write-dotenv-www[collapsed=true]\\r\\e[0Kwrite dot env"
|
|
512
|
-
- |-
|
|
513
|
-
cat <<EOF > www/.env
|
|
514
|
-
ENV_SHORT=prod
|
|
515
|
-
APP_DIR=www
|
|
516
|
-
ENV_TYPE=prod
|
|
517
|
-
HOST=$(printf %s "pan-test-app-prod-www-$CL_prod_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')
|
|
518
|
-
ROOT_URL=https://$(printf %s "pan-test-app-prod-www-$CL_prod_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')
|
|
519
|
-
HOST_INTERNAL=$(printf %s "pan-test-app-prod-www-$CL_prod_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')
|
|
520
|
-
HOST_CANONICAL=$(printf %s "pan-test-app-prod-www-$CL_prod_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')
|
|
521
|
-
ROOT_URL_INTERNAL=https://$(printf %s "pan-test-app-prod-www-$CL_prod_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')
|
|
522
|
-
DEPLOY_CLOUD_RUN_PROJECT_ID=google-project-id
|
|
523
|
-
DEPLOY_CLOUD_RUN_REGION=europe-west6
|
|
524
|
-
GCLOUD_DEPLOY_credentialsKey=$CL_prod_www_GCLOUD_DEPLOY_credentialsKey
|
|
525
|
-
GCLOUD_RUN_canonicalHostSuffix=$CL_prod_www_GCLOUD_RUN_canonicalHostSuffix
|
|
526
|
-
API_URL=https://$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')/graphql
|
|
527
|
-
_ALL_ENV_VAR_KEYS=["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","HOST_INTERNAL","HOST_CANONICAL","ROOT_URL_INTERNAL","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix","API_URL"]
|
|
528
|
-
EOF
|
|
529
|
-
- echo -e "\\e[0Ksection_end:$(date +%s):write-dotenv-www\\r\\e[0K"
|
|
530
|
-
- echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"
|
|
531
|
-
- if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
|
|
532
|
-
- if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
|
|
533
|
-
- echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"
|
|
534
|
-
- cd .
|
|
535
|
-
- echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"
|
|
536
|
-
- if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
|
|
537
|
-
- if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
|
|
538
|
-
- echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"
|
|
539
|
-
- echo -e "\\e[0Ksection_start:$(date +%s):yarninstall[collapsed=true]\\r\\e[0KYarn install"
|
|
540
|
-
- yarn install --immutable
|
|
541
|
-
- echo -e "\\e[0Ksection_end:$(date +%s):yarninstall\\r\\e[0K"
|
|
542
|
-
- yarn build
|
|
543
|
-
cache:
|
|
544
|
-
- key: .-yarn
|
|
545
|
-
policy: pull-push
|
|
546
|
-
paths:
|
|
547
|
-
- .yarn
|
|
548
|
-
- key: .-node-modules
|
|
549
|
-
policy: pull-push
|
|
550
|
-
paths:
|
|
551
|
-
- node_modules
|
|
552
|
-
- key: myWorkspace-turbo
|
|
553
|
-
policy: pull-push
|
|
554
|
-
paths:
|
|
555
|
-
- .turbo
|
|
556
|
-
- key: myWorkspace-next-cache
|
|
557
|
-
policy: pull-push
|
|
558
|
-
paths:
|
|
559
|
-
- api/.next/cache
|
|
560
|
-
- www/.next/cache
|
|
561
|
-
artifacts:
|
|
562
|
-
paths:
|
|
563
|
-
- api/.next
|
|
564
|
-
- api/dist
|
|
565
|
-
- www/.next
|
|
566
|
-
- www/dist
|
|
567
|
-
exclude:
|
|
568
|
-
- api/.env
|
|
569
|
-
- www/.env
|
|
570
|
-
expire_in: 1 day
|
|
571
|
-
when: always
|
|
572
|
-
reports: {}
|
|
573
|
-
rules:
|
|
574
|
-
- if: $CI_COMMIT_TAG
|
|
575
|
-
needs: []
|
|
576
|
-
retry: *a1
|
|
577
|
-
interruptible: true
|
|
578
|
-
'๐น api ๐จ docker | dev ':
|
|
579
|
-
stage: build
|
|
580
|
-
image: path/to/docker/docker-build:the-version
|
|
581
|
-
services:
|
|
582
|
-
- name: docker:24.0.6-dind
|
|
583
|
-
command:
|
|
584
|
-
- --tls=false
|
|
585
|
-
variables:
|
|
586
|
-
DOCKER_HOST: tcp://0.0.0.0:2375
|
|
587
|
-
DOCKER_TLS_CERTDIR: ''
|
|
588
|
-
DOCKER_DRIVER: overlay2
|
|
589
|
-
DOCKER_BUILDKIT: '1'
|
|
590
|
-
KUBERNETES_CPU_REQUEST: '0.45'
|
|
591
|
-
KUBERNETES_MEMORY_REQUEST: 1Gi
|
|
592
|
-
KUBERNETES_MEMORY_LIMIT: 2Gi
|
|
593
|
-
script:
|
|
594
|
-
- echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
|
|
595
|
-
- export APP_DIR="api"
|
|
596
|
-
- export DOCKER_BUILD_CONTEXT="."
|
|
597
|
-
- export DOCKER_REGISTRY="europe-west6-docker.pkg.dev"
|
|
598
|
-
- export DOCKER_IMAGE="europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/dev/api"
|
|
599
|
-
- export DOCKER_CACHE_IMAGE="europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/api"
|
|
600
|
-
- export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"
|
|
601
|
-
- |-
|
|
602
|
-
export DOCKER_COPY_AND_INSTALL_APP="COPY --chown=node:node $APP_DIR .
|
|
603
|
-
RUN yarn plugin import workspace-tools
|
|
604
|
-
RUN yarn workspaces focus --production && yarn rebuild"
|
|
605
|
-
- |-
|
|
606
|
-
export DOCKER_COPY_WORKSPACE_FILES="COPY --chown=node:node api/package.json /app/api/package.json
|
|
607
|
-
COPY --chown=node:node api/yarn.lock /app/api/yarn.lock
|
|
608
|
-
COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
|
|
609
|
-
COPY --chown=node:node .yarn /app/.yarn"
|
|
610
|
-
- echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
|
|
611
|
-
- ensureNodeDockerfile
|
|
612
|
-
- echo -e "\\e[0Ksection_start:$(date +%s):docker-login[collapsed=true]\\r\\e[0KDocker Login"
|
|
613
|
-
- gcloud auth activate-service-account --key-file=<(echo "$CL_dev_api_GCLOUD_DEPLOY_credentialsKey")
|
|
614
|
-
- gcloud auth configure-docker europe-west6-docker.pkg.dev
|
|
615
|
-
- echo -e "\\e[0Ksection_end:$(date +%s):docker-login\\r\\e[0K"
|
|
616
|
-
- echo -e "\\e[0Ksection_start:$(date +%s):docker-build[collapsed=true]\\r\\e[0KDocker build"
|
|
617
|
-
- docker build --network host --cache-from $DOCKER_CACHE_IMAGE --tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG -f $APP_DIR/Dockerfile $DOCKER_BUILD_CONTEXT --build-arg BUILDKIT_INLINE_CACHE=1
|
|
618
|
-
- echo -e "\\e[0Ksection_end:$(date +%s):docker-build\\r\\e[0K"
|
|
619
|
-
- echo -e "\\e[0Ksection_start:$(date +%s):docker-push[collapsed=true]\\r\\e[0KDocker push and tag"
|
|
620
|
-
- docker push $DOCKER_IMAGE:$DOCKER_IMAGE_TAG
|
|
621
|
-
- docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG $DOCKER_CACHE_IMAGE
|
|
622
|
-
- docker push $DOCKER_CACHE_IMAGE
|
|
623
|
-
- echo -e "\\e[0Ksection_end:$(date +%s):docker-push\\r\\e[0K"
|
|
624
|
-
cache:
|
|
625
|
-
- key: api-yarn
|
|
626
|
-
policy: pull
|
|
627
|
-
paths:
|
|
628
|
-
- api/.yarn
|
|
629
|
-
rules:
|
|
630
|
-
- when: never
|
|
631
|
-
if: $CI_COMMIT_MESSAGE =~ /^chore\\(release\\).*/
|
|
632
|
-
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
|
|
633
|
-
needs:
|
|
634
|
-
- job: '๐ธ myWorkspace ๐จ app | dev '
|
|
635
|
-
artifacts: true
|
|
636
|
-
retry: *a1
|
|
637
|
-
interruptible: true
|
|
638
|
-
'๐น api ๐งพ sbom | dev ':
|
|
639
|
-
stage: build
|
|
640
|
-
image: aquasec/trivy:0.38.3
|
|
641
|
-
variables: {}
|
|
642
|
-
script:
|
|
643
|
-
- echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
|
|
644
|
-
- echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
|
|
645
|
-
- trivy fs --quiet --format cyclonedx --output "__sbom.json" api
|
|
646
|
-
artifacts:
|
|
647
|
-
paths:
|
|
648
|
-
- __sbom.json
|
|
649
|
-
rules:
|
|
650
|
-
- when: never
|
|
651
|
-
if: $CI_COMMIT_MESSAGE =~ /^chore\\(release\\).*/
|
|
652
|
-
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
|
|
653
|
-
needs: []
|
|
654
|
-
retry: *a1
|
|
655
|
-
interruptible: true
|
|
656
|
-
allow_failure: true
|
|
657
|
-
'๐น api ๐ Deploy | dev ':
|
|
658
|
-
stage: deploy dev
|
|
659
|
-
image: path/to/docker/gcloud:the-version
|
|
660
|
-
variables:
|
|
661
|
-
KUBERNETES_CPU_REQUEST: '0.22'
|
|
662
|
-
KUBERNETES_MEMORY_REQUEST: 200Mi
|
|
663
|
-
KUBERNETES_MEMORY_LIMIT: 400Mi
|
|
664
163
|
script:
|
|
665
164
|
- echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
|
|
666
165
|
- export ENV_SHORT="dev"
|
|
@@ -675,974 +174,90 @@ variables:
|
|
|
675
174
|
- export HOST_CANONICAL="$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
676
175
|
- export ROOT_URL_INTERNAL="https://$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
677
176
|
- export CLOUD_SQL_INSTANCE_CONNECTION_NAME="projectId:region:instancename"
|
|
678
|
-
- export DB_NAME="pan-test-app-dev-api"
|
|
679
|
-
- export DB_USER="my-user"
|
|
680
|
-
- export DB_PASSWORD="$CL_dev_api_DB_PASSWORD"
|
|
681
|
-
- export DATABASE_URL="postgresql://$DB_USER:$DB_PASSWORD@localhost/$DB_NAME?host=/cloudsql/$CLOUD_SQL_INSTANCE_CONNECTION_NAME"
|
|
682
|
-
- export DATABASE_JDBC_URL="jdbc:postgresql:///$DB_NAME?cloudSqlInstance=$CLOUD_SQL_INSTANCE_CONNECTION_NAME&socketFactory=com.google.cloud.sql.postgres.SocketFactory&user=$DB_USER&password=$DB_PASSWORD"
|
|
683
|
-
- export CLOUD_RUN_JOB_TRIGGER_URL_migration="https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/jobs/pan-test-app-dev-api-migration:run"
|
|
684
|
-
- export CLOUD_RUN_JOB_TRIGGER_URL_send_reminders="https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/jobs/pan-test-app-dev-api-send-reminders:run"
|
|
685
|
-
- export DEPLOY_CLOUD_RUN_PROJECT_ID="google-project-id"
|
|
686
|
-
- export DEPLOY_CLOUD_RUN_REGION="europe-west6"
|
|
687
|
-
- export GCLOUD_DEPLOY_credentialsKey="$CL_dev_api_GCLOUD_DEPLOY_credentialsKey"
|
|
688
|
-
- export GCLOUD_RUN_canonicalHostSuffix="$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix"
|
|
689
|
-
- export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOST\\",\\"ROOT_URL\\",\\"HOST_INTERNAL\\",\\"HOST_CANONICAL\\",\\"ROOT_URL_INTERNAL\\",\\"CLOUD_SQL_INSTANCE_CONNECTION_NAME\\",\\"DB_NAME\\",\\"DB_USER\\",\\"DB_PASSWORD\\",\\"DATABASE_URL\\",\\"DATABASE_JDBC_URL\\",\\"CLOUD_RUN_JOB_TRIGGER_URL_migration\\",\\"CLOUD_RUN_JOB_TRIGGER_URL_send_reminders\\",\\"DEPLOY_CLOUD_RUN_PROJECT_ID\\",\\"DEPLOY_CLOUD_RUN_REGION\\",\\"GCLOUD_DEPLOY_credentialsKey\\",\\"GCLOUD_RUN_canonicalHostSuffix\\"]"
|
|
690
|
-
- export DOCKER_REGISTRY="europe-west6-docker.pkg.dev"
|
|
691
|
-
- export DOCKER_IMAGE="europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/dev/api"
|
|
692
|
-
- export DOCKER_CACHE_IMAGE="europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/api"
|
|
693
|
-
- export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"
|
|
694
|
-
- export CLOUDSDK_CORE_DISABLE_PROMPTS="1"
|
|
695
|
-
- echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
|
|
696
|
-
- echo -e "\\e[0Ksection_start:$(date +%s):prepare[collapsed=true]\\r\\e[0KPrepare..."
|
|
697
|
-
- gcloud auth activate-service-account --key-file=<(echo "$CL_dev_api_GCLOUD_DEPLOY_credentialsKey")
|
|
698
|
-
- export GCLOUD_PROJECT_NUMBER=$(gcloud projects describe google-project-id --format="value(projectNumber)")
|
|
699
|
-
- 'echo "GCLOUD_PROJECT_NUMBER: $GCLOUD_PROJECT_NUMBER"'
|
|
700
|
-
- echo -e "\\e[0Ksection_end:$(date +%s):prepare\\r\\e[0K"
|
|
701
|
-
- echo -e "\\e[0Ksection_start:$(date +%s):writeenvvars[collapsed=true]\\r\\e[0KWrite env vars to file"
|
|
702
|
-
- |
|
|
703
|
-
cat > ____envvars.yaml <<EOF
|
|
704
|
-
ENV_SHORT: |-
|
|
705
|
-
dev
|
|
706
|
-
APP_DIR: |-
|
|
707
|
-
api
|
|
708
|
-
ENV_TYPE: |-
|
|
709
|
-
dev
|
|
710
|
-
BUILD_INFO_BUILD_ID: |-
|
|
711
|
-
$(printf %s "$(git describe --tags 2>/dev/null || git rev-parse HEAD)" | sed 's/^/ /')
|
|
712
|
-
BUILD_INFO_BUILD_TIME: |-
|
|
713
|
-
$(printf %s "$CI_JOB_STARTED_AT" | sed 's/^/ /')
|
|
714
|
-
BUILD_INFO_CURRENT_VERSION: |-
|
|
715
|
-
$(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 's/^/ /')
|
|
716
|
-
HOST: |-
|
|
717
|
-
$(printf %s "$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
|
|
718
|
-
ROOT_URL: |-
|
|
719
|
-
$(printf %s "https://$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
|
|
720
|
-
HOST_INTERNAL: |-
|
|
721
|
-
$(printf %s "$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
|
|
722
|
-
HOST_CANONICAL: |-
|
|
723
|
-
$(printf %s "$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
|
|
724
|
-
ROOT_URL_INTERNAL: |-
|
|
725
|
-
$(printf %s "https://$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
|
|
726
|
-
CLOUD_SQL_INSTANCE_CONNECTION_NAME: |-
|
|
727
|
-
projectId:region:instancename
|
|
728
|
-
DB_NAME: |-
|
|
729
|
-
pan-test-app-dev-api
|
|
730
|
-
DB_USER: |-
|
|
731
|
-
my-user
|
|
732
|
-
DB_PASSWORD: |-
|
|
733
|
-
$(printf %s "$CL_dev_api_DB_PASSWORD" | sed 's/^/ /')
|
|
734
|
-
DATABASE_URL: |-
|
|
735
|
-
postgresql://$DB_USER:$DB_PASSWORD@localhost/$DB_NAME?host=/cloudsql/$CLOUD_SQL_INSTANCE_CONNECTION_NAME
|
|
736
|
-
DATABASE_JDBC_URL: |-
|
|
737
|
-
jdbc:postgresql:///$DB_NAME?cloudSqlInstance=$CLOUD_SQL_INSTANCE_CONNECTION_NAME&socketFactory=com.google.cloud.sql.postgres.SocketFactory&user=$DB_USER&password=$DB_PASSWORD
|
|
738
|
-
CLOUD_RUN_JOB_TRIGGER_URL_migration: |-
|
|
739
|
-
https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/jobs/pan-test-app-dev-api-migration:run
|
|
740
|
-
CLOUD_RUN_JOB_TRIGGER_URL_send_reminders: |-
|
|
741
|
-
https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/jobs/pan-test-app-dev-api-send-reminders:run
|
|
742
|
-
DEPLOY_CLOUD_RUN_PROJECT_ID: |-
|
|
743
|
-
google-project-id
|
|
744
|
-
DEPLOY_CLOUD_RUN_REGION: |-
|
|
745
|
-
europe-west6
|
|
746
|
-
GCLOUD_RUN_canonicalHostSuffix: |-
|
|
747
|
-
$(printf %s "$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | sed 's/^/ /')
|
|
748
|
-
_ALL_ENV_VAR_KEYS: |-
|
|
749
|
-
["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","HOST_INTERNAL","HOST_CANONICAL","ROOT_URL_INTERNAL","CLOUD_SQL_INSTANCE_CONNECTION_NAME","DB_NAME","DB_USER","DB_PASSWORD","DATABASE_URL","DATABASE_JDBC_URL","CLOUD_RUN_JOB_TRIGGER_URL_migration","CLOUD_RUN_JOB_TRIGGER_URL_send_reminders","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]
|
|
750
|
-
|
|
751
|
-
EOF
|
|
752
|
-
- echo -e "\\e[0Ksection_end:$(date +%s):writeenvvars\\r\\e[0K"
|
|
753
|
-
- echo -e "\\e[0Ksection_start:$(date +%s):deploy[collapsed=true]\\r\\e[0KDeploy to cloud run"
|
|
754
|
-
- set +e
|
|
755
|
-
- echo "ensuring Database..."
|
|
756
|
-
- gcloud sql databases create pan-test-app-dev-api --instance=instancename --project projectId
|
|
757
|
-
- set -e
|
|
758
|
-
- set +e
|
|
759
|
-
- gcloud scheduler jobs create http pan-test-app-dev-api-send-reminders-scheduler --project=google-project-id --location=europe-west6 --schedule="0 * * * *" --max-retry-attempts=0 --uri="https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/jobs/pan-test-app-dev-api-send-reminders:run" --http-method=POST --oauth-service-account-email=$GCLOUD_PROJECT_NUMBER-compute@developer.gserviceaccount.com
|
|
760
|
-
- set -e
|
|
761
|
-
- gcloud scheduler jobs update http pan-test-app-dev-api-send-reminders-scheduler --project=google-project-id --location=europe-west6 --schedule="0 * * * *" --max-retry-attempts=0 --uri="https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/jobs/pan-test-app-dev-api-send-reminders:run" --http-method=POST --oauth-service-account-email=$GCLOUD_PROJECT_NUMBER-compute@developer.gserviceaccount.com
|
|
762
|
-
- set +e
|
|
763
|
-
- gcloud run jobs create pan-test-app-dev-api-migration --command="yarn,migrate" --image=europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/dev/api:$DOCKER_IMAGE_TAG --project=google-project-id --region=europe-west6 --set-cloudsql-instances=projectId:region:instancename --labels=customer-name=pan,component-name=api,app-name=test-app,env-type=dev,env-name=dev,build-type=node,cloud-run-job-name=pan-test-app-dev-api-migration --memory=512Mi --task-timeout=10m --parallelism=1 --env-vars-file=____envvars.yaml --max-retries=0
|
|
764
|
-
- set -e
|
|
765
|
-
- 'gcloud run jobs update pan-test-app-dev-api-migration --command="yarn,migrate" --image=europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/dev/api:$DOCKER_IMAGE_TAG --project=google-project-id --region=europe-west6 --set-cloudsql-instances=projectId:region:instancename --labels=customer-name=pan,component-name=api,app-name=test-app,env-type=dev,env-name=dev,build-type=node,cloud-run-job-name=pan-test-app-dev-api-migration --memory=512Mi --task-timeout=10m --parallelism=1 --env-vars-file=____envvars.yaml --max-retries=0 '
|
|
766
|
-
- set +e
|
|
767
|
-
- gcloud run jobs create pan-test-app-dev-api-send-reminders --command="yarn,job:send-reminders" --image=europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/dev/api:$DOCKER_IMAGE_TAG --project=google-project-id --region=europe-west6 --set-cloudsql-instances=projectId:region:instancename --labels=customer-name=pan,component-name=api,app-name=test-app,env-type=dev,env-name=dev,build-type=node,cloud-run-job-name=pan-test-app-dev-api-send-reminders --memory=512Mi --task-timeout=15m --parallelism=1 --env-vars-file=____envvars.yaml --max-retries=0
|
|
768
|
-
- set -e
|
|
769
|
-
- 'gcloud run jobs update pan-test-app-dev-api-send-reminders --command="yarn,job:send-reminders" --image=europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/dev/api:$DOCKER_IMAGE_TAG --project=google-project-id --region=europe-west6 --set-cloudsql-instances=projectId:region:instancename --labels=customer-name=pan,component-name=api,app-name=test-app,env-type=dev,env-name=dev,build-type=node,cloud-run-job-name=pan-test-app-dev-api-send-reminders --memory=512Mi --task-timeout=15m --parallelism=1 --env-vars-file=____envvars.yaml --max-retries=0 '
|
|
770
|
-
- gcloud run deploy pan-test-app-dev-api --command="yarn,start" --image=europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/dev/api:$DOCKER_IMAGE_TAG --project=google-project-id --region=europe-west6 --set-cloudsql-instances=projectId:region:instancename --labels=customer-name=pan,component-name=api,app-name=test-app,env-type=dev,env-name=dev,build-type=node,cloud-run-service-name=pan-test-app-dev-api --env-vars-file=____envvars.yaml --min-instances=0 --max-instances=5 --cpu-throttling --allow-unauthenticated --ingress=all --cpu-boost
|
|
771
|
-
- gcloud run jobs execute pan-test-app-dev-api-migration --project=google-project-id --region=europe-west6
|
|
772
|
-
- echo -e "\\e[0Ksection_end:$(date +%s):deploy\\r\\e[0K"
|
|
773
|
-
- echo -e "\\e[0Ksection_start:$(date +%s):cleanup[collapsed=true]\\r\\e[0KCleanup"
|
|
774
|
-
- 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
|
|
775
|
-
- 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
|
|
776
|
-
- 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
|
|
777
|
-
- echo -e "\\e[0Ksection_end:$(date +%s):cleanup\\r\\e[0K"
|
|
778
|
-
- echo 'Uploading SBOM to Dependency Track'
|
|
779
|
-
- /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
|
|
780
|
-
- 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
|
|
781
|
-
environment:
|
|
782
|
-
name: dev/api
|
|
783
|
-
url: $CL_GITLAB_ENVIRONMENT_URL
|
|
784
|
-
on_stop: '๐น api ๐ Stop โ ๏ธ | dev '
|
|
785
|
-
auto_stop_in: 4 weeks
|
|
786
|
-
artifacts:
|
|
787
|
-
reports:
|
|
788
|
-
dotenv: gitlab_environment.env
|
|
789
|
-
rules:
|
|
790
|
-
- when: never
|
|
791
|
-
if: $CI_COMMIT_MESSAGE =~ /^chore\\(release\\).*/
|
|
792
|
-
- when: on_success
|
|
793
|
-
if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
|
|
794
|
-
needs:
|
|
795
|
-
- job: ๐ธ myWorkspace ๐ฎ lint
|
|
796
|
-
artifacts: false
|
|
797
|
-
- job: ๐ธ myWorkspace ๐งช test
|
|
798
|
-
artifacts: false
|
|
799
|
-
- job: ๐ธ myWorkspace ๐ก audit
|
|
800
|
-
artifacts: false
|
|
801
|
-
- job: '๐น api ๐จ docker | dev '
|
|
802
|
-
artifacts: false
|
|
803
|
-
- job: '๐น api ๐งพ sbom | dev '
|
|
804
|
-
artifacts: true
|
|
805
|
-
retry: *a1
|
|
806
|
-
interruptible: true
|
|
807
|
-
allow_failure: false
|
|
808
|
-
'๐น api ๐ Stop โ ๏ธ | dev ':
|
|
809
|
-
stage: stop dev
|
|
810
|
-
image: path/to/docker/gcloud:the-version
|
|
811
|
-
variables:
|
|
812
|
-
KUBERNETES_CPU_REQUEST: '0.22'
|
|
813
|
-
KUBERNETES_MEMORY_REQUEST: 200Mi
|
|
814
|
-
KUBERNETES_MEMORY_LIMIT: 400Mi
|
|
815
|
-
GIT_STRATEGY: none
|
|
816
|
-
script:
|
|
817
|
-
- echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
|
|
818
|
-
- export CLOUDSDK_CORE_DISABLE_PROMPTS="1"
|
|
819
|
-
- echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
|
|
820
|
-
- set +e
|
|
821
|
-
- gcloud auth activate-service-account --key-file=<(echo "$CL_dev_api_GCLOUD_DEPLOY_credentialsKey")
|
|
822
|
-
- gcloud run services delete pan-test-app-dev-api --project=google-project-id --region=europe-west6
|
|
823
|
-
- gcloud scheduler jobs delete pan-test-app-dev-api-send-reminders-scheduler --project=google-project-id --location=europe-west6
|
|
824
|
-
- gcloud run jobs executions list --project=google-project-id --region=europe-west6 --job pan-test-app-dev-api-migration --format="value(name)" | xargs -I {} gcloud run jobs executions delete {} --quiet --project=google-project-id --region=europe-west6
|
|
825
|
-
- gcloud run jobs delete pan-test-app-dev-api-migration --project=google-project-id --region=europe-west6
|
|
826
|
-
- gcloud run jobs executions list --project=google-project-id --region=europe-west6 --job pan-test-app-dev-api-send-reminders --format="value(name)" | xargs -I {} gcloud run jobs executions delete {} --quiet --project=google-project-id --region=europe-west6
|
|
827
|
-
- gcloud run jobs delete pan-test-app-dev-api-send-reminders --project=google-project-id --region=europe-west6
|
|
828
|
-
- gcloud artifacts docker images delete europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/dev/api --quiet --delete-tags
|
|
829
|
-
- 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
|
|
830
|
-
- echo 'Disabling component in Dependency Track'
|
|
831
|
-
- /dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" disable "pan-test-app/api" "https://$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" || true
|
|
832
|
-
- set -e
|
|
833
|
-
- 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
|
|
834
|
-
environment:
|
|
835
|
-
name: dev/api
|
|
836
|
-
url: $CL_GITLAB_ENVIRONMENT_URL
|
|
837
|
-
action: stop
|
|
838
|
-
artifacts:
|
|
839
|
-
reports:
|
|
840
|
-
dotenv: gitlab_environment.env
|
|
841
|
-
rules:
|
|
842
|
-
- if: $CI_COMMIT_BRANCH =~ /^[0-9]+\\.([0-9]+|x)\\.x$/
|
|
843
|
-
when: on_success
|
|
844
|
-
- when: never
|
|
845
|
-
if: $CI_COMMIT_MESSAGE =~ /^chore\\(release\\).*/
|
|
846
|
-
- when: manual
|
|
847
|
-
if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
|
|
848
|
-
needs: []
|
|
849
|
-
retry: *a1
|
|
850
|
-
interruptible: true
|
|
851
|
-
allow_failure: true
|
|
852
|
-
'๐น api ๐จ docker | review ':
|
|
853
|
-
stage: build
|
|
854
|
-
image: path/to/docker/docker-build:the-version
|
|
855
|
-
services:
|
|
856
|
-
- name: docker:24.0.6-dind
|
|
857
|
-
command:
|
|
858
|
-
- --tls=false
|
|
859
|
-
variables:
|
|
860
|
-
DOCKER_HOST: tcp://0.0.0.0:2375
|
|
861
|
-
DOCKER_TLS_CERTDIR: ''
|
|
862
|
-
DOCKER_DRIVER: overlay2
|
|
863
|
-
DOCKER_BUILDKIT: '1'
|
|
864
|
-
KUBERNETES_CPU_REQUEST: '0.45'
|
|
865
|
-
KUBERNETES_MEMORY_REQUEST: 1Gi
|
|
866
|
-
KUBERNETES_MEMORY_LIMIT: 2Gi
|
|
867
|
-
script:
|
|
868
|
-
- echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
|
|
869
|
-
- export APP_DIR="api"
|
|
870
|
-
- export DOCKER_BUILD_CONTEXT="."
|
|
871
|
-
- export DOCKER_REGISTRY="europe-west6-docker.pkg.dev"
|
|
872
|
-
- 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"; })"
|
|
873
|
-
- export DOCKER_CACHE_IMAGE="europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/api"
|
|
874
|
-
- export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"
|
|
875
|
-
- |-
|
|
876
|
-
export DOCKER_COPY_AND_INSTALL_APP="COPY --chown=node:node $APP_DIR .
|
|
877
|
-
RUN yarn plugin import workspace-tools
|
|
878
|
-
RUN yarn workspaces focus --production && yarn rebuild"
|
|
879
|
-
- |-
|
|
880
|
-
export DOCKER_COPY_WORKSPACE_FILES="COPY --chown=node:node api/package.json /app/api/package.json
|
|
881
|
-
COPY --chown=node:node api/yarn.lock /app/api/yarn.lock
|
|
882
|
-
COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
|
|
883
|
-
COPY --chown=node:node .yarn /app/.yarn"
|
|
884
|
-
- echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
|
|
885
|
-
- ensureNodeDockerfile
|
|
886
|
-
- echo -e "\\e[0Ksection_start:$(date +%s):docker-login[collapsed=true]\\r\\e[0KDocker Login"
|
|
887
|
-
- gcloud auth activate-service-account --key-file=<(echo "$CL_review_api_GCLOUD_DEPLOY_credentialsKey")
|
|
888
|
-
- gcloud auth configure-docker europe-west6-docker.pkg.dev
|
|
889
|
-
- echo -e "\\e[0Ksection_end:$(date +%s):docker-login\\r\\e[0K"
|
|
890
|
-
- echo -e "\\e[0Ksection_start:$(date +%s):docker-build[collapsed=true]\\r\\e[0KDocker build"
|
|
891
|
-
- 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
|
|
892
|
-
- echo -e "\\e[0Ksection_end:$(date +%s):docker-build\\r\\e[0K"
|
|
893
|
-
- echo -e "\\e[0Ksection_start:$(date +%s):docker-push[collapsed=true]\\r\\e[0KDocker push and tag"
|
|
894
|
-
- docker push $DOCKER_IMAGE:$DOCKER_IMAGE_TAG
|
|
895
|
-
- docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG $DOCKER_CACHE_IMAGE
|
|
896
|
-
- docker push $DOCKER_CACHE_IMAGE
|
|
897
|
-
- echo -e "\\e[0Ksection_end:$(date +%s):docker-push\\r\\e[0K"
|
|
898
|
-
cache:
|
|
899
|
-
- key: api-yarn
|
|
900
|
-
policy: pull
|
|
901
|
-
paths:
|
|
902
|
-
- api/.yarn
|
|
903
|
-
rules:
|
|
904
|
-
- if: $CI_MERGE_REQUEST_ID
|
|
905
|
-
needs:
|
|
906
|
-
- job: '๐ธ myWorkspace ๐จ app | review '
|
|
907
|
-
artifacts: true
|
|
908
|
-
retry: *a1
|
|
909
|
-
interruptible: true
|
|
910
|
-
'๐น api ๐งพ sbom | review ':
|
|
911
|
-
stage: build
|
|
912
|
-
image: aquasec/trivy:0.38.3
|
|
913
|
-
variables: {}
|
|
914
|
-
script:
|
|
915
|
-
- echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
|
|
916
|
-
- echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
|
|
917
|
-
- trivy fs --quiet --format cyclonedx --output "__sbom.json" api
|
|
918
|
-
artifacts:
|
|
919
|
-
paths:
|
|
920
|
-
- __sbom.json
|
|
921
|
-
rules:
|
|
922
|
-
- if: $CI_MERGE_REQUEST_ID
|
|
923
|
-
needs: []
|
|
924
|
-
retry: *a1
|
|
925
|
-
interruptible: true
|
|
926
|
-
allow_failure: true
|
|
927
|
-
'๐น api ๐ Deploy | review ':
|
|
928
|
-
stage: deploy review
|
|
929
|
-
image: path/to/docker/gcloud:the-version
|
|
930
|
-
variables:
|
|
931
|
-
KUBERNETES_CPU_REQUEST: '0.22'
|
|
932
|
-
KUBERNETES_MEMORY_REQUEST: 200Mi
|
|
933
|
-
KUBERNETES_MEMORY_LIMIT: 400Mi
|
|
934
|
-
script:
|
|
935
|
-
- echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
|
|
936
|
-
- export ENV_SHORT="review"
|
|
937
|
-
- export APP_DIR="api"
|
|
938
|
-
- export ENV_TYPE="review"
|
|
939
|
-
- export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
|
|
940
|
-
- export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
|
|
941
|
-
- 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")"
|
|
942
|
-
- export HOST="$(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)}')"
|
|
943
|
-
- 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)}')"
|
|
944
|
-
- export HOST_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)}')"
|
|
945
|
-
- 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)}')"
|
|
946
|
-
- 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)}')"
|
|
947
|
-
- export CLOUD_SQL_INSTANCE_CONNECTION_NAME="projectId:region:instancename"
|
|
948
|
-
- export DB_NAME="pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api"
|
|
949
|
-
- export DB_USER="my-user"
|
|
950
|
-
- export DB_PASSWORD="$CL_review_api_DB_PASSWORD"
|
|
951
|
-
- export DATABASE_URL="postgresql://$DB_USER:$DB_PASSWORD@localhost/$DB_NAME?host=/cloudsql/$CLOUD_SQL_INSTANCE_CONNECTION_NAME"
|
|
952
|
-
- export DATABASE_JDBC_URL="jdbc:postgresql:///$DB_NAME?cloudSqlInstance=$CLOUD_SQL_INSTANCE_CONNECTION_NAME&socketFactory=com.google.cloud.sql.postgres.SocketFactory&user=$DB_USER&password=$DB_PASSWORD"
|
|
953
|
-
- export CLOUD_RUN_JOB_TRIGGER_URL_migration="https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/jobs/$(printf %s \\"pan-test-app-review-$([ -n \\"$CI_MERGE_REQUEST_IID\\" ] && echo \\"mr$CI_MERGE_REQUEST_IID\\" || { [ -n \\"$CI_COMMIT_REF_SLUG\\" ] && echo \\"$CI_COMMIT_REF_SLUG\\" || echo \\"unknown\\"; })-api\\" | awk '{print tolower($0)}')-migration:run"
|
|
954
|
-
- export CLOUD_RUN_JOB_TRIGGER_URL_send_reminders="https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/jobs/$(printf %s \\"pan-test-app-review-$([ -n \\"$CI_MERGE_REQUEST_IID\\" ] && echo \\"mr$CI_MERGE_REQUEST_IID\\" || { [ -n \\"$CI_COMMIT_REF_SLUG\\" ] && echo \\"$CI_COMMIT_REF_SLUG\\" || echo \\"unknown\\"; })-api\\" | awk '{print tolower($0)}')-send-reminders:run"
|
|
955
|
-
- export DEPLOY_CLOUD_RUN_PROJECT_ID="google-project-id"
|
|
956
|
-
- export DEPLOY_CLOUD_RUN_REGION="europe-west6"
|
|
957
|
-
- export GCLOUD_DEPLOY_credentialsKey="$CL_review_api_GCLOUD_DEPLOY_credentialsKey"
|
|
958
|
-
- export GCLOUD_RUN_canonicalHostSuffix="$CL_review_api_GCLOUD_RUN_canonicalHostSuffix"
|
|
959
|
-
- export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOST\\",\\"ROOT_URL\\",\\"HOST_INTERNAL\\",\\"HOST_CANONICAL\\",\\"ROOT_URL_INTERNAL\\",\\"CLOUD_SQL_INSTANCE_CONNECTION_NAME\\",\\"DB_NAME\\",\\"DB_USER\\",\\"DB_PASSWORD\\",\\"DATABASE_URL\\",\\"DATABASE_JDBC_URL\\",\\"CLOUD_RUN_JOB_TRIGGER_URL_migration\\",\\"CLOUD_RUN_JOB_TRIGGER_URL_send_reminders\\",\\"DEPLOY_CLOUD_RUN_PROJECT_ID\\",\\"DEPLOY_CLOUD_RUN_REGION\\",\\"GCLOUD_DEPLOY_credentialsKey\\",\\"GCLOUD_RUN_canonicalHostSuffix\\"]"
|
|
960
|
-
- export DOCKER_REGISTRY="europe-west6-docker.pkg.dev"
|
|
961
|
-
- 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"; })"
|
|
962
|
-
- export DOCKER_CACHE_IMAGE="europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/api"
|
|
963
|
-
- export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"
|
|
964
|
-
- export CLOUDSDK_CORE_DISABLE_PROMPTS="1"
|
|
965
|
-
- echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
|
|
966
|
-
- echo -e "\\e[0Ksection_start:$(date +%s):prepare[collapsed=true]\\r\\e[0KPrepare..."
|
|
967
|
-
- gcloud auth activate-service-account --key-file=<(echo "$CL_review_api_GCLOUD_DEPLOY_credentialsKey")
|
|
968
|
-
- export GCLOUD_PROJECT_NUMBER=$(gcloud projects describe google-project-id --format="value(projectNumber)")
|
|
969
|
-
- 'echo "GCLOUD_PROJECT_NUMBER: $GCLOUD_PROJECT_NUMBER"'
|
|
970
|
-
- echo -e "\\e[0Ksection_end:$(date +%s):prepare\\r\\e[0K"
|
|
971
|
-
- echo -e "\\e[0Ksection_start:$(date +%s):writeenvvars[collapsed=true]\\r\\e[0KWrite env vars to file"
|
|
972
|
-
- |
|
|
973
|
-
cat > ____envvars.yaml <<EOF
|
|
974
|
-
ENV_SHORT: |-
|
|
975
|
-
review
|
|
976
|
-
APP_DIR: |-
|
|
977
|
-
api
|
|
978
|
-
ENV_TYPE: |-
|
|
979
|
-
review
|
|
980
|
-
BUILD_INFO_BUILD_ID: |-
|
|
981
|
-
$(printf %s "$(git describe --tags 2>/dev/null || git rev-parse HEAD)" | sed 's/^/ /')
|
|
982
|
-
BUILD_INFO_BUILD_TIME: |-
|
|
983
|
-
$(printf %s "$CI_JOB_STARTED_AT" | sed 's/^/ /')
|
|
984
|
-
BUILD_INFO_CURRENT_VERSION: |-
|
|
985
|
-
$(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 's/^/ /')
|
|
986
|
-
HOST: |-
|
|
987
|
-
$(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/^/ /')
|
|
988
|
-
ROOT_URL: |-
|
|
989
|
-
$(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 's/^/ /')
|
|
990
|
-
HOST_INTERNAL: |-
|
|
991
|
-
$(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/^/ /')
|
|
992
|
-
HOST_CANONICAL: |-
|
|
993
|
-
$(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/^/ /')
|
|
994
|
-
ROOT_URL_INTERNAL: |-
|
|
995
|
-
$(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 's/^/ /')
|
|
996
|
-
CLOUD_SQL_INSTANCE_CONNECTION_NAME: |-
|
|
997
|
-
projectId:region:instancename
|
|
998
|
-
DB_NAME: |-
|
|
999
|
-
$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api" | sed 's/^/ /')
|
|
1000
|
-
DB_USER: |-
|
|
1001
|
-
my-user
|
|
1002
|
-
DB_PASSWORD: |-
|
|
1003
|
-
$(printf %s "$CL_review_api_DB_PASSWORD" | sed 's/^/ /')
|
|
1004
|
-
DATABASE_URL: |-
|
|
1005
|
-
postgresql://$DB_USER:$DB_PASSWORD@localhost/$DB_NAME?host=/cloudsql/$CLOUD_SQL_INSTANCE_CONNECTION_NAME
|
|
1006
|
-
DATABASE_JDBC_URL: |-
|
|
1007
|
-
jdbc:postgresql:///$DB_NAME?cloudSqlInstance=$CLOUD_SQL_INSTANCE_CONNECTION_NAME&socketFactory=com.google.cloud.sql.postgres.SocketFactory&user=$DB_USER&password=$DB_PASSWORD
|
|
1008
|
-
CLOUD_RUN_JOB_TRIGGER_URL_migration: |-
|
|
1009
|
-
https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/jobs/$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api" | awk '{print tolower($0)}')-migration:run
|
|
1010
|
-
CLOUD_RUN_JOB_TRIGGER_URL_send_reminders: |-
|
|
1011
|
-
https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/jobs/$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api" | awk '{print tolower($0)}')-send-reminders:run
|
|
1012
|
-
DEPLOY_CLOUD_RUN_PROJECT_ID: |-
|
|
1013
|
-
google-project-id
|
|
1014
|
-
DEPLOY_CLOUD_RUN_REGION: |-
|
|
1015
|
-
europe-west6
|
|
1016
|
-
GCLOUD_RUN_canonicalHostSuffix: |-
|
|
1017
|
-
$(printf %s "$CL_review_api_GCLOUD_RUN_canonicalHostSuffix" | sed 's/^/ /')
|
|
1018
|
-
_ALL_ENV_VAR_KEYS: |-
|
|
1019
|
-
["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","HOST_INTERNAL","HOST_CANONICAL","ROOT_URL_INTERNAL","CLOUD_SQL_INSTANCE_CONNECTION_NAME","DB_NAME","DB_USER","DB_PASSWORD","DATABASE_URL","DATABASE_JDBC_URL","CLOUD_RUN_JOB_TRIGGER_URL_migration","CLOUD_RUN_JOB_TRIGGER_URL_send_reminders","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]
|
|
1020
|
-
|
|
1021
|
-
EOF
|
|
1022
|
-
- echo -e "\\e[0Ksection_end:$(date +%s):writeenvvars\\r\\e[0K"
|
|
1023
|
-
- echo -e "\\e[0Ksection_start:$(date +%s):deploy[collapsed=true]\\r\\e[0KDeploy to cloud run"
|
|
1024
|
-
- set +e
|
|
1025
|
-
- echo "ensuring Database..."
|
|
1026
|
-
- gcloud sql databases create pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api --instance=instancename --project projectId
|
|
1027
|
-
- set -e
|
|
1028
|
-
- set +e
|
|
1029
|
-
- gcloud scheduler jobs create http $(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api" | awk '{print tolower($0)}')-send-reminders-scheduler --project=google-project-id --location=europe-west6 --schedule="0 * * * *" --max-retry-attempts=0 --uri="https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/jobs/$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api" | awk '{print tolower($0)}')-send-reminders:run" --http-method=POST --oauth-service-account-email=$GCLOUD_PROJECT_NUMBER-compute@developer.gserviceaccount.com
|
|
1030
|
-
- set -e
|
|
1031
|
-
- gcloud scheduler jobs update http $(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api" | awk '{print tolower($0)}')-send-reminders-scheduler --project=google-project-id --location=europe-west6 --schedule="0 * * * *" --max-retry-attempts=0 --uri="https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/jobs/$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api" | awk '{print tolower($0)}')-send-reminders:run" --http-method=POST --oauth-service-account-email=$GCLOUD_PROJECT_NUMBER-compute@developer.gserviceaccount.com
|
|
1032
|
-
- set +e
|
|
1033
|
-
- gcloud run jobs create $(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api" | awk '{print tolower($0)}')-migration --command="yarn,migrate" --image=europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/review/api/$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }):$DOCKER_IMAGE_TAG --project=google-project-id --region=europe-west6 --set-cloudsql-instances=projectId:region:instancename --labels=customer-name=pan,component-name=api,app-name=test-app,env-type=review,env-name=review,build-type=node,cloud-run-job-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)}')-migration --memory=512Mi --task-timeout=10m --parallelism=1 --env-vars-file=____envvars.yaml --max-retries=0
|
|
1034
|
-
- set -e
|
|
1035
|
-
- 'gcloud run jobs update $(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api" | awk ''{print tolower($0)}'')-migration --command="yarn,migrate" --image=europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/review/api/$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }):$DOCKER_IMAGE_TAG --project=google-project-id --region=europe-west6 --set-cloudsql-instances=projectId:region:instancename --labels=customer-name=pan,component-name=api,app-name=test-app,env-type=review,env-name=review,build-type=node,cloud-run-job-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)}'')-migration --memory=512Mi --task-timeout=10m --parallelism=1 --env-vars-file=____envvars.yaml --max-retries=0 '
|
|
1036
|
-
- set +e
|
|
1037
|
-
- gcloud run jobs create $(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api" | awk '{print tolower($0)}')-send-reminders --command="yarn,job:send-reminders" --image=europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/review/api/$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }):$DOCKER_IMAGE_TAG --project=google-project-id --region=europe-west6 --set-cloudsql-instances=projectId:region:instancename --labels=customer-name=pan,component-name=api,app-name=test-app,env-type=review,env-name=review,build-type=node,cloud-run-job-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)}')-send-reminders --memory=512Mi --task-timeout=15m --parallelism=1 --env-vars-file=____envvars.yaml --max-retries=0
|
|
1038
|
-
- set -e
|
|
1039
|
-
- 'gcloud run jobs update $(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api" | awk ''{print tolower($0)}'')-send-reminders --command="yarn,job:send-reminders" --image=europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/review/api/$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }):$DOCKER_IMAGE_TAG --project=google-project-id --region=europe-west6 --set-cloudsql-instances=projectId:region:instancename --labels=customer-name=pan,component-name=api,app-name=test-app,env-type=review,env-name=review,build-type=node,cloud-run-job-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)}'')-send-reminders --memory=512Mi --task-timeout=15m --parallelism=1 --env-vars-file=____envvars.yaml --max-retries=0 '
|
|
1040
|
-
- gcloud run deploy $(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api" | awk '{print tolower($0)}') --command="yarn,start" --image=europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/review/api/$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }):$DOCKER_IMAGE_TAG --project=google-project-id --region=europe-west6 --set-cloudsql-instances=projectId:region:instancename --labels=customer-name=pan,component-name=api,app-name=test-app,env-type=review,env-name=review,build-type=node,cloud-run-service-name=$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api" | awk '{print tolower($0)}') --env-vars-file=____envvars.yaml --min-instances=0 --max-instances=5 --cpu-throttling --allow-unauthenticated --ingress=all --cpu-boost
|
|
1041
|
-
- gcloud run jobs execute $(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api" | awk '{print tolower($0)}')-migration --project=google-project-id --region=europe-west6
|
|
1042
|
-
- echo -e "\\e[0Ksection_end:$(date +%s):deploy\\r\\e[0K"
|
|
1043
|
-
- echo -e "\\e[0Ksection_start:$(date +%s):cleanup[collapsed=true]\\r\\e[0KCleanup"
|
|
1044
|
-
- 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
|
|
1045
|
-
- 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
|
|
1046
|
-
- 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
|
|
1047
|
-
- set +e
|
|
1048
|
-
- gcloud artifacts docker images delete europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/review/api --quiet --delete-tags
|
|
1049
|
-
- set -e
|
|
1050
|
-
- echo -e "\\e[0Ksection_end:$(date +%s):cleanup\\r\\e[0K"
|
|
1051
|
-
- echo 'Uploading SBOM to Dependency Track'
|
|
1052
|
-
- /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
|
|
1053
|
-
- 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
|
|
1054
|
-
environment:
|
|
1055
|
-
name: review/$CI_COMMIT_REF_NAME/api
|
|
1056
|
-
url: $CL_GITLAB_ENVIRONMENT_URL
|
|
1057
|
-
on_stop: '๐น api ๐ Stop โ ๏ธ | review '
|
|
1058
|
-
auto_stop_in: 1 week
|
|
1059
|
-
artifacts:
|
|
1060
|
-
reports:
|
|
1061
|
-
dotenv: gitlab_environment.env
|
|
1062
|
-
rules:
|
|
1063
|
-
- when: on_success
|
|
1064
|
-
if: $CI_MERGE_REQUEST_ID
|
|
1065
|
-
needs:
|
|
1066
|
-
- job: ๐ธ myWorkspace ๐ฎ lint
|
|
1067
|
-
artifacts: false
|
|
1068
|
-
- job: ๐ธ myWorkspace ๐งช test
|
|
1069
|
-
artifacts: false
|
|
1070
|
-
- job: ๐ธ myWorkspace ๐ก audit
|
|
1071
|
-
artifacts: false
|
|
1072
|
-
- job: '๐น api ๐จ docker | review '
|
|
1073
|
-
artifacts: false
|
|
1074
|
-
- job: '๐น api ๐งพ sbom | review '
|
|
1075
|
-
artifacts: true
|
|
1076
|
-
retry: *a1
|
|
1077
|
-
interruptible: true
|
|
1078
|
-
allow_failure: false
|
|
1079
|
-
'๐น api ๐ Stop โ ๏ธ | review ':
|
|
1080
|
-
stage: stop review
|
|
1081
|
-
image: path/to/docker/gcloud:the-version
|
|
1082
|
-
variables:
|
|
1083
|
-
KUBERNETES_CPU_REQUEST: '0.22'
|
|
1084
|
-
KUBERNETES_MEMORY_REQUEST: 200Mi
|
|
1085
|
-
KUBERNETES_MEMORY_LIMIT: 400Mi
|
|
1086
|
-
GIT_STRATEGY: none
|
|
1087
|
-
script:
|
|
1088
|
-
- echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
|
|
1089
|
-
- export CLOUDSDK_CORE_DISABLE_PROMPTS="1"
|
|
1090
|
-
- echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
|
|
1091
|
-
- set +e
|
|
1092
|
-
- gcloud auth activate-service-account --key-file=<(echo "$CL_review_api_GCLOUD_DEPLOY_credentialsKey")
|
|
1093
|
-
- 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
|
|
1094
|
-
- gcloud scheduler jobs 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)}')-send-reminders-scheduler --project=google-project-id --location=europe-west6
|
|
1095
|
-
- gcloud run jobs executions list --project=google-project-id --region=europe-west6 --job $(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api" | awk '{print tolower($0)}')-migration --format="value(name)" | xargs -I {} gcloud run jobs executions delete {} --quiet --project=google-project-id --region=europe-west6
|
|
1096
|
-
- gcloud run jobs 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)}')-migration --project=google-project-id --region=europe-west6
|
|
1097
|
-
- gcloud run jobs executions list --project=google-project-id --region=europe-west6 --job $(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api" | awk '{print tolower($0)}')-send-reminders --format="value(name)" | xargs -I {} gcloud run jobs executions delete {} --quiet --project=google-project-id --region=europe-west6
|
|
1098
|
-
- gcloud run jobs 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)}')-send-reminders --project=google-project-id --region=europe-west6
|
|
1099
|
-
- echo "deleting database 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..."
|
|
1100
|
-
- echo "๐ this can take multiple attemps (3-5min), because google cloud run may still have a connection to the database after the cloud run service is shut down"
|
|
1101
|
-
- "\\n until gcloud sql databases delete pan-test-app-review-$([ -n \\"$CI_MERGE_REQUEST_IID\\" ] && echo \\"mr$CI_MERGE_REQUEST_IID\\" || { [ -n \\"$CI_COMMIT_REF_SLUG\\" ] && echo \\"$CI_COMMIT_REF_SLUG\\" || echo \\"unknown\\"; })-api --instance=instancename --project projectId\\n do\\n echo \\"Trying again.\\"\\n sleep 10\\n done\\n "
|
|
1102
|
-
- 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"; }) --quiet --delete-tags
|
|
1103
|
-
- 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
|
|
1104
|
-
- set +e
|
|
1105
|
-
- gcloud artifacts docker images delete europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/review/api --quiet --delete-tags
|
|
1106
|
-
- set -e
|
|
1107
|
-
- echo 'Disabling component in Dependency Track'
|
|
1108
|
-
- /dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" disable "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)}')" || true
|
|
1109
|
-
- set -e
|
|
1110
|
-
- 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
|
|
1111
|
-
environment:
|
|
1112
|
-
name: review/$CI_COMMIT_REF_NAME/api
|
|
1113
|
-
url: $CL_GITLAB_ENVIRONMENT_URL
|
|
1114
|
-
action: stop
|
|
1115
|
-
artifacts:
|
|
1116
|
-
reports:
|
|
1117
|
-
dotenv: gitlab_environment.env
|
|
1118
|
-
rules:
|
|
1119
|
-
- if: $CI_COMMIT_BRANCH =~ /^[0-9]+\\.([0-9]+|x)\\.x$/
|
|
1120
|
-
when: on_success
|
|
1121
|
-
- when: manual
|
|
1122
|
-
if: $CI_MERGE_REQUEST_ID
|
|
1123
|
-
needs: []
|
|
1124
|
-
retry: *a1
|
|
1125
|
-
interruptible: true
|
|
1126
|
-
allow_failure: true
|
|
1127
|
-
'๐น api ๐จ docker | stage ':
|
|
1128
|
-
stage: build
|
|
1129
|
-
image: path/to/docker/docker-build:the-version
|
|
1130
|
-
services:
|
|
1131
|
-
- name: docker:24.0.6-dind
|
|
1132
|
-
command:
|
|
1133
|
-
- --tls=false
|
|
1134
|
-
variables:
|
|
1135
|
-
DOCKER_HOST: tcp://0.0.0.0:2375
|
|
1136
|
-
DOCKER_TLS_CERTDIR: ''
|
|
1137
|
-
DOCKER_DRIVER: overlay2
|
|
1138
|
-
DOCKER_BUILDKIT: '1'
|
|
1139
|
-
KUBERNETES_CPU_REQUEST: '0.45'
|
|
1140
|
-
KUBERNETES_MEMORY_REQUEST: 1Gi
|
|
1141
|
-
KUBERNETES_MEMORY_LIMIT: 2Gi
|
|
1142
|
-
script:
|
|
1143
|
-
- echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
|
|
1144
|
-
- export APP_DIR="api"
|
|
1145
|
-
- export DOCKER_BUILD_CONTEXT="."
|
|
1146
|
-
- export DOCKER_REGISTRY="europe-west6-docker.pkg.dev"
|
|
1147
|
-
- export DOCKER_IMAGE="europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/stage/api"
|
|
1148
|
-
- export DOCKER_CACHE_IMAGE="europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/api"
|
|
1149
|
-
- export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"
|
|
1150
|
-
- |-
|
|
1151
|
-
export DOCKER_COPY_AND_INSTALL_APP="COPY --chown=node:node $APP_DIR .
|
|
1152
|
-
RUN yarn plugin import workspace-tools
|
|
1153
|
-
RUN yarn workspaces focus --production && yarn rebuild"
|
|
1154
|
-
- |-
|
|
1155
|
-
export DOCKER_COPY_WORKSPACE_FILES="COPY --chown=node:node api/package.json /app/api/package.json
|
|
1156
|
-
COPY --chown=node:node api/yarn.lock /app/api/yarn.lock
|
|
1157
|
-
COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
|
|
1158
|
-
COPY --chown=node:node .yarn /app/.yarn"
|
|
1159
|
-
- echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
|
|
1160
|
-
- ensureNodeDockerfile
|
|
1161
|
-
- echo -e "\\e[0Ksection_start:$(date +%s):docker-login[collapsed=true]\\r\\e[0KDocker Login"
|
|
1162
|
-
- gcloud auth activate-service-account --key-file=<(echo "$CL_stage_api_GCLOUD_DEPLOY_credentialsKey")
|
|
1163
|
-
- gcloud auth configure-docker europe-west6-docker.pkg.dev
|
|
1164
|
-
- echo -e "\\e[0Ksection_end:$(date +%s):docker-login\\r\\e[0K"
|
|
1165
|
-
- echo -e "\\e[0Ksection_start:$(date +%s):docker-build[collapsed=true]\\r\\e[0KDocker build"
|
|
1166
|
-
- 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
|
|
1167
|
-
- echo -e "\\e[0Ksection_end:$(date +%s):docker-build\\r\\e[0K"
|
|
1168
|
-
- echo -e "\\e[0Ksection_start:$(date +%s):docker-push[collapsed=true]\\r\\e[0KDocker push and tag"
|
|
1169
|
-
- docker push $DOCKER_IMAGE:$DOCKER_IMAGE_TAG
|
|
1170
|
-
- docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG $DOCKER_CACHE_IMAGE
|
|
1171
|
-
- docker push $DOCKER_CACHE_IMAGE
|
|
1172
|
-
- echo -e "\\e[0Ksection_end:$(date +%s):docker-push\\r\\e[0K"
|
|
1173
|
-
cache:
|
|
1174
|
-
- key: api-yarn
|
|
1175
|
-
policy: pull
|
|
1176
|
-
paths:
|
|
1177
|
-
- api/.yarn
|
|
1178
|
-
rules:
|
|
1179
|
-
- if: $CI_COMMIT_TAG
|
|
1180
|
-
needs:
|
|
1181
|
-
- job: '๐ธ myWorkspace ๐จ app | stage '
|
|
1182
|
-
artifacts: true
|
|
1183
|
-
retry: *a1
|
|
1184
|
-
interruptible: true
|
|
1185
|
-
'๐น api ๐งพ sbom | stage ':
|
|
1186
|
-
stage: build
|
|
1187
|
-
image: aquasec/trivy:0.38.3
|
|
1188
|
-
variables: {}
|
|
1189
|
-
script:
|
|
1190
|
-
- echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
|
|
1191
|
-
- echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
|
|
1192
|
-
- trivy fs --quiet --format cyclonedx --output "__sbom.json" api
|
|
1193
|
-
artifacts:
|
|
1194
|
-
paths:
|
|
1195
|
-
- __sbom.json
|
|
1196
|
-
rules:
|
|
1197
|
-
- if: $CI_COMMIT_TAG
|
|
1198
|
-
needs: []
|
|
1199
|
-
retry: *a1
|
|
1200
|
-
interruptible: true
|
|
1201
|
-
allow_failure: true
|
|
1202
|
-
'๐น api ๐ Deploy | stage ':
|
|
1203
|
-
stage: deploy stage
|
|
1204
|
-
image: path/to/docker/gcloud:the-version
|
|
1205
|
-
variables:
|
|
1206
|
-
KUBERNETES_CPU_REQUEST: '0.22'
|
|
1207
|
-
KUBERNETES_MEMORY_REQUEST: 200Mi
|
|
1208
|
-
KUBERNETES_MEMORY_LIMIT: 400Mi
|
|
1209
|
-
script:
|
|
1210
|
-
- echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
|
|
1211
|
-
- export ENV_SHORT="stage"
|
|
1212
|
-
- export APP_DIR="api"
|
|
1213
|
-
- export ENV_TYPE="stage"
|
|
1214
|
-
- export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
|
|
1215
|
-
- export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
|
|
1216
|
-
- 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")"
|
|
1217
|
-
- export HOST="$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
1218
|
-
- export ROOT_URL="https://$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
1219
|
-
- export HOST_INTERNAL="$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
1220
|
-
- export HOST_CANONICAL="$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
1221
|
-
- export ROOT_URL_INTERNAL="https://$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
1222
|
-
- export CLOUD_SQL_INSTANCE_CONNECTION_NAME="projectId:region:instancename"
|
|
1223
|
-
- export DB_NAME="pan-test-app-stage-api"
|
|
1224
|
-
- export DB_USER="my-user"
|
|
1225
|
-
- export DB_PASSWORD="$CL_stage_api_DB_PASSWORD"
|
|
1226
|
-
- export DATABASE_URL="postgresql://$DB_USER:$DB_PASSWORD@localhost/$DB_NAME?host=/cloudsql/$CLOUD_SQL_INSTANCE_CONNECTION_NAME"
|
|
1227
|
-
- export DATABASE_JDBC_URL="jdbc:postgresql:///$DB_NAME?cloudSqlInstance=$CLOUD_SQL_INSTANCE_CONNECTION_NAME&socketFactory=com.google.cloud.sql.postgres.SocketFactory&user=$DB_USER&password=$DB_PASSWORD"
|
|
1228
|
-
- export CLOUD_RUN_JOB_TRIGGER_URL_migration="https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/jobs/pan-test-app-stage-api-migration:run"
|
|
1229
|
-
- export CLOUD_RUN_JOB_TRIGGER_URL_send_reminders="https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/jobs/pan-test-app-stage-api-send-reminders:run"
|
|
1230
|
-
- export DEPLOY_CLOUD_RUN_PROJECT_ID="google-project-id"
|
|
1231
|
-
- export DEPLOY_CLOUD_RUN_REGION="europe-west6"
|
|
1232
|
-
- export GCLOUD_DEPLOY_credentialsKey="$CL_stage_api_GCLOUD_DEPLOY_credentialsKey"
|
|
1233
|
-
- export GCLOUD_RUN_canonicalHostSuffix="$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix"
|
|
1234
|
-
- export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOST\\",\\"ROOT_URL\\",\\"HOST_INTERNAL\\",\\"HOST_CANONICAL\\",\\"ROOT_URL_INTERNAL\\",\\"CLOUD_SQL_INSTANCE_CONNECTION_NAME\\",\\"DB_NAME\\",\\"DB_USER\\",\\"DB_PASSWORD\\",\\"DATABASE_URL\\",\\"DATABASE_JDBC_URL\\",\\"CLOUD_RUN_JOB_TRIGGER_URL_migration\\",\\"CLOUD_RUN_JOB_TRIGGER_URL_send_reminders\\",\\"DEPLOY_CLOUD_RUN_PROJECT_ID\\",\\"DEPLOY_CLOUD_RUN_REGION\\",\\"GCLOUD_DEPLOY_credentialsKey\\",\\"GCLOUD_RUN_canonicalHostSuffix\\"]"
|
|
1235
|
-
- export DOCKER_REGISTRY="europe-west6-docker.pkg.dev"
|
|
1236
|
-
- export DOCKER_IMAGE="europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/stage/api"
|
|
1237
|
-
- export DOCKER_CACHE_IMAGE="europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/api"
|
|
1238
|
-
- export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"
|
|
1239
|
-
- export CLOUDSDK_CORE_DISABLE_PROMPTS="1"
|
|
1240
|
-
- echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
|
|
1241
|
-
- echo -e "\\e[0Ksection_start:$(date +%s):prepare[collapsed=true]\\r\\e[0KPrepare..."
|
|
1242
|
-
- gcloud auth activate-service-account --key-file=<(echo "$CL_stage_api_GCLOUD_DEPLOY_credentialsKey")
|
|
1243
|
-
- export GCLOUD_PROJECT_NUMBER=$(gcloud projects describe google-project-id --format="value(projectNumber)")
|
|
1244
|
-
- 'echo "GCLOUD_PROJECT_NUMBER: $GCLOUD_PROJECT_NUMBER"'
|
|
1245
|
-
- echo -e "\\e[0Ksection_end:$(date +%s):prepare\\r\\e[0K"
|
|
1246
|
-
- echo -e "\\e[0Ksection_start:$(date +%s):writeenvvars[collapsed=true]\\r\\e[0KWrite env vars to file"
|
|
1247
|
-
- |
|
|
1248
|
-
cat > ____envvars.yaml <<EOF
|
|
1249
|
-
ENV_SHORT: |-
|
|
1250
|
-
stage
|
|
1251
|
-
APP_DIR: |-
|
|
1252
|
-
api
|
|
1253
|
-
ENV_TYPE: |-
|
|
1254
|
-
stage
|
|
1255
|
-
BUILD_INFO_BUILD_ID: |-
|
|
1256
|
-
$(printf %s "$(git describe --tags 2>/dev/null || git rev-parse HEAD)" | sed 's/^/ /')
|
|
1257
|
-
BUILD_INFO_BUILD_TIME: |-
|
|
1258
|
-
$(printf %s "$CI_JOB_STARTED_AT" | sed 's/^/ /')
|
|
1259
|
-
BUILD_INFO_CURRENT_VERSION: |-
|
|
1260
|
-
$(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 's/^/ /')
|
|
1261
|
-
HOST: |-
|
|
1262
|
-
$(printf %s "$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
|
|
1263
|
-
ROOT_URL: |-
|
|
1264
|
-
$(printf %s "https://$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
|
|
1265
|
-
HOST_INTERNAL: |-
|
|
1266
|
-
$(printf %s "$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
|
|
1267
|
-
HOST_CANONICAL: |-
|
|
1268
|
-
$(printf %s "$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
|
|
1269
|
-
ROOT_URL_INTERNAL: |-
|
|
1270
|
-
$(printf %s "https://$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
|
|
1271
|
-
CLOUD_SQL_INSTANCE_CONNECTION_NAME: |-
|
|
1272
|
-
projectId:region:instancename
|
|
1273
|
-
DB_NAME: |-
|
|
1274
|
-
pan-test-app-stage-api
|
|
1275
|
-
DB_USER: |-
|
|
1276
|
-
my-user
|
|
1277
|
-
DB_PASSWORD: |-
|
|
1278
|
-
$(printf %s "$CL_stage_api_DB_PASSWORD" | sed 's/^/ /')
|
|
1279
|
-
DATABASE_URL: |-
|
|
1280
|
-
postgresql://$DB_USER:$DB_PASSWORD@localhost/$DB_NAME?host=/cloudsql/$CLOUD_SQL_INSTANCE_CONNECTION_NAME
|
|
1281
|
-
DATABASE_JDBC_URL: |-
|
|
1282
|
-
jdbc:postgresql:///$DB_NAME?cloudSqlInstance=$CLOUD_SQL_INSTANCE_CONNECTION_NAME&socketFactory=com.google.cloud.sql.postgres.SocketFactory&user=$DB_USER&password=$DB_PASSWORD
|
|
1283
|
-
CLOUD_RUN_JOB_TRIGGER_URL_migration: |-
|
|
1284
|
-
https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/jobs/pan-test-app-stage-api-migration:run
|
|
1285
|
-
CLOUD_RUN_JOB_TRIGGER_URL_send_reminders: |-
|
|
1286
|
-
https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/jobs/pan-test-app-stage-api-send-reminders:run
|
|
1287
|
-
DEPLOY_CLOUD_RUN_PROJECT_ID: |-
|
|
1288
|
-
google-project-id
|
|
1289
|
-
DEPLOY_CLOUD_RUN_REGION: |-
|
|
1290
|
-
europe-west6
|
|
1291
|
-
GCLOUD_RUN_canonicalHostSuffix: |-
|
|
1292
|
-
$(printf %s "$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | sed 's/^/ /')
|
|
1293
|
-
_ALL_ENV_VAR_KEYS: |-
|
|
1294
|
-
["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","HOST_INTERNAL","HOST_CANONICAL","ROOT_URL_INTERNAL","CLOUD_SQL_INSTANCE_CONNECTION_NAME","DB_NAME","DB_USER","DB_PASSWORD","DATABASE_URL","DATABASE_JDBC_URL","CLOUD_RUN_JOB_TRIGGER_URL_migration","CLOUD_RUN_JOB_TRIGGER_URL_send_reminders","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]
|
|
1295
|
-
|
|
1296
|
-
EOF
|
|
1297
|
-
- echo -e "\\e[0Ksection_end:$(date +%s):writeenvvars\\r\\e[0K"
|
|
1298
|
-
- echo -e "\\e[0Ksection_start:$(date +%s):deploy[collapsed=true]\\r\\e[0KDeploy to cloud run"
|
|
1299
|
-
- set +e
|
|
1300
|
-
- echo "ensuring Database..."
|
|
1301
|
-
- gcloud sql databases create pan-test-app-stage-api --instance=instancename --project projectId
|
|
1302
|
-
- set -e
|
|
1303
|
-
- set +e
|
|
1304
|
-
- gcloud scheduler jobs create http pan-test-app-stage-api-send-reminders-scheduler --project=google-project-id --location=europe-west6 --schedule="0 * * * *" --max-retry-attempts=0 --uri="https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/jobs/pan-test-app-stage-api-send-reminders:run" --http-method=POST --oauth-service-account-email=$GCLOUD_PROJECT_NUMBER-compute@developer.gserviceaccount.com
|
|
1305
|
-
- set -e
|
|
1306
|
-
- gcloud scheduler jobs update http pan-test-app-stage-api-send-reminders-scheduler --project=google-project-id --location=europe-west6 --schedule="0 * * * *" --max-retry-attempts=0 --uri="https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/jobs/pan-test-app-stage-api-send-reminders:run" --http-method=POST --oauth-service-account-email=$GCLOUD_PROJECT_NUMBER-compute@developer.gserviceaccount.com
|
|
1307
|
-
- set +e
|
|
1308
|
-
- gcloud run jobs create pan-test-app-stage-api-migration --command="yarn,migrate" --image=europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/stage/api:$DOCKER_IMAGE_TAG --project=google-project-id --region=europe-west6 --set-cloudsql-instances=projectId:region:instancename --labels=customer-name=pan,component-name=api,app-name=test-app,env-type=stage,env-name=stage,build-type=node,cloud-run-job-name=pan-test-app-stage-api-migration --memory=512Mi --task-timeout=10m --parallelism=1 --env-vars-file=____envvars.yaml --max-retries=0
|
|
1309
|
-
- set -e
|
|
1310
|
-
- 'gcloud run jobs update pan-test-app-stage-api-migration --command="yarn,migrate" --image=europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/stage/api:$DOCKER_IMAGE_TAG --project=google-project-id --region=europe-west6 --set-cloudsql-instances=projectId:region:instancename --labels=customer-name=pan,component-name=api,app-name=test-app,env-type=stage,env-name=stage,build-type=node,cloud-run-job-name=pan-test-app-stage-api-migration --memory=512Mi --task-timeout=10m --parallelism=1 --env-vars-file=____envvars.yaml --max-retries=0 '
|
|
1311
|
-
- set +e
|
|
1312
|
-
- gcloud run jobs create pan-test-app-stage-api-send-reminders --command="yarn,job:send-reminders" --image=europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/stage/api:$DOCKER_IMAGE_TAG --project=google-project-id --region=europe-west6 --set-cloudsql-instances=projectId:region:instancename --labels=customer-name=pan,component-name=api,app-name=test-app,env-type=stage,env-name=stage,build-type=node,cloud-run-job-name=pan-test-app-stage-api-send-reminders --memory=512Mi --task-timeout=15m --parallelism=1 --env-vars-file=____envvars.yaml --max-retries=0
|
|
1313
|
-
- set -e
|
|
1314
|
-
- 'gcloud run jobs update pan-test-app-stage-api-send-reminders --command="yarn,job:send-reminders" --image=europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/stage/api:$DOCKER_IMAGE_TAG --project=google-project-id --region=europe-west6 --set-cloudsql-instances=projectId:region:instancename --labels=customer-name=pan,component-name=api,app-name=test-app,env-type=stage,env-name=stage,build-type=node,cloud-run-job-name=pan-test-app-stage-api-send-reminders --memory=512Mi --task-timeout=15m --parallelism=1 --env-vars-file=____envvars.yaml --max-retries=0 '
|
|
1315
|
-
- gcloud run deploy pan-test-app-stage-api --command="yarn,start" --image=europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/stage/api:$DOCKER_IMAGE_TAG --project=google-project-id --region=europe-west6 --set-cloudsql-instances=projectId:region:instancename --labels=customer-name=pan,component-name=api,app-name=test-app,env-type=stage,env-name=stage,build-type=node,cloud-run-service-name=pan-test-app-stage-api --env-vars-file=____envvars.yaml --min-instances=0 --max-instances=5 --cpu-throttling --allow-unauthenticated --ingress=all --cpu-boost
|
|
1316
|
-
- gcloud run jobs execute pan-test-app-stage-api-migration --project=google-project-id --region=europe-west6
|
|
1317
|
-
- echo -e "\\e[0Ksection_end:$(date +%s):deploy\\r\\e[0K"
|
|
1318
|
-
- echo -e "\\e[0Ksection_start:$(date +%s):cleanup[collapsed=true]\\r\\e[0KCleanup"
|
|
1319
|
-
- 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
|
|
1320
|
-
- 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
|
|
1321
|
-
- 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
|
|
1322
|
-
- echo -e "\\e[0Ksection_end:$(date +%s):cleanup\\r\\e[0K"
|
|
1323
|
-
- echo 'Uploading SBOM to Dependency Track'
|
|
1324
|
-
- /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
|
|
1325
|
-
- 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
|
|
1326
|
-
environment:
|
|
1327
|
-
name: stage/api
|
|
1328
|
-
url: $CL_GITLAB_ENVIRONMENT_URL
|
|
1329
|
-
on_stop: '๐น api ๐ Stop โ ๏ธ | stage '
|
|
1330
|
-
artifacts:
|
|
1331
|
-
reports:
|
|
1332
|
-
dotenv: gitlab_environment.env
|
|
1333
|
-
rules:
|
|
1334
|
-
- when: on_success
|
|
1335
|
-
if: $CI_COMMIT_TAG
|
|
1336
|
-
needs:
|
|
1337
|
-
- job: '๐น api ๐จ docker | stage '
|
|
1338
|
-
artifacts: false
|
|
1339
|
-
- job: '๐น api ๐งพ sbom | stage '
|
|
1340
|
-
artifacts: true
|
|
1341
|
-
retry: *a1
|
|
1342
|
-
interruptible: true
|
|
1343
|
-
allow_failure: false
|
|
1344
|
-
'๐น api ๐ Stop โ ๏ธ | stage ':
|
|
1345
|
-
stage: stop stage
|
|
1346
|
-
image: path/to/docker/gcloud:the-version
|
|
1347
|
-
variables:
|
|
1348
|
-
KUBERNETES_CPU_REQUEST: '0.22'
|
|
1349
|
-
KUBERNETES_MEMORY_REQUEST: 200Mi
|
|
1350
|
-
KUBERNETES_MEMORY_LIMIT: 400Mi
|
|
1351
|
-
GIT_STRATEGY: none
|
|
1352
|
-
script:
|
|
1353
|
-
- echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
|
|
1354
|
-
- export CLOUDSDK_CORE_DISABLE_PROMPTS="1"
|
|
1355
|
-
- echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
|
|
1356
|
-
- set +e
|
|
1357
|
-
- gcloud auth activate-service-account --key-file=<(echo "$CL_stage_api_GCLOUD_DEPLOY_credentialsKey")
|
|
1358
|
-
- gcloud run services delete pan-test-app-stage-api --project=google-project-id --region=europe-west6
|
|
1359
|
-
- gcloud scheduler jobs delete pan-test-app-stage-api-send-reminders-scheduler --project=google-project-id --location=europe-west6
|
|
1360
|
-
- gcloud run jobs executions list --project=google-project-id --region=europe-west6 --job pan-test-app-stage-api-migration --format="value(name)" | xargs -I {} gcloud run jobs executions delete {} --quiet --project=google-project-id --region=europe-west6
|
|
1361
|
-
- gcloud run jobs delete pan-test-app-stage-api-migration --project=google-project-id --region=europe-west6
|
|
1362
|
-
- gcloud run jobs executions list --project=google-project-id --region=europe-west6 --job pan-test-app-stage-api-send-reminders --format="value(name)" | xargs -I {} gcloud run jobs executions delete {} --quiet --project=google-project-id --region=europe-west6
|
|
1363
|
-
- gcloud run jobs delete pan-test-app-stage-api-send-reminders --project=google-project-id --region=europe-west6
|
|
1364
|
-
- gcloud artifacts docker images delete europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/stage/api --quiet --delete-tags
|
|
1365
|
-
- 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
|
|
1366
|
-
- echo 'Disabling component in Dependency Track'
|
|
1367
|
-
- /dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" disable "pan-test-app/api" "https://$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" || true
|
|
1368
|
-
- set -e
|
|
1369
|
-
- 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
|
|
1370
|
-
environment:
|
|
1371
|
-
name: stage/api
|
|
1372
|
-
url: $CL_GITLAB_ENVIRONMENT_URL
|
|
1373
|
-
action: stop
|
|
1374
|
-
artifacts:
|
|
1375
|
-
reports:
|
|
1376
|
-
dotenv: gitlab_environment.env
|
|
1377
|
-
rules:
|
|
1378
|
-
- if: $CI_COMMIT_BRANCH =~ /^[0-9]+\\.([0-9]+|x)\\.x$/
|
|
1379
|
-
when: on_success
|
|
1380
|
-
- when: manual
|
|
1381
|
-
if: $CI_COMMIT_TAG
|
|
1382
|
-
needs: []
|
|
1383
|
-
retry: *a1
|
|
1384
|
-
interruptible: true
|
|
1385
|
-
allow_failure: true
|
|
1386
|
-
'๐น api ๐จ docker | prod ':
|
|
1387
|
-
stage: build
|
|
1388
|
-
image: path/to/docker/docker-build:the-version
|
|
1389
|
-
services:
|
|
1390
|
-
- name: docker:24.0.6-dind
|
|
1391
|
-
command:
|
|
1392
|
-
- --tls=false
|
|
1393
|
-
variables:
|
|
1394
|
-
DOCKER_HOST: tcp://0.0.0.0:2375
|
|
1395
|
-
DOCKER_TLS_CERTDIR: ''
|
|
1396
|
-
DOCKER_DRIVER: overlay2
|
|
1397
|
-
DOCKER_BUILDKIT: '1'
|
|
1398
|
-
KUBERNETES_CPU_REQUEST: '0.45'
|
|
1399
|
-
KUBERNETES_MEMORY_REQUEST: 1Gi
|
|
1400
|
-
KUBERNETES_MEMORY_LIMIT: 2Gi
|
|
1401
|
-
script:
|
|
1402
|
-
- echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
|
|
1403
|
-
- export APP_DIR="api"
|
|
1404
|
-
- export DOCKER_BUILD_CONTEXT="."
|
|
1405
|
-
- export DOCKER_REGISTRY="europe-west6-docker.pkg.dev"
|
|
1406
|
-
- export DOCKER_IMAGE="europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/prod/api"
|
|
1407
|
-
- export DOCKER_CACHE_IMAGE="europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/api"
|
|
1408
|
-
- export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"
|
|
1409
|
-
- |-
|
|
1410
|
-
export DOCKER_COPY_AND_INSTALL_APP="COPY --chown=node:node $APP_DIR .
|
|
1411
|
-
RUN yarn plugin import workspace-tools
|
|
1412
|
-
RUN yarn workspaces focus --production && yarn rebuild"
|
|
1413
|
-
- |-
|
|
1414
|
-
export DOCKER_COPY_WORKSPACE_FILES="COPY --chown=node:node api/package.json /app/api/package.json
|
|
1415
|
-
COPY --chown=node:node api/yarn.lock /app/api/yarn.lock
|
|
1416
|
-
COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
|
|
1417
|
-
COPY --chown=node:node .yarn /app/.yarn"
|
|
1418
|
-
- echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
|
|
1419
|
-
- ensureNodeDockerfile
|
|
1420
|
-
- echo -e "\\e[0Ksection_start:$(date +%s):docker-login[collapsed=true]\\r\\e[0KDocker Login"
|
|
1421
|
-
- gcloud auth activate-service-account --key-file=<(echo "$CL_prod_api_GCLOUD_DEPLOY_credentialsKey")
|
|
1422
|
-
- gcloud auth configure-docker europe-west6-docker.pkg.dev
|
|
1423
|
-
- echo -e "\\e[0Ksection_end:$(date +%s):docker-login\\r\\e[0K"
|
|
1424
|
-
- echo -e "\\e[0Ksection_start:$(date +%s):docker-build[collapsed=true]\\r\\e[0KDocker build"
|
|
1425
|
-
- 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
|
|
1426
|
-
- echo -e "\\e[0Ksection_end:$(date +%s):docker-build\\r\\e[0K"
|
|
1427
|
-
- echo -e "\\e[0Ksection_start:$(date +%s):docker-push[collapsed=true]\\r\\e[0KDocker push and tag"
|
|
1428
|
-
- docker push $DOCKER_IMAGE:$DOCKER_IMAGE_TAG
|
|
1429
|
-
- docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG $DOCKER_CACHE_IMAGE
|
|
1430
|
-
- docker push $DOCKER_CACHE_IMAGE
|
|
1431
|
-
- echo -e "\\e[0Ksection_end:$(date +%s):docker-push\\r\\e[0K"
|
|
1432
|
-
cache:
|
|
1433
|
-
- key: api-yarn
|
|
1434
|
-
policy: pull
|
|
1435
|
-
paths:
|
|
1436
|
-
- api/.yarn
|
|
1437
|
-
rules:
|
|
1438
|
-
- if: $CI_COMMIT_TAG
|
|
1439
|
-
needs:
|
|
1440
|
-
- job: '๐ธ myWorkspace ๐จ app | prod '
|
|
1441
|
-
artifacts: true
|
|
1442
|
-
retry: *a1
|
|
1443
|
-
interruptible: true
|
|
1444
|
-
'๐น api ๐งพ sbom | prod ':
|
|
1445
|
-
stage: build
|
|
1446
|
-
image: aquasec/trivy:0.38.3
|
|
1447
|
-
variables: {}
|
|
1448
|
-
script:
|
|
1449
|
-
- echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
|
|
1450
|
-
- echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
|
|
1451
|
-
- trivy fs --quiet --format cyclonedx --output "__sbom.json" api
|
|
1452
|
-
artifacts:
|
|
1453
|
-
paths:
|
|
1454
|
-
- __sbom.json
|
|
1455
|
-
rules:
|
|
1456
|
-
- if: $CI_COMMIT_TAG
|
|
1457
|
-
needs: []
|
|
1458
|
-
retry: *a1
|
|
1459
|
-
interruptible: true
|
|
1460
|
-
allow_failure: true
|
|
1461
|
-
'๐น api ๐ Deploy | prod ':
|
|
1462
|
-
stage: deploy prod
|
|
1463
|
-
image: path/to/docker/gcloud:the-version
|
|
1464
|
-
variables:
|
|
1465
|
-
KUBERNETES_CPU_REQUEST: '0.22'
|
|
1466
|
-
KUBERNETES_MEMORY_REQUEST: 200Mi
|
|
1467
|
-
KUBERNETES_MEMORY_LIMIT: 400Mi
|
|
1468
|
-
script:
|
|
1469
|
-
- echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
|
|
1470
|
-
- export ENV_SHORT="prod"
|
|
1471
|
-
- export APP_DIR="api"
|
|
1472
|
-
- export ENV_TYPE="prod"
|
|
1473
|
-
- export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
|
|
1474
|
-
- export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
|
|
1475
|
-
- 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")"
|
|
1476
|
-
- export HOST="$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
1477
|
-
- export ROOT_URL="https://$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
1478
|
-
- export HOST_INTERNAL="$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
1479
|
-
- export HOST_CANONICAL="$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
1480
|
-
- export ROOT_URL_INTERNAL="https://$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
1481
|
-
- export CLOUD_SQL_INSTANCE_CONNECTION_NAME="projectId:region:instancename"
|
|
1482
|
-
- export DB_NAME="pan-test-app-prod-api"
|
|
1483
|
-
- export DB_USER="my-user"
|
|
1484
|
-
- export DB_PASSWORD="$CL_prod_api_DB_PASSWORD"
|
|
1485
|
-
- export DATABASE_URL="postgresql://$DB_USER:$DB_PASSWORD@localhost/$DB_NAME?host=/cloudsql/$CLOUD_SQL_INSTANCE_CONNECTION_NAME"
|
|
1486
|
-
- export DATABASE_JDBC_URL="jdbc:postgresql:///$DB_NAME?cloudSqlInstance=$CLOUD_SQL_INSTANCE_CONNECTION_NAME&socketFactory=com.google.cloud.sql.postgres.SocketFactory&user=$DB_USER&password=$DB_PASSWORD"
|
|
1487
|
-
- export CLOUD_RUN_JOB_TRIGGER_URL_migration="https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/jobs/pan-test-app-prod-api-migration:run"
|
|
1488
|
-
- export CLOUD_RUN_JOB_TRIGGER_URL_send_reminders="https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/jobs/pan-test-app-prod-api-send-reminders:run"
|
|
1489
|
-
- export DEPLOY_CLOUD_RUN_PROJECT_ID="google-project-id"
|
|
1490
|
-
- export DEPLOY_CLOUD_RUN_REGION="europe-west6"
|
|
1491
|
-
- export GCLOUD_DEPLOY_credentialsKey="$CL_prod_api_GCLOUD_DEPLOY_credentialsKey"
|
|
1492
|
-
- export GCLOUD_RUN_canonicalHostSuffix="$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix"
|
|
1493
|
-
- export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOST\\",\\"ROOT_URL\\",\\"HOST_INTERNAL\\",\\"HOST_CANONICAL\\",\\"ROOT_URL_INTERNAL\\",\\"CLOUD_SQL_INSTANCE_CONNECTION_NAME\\",\\"DB_NAME\\",\\"DB_USER\\",\\"DB_PASSWORD\\",\\"DATABASE_URL\\",\\"DATABASE_JDBC_URL\\",\\"CLOUD_RUN_JOB_TRIGGER_URL_migration\\",\\"CLOUD_RUN_JOB_TRIGGER_URL_send_reminders\\",\\"DEPLOY_CLOUD_RUN_PROJECT_ID\\",\\"DEPLOY_CLOUD_RUN_REGION\\",\\"GCLOUD_DEPLOY_credentialsKey\\",\\"GCLOUD_RUN_canonicalHostSuffix\\"]"
|
|
1494
|
-
- export DOCKER_REGISTRY="europe-west6-docker.pkg.dev"
|
|
1495
|
-
- export DOCKER_IMAGE="europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/prod/api"
|
|
1496
|
-
- export DOCKER_CACHE_IMAGE="europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/api"
|
|
1497
|
-
- export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"
|
|
1498
|
-
- export CLOUDSDK_CORE_DISABLE_PROMPTS="1"
|
|
1499
|
-
- echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
|
|
1500
|
-
- echo -e "\\e[0Ksection_start:$(date +%s):prepare[collapsed=true]\\r\\e[0KPrepare..."
|
|
1501
|
-
- gcloud auth activate-service-account --key-file=<(echo "$CL_prod_api_GCLOUD_DEPLOY_credentialsKey")
|
|
1502
|
-
- export GCLOUD_PROJECT_NUMBER=$(gcloud projects describe google-project-id --format="value(projectNumber)")
|
|
1503
|
-
- 'echo "GCLOUD_PROJECT_NUMBER: $GCLOUD_PROJECT_NUMBER"'
|
|
1504
|
-
- echo -e "\\e[0Ksection_end:$(date +%s):prepare\\r\\e[0K"
|
|
1505
|
-
- echo -e "\\e[0Ksection_start:$(date +%s):writeenvvars[collapsed=true]\\r\\e[0KWrite env vars to file"
|
|
1506
|
-
- |
|
|
1507
|
-
cat > ____envvars.yaml <<EOF
|
|
1508
|
-
ENV_SHORT: |-
|
|
1509
|
-
prod
|
|
1510
|
-
APP_DIR: |-
|
|
1511
|
-
api
|
|
1512
|
-
ENV_TYPE: |-
|
|
1513
|
-
prod
|
|
1514
|
-
BUILD_INFO_BUILD_ID: |-
|
|
1515
|
-
$(printf %s "$(git describe --tags 2>/dev/null || git rev-parse HEAD)" | sed 's/^/ /')
|
|
1516
|
-
BUILD_INFO_BUILD_TIME: |-
|
|
1517
|
-
$(printf %s "$CI_JOB_STARTED_AT" | sed 's/^/ /')
|
|
1518
|
-
BUILD_INFO_CURRENT_VERSION: |-
|
|
1519
|
-
$(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 's/^/ /')
|
|
1520
|
-
HOST: |-
|
|
1521
|
-
$(printf %s "$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
|
|
1522
|
-
ROOT_URL: |-
|
|
1523
|
-
$(printf %s "https://$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
|
|
1524
|
-
HOST_INTERNAL: |-
|
|
1525
|
-
$(printf %s "$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
|
|
1526
|
-
HOST_CANONICAL: |-
|
|
1527
|
-
$(printf %s "$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
|
|
1528
|
-
ROOT_URL_INTERNAL: |-
|
|
1529
|
-
$(printf %s "https://$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
|
|
1530
|
-
CLOUD_SQL_INSTANCE_CONNECTION_NAME: |-
|
|
1531
|
-
projectId:region:instancename
|
|
1532
|
-
DB_NAME: |-
|
|
1533
|
-
pan-test-app-prod-api
|
|
1534
|
-
DB_USER: |-
|
|
1535
|
-
my-user
|
|
1536
|
-
DB_PASSWORD: |-
|
|
1537
|
-
$(printf %s "$CL_prod_api_DB_PASSWORD" | sed 's/^/ /')
|
|
1538
|
-
DATABASE_URL: |-
|
|
1539
|
-
postgresql://$DB_USER:$DB_PASSWORD@localhost/$DB_NAME?host=/cloudsql/$CLOUD_SQL_INSTANCE_CONNECTION_NAME
|
|
1540
|
-
DATABASE_JDBC_URL: |-
|
|
1541
|
-
jdbc:postgresql:///$DB_NAME?cloudSqlInstance=$CLOUD_SQL_INSTANCE_CONNECTION_NAME&socketFactory=com.google.cloud.sql.postgres.SocketFactory&user=$DB_USER&password=$DB_PASSWORD
|
|
1542
|
-
CLOUD_RUN_JOB_TRIGGER_URL_migration: |-
|
|
1543
|
-
https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/jobs/pan-test-app-prod-api-migration:run
|
|
1544
|
-
CLOUD_RUN_JOB_TRIGGER_URL_send_reminders: |-
|
|
1545
|
-
https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/jobs/pan-test-app-prod-api-send-reminders:run
|
|
1546
|
-
DEPLOY_CLOUD_RUN_PROJECT_ID: |-
|
|
1547
|
-
google-project-id
|
|
1548
|
-
DEPLOY_CLOUD_RUN_REGION: |-
|
|
1549
|
-
europe-west6
|
|
1550
|
-
GCLOUD_RUN_canonicalHostSuffix: |-
|
|
1551
|
-
$(printf %s "$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | sed 's/^/ /')
|
|
1552
|
-
_ALL_ENV_VAR_KEYS: |-
|
|
1553
|
-
["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","HOST_INTERNAL","HOST_CANONICAL","ROOT_URL_INTERNAL","CLOUD_SQL_INSTANCE_CONNECTION_NAME","DB_NAME","DB_USER","DB_PASSWORD","DATABASE_URL","DATABASE_JDBC_URL","CLOUD_RUN_JOB_TRIGGER_URL_migration","CLOUD_RUN_JOB_TRIGGER_URL_send_reminders","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]
|
|
1554
|
-
|
|
1555
|
-
EOF
|
|
1556
|
-
- echo -e "\\e[0Ksection_end:$(date +%s):writeenvvars\\r\\e[0K"
|
|
1557
|
-
- echo -e "\\e[0Ksection_start:$(date +%s):deploy[collapsed=true]\\r\\e[0KDeploy to cloud run"
|
|
1558
|
-
- set +e
|
|
1559
|
-
- echo "ensuring Database..."
|
|
1560
|
-
- gcloud sql databases create pan-test-app-prod-api --instance=instancename --project projectId
|
|
1561
|
-
- set -e
|
|
1562
|
-
- set +e
|
|
1563
|
-
- gcloud scheduler jobs create http pan-test-app-prod-api-send-reminders-scheduler --project=google-project-id --location=europe-west6 --schedule="0 * * * *" --max-retry-attempts=0 --uri="https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/jobs/pan-test-app-prod-api-send-reminders:run" --http-method=POST --oauth-service-account-email=$GCLOUD_PROJECT_NUMBER-compute@developer.gserviceaccount.com
|
|
1564
|
-
- set -e
|
|
1565
|
-
- gcloud scheduler jobs update http pan-test-app-prod-api-send-reminders-scheduler --project=google-project-id --location=europe-west6 --schedule="0 * * * *" --max-retry-attempts=0 --uri="https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/jobs/pan-test-app-prod-api-send-reminders:run" --http-method=POST --oauth-service-account-email=$GCLOUD_PROJECT_NUMBER-compute@developer.gserviceaccount.com
|
|
1566
|
-
- set +e
|
|
1567
|
-
- gcloud run jobs create pan-test-app-prod-api-migration --command="yarn,migrate" --image=europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/prod/api:$DOCKER_IMAGE_TAG --project=google-project-id --region=europe-west6 --set-cloudsql-instances=projectId:region:instancename --labels=customer-name=pan,component-name=api,app-name=test-app,env-type=prod,env-name=prod,build-type=node,cloud-run-job-name=pan-test-app-prod-api-migration --memory=512Mi --task-timeout=10m --parallelism=1 --env-vars-file=____envvars.yaml --max-retries=0
|
|
1568
|
-
- set -e
|
|
1569
|
-
- 'gcloud run jobs update pan-test-app-prod-api-migration --command="yarn,migrate" --image=europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/prod/api:$DOCKER_IMAGE_TAG --project=google-project-id --region=europe-west6 --set-cloudsql-instances=projectId:region:instancename --labels=customer-name=pan,component-name=api,app-name=test-app,env-type=prod,env-name=prod,build-type=node,cloud-run-job-name=pan-test-app-prod-api-migration --memory=512Mi --task-timeout=10m --parallelism=1 --env-vars-file=____envvars.yaml --max-retries=0 '
|
|
1570
|
-
- set +e
|
|
1571
|
-
- gcloud run jobs create pan-test-app-prod-api-send-reminders --command="yarn,job:send-reminders" --image=europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/prod/api:$DOCKER_IMAGE_TAG --project=google-project-id --region=europe-west6 --set-cloudsql-instances=projectId:region:instancename --labels=customer-name=pan,component-name=api,app-name=test-app,env-type=prod,env-name=prod,build-type=node,cloud-run-job-name=pan-test-app-prod-api-send-reminders --memory=512Mi --task-timeout=15m --parallelism=1 --env-vars-file=____envvars.yaml --max-retries=0
|
|
1572
|
-
- set -e
|
|
1573
|
-
- 'gcloud run jobs update pan-test-app-prod-api-send-reminders --command="yarn,job:send-reminders" --image=europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/prod/api:$DOCKER_IMAGE_TAG --project=google-project-id --region=europe-west6 --set-cloudsql-instances=projectId:region:instancename --labels=customer-name=pan,component-name=api,app-name=test-app,env-type=prod,env-name=prod,build-type=node,cloud-run-job-name=pan-test-app-prod-api-send-reminders --memory=512Mi --task-timeout=15m --parallelism=1 --env-vars-file=____envvars.yaml --max-retries=0 '
|
|
1574
|
-
- gcloud run deploy pan-test-app-prod-api --command="yarn,start" --image=europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/prod/api:$DOCKER_IMAGE_TAG --project=google-project-id --region=europe-west6 --set-cloudsql-instances=projectId:region:instancename --labels=customer-name=pan,component-name=api,app-name=test-app,env-type=prod,env-name=prod,build-type=node,cloud-run-service-name=pan-test-app-prod-api --env-vars-file=____envvars.yaml --min-instances=0 --max-instances=5 --cpu-throttling --allow-unauthenticated --ingress=all --cpu-boost
|
|
1575
|
-
- gcloud run jobs execute pan-test-app-prod-api-migration --project=google-project-id --region=europe-west6
|
|
1576
|
-
- echo -e "\\e[0Ksection_end:$(date +%s):deploy\\r\\e[0K"
|
|
1577
|
-
- echo -e "\\e[0Ksection_start:$(date +%s):cleanup[collapsed=true]\\r\\e[0KCleanup"
|
|
1578
|
-
- 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
|
|
1579
|
-
- 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
|
|
1580
|
-
- 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
|
|
1581
|
-
- echo -e "\\e[0Ksection_end:$(date +%s):cleanup\\r\\e[0K"
|
|
1582
|
-
- echo 'Uploading SBOM to Dependency Track'
|
|
1583
|
-
- /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
|
|
1584
|
-
- 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
|
|
1585
|
-
environment:
|
|
1586
|
-
name: prod/api
|
|
1587
|
-
url: $CL_GITLAB_ENVIRONMENT_URL
|
|
1588
|
-
on_stop: '๐น api ๐ Stop โ ๏ธ | prod '
|
|
1589
|
-
artifacts:
|
|
1590
|
-
reports:
|
|
1591
|
-
dotenv: gitlab_environment.env
|
|
1592
|
-
rules:
|
|
1593
|
-
- when: manual
|
|
1594
|
-
if: $CI_COMMIT_TAG
|
|
1595
|
-
needs:
|
|
1596
|
-
- job: '๐น api ๐จ docker | prod '
|
|
1597
|
-
artifacts: false
|
|
1598
|
-
- job: '๐น api ๐งพ sbom | prod '
|
|
1599
|
-
artifacts: true
|
|
1600
|
-
retry: *a1
|
|
1601
|
-
interruptible: true
|
|
1602
|
-
allow_failure: true
|
|
1603
|
-
'๐น api ๐ Stop โ ๏ธ | prod ':
|
|
1604
|
-
stage: stop prod
|
|
1605
|
-
image: path/to/docker/gcloud:the-version
|
|
1606
|
-
variables:
|
|
1607
|
-
KUBERNETES_CPU_REQUEST: '0.22'
|
|
1608
|
-
KUBERNETES_MEMORY_REQUEST: 200Mi
|
|
1609
|
-
KUBERNETES_MEMORY_LIMIT: 400Mi
|
|
1610
|
-
GIT_STRATEGY: none
|
|
1611
|
-
script:
|
|
1612
|
-
- echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
|
|
1613
|
-
- export CLOUDSDK_CORE_DISABLE_PROMPTS="1"
|
|
177
|
+
- export DB_NAME="pan-test-app-dev-api"
|
|
178
|
+
- export DB_USER="my-user"
|
|
179
|
+
- export DB_PASSWORD="$CL_dev_api_DB_PASSWORD"
|
|
180
|
+
- export DATABASE_URL="postgresql://$DB_USER:$DB_PASSWORD@localhost/$DB_NAME?host=/cloudsql/$CLOUD_SQL_INSTANCE_CONNECTION_NAME"
|
|
181
|
+
- export DATABASE_JDBC_URL="jdbc:postgresql:///$DB_NAME?cloudSqlInstance=$CLOUD_SQL_INSTANCE_CONNECTION_NAME&socketFactory=com.google.cloud.sql.postgres.SocketFactory&user=$DB_USER&password=$DB_PASSWORD"
|
|
182
|
+
- export CLOUD_RUN_JOB_TRIGGER_URL_migration="https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/jobs/pan-test-app-dev-api-migration:run"
|
|
183
|
+
- export CLOUD_RUN_JOB_TRIGGER_URL_send_reminders="https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/jobs/pan-test-app-dev-api-send-reminders:run"
|
|
184
|
+
- export DEPLOY_CLOUD_RUN_PROJECT_ID="google-project-id"
|
|
185
|
+
- export DEPLOY_CLOUD_RUN_REGION="europe-west6"
|
|
186
|
+
- export GCLOUD_DEPLOY_credentialsKey="$CL_dev_api_GCLOUD_DEPLOY_credentialsKey"
|
|
187
|
+
- export GCLOUD_RUN_canonicalHostSuffix="$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix"
|
|
188
|
+
- export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOST\\",\\"ROOT_URL\\",\\"HOST_INTERNAL\\",\\"HOST_CANONICAL\\",\\"ROOT_URL_INTERNAL\\",\\"CLOUD_SQL_INSTANCE_CONNECTION_NAME\\",\\"DB_NAME\\",\\"DB_USER\\",\\"DB_PASSWORD\\",\\"DATABASE_URL\\",\\"DATABASE_JDBC_URL\\",\\"CLOUD_RUN_JOB_TRIGGER_URL_migration\\",\\"CLOUD_RUN_JOB_TRIGGER_URL_send_reminders\\",\\"DEPLOY_CLOUD_RUN_PROJECT_ID\\",\\"DEPLOY_CLOUD_RUN_REGION\\",\\"GCLOUD_DEPLOY_credentialsKey\\",\\"GCLOUD_RUN_canonicalHostSuffix\\"]"
|
|
1614
189
|
- echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
|
|
1615
|
-
-
|
|
1616
|
-
-
|
|
1617
|
-
|
|
1618
|
-
|
|
1619
|
-
|
|
1620
|
-
|
|
1621
|
-
|
|
1622
|
-
|
|
1623
|
-
|
|
1624
|
-
|
|
1625
|
-
|
|
1626
|
-
|
|
1627
|
-
|
|
1628
|
-
|
|
1629
|
-
|
|
1630
|
-
|
|
1631
|
-
|
|
1632
|
-
|
|
190
|
+
- echo -e "\\e[0Ksection_start:$(date +%s):write-dotenv-api[collapsed=true]\\r\\e[0Kwrite dot env"
|
|
191
|
+
- |-
|
|
192
|
+
cat <<EOF > api/.env
|
|
193
|
+
ENV_SHORT=dev
|
|
194
|
+
APP_DIR=api
|
|
195
|
+
ENV_TYPE=dev
|
|
196
|
+
HOST=$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')
|
|
197
|
+
ROOT_URL=https://$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')
|
|
198
|
+
HOST_INTERNAL=$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')
|
|
199
|
+
HOST_CANONICAL=$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')
|
|
200
|
+
ROOT_URL_INTERNAL=https://$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')
|
|
201
|
+
CLOUD_SQL_INSTANCE_CONNECTION_NAME=projectId:region:instancename
|
|
202
|
+
DB_NAME=pan-test-app-dev-api
|
|
203
|
+
DB_USER=my-user
|
|
204
|
+
DB_PASSWORD=$CL_dev_api_DB_PASSWORD
|
|
205
|
+
DATABASE_URL=postgresql://$DB_USER:$DB_PASSWORD@localhost/$DB_NAME?host=/cloudsql/$CLOUD_SQL_INSTANCE_CONNECTION_NAME
|
|
206
|
+
DATABASE_JDBC_URL=jdbc:postgresql:///$DB_NAME?cloudSqlInstance=$CLOUD_SQL_INSTANCE_CONNECTION_NAME&socketFactory=com.google.cloud.sql.postgres.SocketFactory&user=$DB_USER&password=$DB_PASSWORD
|
|
207
|
+
CLOUD_RUN_JOB_TRIGGER_URL_migration=https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/jobs/pan-test-app-dev-api-migration:run
|
|
208
|
+
CLOUD_RUN_JOB_TRIGGER_URL_send_reminders=https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/jobs/pan-test-app-dev-api-send-reminders:run
|
|
209
|
+
DEPLOY_CLOUD_RUN_PROJECT_ID=google-project-id
|
|
210
|
+
DEPLOY_CLOUD_RUN_REGION=europe-west6
|
|
211
|
+
GCLOUD_DEPLOY_credentialsKey=$CL_dev_api_GCLOUD_DEPLOY_credentialsKey
|
|
212
|
+
GCLOUD_RUN_canonicalHostSuffix=$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix
|
|
213
|
+
_ALL_ENV_VAR_KEYS=["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","HOST_INTERNAL","HOST_CANONICAL","ROOT_URL_INTERNAL","CLOUD_SQL_INSTANCE_CONNECTION_NAME","DB_NAME","DB_USER","DB_PASSWORD","DATABASE_URL","DATABASE_JDBC_URL","CLOUD_RUN_JOB_TRIGGER_URL_migration","CLOUD_RUN_JOB_TRIGGER_URL_send_reminders","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]
|
|
214
|
+
EOF
|
|
215
|
+
- echo -e "\\e[0Ksection_end:$(date +%s):write-dotenv-api\\r\\e[0K"
|
|
216
|
+
- echo '{"id":"$(git describe --tags 2>/dev/null || git rev-parse HEAD)","time":"$CI_JOB_STARTED_AT"}' > api/__build_info.json
|
|
217
|
+
- echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"
|
|
218
|
+
- if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
|
|
219
|
+
- if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
|
|
220
|
+
- echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"
|
|
221
|
+
- cd api
|
|
222
|
+
- echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"
|
|
223
|
+
- if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
|
|
224
|
+
- if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
|
|
225
|
+
- echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"
|
|
226
|
+
- echo -e "\\e[0Ksection_start:$(date +%s):yarninstall[collapsed=true]\\r\\e[0KYarn install"
|
|
227
|
+
- yarn install --immutable
|
|
228
|
+
- echo -e "\\e[0Ksection_end:$(date +%s):yarninstall\\r\\e[0K"
|
|
229
|
+
- yarn build
|
|
230
|
+
cache:
|
|
231
|
+
- key: api-yarn
|
|
232
|
+
policy: pull-push
|
|
233
|
+
paths:
|
|
234
|
+
- api/.yarn
|
|
235
|
+
- key: api-node-modules
|
|
236
|
+
policy: pull-push
|
|
237
|
+
paths:
|
|
238
|
+
- api/node_modules
|
|
239
|
+
- key: api-next-cache
|
|
240
|
+
policy: pull-push
|
|
241
|
+
paths:
|
|
242
|
+
- api/.next/cache
|
|
1633
243
|
artifacts:
|
|
1634
|
-
|
|
1635
|
-
|
|
244
|
+
paths:
|
|
245
|
+
- api/__build_info.json
|
|
246
|
+
- api/.next
|
|
247
|
+
- api/dist
|
|
248
|
+
exclude:
|
|
249
|
+
- api/.env
|
|
250
|
+
expire_in: 1 day
|
|
251
|
+
when: always
|
|
252
|
+
reports: {}
|
|
1636
253
|
rules:
|
|
1637
|
-
-
|
|
1638
|
-
|
|
1639
|
-
-
|
|
1640
|
-
if: $CI_COMMIT_TAG
|
|
254
|
+
- when: never
|
|
255
|
+
if: $CI_COMMIT_MESSAGE =~ /^chore\\(release\\).*/
|
|
256
|
+
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
|
|
1641
257
|
needs: []
|
|
1642
258
|
retry: *a1
|
|
1643
259
|
interruptible: true
|
|
1644
|
-
|
|
1645
|
-
'๐น www ๐จ docker | dev ':
|
|
260
|
+
'api ๐จ docker | dev ':
|
|
1646
261
|
stage: build
|
|
1647
262
|
image: path/to/docker/docker-build:the-version
|
|
1648
263
|
services:
|
|
@@ -1659,25 +274,25 @@ variables:
|
|
|
1659
274
|
KUBERNETES_MEMORY_LIMIT: 2Gi
|
|
1660
275
|
script:
|
|
1661
276
|
- echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
|
|
1662
|
-
- export APP_DIR="
|
|
277
|
+
- export APP_DIR="api"
|
|
1663
278
|
- export DOCKER_BUILD_CONTEXT="."
|
|
1664
279
|
- export DOCKER_REGISTRY="europe-west6-docker.pkg.dev"
|
|
1665
|
-
- export DOCKER_IMAGE="europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/dev/
|
|
1666
|
-
- export DOCKER_CACHE_IMAGE="europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/
|
|
280
|
+
- export DOCKER_IMAGE="europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/dev/api"
|
|
281
|
+
- export DOCKER_CACHE_IMAGE="europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/api"
|
|
1667
282
|
- export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"
|
|
1668
283
|
- |-
|
|
1669
284
|
export DOCKER_COPY_AND_INSTALL_APP="COPY --chown=node:node $APP_DIR .
|
|
1670
285
|
RUN yarn plugin import workspace-tools
|
|
1671
286
|
RUN yarn workspaces focus --production && yarn rebuild"
|
|
1672
287
|
- |-
|
|
1673
|
-
export DOCKER_COPY_WORKSPACE_FILES="COPY --chown=node:node
|
|
1674
|
-
COPY --chown=node:node
|
|
288
|
+
export DOCKER_COPY_WORKSPACE_FILES="COPY --chown=node:node api/package.json /app/api/package.json
|
|
289
|
+
COPY --chown=node:node api/yarn.lock /app/api/yarn.lock
|
|
1675
290
|
COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
|
|
1676
291
|
COPY --chown=node:node .yarn /app/.yarn"
|
|
1677
292
|
- echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
|
|
1678
293
|
- ensureNodeDockerfile
|
|
1679
294
|
- echo -e "\\e[0Ksection_start:$(date +%s):docker-login[collapsed=true]\\r\\e[0KDocker Login"
|
|
1680
|
-
- gcloud auth activate-service-account --key-file=<(echo "$
|
|
295
|
+
- gcloud auth activate-service-account --key-file=<(echo "$CL_dev_api_GCLOUD_DEPLOY_credentialsKey")
|
|
1681
296
|
- gcloud auth configure-docker europe-west6-docker.pkg.dev
|
|
1682
297
|
- echo -e "\\e[0Ksection_end:$(date +%s):docker-login\\r\\e[0K"
|
|
1683
298
|
- echo -e "\\e[0Ksection_start:$(date +%s):docker-build[collapsed=true]\\r\\e[0KDocker build"
|
|
@@ -1689,27 +304,26 @@ variables:
|
|
|
1689
304
|
- docker push $DOCKER_CACHE_IMAGE
|
|
1690
305
|
- echo -e "\\e[0Ksection_end:$(date +%s):docker-push\\r\\e[0K"
|
|
1691
306
|
cache:
|
|
1692
|
-
- key:
|
|
307
|
+
- key: api-yarn
|
|
1693
308
|
policy: pull
|
|
1694
309
|
paths:
|
|
1695
|
-
-
|
|
310
|
+
- api/.yarn
|
|
1696
311
|
rules:
|
|
1697
312
|
- when: never
|
|
1698
313
|
if: $CI_COMMIT_MESSAGE =~ /^chore\\(release\\).*/
|
|
1699
314
|
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
|
|
1700
315
|
needs:
|
|
1701
|
-
-
|
|
1702
|
-
artifacts: true
|
|
316
|
+
- 'api ๐จ app | dev '
|
|
1703
317
|
retry: *a1
|
|
1704
318
|
interruptible: true
|
|
1705
|
-
'
|
|
319
|
+
'api ๐งพ sbom | dev ':
|
|
1706
320
|
stage: build
|
|
1707
321
|
image: aquasec/trivy:0.38.3
|
|
1708
322
|
variables: {}
|
|
1709
323
|
script:
|
|
1710
324
|
- echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
|
|
1711
325
|
- echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
|
|
1712
|
-
- trivy fs --quiet --format cyclonedx --output "__sbom.json"
|
|
326
|
+
- trivy fs --quiet --format cyclonedx --output "__sbom.json" api
|
|
1713
327
|
artifacts:
|
|
1714
328
|
paths:
|
|
1715
329
|
- __sbom.json
|
|
@@ -1721,7 +335,7 @@ variables:
|
|
|
1721
335
|
retry: *a1
|
|
1722
336
|
interruptible: true
|
|
1723
337
|
allow_failure: true
|
|
1724
|
-
'
|
|
338
|
+
'api ๐ Deploy | dev ':
|
|
1725
339
|
stage: deploy dev
|
|
1726
340
|
image: path/to/docker/gcloud:the-version
|
|
1727
341
|
variables:
|
|
@@ -1731,30 +345,37 @@ variables:
|
|
|
1731
345
|
script:
|
|
1732
346
|
- echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
|
|
1733
347
|
- export ENV_SHORT="dev"
|
|
1734
|
-
- export APP_DIR="
|
|
348
|
+
- export APP_DIR="api"
|
|
1735
349
|
- export ENV_TYPE="dev"
|
|
1736
350
|
- export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
|
|
1737
351
|
- export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
|
|
1738
352
|
- 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")"
|
|
1739
|
-
- export HOST="$(printf %s "pan-test-app-dev-
|
|
1740
|
-
- export ROOT_URL="https://$(printf %s "pan-test-app-dev-
|
|
1741
|
-
- export HOST_INTERNAL="$(printf %s "pan-test-app-dev-
|
|
1742
|
-
- export HOST_CANONICAL="$(printf %s "pan-test-app-dev-
|
|
1743
|
-
- export ROOT_URL_INTERNAL="https://$(printf %s "pan-test-app-dev-
|
|
353
|
+
- export HOST="$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
354
|
+
- export ROOT_URL="https://$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
355
|
+
- export HOST_INTERNAL="$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
356
|
+
- export HOST_CANONICAL="$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
357
|
+
- export ROOT_URL_INTERNAL="https://$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
358
|
+
- export CLOUD_SQL_INSTANCE_CONNECTION_NAME="projectId:region:instancename"
|
|
359
|
+
- export DB_NAME="pan-test-app-dev-api"
|
|
360
|
+
- export DB_USER="my-user"
|
|
361
|
+
- export DB_PASSWORD="$CL_dev_api_DB_PASSWORD"
|
|
362
|
+
- export DATABASE_URL="postgresql://$DB_USER:$DB_PASSWORD@localhost/$DB_NAME?host=/cloudsql/$CLOUD_SQL_INSTANCE_CONNECTION_NAME"
|
|
363
|
+
- export DATABASE_JDBC_URL="jdbc:postgresql:///$DB_NAME?cloudSqlInstance=$CLOUD_SQL_INSTANCE_CONNECTION_NAME&socketFactory=com.google.cloud.sql.postgres.SocketFactory&user=$DB_USER&password=$DB_PASSWORD"
|
|
364
|
+
- export CLOUD_RUN_JOB_TRIGGER_URL_migration="https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/jobs/pan-test-app-dev-api-migration:run"
|
|
365
|
+
- export CLOUD_RUN_JOB_TRIGGER_URL_send_reminders="https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/jobs/pan-test-app-dev-api-send-reminders:run"
|
|
1744
366
|
- export DEPLOY_CLOUD_RUN_PROJECT_ID="google-project-id"
|
|
1745
367
|
- export DEPLOY_CLOUD_RUN_REGION="europe-west6"
|
|
1746
|
-
- export GCLOUD_DEPLOY_credentialsKey="$
|
|
1747
|
-
- export GCLOUD_RUN_canonicalHostSuffix="$
|
|
1748
|
-
- export
|
|
1749
|
-
- export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOST\\",\\"ROOT_URL\\",\\"HOST_INTERNAL\\",\\"HOST_CANONICAL\\",\\"ROOT_URL_INTERNAL\\",\\"DEPLOY_CLOUD_RUN_PROJECT_ID\\",\\"DEPLOY_CLOUD_RUN_REGION\\",\\"GCLOUD_DEPLOY_credentialsKey\\",\\"GCLOUD_RUN_canonicalHostSuffix\\",\\"API_URL\\"]"
|
|
368
|
+
- export GCLOUD_DEPLOY_credentialsKey="$CL_dev_api_GCLOUD_DEPLOY_credentialsKey"
|
|
369
|
+
- export GCLOUD_RUN_canonicalHostSuffix="$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix"
|
|
370
|
+
- export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOST\\",\\"ROOT_URL\\",\\"HOST_INTERNAL\\",\\"HOST_CANONICAL\\",\\"ROOT_URL_INTERNAL\\",\\"CLOUD_SQL_INSTANCE_CONNECTION_NAME\\",\\"DB_NAME\\",\\"DB_USER\\",\\"DB_PASSWORD\\",\\"DATABASE_URL\\",\\"DATABASE_JDBC_URL\\",\\"CLOUD_RUN_JOB_TRIGGER_URL_migration\\",\\"CLOUD_RUN_JOB_TRIGGER_URL_send_reminders\\",\\"DEPLOY_CLOUD_RUN_PROJECT_ID\\",\\"DEPLOY_CLOUD_RUN_REGION\\",\\"GCLOUD_DEPLOY_credentialsKey\\",\\"GCLOUD_RUN_canonicalHostSuffix\\"]"
|
|
1750
371
|
- export DOCKER_REGISTRY="europe-west6-docker.pkg.dev"
|
|
1751
|
-
- export DOCKER_IMAGE="europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/dev/
|
|
1752
|
-
- export DOCKER_CACHE_IMAGE="europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/
|
|
372
|
+
- export DOCKER_IMAGE="europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/dev/api"
|
|
373
|
+
- export DOCKER_CACHE_IMAGE="europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/api"
|
|
1753
374
|
- export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"
|
|
1754
375
|
- export CLOUDSDK_CORE_DISABLE_PROMPTS="1"
|
|
1755
376
|
- echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
|
|
1756
377
|
- echo -e "\\e[0Ksection_start:$(date +%s):prepare[collapsed=true]\\r\\e[0KPrepare..."
|
|
1757
|
-
- gcloud auth activate-service-account --key-file=<(echo "$
|
|
378
|
+
- gcloud auth activate-service-account --key-file=<(echo "$CL_dev_api_GCLOUD_DEPLOY_credentialsKey")
|
|
1758
379
|
- export GCLOUD_PROJECT_NUMBER=$(gcloud projects describe google-project-id --format="value(projectNumber)")
|
|
1759
380
|
- 'echo "GCLOUD_PROJECT_NUMBER: $GCLOUD_PROJECT_NUMBER"'
|
|
1760
381
|
- echo -e "\\e[0Ksection_end:$(date +%s):prepare\\r\\e[0K"
|
|
@@ -1764,7 +385,7 @@ variables:
|
|
|
1764
385
|
ENV_SHORT: |-
|
|
1765
386
|
dev
|
|
1766
387
|
APP_DIR: |-
|
|
1767
|
-
|
|
388
|
+
api
|
|
1768
389
|
ENV_TYPE: |-
|
|
1769
390
|
dev
|
|
1770
391
|
BUILD_INFO_BUILD_ID: |-
|
|
@@ -1774,43 +395,74 @@ variables:
|
|
|
1774
395
|
BUILD_INFO_CURRENT_VERSION: |-
|
|
1775
396
|
$(printf %s "$(tag=$(git ls-remote origin "refs/tags/v*[0-9]" 2>/dev/null | cut -f 2- | sort -V | tail -1 | sed 's/refs\\/tags\\/v//'); [ -z "$tag" ] && echo "0.0.0" || echo "$tag")" | sed 's/^/ /')
|
|
1776
397
|
HOST: |-
|
|
1777
|
-
$(printf %s "$(printf %s "pan-test-app-dev-
|
|
398
|
+
$(printf %s "$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
|
|
1778
399
|
ROOT_URL: |-
|
|
1779
|
-
$(printf %s "https://$(printf %s "pan-test-app-dev-
|
|
400
|
+
$(printf %s "https://$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
|
|
1780
401
|
HOST_INTERNAL: |-
|
|
1781
|
-
$(printf %s "$(printf %s "pan-test-app-dev-
|
|
402
|
+
$(printf %s "$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
|
|
1782
403
|
HOST_CANONICAL: |-
|
|
1783
|
-
$(printf %s "$(printf %s "pan-test-app-dev-
|
|
404
|
+
$(printf %s "$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
|
|
1784
405
|
ROOT_URL_INTERNAL: |-
|
|
1785
|
-
$(printf %s "https://$(printf %s "pan-test-app-dev-
|
|
406
|
+
$(printf %s "https://$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
|
|
407
|
+
CLOUD_SQL_INSTANCE_CONNECTION_NAME: |-
|
|
408
|
+
projectId:region:instancename
|
|
409
|
+
DB_NAME: |-
|
|
410
|
+
pan-test-app-dev-api
|
|
411
|
+
DB_USER: |-
|
|
412
|
+
my-user
|
|
413
|
+
DB_PASSWORD: |-
|
|
414
|
+
$(printf %s "$CL_dev_api_DB_PASSWORD" | sed 's/^/ /')
|
|
415
|
+
DATABASE_URL: |-
|
|
416
|
+
postgresql://$DB_USER:$DB_PASSWORD@localhost/$DB_NAME?host=/cloudsql/$CLOUD_SQL_INSTANCE_CONNECTION_NAME
|
|
417
|
+
DATABASE_JDBC_URL: |-
|
|
418
|
+
jdbc:postgresql:///$DB_NAME?cloudSqlInstance=$CLOUD_SQL_INSTANCE_CONNECTION_NAME&socketFactory=com.google.cloud.sql.postgres.SocketFactory&user=$DB_USER&password=$DB_PASSWORD
|
|
419
|
+
CLOUD_RUN_JOB_TRIGGER_URL_migration: |-
|
|
420
|
+
https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/jobs/pan-test-app-dev-api-migration:run
|
|
421
|
+
CLOUD_RUN_JOB_TRIGGER_URL_send_reminders: |-
|
|
422
|
+
https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/jobs/pan-test-app-dev-api-send-reminders:run
|
|
1786
423
|
DEPLOY_CLOUD_RUN_PROJECT_ID: |-
|
|
1787
424
|
google-project-id
|
|
1788
425
|
DEPLOY_CLOUD_RUN_REGION: |-
|
|
1789
426
|
europe-west6
|
|
1790
427
|
GCLOUD_RUN_canonicalHostSuffix: |-
|
|
1791
|
-
$(printf %s "$
|
|
1792
|
-
API_URL: |-
|
|
1793
|
-
$(printf %s "https://$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')/graphql" | sed 's/^/ /')
|
|
428
|
+
$(printf %s "$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | sed 's/^/ /')
|
|
1794
429
|
_ALL_ENV_VAR_KEYS: |-
|
|
1795
|
-
["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","HOST_INTERNAL","HOST_CANONICAL","ROOT_URL_INTERNAL","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"
|
|
430
|
+
["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","HOST_INTERNAL","HOST_CANONICAL","ROOT_URL_INTERNAL","CLOUD_SQL_INSTANCE_CONNECTION_NAME","DB_NAME","DB_USER","DB_PASSWORD","DATABASE_URL","DATABASE_JDBC_URL","CLOUD_RUN_JOB_TRIGGER_URL_migration","CLOUD_RUN_JOB_TRIGGER_URL_send_reminders","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]
|
|
1796
431
|
|
|
1797
432
|
EOF
|
|
1798
433
|
- echo -e "\\e[0Ksection_end:$(date +%s):writeenvvars\\r\\e[0K"
|
|
1799
434
|
- echo -e "\\e[0Ksection_start:$(date +%s):deploy[collapsed=true]\\r\\e[0KDeploy to cloud run"
|
|
1800
|
-
-
|
|
435
|
+
- set +e
|
|
436
|
+
- echo "ensuring Database..."
|
|
437
|
+
- gcloud sql databases create pan-test-app-dev-api --instance=instancename --project projectId
|
|
438
|
+
- set -e
|
|
439
|
+
- set +e
|
|
440
|
+
- gcloud scheduler jobs create http pan-test-app-dev-api-send-reminders-scheduler --project=google-project-id --location=europe-west6 --schedule="0 * * * *" --max-retry-attempts=0 --uri="https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/jobs/pan-test-app-dev-api-send-reminders:run" --http-method=POST --oauth-service-account-email=$GCLOUD_PROJECT_NUMBER-compute@developer.gserviceaccount.com
|
|
441
|
+
- set -e
|
|
442
|
+
- gcloud scheduler jobs update http pan-test-app-dev-api-send-reminders-scheduler --project=google-project-id --location=europe-west6 --schedule="0 * * * *" --max-retry-attempts=0 --uri="https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/jobs/pan-test-app-dev-api-send-reminders:run" --http-method=POST --oauth-service-account-email=$GCLOUD_PROJECT_NUMBER-compute@developer.gserviceaccount.com
|
|
443
|
+
- set +e
|
|
444
|
+
- gcloud run jobs create pan-test-app-dev-api-migration --command="yarn,migrate" --image=europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/dev/api:$DOCKER_IMAGE_TAG --project=google-project-id --region=europe-west6 --set-cloudsql-instances=projectId:region:instancename --labels=customer-name=pan,component-name=api,app-name=test-app,env-type=dev,env-name=dev,build-type=node,cloud-run-job-name=pan-test-app-dev-api-migration --memory=512Mi --task-timeout=10m --parallelism=1 --env-vars-file=____envvars.yaml --max-retries=0
|
|
445
|
+
- set -e
|
|
446
|
+
- 'gcloud run jobs update pan-test-app-dev-api-migration --command="yarn,migrate" --image=europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/dev/api:$DOCKER_IMAGE_TAG --project=google-project-id --region=europe-west6 --set-cloudsql-instances=projectId:region:instancename --labels=customer-name=pan,component-name=api,app-name=test-app,env-type=dev,env-name=dev,build-type=node,cloud-run-job-name=pan-test-app-dev-api-migration --memory=512Mi --task-timeout=10m --parallelism=1 --env-vars-file=____envvars.yaml --max-retries=0 '
|
|
447
|
+
- set +e
|
|
448
|
+
- gcloud run jobs create pan-test-app-dev-api-send-reminders --command="yarn,job:send-reminders" --image=europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/dev/api:$DOCKER_IMAGE_TAG --project=google-project-id --region=europe-west6 --set-cloudsql-instances=projectId:region:instancename --labels=customer-name=pan,component-name=api,app-name=test-app,env-type=dev,env-name=dev,build-type=node,cloud-run-job-name=pan-test-app-dev-api-send-reminders --memory=512Mi --task-timeout=15m --parallelism=1 --env-vars-file=____envvars.yaml --max-retries=0
|
|
449
|
+
- set -e
|
|
450
|
+
- 'gcloud run jobs update pan-test-app-dev-api-send-reminders --command="yarn,job:send-reminders" --image=europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/dev/api:$DOCKER_IMAGE_TAG --project=google-project-id --region=europe-west6 --set-cloudsql-instances=projectId:region:instancename --labels=customer-name=pan,component-name=api,app-name=test-app,env-type=dev,env-name=dev,build-type=node,cloud-run-job-name=pan-test-app-dev-api-send-reminders --memory=512Mi --task-timeout=15m --parallelism=1 --env-vars-file=____envvars.yaml --max-retries=0 '
|
|
451
|
+
- gcloud run deploy pan-test-app-dev-api --command="yarn,start" --image=europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/dev/api:$DOCKER_IMAGE_TAG --project=google-project-id --region=europe-west6 --set-cloudsql-instances=projectId:region:instancename --labels=customer-name=pan,component-name=api,app-name=test-app,env-type=dev,env-name=dev,build-type=node,cloud-run-service-name=pan-test-app-dev-api --env-vars-file=____envvars.yaml --min-instances=0 --max-instances=5 --cpu-throttling --allow-unauthenticated --ingress=all --cpu-boost
|
|
452
|
+
- gcloud run jobs execute pan-test-app-dev-api-migration --project=google-project-id --region=europe-west6
|
|
1801
453
|
- echo -e "\\e[0Ksection_end:$(date +%s):deploy\\r\\e[0K"
|
|
1802
454
|
- echo -e "\\e[0Ksection_start:$(date +%s):cleanup[collapsed=true]\\r\\e[0KCleanup"
|
|
1803
|
-
- gcloud run revisions list --project=google-project-id --region=europe-west6 --service=pan-test-app-dev-
|
|
1804
|
-
- gcloud artifacts docker images list europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/dev/
|
|
1805
|
-
- gcloud artifacts docker images list europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/
|
|
455
|
+
- 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
|
|
456
|
+
- 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
|
|
457
|
+
- 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
|
|
1806
458
|
- echo -e "\\e[0Ksection_end:$(date +%s):cleanup\\r\\e[0K"
|
|
1807
459
|
- echo 'Uploading SBOM to Dependency Track'
|
|
1808
|
-
- /dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/
|
|
1809
|
-
- echo "CL_GITLAB_ENVIRONMENT_URL=https://$(printf %s "pan-test-app-dev-
|
|
460
|
+
- /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
|
|
461
|
+
- 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
|
|
1810
462
|
environment:
|
|
1811
|
-
name: dev/
|
|
463
|
+
name: dev/api
|
|
1812
464
|
url: $CL_GITLAB_ENVIRONMENT_URL
|
|
1813
|
-
on_stop: '
|
|
465
|
+
on_stop: 'api ๐ Stop โ ๏ธ | dev '
|
|
1814
466
|
auto_stop_in: 4 weeks
|
|
1815
467
|
artifacts:
|
|
1816
468
|
reports:
|
|
@@ -1821,20 +473,22 @@ variables:
|
|
|
1821
473
|
- when: on_success
|
|
1822
474
|
if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
|
|
1823
475
|
needs:
|
|
1824
|
-
- job:
|
|
476
|
+
- job: api ๐ฎ lint
|
|
1825
477
|
artifacts: false
|
|
1826
|
-
- job:
|
|
478
|
+
- job: 'api ๐จ app | dev '
|
|
1827
479
|
artifacts: false
|
|
1828
|
-
- job:
|
|
480
|
+
- job: 'api ๐จ docker | dev '
|
|
1829
481
|
artifacts: false
|
|
1830
|
-
- job:
|
|
482
|
+
- job: api ๐งช test
|
|
1831
483
|
artifacts: false
|
|
1832
|
-
- job: '
|
|
484
|
+
- job: 'api ๐งพ sbom | dev '
|
|
1833
485
|
artifacts: true
|
|
486
|
+
- job: api ๐ก audit
|
|
487
|
+
artifacts: false
|
|
1834
488
|
retry: *a1
|
|
1835
489
|
interruptible: true
|
|
1836
490
|
allow_failure: false
|
|
1837
|
-
'
|
|
491
|
+
'api ๐ Stop โ ๏ธ | dev ':
|
|
1838
492
|
stage: stop dev
|
|
1839
493
|
image: path/to/docker/gcloud:the-version
|
|
1840
494
|
variables:
|
|
@@ -1847,33 +501,140 @@ variables:
|
|
|
1847
501
|
- export CLOUDSDK_CORE_DISABLE_PROMPTS="1"
|
|
1848
502
|
- echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
|
|
1849
503
|
- set +e
|
|
1850
|
-
- gcloud auth activate-service-account --key-file=<(echo "$
|
|
1851
|
-
- gcloud run services delete pan-test-app-dev-
|
|
1852
|
-
- gcloud
|
|
1853
|
-
- gcloud
|
|
504
|
+
- gcloud auth activate-service-account --key-file=<(echo "$CL_dev_api_GCLOUD_DEPLOY_credentialsKey")
|
|
505
|
+
- gcloud run services delete pan-test-app-dev-api --project=google-project-id --region=europe-west6
|
|
506
|
+
- gcloud scheduler jobs delete pan-test-app-dev-api-send-reminders-scheduler --project=google-project-id --location=europe-west6
|
|
507
|
+
- gcloud run jobs executions list --project=google-project-id --region=europe-west6 --job pan-test-app-dev-api-migration --format="value(name)" | xargs -I {} gcloud run jobs executions delete {} --quiet --project=google-project-id --region=europe-west6
|
|
508
|
+
- gcloud run jobs delete pan-test-app-dev-api-migration --project=google-project-id --region=europe-west6
|
|
509
|
+
- gcloud run jobs executions list --project=google-project-id --region=europe-west6 --job pan-test-app-dev-api-send-reminders --format="value(name)" | xargs -I {} gcloud run jobs executions delete {} --quiet --project=google-project-id --region=europe-west6
|
|
510
|
+
- gcloud run jobs delete pan-test-app-dev-api-send-reminders --project=google-project-id --region=europe-west6
|
|
511
|
+
- gcloud artifacts docker images delete europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/dev/api --quiet --delete-tags
|
|
512
|
+
- 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
|
|
1854
513
|
- echo 'Disabling component in Dependency Track'
|
|
1855
|
-
- /dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" disable "pan-test-app/
|
|
514
|
+
- /dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" disable "pan-test-app/api" "https://$(printf %s "pan-test-app-dev-api-$CL_dev_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" || true
|
|
1856
515
|
- set -e
|
|
1857
|
-
- echo "CL_GITLAB_ENVIRONMENT_URL=https://$(printf %s "pan-test-app-dev-
|
|
516
|
+
- 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
|
|
1858
517
|
environment:
|
|
1859
|
-
name: dev/
|
|
518
|
+
name: dev/api
|
|
1860
519
|
url: $CL_GITLAB_ENVIRONMENT_URL
|
|
1861
520
|
action: stop
|
|
1862
521
|
artifacts:
|
|
1863
|
-
reports:
|
|
1864
|
-
dotenv: gitlab_environment.env
|
|
522
|
+
reports:
|
|
523
|
+
dotenv: gitlab_environment.env
|
|
524
|
+
rules:
|
|
525
|
+
- if: $CI_COMMIT_BRANCH =~ /^[0-9]+\\.([0-9]+|x)\\.x$/
|
|
526
|
+
when: on_success
|
|
527
|
+
- when: never
|
|
528
|
+
if: $CI_COMMIT_MESSAGE =~ /^chore\\(release\\).*/
|
|
529
|
+
- when: manual
|
|
530
|
+
if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
|
|
531
|
+
needs: []
|
|
532
|
+
retry: *a1
|
|
533
|
+
interruptible: true
|
|
534
|
+
allow_failure: true
|
|
535
|
+
'api ๐จ app | review ':
|
|
536
|
+
stage: build
|
|
537
|
+
image: path/to/docker/jobs-default:the-version
|
|
538
|
+
variables:
|
|
539
|
+
KUBERNETES_CPU_REQUEST: '0.45'
|
|
540
|
+
KUBERNETES_MEMORY_REQUEST: 1Gi
|
|
541
|
+
KUBERNETES_MEMORY_LIMIT: 4Gi
|
|
542
|
+
script:
|
|
543
|
+
- echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
|
|
544
|
+
- export ENV_SHORT="review"
|
|
545
|
+
- export APP_DIR="api"
|
|
546
|
+
- export ENV_TYPE="review"
|
|
547
|
+
- export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
|
|
548
|
+
- export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
|
|
549
|
+
- 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")"
|
|
550
|
+
- export HOST="$(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)}')"
|
|
551
|
+
- 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)}')"
|
|
552
|
+
- export HOST_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)}')"
|
|
553
|
+
- 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)}')"
|
|
554
|
+
- 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)}')"
|
|
555
|
+
- export CLOUD_SQL_INSTANCE_CONNECTION_NAME="projectId:region:instancename"
|
|
556
|
+
- export DB_NAME="pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api"
|
|
557
|
+
- export DB_USER="my-user"
|
|
558
|
+
- export DB_PASSWORD="$CL_review_api_DB_PASSWORD"
|
|
559
|
+
- export DATABASE_URL="postgresql://$DB_USER:$DB_PASSWORD@localhost/$DB_NAME?host=/cloudsql/$CLOUD_SQL_INSTANCE_CONNECTION_NAME"
|
|
560
|
+
- export DATABASE_JDBC_URL="jdbc:postgresql:///$DB_NAME?cloudSqlInstance=$CLOUD_SQL_INSTANCE_CONNECTION_NAME&socketFactory=com.google.cloud.sql.postgres.SocketFactory&user=$DB_USER&password=$DB_PASSWORD"
|
|
561
|
+
- export CLOUD_RUN_JOB_TRIGGER_URL_migration="https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/jobs/$(printf %s \\"pan-test-app-review-$([ -n \\"$CI_MERGE_REQUEST_IID\\" ] && echo \\"mr$CI_MERGE_REQUEST_IID\\" || { [ -n \\"$CI_COMMIT_REF_SLUG\\" ] && echo \\"$CI_COMMIT_REF_SLUG\\" || echo \\"unknown\\"; })-api\\" | awk '{print tolower($0)}')-migration:run"
|
|
562
|
+
- export CLOUD_RUN_JOB_TRIGGER_URL_send_reminders="https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/jobs/$(printf %s \\"pan-test-app-review-$([ -n \\"$CI_MERGE_REQUEST_IID\\" ] && echo \\"mr$CI_MERGE_REQUEST_IID\\" || { [ -n \\"$CI_COMMIT_REF_SLUG\\" ] && echo \\"$CI_COMMIT_REF_SLUG\\" || echo \\"unknown\\"; })-api\\" | awk '{print tolower($0)}')-send-reminders:run"
|
|
563
|
+
- export DEPLOY_CLOUD_RUN_PROJECT_ID="google-project-id"
|
|
564
|
+
- export DEPLOY_CLOUD_RUN_REGION="europe-west6"
|
|
565
|
+
- export GCLOUD_DEPLOY_credentialsKey="$CL_review_api_GCLOUD_DEPLOY_credentialsKey"
|
|
566
|
+
- export GCLOUD_RUN_canonicalHostSuffix="$CL_review_api_GCLOUD_RUN_canonicalHostSuffix"
|
|
567
|
+
- export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOST\\",\\"ROOT_URL\\",\\"HOST_INTERNAL\\",\\"HOST_CANONICAL\\",\\"ROOT_URL_INTERNAL\\",\\"CLOUD_SQL_INSTANCE_CONNECTION_NAME\\",\\"DB_NAME\\",\\"DB_USER\\",\\"DB_PASSWORD\\",\\"DATABASE_URL\\",\\"DATABASE_JDBC_URL\\",\\"CLOUD_RUN_JOB_TRIGGER_URL_migration\\",\\"CLOUD_RUN_JOB_TRIGGER_URL_send_reminders\\",\\"DEPLOY_CLOUD_RUN_PROJECT_ID\\",\\"DEPLOY_CLOUD_RUN_REGION\\",\\"GCLOUD_DEPLOY_credentialsKey\\",\\"GCLOUD_RUN_canonicalHostSuffix\\"]"
|
|
568
|
+
- echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
|
|
569
|
+
- echo -e "\\e[0Ksection_start:$(date +%s):write-dotenv-api[collapsed=true]\\r\\e[0Kwrite dot env"
|
|
570
|
+
- |-
|
|
571
|
+
cat <<EOF > api/.env
|
|
572
|
+
ENV_SHORT=review
|
|
573
|
+
APP_DIR=api
|
|
574
|
+
ENV_TYPE=review
|
|
575
|
+
HOST=$(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)}')
|
|
576
|
+
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)}')
|
|
577
|
+
HOST_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)}')
|
|
578
|
+
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)}')
|
|
579
|
+
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)}')
|
|
580
|
+
CLOUD_SQL_INSTANCE_CONNECTION_NAME=projectId:region:instancename
|
|
581
|
+
DB_NAME=pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api
|
|
582
|
+
DB_USER=my-user
|
|
583
|
+
DB_PASSWORD=$CL_review_api_DB_PASSWORD
|
|
584
|
+
DATABASE_URL=postgresql://$DB_USER:$DB_PASSWORD@localhost/$DB_NAME?host=/cloudsql/$CLOUD_SQL_INSTANCE_CONNECTION_NAME
|
|
585
|
+
DATABASE_JDBC_URL=jdbc:postgresql:///$DB_NAME?cloudSqlInstance=$CLOUD_SQL_INSTANCE_CONNECTION_NAME&socketFactory=com.google.cloud.sql.postgres.SocketFactory&user=$DB_USER&password=$DB_PASSWORD
|
|
586
|
+
CLOUD_RUN_JOB_TRIGGER_URL_migration=https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/jobs/$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api" | awk '{print tolower($0)}')-migration:run
|
|
587
|
+
CLOUD_RUN_JOB_TRIGGER_URL_send_reminders=https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/jobs/$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api" | awk '{print tolower($0)}')-send-reminders:run
|
|
588
|
+
DEPLOY_CLOUD_RUN_PROJECT_ID=google-project-id
|
|
589
|
+
DEPLOY_CLOUD_RUN_REGION=europe-west6
|
|
590
|
+
GCLOUD_DEPLOY_credentialsKey=$CL_review_api_GCLOUD_DEPLOY_credentialsKey
|
|
591
|
+
GCLOUD_RUN_canonicalHostSuffix=$CL_review_api_GCLOUD_RUN_canonicalHostSuffix
|
|
592
|
+
_ALL_ENV_VAR_KEYS=["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","HOST_INTERNAL","HOST_CANONICAL","ROOT_URL_INTERNAL","CLOUD_SQL_INSTANCE_CONNECTION_NAME","DB_NAME","DB_USER","DB_PASSWORD","DATABASE_URL","DATABASE_JDBC_URL","CLOUD_RUN_JOB_TRIGGER_URL_migration","CLOUD_RUN_JOB_TRIGGER_URL_send_reminders","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]
|
|
593
|
+
EOF
|
|
594
|
+
- echo -e "\\e[0Ksection_end:$(date +%s):write-dotenv-api\\r\\e[0K"
|
|
595
|
+
- echo '{"id":"$(git describe --tags 2>/dev/null || git rev-parse HEAD)","time":"$CI_JOB_STARTED_AT"}' > api/__build_info.json
|
|
596
|
+
- echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"
|
|
597
|
+
- if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
|
|
598
|
+
- if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
|
|
599
|
+
- echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"
|
|
600
|
+
- cd api
|
|
601
|
+
- echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"
|
|
602
|
+
- if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
|
|
603
|
+
- if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
|
|
604
|
+
- echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"
|
|
605
|
+
- echo -e "\\e[0Ksection_start:$(date +%s):yarninstall[collapsed=true]\\r\\e[0KYarn install"
|
|
606
|
+
- yarn install --immutable
|
|
607
|
+
- echo -e "\\e[0Ksection_end:$(date +%s):yarninstall\\r\\e[0K"
|
|
608
|
+
- yarn build
|
|
609
|
+
cache:
|
|
610
|
+
- key: api-yarn
|
|
611
|
+
policy: pull-push
|
|
612
|
+
paths:
|
|
613
|
+
- api/.yarn
|
|
614
|
+
- key: api-node-modules
|
|
615
|
+
policy: pull-push
|
|
616
|
+
paths:
|
|
617
|
+
- api/node_modules
|
|
618
|
+
- key: api-next-cache
|
|
619
|
+
policy: pull-push
|
|
620
|
+
paths:
|
|
621
|
+
- api/.next/cache
|
|
622
|
+
artifacts:
|
|
623
|
+
paths:
|
|
624
|
+
- api/__build_info.json
|
|
625
|
+
- api/.next
|
|
626
|
+
- api/dist
|
|
627
|
+
exclude:
|
|
628
|
+
- api/.env
|
|
629
|
+
expire_in: 1 day
|
|
630
|
+
when: always
|
|
631
|
+
reports: {}
|
|
1865
632
|
rules:
|
|
1866
|
-
- if: $
|
|
1867
|
-
when: on_success
|
|
1868
|
-
- when: never
|
|
1869
|
-
if: $CI_COMMIT_MESSAGE =~ /^chore\\(release\\).*/
|
|
1870
|
-
- when: manual
|
|
1871
|
-
if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
|
|
633
|
+
- if: $CI_MERGE_REQUEST_ID
|
|
1872
634
|
needs: []
|
|
1873
635
|
retry: *a1
|
|
1874
636
|
interruptible: true
|
|
1875
|
-
|
|
1876
|
-
'๐น www ๐จ docker | review ':
|
|
637
|
+
'api ๐จ docker | review ':
|
|
1877
638
|
stage: build
|
|
1878
639
|
image: path/to/docker/docker-build:the-version
|
|
1879
640
|
services:
|
|
@@ -1890,25 +651,25 @@ variables:
|
|
|
1890
651
|
KUBERNETES_MEMORY_LIMIT: 2Gi
|
|
1891
652
|
script:
|
|
1892
653
|
- echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
|
|
1893
|
-
- export APP_DIR="
|
|
654
|
+
- export APP_DIR="api"
|
|
1894
655
|
- export DOCKER_BUILD_CONTEXT="."
|
|
1895
656
|
- export DOCKER_REGISTRY="europe-west6-docker.pkg.dev"
|
|
1896
|
-
- export DOCKER_IMAGE="europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/review/
|
|
1897
|
-
- export DOCKER_CACHE_IMAGE="europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/
|
|
657
|
+
- 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"; })"
|
|
658
|
+
- export DOCKER_CACHE_IMAGE="europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/api"
|
|
1898
659
|
- export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"
|
|
1899
660
|
- |-
|
|
1900
661
|
export DOCKER_COPY_AND_INSTALL_APP="COPY --chown=node:node $APP_DIR .
|
|
1901
662
|
RUN yarn plugin import workspace-tools
|
|
1902
663
|
RUN yarn workspaces focus --production && yarn rebuild"
|
|
1903
664
|
- |-
|
|
1904
|
-
export DOCKER_COPY_WORKSPACE_FILES="COPY --chown=node:node
|
|
1905
|
-
COPY --chown=node:node
|
|
665
|
+
export DOCKER_COPY_WORKSPACE_FILES="COPY --chown=node:node api/package.json /app/api/package.json
|
|
666
|
+
COPY --chown=node:node api/yarn.lock /app/api/yarn.lock
|
|
1906
667
|
COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
|
|
1907
668
|
COPY --chown=node:node .yarn /app/.yarn"
|
|
1908
669
|
- echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
|
|
1909
670
|
- ensureNodeDockerfile
|
|
1910
671
|
- echo -e "\\e[0Ksection_start:$(date +%s):docker-login[collapsed=true]\\r\\e[0KDocker Login"
|
|
1911
|
-
- gcloud auth activate-service-account --key-file=<(echo "$
|
|
672
|
+
- gcloud auth activate-service-account --key-file=<(echo "$CL_review_api_GCLOUD_DEPLOY_credentialsKey")
|
|
1912
673
|
- gcloud auth configure-docker europe-west6-docker.pkg.dev
|
|
1913
674
|
- echo -e "\\e[0Ksection_end:$(date +%s):docker-login\\r\\e[0K"
|
|
1914
675
|
- echo -e "\\e[0Ksection_start:$(date +%s):docker-build[collapsed=true]\\r\\e[0KDocker build"
|
|
@@ -1920,25 +681,24 @@ variables:
|
|
|
1920
681
|
- docker push $DOCKER_CACHE_IMAGE
|
|
1921
682
|
- echo -e "\\e[0Ksection_end:$(date +%s):docker-push\\r\\e[0K"
|
|
1922
683
|
cache:
|
|
1923
|
-
- key:
|
|
684
|
+
- key: api-yarn
|
|
1924
685
|
policy: pull
|
|
1925
686
|
paths:
|
|
1926
|
-
-
|
|
687
|
+
- api/.yarn
|
|
1927
688
|
rules:
|
|
1928
689
|
- if: $CI_MERGE_REQUEST_ID
|
|
1929
690
|
needs:
|
|
1930
|
-
-
|
|
1931
|
-
artifacts: true
|
|
691
|
+
- 'api ๐จ app | review '
|
|
1932
692
|
retry: *a1
|
|
1933
693
|
interruptible: true
|
|
1934
|
-
'
|
|
694
|
+
'api ๐งพ sbom | review ':
|
|
1935
695
|
stage: build
|
|
1936
696
|
image: aquasec/trivy:0.38.3
|
|
1937
697
|
variables: {}
|
|
1938
698
|
script:
|
|
1939
699
|
- echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
|
|
1940
700
|
- echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
|
|
1941
|
-
- trivy fs --quiet --format cyclonedx --output "__sbom.json"
|
|
701
|
+
- trivy fs --quiet --format cyclonedx --output "__sbom.json" api
|
|
1942
702
|
artifacts:
|
|
1943
703
|
paths:
|
|
1944
704
|
- __sbom.json
|
|
@@ -1948,7 +708,7 @@ variables:
|
|
|
1948
708
|
retry: *a1
|
|
1949
709
|
interruptible: true
|
|
1950
710
|
allow_failure: true
|
|
1951
|
-
'
|
|
711
|
+
'api ๐ Deploy | review ':
|
|
1952
712
|
stage: deploy review
|
|
1953
713
|
image: path/to/docker/gcloud:the-version
|
|
1954
714
|
variables:
|
|
@@ -1958,30 +718,37 @@ variables:
|
|
|
1958
718
|
script:
|
|
1959
719
|
- echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
|
|
1960
720
|
- export ENV_SHORT="review"
|
|
1961
|
-
- export APP_DIR="
|
|
721
|
+
- export APP_DIR="api"
|
|
1962
722
|
- export ENV_TYPE="review"
|
|
1963
723
|
- export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
|
|
1964
724
|
- export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
|
|
1965
725
|
- 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")"
|
|
1966
|
-
- export HOST="$(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"; })-
|
|
1967
|
-
- 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"; })-
|
|
1968
|
-
- export HOST_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"; })-
|
|
1969
|
-
- 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"; })-
|
|
1970
|
-
- 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"; })-
|
|
726
|
+
- export HOST="$(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)}')"
|
|
727
|
+
- 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)}')"
|
|
728
|
+
- export HOST_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)}')"
|
|
729
|
+
- 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)}')"
|
|
730
|
+
- 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)}')"
|
|
731
|
+
- export CLOUD_SQL_INSTANCE_CONNECTION_NAME="projectId:region:instancename"
|
|
732
|
+
- export DB_NAME="pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api"
|
|
733
|
+
- export DB_USER="my-user"
|
|
734
|
+
- export DB_PASSWORD="$CL_review_api_DB_PASSWORD"
|
|
735
|
+
- export DATABASE_URL="postgresql://$DB_USER:$DB_PASSWORD@localhost/$DB_NAME?host=/cloudsql/$CLOUD_SQL_INSTANCE_CONNECTION_NAME"
|
|
736
|
+
- export DATABASE_JDBC_URL="jdbc:postgresql:///$DB_NAME?cloudSqlInstance=$CLOUD_SQL_INSTANCE_CONNECTION_NAME&socketFactory=com.google.cloud.sql.postgres.SocketFactory&user=$DB_USER&password=$DB_PASSWORD"
|
|
737
|
+
- export CLOUD_RUN_JOB_TRIGGER_URL_migration="https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/jobs/$(printf %s \\"pan-test-app-review-$([ -n \\"$CI_MERGE_REQUEST_IID\\" ] && echo \\"mr$CI_MERGE_REQUEST_IID\\" || { [ -n \\"$CI_COMMIT_REF_SLUG\\" ] && echo \\"$CI_COMMIT_REF_SLUG\\" || echo \\"unknown\\"; })-api\\" | awk '{print tolower($0)}')-migration:run"
|
|
738
|
+
- export CLOUD_RUN_JOB_TRIGGER_URL_send_reminders="https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/jobs/$(printf %s \\"pan-test-app-review-$([ -n \\"$CI_MERGE_REQUEST_IID\\" ] && echo \\"mr$CI_MERGE_REQUEST_IID\\" || { [ -n \\"$CI_COMMIT_REF_SLUG\\" ] && echo \\"$CI_COMMIT_REF_SLUG\\" || echo \\"unknown\\"; })-api\\" | awk '{print tolower($0)}')-send-reminders:run"
|
|
1971
739
|
- export DEPLOY_CLOUD_RUN_PROJECT_ID="google-project-id"
|
|
1972
740
|
- export DEPLOY_CLOUD_RUN_REGION="europe-west6"
|
|
1973
|
-
- export GCLOUD_DEPLOY_credentialsKey="$
|
|
1974
|
-
- export GCLOUD_RUN_canonicalHostSuffix="$
|
|
1975
|
-
- export
|
|
1976
|
-
- export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOST\\",\\"ROOT_URL\\",\\"HOST_INTERNAL\\",\\"HOST_CANONICAL\\",\\"ROOT_URL_INTERNAL\\",\\"DEPLOY_CLOUD_RUN_PROJECT_ID\\",\\"DEPLOY_CLOUD_RUN_REGION\\",\\"GCLOUD_DEPLOY_credentialsKey\\",\\"GCLOUD_RUN_canonicalHostSuffix\\",\\"API_URL\\"]"
|
|
741
|
+
- export GCLOUD_DEPLOY_credentialsKey="$CL_review_api_GCLOUD_DEPLOY_credentialsKey"
|
|
742
|
+
- export GCLOUD_RUN_canonicalHostSuffix="$CL_review_api_GCLOUD_RUN_canonicalHostSuffix"
|
|
743
|
+
- export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOST\\",\\"ROOT_URL\\",\\"HOST_INTERNAL\\",\\"HOST_CANONICAL\\",\\"ROOT_URL_INTERNAL\\",\\"CLOUD_SQL_INSTANCE_CONNECTION_NAME\\",\\"DB_NAME\\",\\"DB_USER\\",\\"DB_PASSWORD\\",\\"DATABASE_URL\\",\\"DATABASE_JDBC_URL\\",\\"CLOUD_RUN_JOB_TRIGGER_URL_migration\\",\\"CLOUD_RUN_JOB_TRIGGER_URL_send_reminders\\",\\"DEPLOY_CLOUD_RUN_PROJECT_ID\\",\\"DEPLOY_CLOUD_RUN_REGION\\",\\"GCLOUD_DEPLOY_credentialsKey\\",\\"GCLOUD_RUN_canonicalHostSuffix\\"]"
|
|
1977
744
|
- export DOCKER_REGISTRY="europe-west6-docker.pkg.dev"
|
|
1978
|
-
- export DOCKER_IMAGE="europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/review/
|
|
1979
|
-
- export DOCKER_CACHE_IMAGE="europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/
|
|
745
|
+
- 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"; })"
|
|
746
|
+
- export DOCKER_CACHE_IMAGE="europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/api"
|
|
1980
747
|
- export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"
|
|
1981
748
|
- export CLOUDSDK_CORE_DISABLE_PROMPTS="1"
|
|
1982
749
|
- echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
|
|
1983
750
|
- echo -e "\\e[0Ksection_start:$(date +%s):prepare[collapsed=true]\\r\\e[0KPrepare..."
|
|
1984
|
-
- gcloud auth activate-service-account --key-file=<(echo "$
|
|
751
|
+
- gcloud auth activate-service-account --key-file=<(echo "$CL_review_api_GCLOUD_DEPLOY_credentialsKey")
|
|
1985
752
|
- export GCLOUD_PROJECT_NUMBER=$(gcloud projects describe google-project-id --format="value(projectNumber)")
|
|
1986
753
|
- 'echo "GCLOUD_PROJECT_NUMBER: $GCLOUD_PROJECT_NUMBER"'
|
|
1987
754
|
- echo -e "\\e[0Ksection_end:$(date +%s):prepare\\r\\e[0K"
|
|
@@ -1991,7 +758,7 @@ variables:
|
|
|
1991
758
|
ENV_SHORT: |-
|
|
1992
759
|
review
|
|
1993
760
|
APP_DIR: |-
|
|
1994
|
-
|
|
761
|
+
api
|
|
1995
762
|
ENV_TYPE: |-
|
|
1996
763
|
review
|
|
1997
764
|
BUILD_INFO_BUILD_ID: |-
|
|
@@ -2001,46 +768,77 @@ variables:
|
|
|
2001
768
|
BUILD_INFO_CURRENT_VERSION: |-
|
|
2002
769
|
$(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 's/^/ /')
|
|
2003
770
|
HOST: |-
|
|
2004
|
-
$(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"; })-
|
|
771
|
+
$(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/^/ /')
|
|
2005
772
|
ROOT_URL: |-
|
|
2006
|
-
$(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"; })-
|
|
773
|
+
$(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 's/^/ /')
|
|
2007
774
|
HOST_INTERNAL: |-
|
|
2008
|
-
$(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"; })-
|
|
775
|
+
$(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/^/ /')
|
|
2009
776
|
HOST_CANONICAL: |-
|
|
2010
|
-
$(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"; })-
|
|
777
|
+
$(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/^/ /')
|
|
2011
778
|
ROOT_URL_INTERNAL: |-
|
|
2012
|
-
$(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"; })-
|
|
779
|
+
$(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 's/^/ /')
|
|
780
|
+
CLOUD_SQL_INSTANCE_CONNECTION_NAME: |-
|
|
781
|
+
projectId:region:instancename
|
|
782
|
+
DB_NAME: |-
|
|
783
|
+
$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api" | sed 's/^/ /')
|
|
784
|
+
DB_USER: |-
|
|
785
|
+
my-user
|
|
786
|
+
DB_PASSWORD: |-
|
|
787
|
+
$(printf %s "$CL_review_api_DB_PASSWORD" | sed 's/^/ /')
|
|
788
|
+
DATABASE_URL: |-
|
|
789
|
+
postgresql://$DB_USER:$DB_PASSWORD@localhost/$DB_NAME?host=/cloudsql/$CLOUD_SQL_INSTANCE_CONNECTION_NAME
|
|
790
|
+
DATABASE_JDBC_URL: |-
|
|
791
|
+
jdbc:postgresql:///$DB_NAME?cloudSqlInstance=$CLOUD_SQL_INSTANCE_CONNECTION_NAME&socketFactory=com.google.cloud.sql.postgres.SocketFactory&user=$DB_USER&password=$DB_PASSWORD
|
|
792
|
+
CLOUD_RUN_JOB_TRIGGER_URL_migration: |-
|
|
793
|
+
https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/jobs/$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api" | awk '{print tolower($0)}')-migration:run
|
|
794
|
+
CLOUD_RUN_JOB_TRIGGER_URL_send_reminders: |-
|
|
795
|
+
https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/jobs/$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api" | awk '{print tolower($0)}')-send-reminders:run
|
|
2013
796
|
DEPLOY_CLOUD_RUN_PROJECT_ID: |-
|
|
2014
797
|
google-project-id
|
|
2015
798
|
DEPLOY_CLOUD_RUN_REGION: |-
|
|
2016
799
|
europe-west6
|
|
2017
800
|
GCLOUD_RUN_canonicalHostSuffix: |-
|
|
2018
|
-
$(printf %s "$
|
|
2019
|
-
API_URL: |-
|
|
2020
|
-
$(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)}')/graphql" | sed 's/^/ /')
|
|
801
|
+
$(printf %s "$CL_review_api_GCLOUD_RUN_canonicalHostSuffix" | sed 's/^/ /')
|
|
2021
802
|
_ALL_ENV_VAR_KEYS: |-
|
|
2022
|
-
["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","HOST_INTERNAL","HOST_CANONICAL","ROOT_URL_INTERNAL","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"
|
|
803
|
+
["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","HOST_INTERNAL","HOST_CANONICAL","ROOT_URL_INTERNAL","CLOUD_SQL_INSTANCE_CONNECTION_NAME","DB_NAME","DB_USER","DB_PASSWORD","DATABASE_URL","DATABASE_JDBC_URL","CLOUD_RUN_JOB_TRIGGER_URL_migration","CLOUD_RUN_JOB_TRIGGER_URL_send_reminders","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]
|
|
2023
804
|
|
|
2024
805
|
EOF
|
|
2025
806
|
- echo -e "\\e[0Ksection_end:$(date +%s):writeenvvars\\r\\e[0K"
|
|
2026
807
|
- echo -e "\\e[0Ksection_start:$(date +%s):deploy[collapsed=true]\\r\\e[0KDeploy to cloud run"
|
|
2027
|
-
-
|
|
808
|
+
- set +e
|
|
809
|
+
- echo "ensuring Database..."
|
|
810
|
+
- gcloud sql databases create pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api --instance=instancename --project projectId
|
|
811
|
+
- set -e
|
|
812
|
+
- set +e
|
|
813
|
+
- gcloud scheduler jobs create http $(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api" | awk '{print tolower($0)}')-send-reminders-scheduler --project=google-project-id --location=europe-west6 --schedule="0 * * * *" --max-retry-attempts=0 --uri="https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/jobs/$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api" | awk '{print tolower($0)}')-send-reminders:run" --http-method=POST --oauth-service-account-email=$GCLOUD_PROJECT_NUMBER-compute@developer.gserviceaccount.com
|
|
814
|
+
- set -e
|
|
815
|
+
- gcloud scheduler jobs update http $(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api" | awk '{print tolower($0)}')-send-reminders-scheduler --project=google-project-id --location=europe-west6 --schedule="0 * * * *" --max-retry-attempts=0 --uri="https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/jobs/$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api" | awk '{print tolower($0)}')-send-reminders:run" --http-method=POST --oauth-service-account-email=$GCLOUD_PROJECT_NUMBER-compute@developer.gserviceaccount.com
|
|
816
|
+
- set +e
|
|
817
|
+
- gcloud run jobs create $(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api" | awk '{print tolower($0)}')-migration --command="yarn,migrate" --image=europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/review/api/$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }):$DOCKER_IMAGE_TAG --project=google-project-id --region=europe-west6 --set-cloudsql-instances=projectId:region:instancename --labels=customer-name=pan,component-name=api,app-name=test-app,env-type=review,env-name=review,build-type=node,cloud-run-job-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)}')-migration --memory=512Mi --task-timeout=10m --parallelism=1 --env-vars-file=____envvars.yaml --max-retries=0
|
|
818
|
+
- set -e
|
|
819
|
+
- 'gcloud run jobs update $(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api" | awk ''{print tolower($0)}'')-migration --command="yarn,migrate" --image=europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/review/api/$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }):$DOCKER_IMAGE_TAG --project=google-project-id --region=europe-west6 --set-cloudsql-instances=projectId:region:instancename --labels=customer-name=pan,component-name=api,app-name=test-app,env-type=review,env-name=review,build-type=node,cloud-run-job-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)}'')-migration --memory=512Mi --task-timeout=10m --parallelism=1 --env-vars-file=____envvars.yaml --max-retries=0 '
|
|
820
|
+
- set +e
|
|
821
|
+
- gcloud run jobs create $(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api" | awk '{print tolower($0)}')-send-reminders --command="yarn,job:send-reminders" --image=europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/review/api/$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }):$DOCKER_IMAGE_TAG --project=google-project-id --region=europe-west6 --set-cloudsql-instances=projectId:region:instancename --labels=customer-name=pan,component-name=api,app-name=test-app,env-type=review,env-name=review,build-type=node,cloud-run-job-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)}')-send-reminders --memory=512Mi --task-timeout=15m --parallelism=1 --env-vars-file=____envvars.yaml --max-retries=0
|
|
822
|
+
- set -e
|
|
823
|
+
- 'gcloud run jobs update $(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api" | awk ''{print tolower($0)}'')-send-reminders --command="yarn,job:send-reminders" --image=europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/review/api/$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }):$DOCKER_IMAGE_TAG --project=google-project-id --region=europe-west6 --set-cloudsql-instances=projectId:region:instancename --labels=customer-name=pan,component-name=api,app-name=test-app,env-type=review,env-name=review,build-type=node,cloud-run-job-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)}'')-send-reminders --memory=512Mi --task-timeout=15m --parallelism=1 --env-vars-file=____envvars.yaml --max-retries=0 '
|
|
824
|
+
- gcloud run deploy $(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api" | awk '{print tolower($0)}') --command="yarn,start" --image=europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/review/api/$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }):$DOCKER_IMAGE_TAG --project=google-project-id --region=europe-west6 --set-cloudsql-instances=projectId:region:instancename --labels=customer-name=pan,component-name=api,app-name=test-app,env-type=review,env-name=review,build-type=node,cloud-run-service-name=$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api" | awk '{print tolower($0)}') --env-vars-file=____envvars.yaml --min-instances=0 --max-instances=5 --cpu-throttling --allow-unauthenticated --ingress=all --cpu-boost
|
|
825
|
+
- gcloud run jobs execute $(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api" | awk '{print tolower($0)}')-migration --project=google-project-id --region=europe-west6
|
|
2028
826
|
- echo -e "\\e[0Ksection_end:$(date +%s):deploy\\r\\e[0K"
|
|
2029
827
|
- echo -e "\\e[0Ksection_start:$(date +%s):cleanup[collapsed=true]\\r\\e[0KCleanup"
|
|
2030
|
-
- 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"; })-
|
|
2031
|
-
- gcloud artifacts docker images list europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/review/
|
|
2032
|
-
- gcloud artifacts docker images list europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/
|
|
828
|
+
- 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
|
|
829
|
+
- 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
|
|
830
|
+
- 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
|
|
2033
831
|
- set +e
|
|
2034
|
-
- gcloud artifacts docker images delete europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/review/
|
|
832
|
+
- gcloud artifacts docker images delete europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/review/api --quiet --delete-tags
|
|
2035
833
|
- set -e
|
|
2036
834
|
- echo -e "\\e[0Ksection_end:$(date +%s):cleanup\\r\\e[0K"
|
|
2037
835
|
- echo 'Uploading SBOM to Dependency Track'
|
|
2038
|
-
- /dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/
|
|
2039
|
-
- 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"; })-
|
|
836
|
+
- /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
|
|
837
|
+
- 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
|
|
2040
838
|
environment:
|
|
2041
|
-
name: review/$CI_COMMIT_REF_NAME/
|
|
839
|
+
name: review/$CI_COMMIT_REF_NAME/api
|
|
2042
840
|
url: $CL_GITLAB_ENVIRONMENT_URL
|
|
2043
|
-
on_stop: '
|
|
841
|
+
on_stop: 'api ๐ Stop โ ๏ธ | review '
|
|
2044
842
|
auto_stop_in: 1 week
|
|
2045
843
|
artifacts:
|
|
2046
844
|
reports:
|
|
@@ -2049,20 +847,22 @@ variables:
|
|
|
2049
847
|
- when: on_success
|
|
2050
848
|
if: $CI_MERGE_REQUEST_ID
|
|
2051
849
|
needs:
|
|
2052
|
-
- job:
|
|
850
|
+
- job: api ๐ฎ lint
|
|
2053
851
|
artifacts: false
|
|
2054
|
-
- job:
|
|
852
|
+
- job: 'api ๐จ app | review '
|
|
2055
853
|
artifacts: false
|
|
2056
|
-
- job:
|
|
854
|
+
- job: 'api ๐จ docker | review '
|
|
2057
855
|
artifacts: false
|
|
2058
|
-
- job:
|
|
856
|
+
- job: api ๐งช test
|
|
2059
857
|
artifacts: false
|
|
2060
|
-
- job: '
|
|
858
|
+
- job: 'api ๐งพ sbom | review '
|
|
2061
859
|
artifacts: true
|
|
860
|
+
- job: api ๐ก audit
|
|
861
|
+
artifacts: false
|
|
2062
862
|
retry: *a1
|
|
2063
863
|
interruptible: true
|
|
2064
864
|
allow_failure: false
|
|
2065
|
-
'
|
|
865
|
+
'api ๐ Stop โ ๏ธ | review ':
|
|
2066
866
|
stage: stop review
|
|
2067
867
|
image: path/to/docker/gcloud:the-version
|
|
2068
868
|
variables:
|
|
@@ -2075,19 +875,27 @@ variables:
|
|
|
2075
875
|
- export CLOUDSDK_CORE_DISABLE_PROMPTS="1"
|
|
2076
876
|
- echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
|
|
2077
877
|
- set +e
|
|
2078
|
-
- gcloud auth activate-service-account --key-file=<(echo "$
|
|
2079
|
-
- 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"; })-
|
|
2080
|
-
- gcloud
|
|
2081
|
-
- gcloud
|
|
878
|
+
- gcloud auth activate-service-account --key-file=<(echo "$CL_review_api_GCLOUD_DEPLOY_credentialsKey")
|
|
879
|
+
- 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
|
|
880
|
+
- gcloud scheduler jobs 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)}')-send-reminders-scheduler --project=google-project-id --location=europe-west6
|
|
881
|
+
- gcloud run jobs executions list --project=google-project-id --region=europe-west6 --job $(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api" | awk '{print tolower($0)}')-migration --format="value(name)" | xargs -I {} gcloud run jobs executions delete {} --quiet --project=google-project-id --region=europe-west6
|
|
882
|
+
- gcloud run jobs 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)}')-migration --project=google-project-id --region=europe-west6
|
|
883
|
+
- gcloud run jobs executions list --project=google-project-id --region=europe-west6 --job $(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api" | awk '{print tolower($0)}')-send-reminders --format="value(name)" | xargs -I {} gcloud run jobs executions delete {} --quiet --project=google-project-id --region=europe-west6
|
|
884
|
+
- gcloud run jobs 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)}')-send-reminders --project=google-project-id --region=europe-west6
|
|
885
|
+
- echo "deleting database 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..."
|
|
886
|
+
- echo "๐ this can take multiple attemps (3-5min), because google cloud run may still have a connection to the database after the cloud run service is shut down"
|
|
887
|
+
- "\\n until gcloud sql databases delete pan-test-app-review-$([ -n \\"$CI_MERGE_REQUEST_IID\\" ] && echo \\"mr$CI_MERGE_REQUEST_IID\\" || { [ -n \\"$CI_COMMIT_REF_SLUG\\" ] && echo \\"$CI_COMMIT_REF_SLUG\\" || echo \\"unknown\\"; })-api --instance=instancename --project projectId\\n do\\n echo \\"Trying again.\\"\\n sleep 10\\n done\\n "
|
|
888
|
+
- 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"; }) --quiet --delete-tags
|
|
889
|
+
- 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
|
|
2082
890
|
- set +e
|
|
2083
|
-
- gcloud artifacts docker images delete europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/review/
|
|
891
|
+
- gcloud artifacts docker images delete europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/review/api --quiet --delete-tags
|
|
2084
892
|
- set -e
|
|
2085
893
|
- echo 'Disabling component in Dependency Track'
|
|
2086
|
-
- /dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" disable "pan-test-app/
|
|
894
|
+
- /dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" disable "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)}')" || true
|
|
2087
895
|
- set -e
|
|
2088
|
-
- 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"; })-
|
|
896
|
+
- 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
|
|
2089
897
|
environment:
|
|
2090
|
-
name: review/$CI_COMMIT_REF_NAME/
|
|
898
|
+
name: review/$CI_COMMIT_REF_NAME/api
|
|
2091
899
|
url: $CL_GITLAB_ENVIRONMENT_URL
|
|
2092
900
|
action: stop
|
|
2093
901
|
artifacts:
|
|
@@ -2102,7 +910,109 @@ variables:
|
|
|
2102
910
|
retry: *a1
|
|
2103
911
|
interruptible: true
|
|
2104
912
|
allow_failure: true
|
|
2105
|
-
'
|
|
913
|
+
'api ๐จ app | stage ':
|
|
914
|
+
stage: build
|
|
915
|
+
image: path/to/docker/jobs-default:the-version
|
|
916
|
+
variables:
|
|
917
|
+
KUBERNETES_CPU_REQUEST: '0.45'
|
|
918
|
+
KUBERNETES_MEMORY_REQUEST: 1Gi
|
|
919
|
+
KUBERNETES_MEMORY_LIMIT: 4Gi
|
|
920
|
+
script:
|
|
921
|
+
- echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
|
|
922
|
+
- export ENV_SHORT="stage"
|
|
923
|
+
- export APP_DIR="api"
|
|
924
|
+
- export ENV_TYPE="stage"
|
|
925
|
+
- export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
|
|
926
|
+
- export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
|
|
927
|
+
- 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")"
|
|
928
|
+
- export HOST="$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
929
|
+
- export ROOT_URL="https://$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
930
|
+
- export HOST_INTERNAL="$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
931
|
+
- export HOST_CANONICAL="$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
932
|
+
- export ROOT_URL_INTERNAL="https://$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
933
|
+
- export CLOUD_SQL_INSTANCE_CONNECTION_NAME="projectId:region:instancename"
|
|
934
|
+
- export DB_NAME="pan-test-app-stage-api"
|
|
935
|
+
- export DB_USER="my-user"
|
|
936
|
+
- export DB_PASSWORD="$CL_stage_api_DB_PASSWORD"
|
|
937
|
+
- export DATABASE_URL="postgresql://$DB_USER:$DB_PASSWORD@localhost/$DB_NAME?host=/cloudsql/$CLOUD_SQL_INSTANCE_CONNECTION_NAME"
|
|
938
|
+
- export DATABASE_JDBC_URL="jdbc:postgresql:///$DB_NAME?cloudSqlInstance=$CLOUD_SQL_INSTANCE_CONNECTION_NAME&socketFactory=com.google.cloud.sql.postgres.SocketFactory&user=$DB_USER&password=$DB_PASSWORD"
|
|
939
|
+
- export CLOUD_RUN_JOB_TRIGGER_URL_migration="https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/jobs/pan-test-app-stage-api-migration:run"
|
|
940
|
+
- export CLOUD_RUN_JOB_TRIGGER_URL_send_reminders="https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/jobs/pan-test-app-stage-api-send-reminders:run"
|
|
941
|
+
- export DEPLOY_CLOUD_RUN_PROJECT_ID="google-project-id"
|
|
942
|
+
- export DEPLOY_CLOUD_RUN_REGION="europe-west6"
|
|
943
|
+
- export GCLOUD_DEPLOY_credentialsKey="$CL_stage_api_GCLOUD_DEPLOY_credentialsKey"
|
|
944
|
+
- export GCLOUD_RUN_canonicalHostSuffix="$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix"
|
|
945
|
+
- export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOST\\",\\"ROOT_URL\\",\\"HOST_INTERNAL\\",\\"HOST_CANONICAL\\",\\"ROOT_URL_INTERNAL\\",\\"CLOUD_SQL_INSTANCE_CONNECTION_NAME\\",\\"DB_NAME\\",\\"DB_USER\\",\\"DB_PASSWORD\\",\\"DATABASE_URL\\",\\"DATABASE_JDBC_URL\\",\\"CLOUD_RUN_JOB_TRIGGER_URL_migration\\",\\"CLOUD_RUN_JOB_TRIGGER_URL_send_reminders\\",\\"DEPLOY_CLOUD_RUN_PROJECT_ID\\",\\"DEPLOY_CLOUD_RUN_REGION\\",\\"GCLOUD_DEPLOY_credentialsKey\\",\\"GCLOUD_RUN_canonicalHostSuffix\\"]"
|
|
946
|
+
- echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
|
|
947
|
+
- echo -e "\\e[0Ksection_start:$(date +%s):write-dotenv-api[collapsed=true]\\r\\e[0Kwrite dot env"
|
|
948
|
+
- |-
|
|
949
|
+
cat <<EOF > api/.env
|
|
950
|
+
ENV_SHORT=stage
|
|
951
|
+
APP_DIR=api
|
|
952
|
+
ENV_TYPE=stage
|
|
953
|
+
HOST=$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')
|
|
954
|
+
ROOT_URL=https://$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')
|
|
955
|
+
HOST_INTERNAL=$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')
|
|
956
|
+
HOST_CANONICAL=$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')
|
|
957
|
+
ROOT_URL_INTERNAL=https://$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')
|
|
958
|
+
CLOUD_SQL_INSTANCE_CONNECTION_NAME=projectId:region:instancename
|
|
959
|
+
DB_NAME=pan-test-app-stage-api
|
|
960
|
+
DB_USER=my-user
|
|
961
|
+
DB_PASSWORD=$CL_stage_api_DB_PASSWORD
|
|
962
|
+
DATABASE_URL=postgresql://$DB_USER:$DB_PASSWORD@localhost/$DB_NAME?host=/cloudsql/$CLOUD_SQL_INSTANCE_CONNECTION_NAME
|
|
963
|
+
DATABASE_JDBC_URL=jdbc:postgresql:///$DB_NAME?cloudSqlInstance=$CLOUD_SQL_INSTANCE_CONNECTION_NAME&socketFactory=com.google.cloud.sql.postgres.SocketFactory&user=$DB_USER&password=$DB_PASSWORD
|
|
964
|
+
CLOUD_RUN_JOB_TRIGGER_URL_migration=https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/jobs/pan-test-app-stage-api-migration:run
|
|
965
|
+
CLOUD_RUN_JOB_TRIGGER_URL_send_reminders=https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/jobs/pan-test-app-stage-api-send-reminders:run
|
|
966
|
+
DEPLOY_CLOUD_RUN_PROJECT_ID=google-project-id
|
|
967
|
+
DEPLOY_CLOUD_RUN_REGION=europe-west6
|
|
968
|
+
GCLOUD_DEPLOY_credentialsKey=$CL_stage_api_GCLOUD_DEPLOY_credentialsKey
|
|
969
|
+
GCLOUD_RUN_canonicalHostSuffix=$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix
|
|
970
|
+
_ALL_ENV_VAR_KEYS=["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","HOST_INTERNAL","HOST_CANONICAL","ROOT_URL_INTERNAL","CLOUD_SQL_INSTANCE_CONNECTION_NAME","DB_NAME","DB_USER","DB_PASSWORD","DATABASE_URL","DATABASE_JDBC_URL","CLOUD_RUN_JOB_TRIGGER_URL_migration","CLOUD_RUN_JOB_TRIGGER_URL_send_reminders","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]
|
|
971
|
+
EOF
|
|
972
|
+
- echo -e "\\e[0Ksection_end:$(date +%s):write-dotenv-api\\r\\e[0K"
|
|
973
|
+
- echo '{"id":"$(git describe --tags 2>/dev/null || git rev-parse HEAD)","time":"$CI_JOB_STARTED_AT"}' > api/__build_info.json
|
|
974
|
+
- echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"
|
|
975
|
+
- if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
|
|
976
|
+
- if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
|
|
977
|
+
- echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"
|
|
978
|
+
- cd api
|
|
979
|
+
- echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"
|
|
980
|
+
- if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
|
|
981
|
+
- if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
|
|
982
|
+
- echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"
|
|
983
|
+
- echo -e "\\e[0Ksection_start:$(date +%s):yarninstall[collapsed=true]\\r\\e[0KYarn install"
|
|
984
|
+
- yarn install --immutable
|
|
985
|
+
- echo -e "\\e[0Ksection_end:$(date +%s):yarninstall\\r\\e[0K"
|
|
986
|
+
- yarn build
|
|
987
|
+
cache:
|
|
988
|
+
- key: api-yarn
|
|
989
|
+
policy: pull-push
|
|
990
|
+
paths:
|
|
991
|
+
- api/.yarn
|
|
992
|
+
- key: api-node-modules
|
|
993
|
+
policy: pull-push
|
|
994
|
+
paths:
|
|
995
|
+
- api/node_modules
|
|
996
|
+
- key: api-next-cache
|
|
997
|
+
policy: pull-push
|
|
998
|
+
paths:
|
|
999
|
+
- api/.next/cache
|
|
1000
|
+
artifacts:
|
|
1001
|
+
paths:
|
|
1002
|
+
- api/__build_info.json
|
|
1003
|
+
- api/.next
|
|
1004
|
+
- api/dist
|
|
1005
|
+
exclude:
|
|
1006
|
+
- api/.env
|
|
1007
|
+
expire_in: 1 day
|
|
1008
|
+
when: always
|
|
1009
|
+
reports: {}
|
|
1010
|
+
rules:
|
|
1011
|
+
- if: $CI_COMMIT_TAG
|
|
1012
|
+
needs: []
|
|
1013
|
+
retry: *a1
|
|
1014
|
+
interruptible: true
|
|
1015
|
+
'api ๐จ docker | stage ':
|
|
2106
1016
|
stage: build
|
|
2107
1017
|
image: path/to/docker/docker-build:the-version
|
|
2108
1018
|
services:
|
|
@@ -2119,25 +1029,25 @@ variables:
|
|
|
2119
1029
|
KUBERNETES_MEMORY_LIMIT: 2Gi
|
|
2120
1030
|
script:
|
|
2121
1031
|
- echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
|
|
2122
|
-
- export APP_DIR="
|
|
1032
|
+
- export APP_DIR="api"
|
|
2123
1033
|
- export DOCKER_BUILD_CONTEXT="."
|
|
2124
1034
|
- export DOCKER_REGISTRY="europe-west6-docker.pkg.dev"
|
|
2125
|
-
- export DOCKER_IMAGE="europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/stage/
|
|
2126
|
-
- export DOCKER_CACHE_IMAGE="europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/
|
|
1035
|
+
- export DOCKER_IMAGE="europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/stage/api"
|
|
1036
|
+
- export DOCKER_CACHE_IMAGE="europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/api"
|
|
2127
1037
|
- export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"
|
|
2128
1038
|
- |-
|
|
2129
1039
|
export DOCKER_COPY_AND_INSTALL_APP="COPY --chown=node:node $APP_DIR .
|
|
2130
1040
|
RUN yarn plugin import workspace-tools
|
|
2131
1041
|
RUN yarn workspaces focus --production && yarn rebuild"
|
|
2132
1042
|
- |-
|
|
2133
|
-
export DOCKER_COPY_WORKSPACE_FILES="COPY --chown=node:node
|
|
2134
|
-
COPY --chown=node:node
|
|
1043
|
+
export DOCKER_COPY_WORKSPACE_FILES="COPY --chown=node:node api/package.json /app/api/package.json
|
|
1044
|
+
COPY --chown=node:node api/yarn.lock /app/api/yarn.lock
|
|
2135
1045
|
COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
|
|
2136
1046
|
COPY --chown=node:node .yarn /app/.yarn"
|
|
2137
1047
|
- echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
|
|
2138
1048
|
- ensureNodeDockerfile
|
|
2139
1049
|
- echo -e "\\e[0Ksection_start:$(date +%s):docker-login[collapsed=true]\\r\\e[0KDocker Login"
|
|
2140
|
-
- gcloud auth activate-service-account --key-file=<(echo "$
|
|
1050
|
+
- gcloud auth activate-service-account --key-file=<(echo "$CL_stage_api_GCLOUD_DEPLOY_credentialsKey")
|
|
2141
1051
|
- gcloud auth configure-docker europe-west6-docker.pkg.dev
|
|
2142
1052
|
- echo -e "\\e[0Ksection_end:$(date +%s):docker-login\\r\\e[0K"
|
|
2143
1053
|
- echo -e "\\e[0Ksection_start:$(date +%s):docker-build[collapsed=true]\\r\\e[0KDocker build"
|
|
@@ -2149,25 +1059,24 @@ variables:
|
|
|
2149
1059
|
- docker push $DOCKER_CACHE_IMAGE
|
|
2150
1060
|
- echo -e "\\e[0Ksection_end:$(date +%s):docker-push\\r\\e[0K"
|
|
2151
1061
|
cache:
|
|
2152
|
-
- key:
|
|
1062
|
+
- key: api-yarn
|
|
2153
1063
|
policy: pull
|
|
2154
1064
|
paths:
|
|
2155
|
-
-
|
|
1065
|
+
- api/.yarn
|
|
2156
1066
|
rules:
|
|
2157
1067
|
- if: $CI_COMMIT_TAG
|
|
2158
1068
|
needs:
|
|
2159
|
-
-
|
|
2160
|
-
artifacts: true
|
|
1069
|
+
- 'api ๐จ app | stage '
|
|
2161
1070
|
retry: *a1
|
|
2162
1071
|
interruptible: true
|
|
2163
|
-
'
|
|
1072
|
+
'api ๐งพ sbom | stage ':
|
|
2164
1073
|
stage: build
|
|
2165
1074
|
image: aquasec/trivy:0.38.3
|
|
2166
1075
|
variables: {}
|
|
2167
1076
|
script:
|
|
2168
1077
|
- echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
|
|
2169
1078
|
- echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
|
|
2170
|
-
- trivy fs --quiet --format cyclonedx --output "__sbom.json"
|
|
1079
|
+
- trivy fs --quiet --format cyclonedx --output "__sbom.json" api
|
|
2171
1080
|
artifacts:
|
|
2172
1081
|
paths:
|
|
2173
1082
|
- __sbom.json
|
|
@@ -2177,7 +1086,7 @@ variables:
|
|
|
2177
1086
|
retry: *a1
|
|
2178
1087
|
interruptible: true
|
|
2179
1088
|
allow_failure: true
|
|
2180
|
-
'
|
|
1089
|
+
'api ๐ Deploy | stage ':
|
|
2181
1090
|
stage: deploy stage
|
|
2182
1091
|
image: path/to/docker/gcloud:the-version
|
|
2183
1092
|
variables:
|
|
@@ -2187,30 +1096,37 @@ variables:
|
|
|
2187
1096
|
script:
|
|
2188
1097
|
- echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
|
|
2189
1098
|
- export ENV_SHORT="stage"
|
|
2190
|
-
- export APP_DIR="
|
|
1099
|
+
- export APP_DIR="api"
|
|
2191
1100
|
- export ENV_TYPE="stage"
|
|
2192
1101
|
- export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
|
|
2193
1102
|
- export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
|
|
2194
1103
|
- export BUILD_INFO_CURRENT_VERSION="$(tag=$(git ls-remote origin "refs/tags/v*[0-9]" 2>/dev/null | cut -f 2- | sort -V | tail -1 | sed 's/refs\\/tags\\/v//'); [ -z "$tag" ] && echo "0.0.0" || echo "$tag")"
|
|
2195
|
-
- export HOST="$(printf %s "pan-test-app-stage-
|
|
2196
|
-
- export ROOT_URL="https://$(printf %s "pan-test-app-stage-
|
|
2197
|
-
- export HOST_INTERNAL="$(printf %s "pan-test-app-stage-
|
|
2198
|
-
- export HOST_CANONICAL="$(printf %s "pan-test-app-stage-
|
|
2199
|
-
- export ROOT_URL_INTERNAL="https://$(printf %s "pan-test-app-stage-
|
|
1104
|
+
- export HOST="$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
1105
|
+
- export ROOT_URL="https://$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
1106
|
+
- export HOST_INTERNAL="$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
1107
|
+
- export HOST_CANONICAL="$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
1108
|
+
- export ROOT_URL_INTERNAL="https://$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
1109
|
+
- export CLOUD_SQL_INSTANCE_CONNECTION_NAME="projectId:region:instancename"
|
|
1110
|
+
- export DB_NAME="pan-test-app-stage-api"
|
|
1111
|
+
- export DB_USER="my-user"
|
|
1112
|
+
- export DB_PASSWORD="$CL_stage_api_DB_PASSWORD"
|
|
1113
|
+
- export DATABASE_URL="postgresql://$DB_USER:$DB_PASSWORD@localhost/$DB_NAME?host=/cloudsql/$CLOUD_SQL_INSTANCE_CONNECTION_NAME"
|
|
1114
|
+
- export DATABASE_JDBC_URL="jdbc:postgresql:///$DB_NAME?cloudSqlInstance=$CLOUD_SQL_INSTANCE_CONNECTION_NAME&socketFactory=com.google.cloud.sql.postgres.SocketFactory&user=$DB_USER&password=$DB_PASSWORD"
|
|
1115
|
+
- export CLOUD_RUN_JOB_TRIGGER_URL_migration="https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/jobs/pan-test-app-stage-api-migration:run"
|
|
1116
|
+
- export CLOUD_RUN_JOB_TRIGGER_URL_send_reminders="https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/jobs/pan-test-app-stage-api-send-reminders:run"
|
|
2200
1117
|
- export DEPLOY_CLOUD_RUN_PROJECT_ID="google-project-id"
|
|
2201
1118
|
- export DEPLOY_CLOUD_RUN_REGION="europe-west6"
|
|
2202
|
-
- export GCLOUD_DEPLOY_credentialsKey="$
|
|
2203
|
-
- export GCLOUD_RUN_canonicalHostSuffix="$
|
|
2204
|
-
- export
|
|
2205
|
-
- export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOST\\",\\"ROOT_URL\\",\\"HOST_INTERNAL\\",\\"HOST_CANONICAL\\",\\"ROOT_URL_INTERNAL\\",\\"DEPLOY_CLOUD_RUN_PROJECT_ID\\",\\"DEPLOY_CLOUD_RUN_REGION\\",\\"GCLOUD_DEPLOY_credentialsKey\\",\\"GCLOUD_RUN_canonicalHostSuffix\\",\\"API_URL\\"]"
|
|
1119
|
+
- export GCLOUD_DEPLOY_credentialsKey="$CL_stage_api_GCLOUD_DEPLOY_credentialsKey"
|
|
1120
|
+
- export GCLOUD_RUN_canonicalHostSuffix="$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix"
|
|
1121
|
+
- export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOST\\",\\"ROOT_URL\\",\\"HOST_INTERNAL\\",\\"HOST_CANONICAL\\",\\"ROOT_URL_INTERNAL\\",\\"CLOUD_SQL_INSTANCE_CONNECTION_NAME\\",\\"DB_NAME\\",\\"DB_USER\\",\\"DB_PASSWORD\\",\\"DATABASE_URL\\",\\"DATABASE_JDBC_URL\\",\\"CLOUD_RUN_JOB_TRIGGER_URL_migration\\",\\"CLOUD_RUN_JOB_TRIGGER_URL_send_reminders\\",\\"DEPLOY_CLOUD_RUN_PROJECT_ID\\",\\"DEPLOY_CLOUD_RUN_REGION\\",\\"GCLOUD_DEPLOY_credentialsKey\\",\\"GCLOUD_RUN_canonicalHostSuffix\\"]"
|
|
2206
1122
|
- export DOCKER_REGISTRY="europe-west6-docker.pkg.dev"
|
|
2207
|
-
- export DOCKER_IMAGE="europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/stage/
|
|
2208
|
-
- export DOCKER_CACHE_IMAGE="europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/
|
|
1123
|
+
- export DOCKER_IMAGE="europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/stage/api"
|
|
1124
|
+
- export DOCKER_CACHE_IMAGE="europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/api"
|
|
2209
1125
|
- export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"
|
|
2210
1126
|
- export CLOUDSDK_CORE_DISABLE_PROMPTS="1"
|
|
2211
1127
|
- echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
|
|
2212
1128
|
- echo -e "\\e[0Ksection_start:$(date +%s):prepare[collapsed=true]\\r\\e[0KPrepare..."
|
|
2213
|
-
- gcloud auth activate-service-account --key-file=<(echo "$
|
|
1129
|
+
- gcloud auth activate-service-account --key-file=<(echo "$CL_stage_api_GCLOUD_DEPLOY_credentialsKey")
|
|
2214
1130
|
- export GCLOUD_PROJECT_NUMBER=$(gcloud projects describe google-project-id --format="value(projectNumber)")
|
|
2215
1131
|
- 'echo "GCLOUD_PROJECT_NUMBER: $GCLOUD_PROJECT_NUMBER"'
|
|
2216
1132
|
- echo -e "\\e[0Ksection_end:$(date +%s):prepare\\r\\e[0K"
|
|
@@ -2220,7 +1136,7 @@ variables:
|
|
|
2220
1136
|
ENV_SHORT: |-
|
|
2221
1137
|
stage
|
|
2222
1138
|
APP_DIR: |-
|
|
2223
|
-
|
|
1139
|
+
api
|
|
2224
1140
|
ENV_TYPE: |-
|
|
2225
1141
|
stage
|
|
2226
1142
|
BUILD_INFO_BUILD_ID: |-
|
|
@@ -2230,43 +1146,74 @@ variables:
|
|
|
2230
1146
|
BUILD_INFO_CURRENT_VERSION: |-
|
|
2231
1147
|
$(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 's/^/ /')
|
|
2232
1148
|
HOST: |-
|
|
2233
|
-
$(printf %s "$(printf %s "pan-test-app-stage-
|
|
1149
|
+
$(printf %s "$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
|
|
2234
1150
|
ROOT_URL: |-
|
|
2235
|
-
$(printf %s "https://$(printf %s "pan-test-app-stage-
|
|
1151
|
+
$(printf %s "https://$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
|
|
2236
1152
|
HOST_INTERNAL: |-
|
|
2237
|
-
$(printf %s "$(printf %s "pan-test-app-stage-
|
|
1153
|
+
$(printf %s "$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
|
|
2238
1154
|
HOST_CANONICAL: |-
|
|
2239
|
-
$(printf %s "$(printf %s "pan-test-app-stage-
|
|
1155
|
+
$(printf %s "$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
|
|
2240
1156
|
ROOT_URL_INTERNAL: |-
|
|
2241
|
-
$(printf %s "https://$(printf %s "pan-test-app-stage-
|
|
1157
|
+
$(printf %s "https://$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
|
|
1158
|
+
CLOUD_SQL_INSTANCE_CONNECTION_NAME: |-
|
|
1159
|
+
projectId:region:instancename
|
|
1160
|
+
DB_NAME: |-
|
|
1161
|
+
pan-test-app-stage-api
|
|
1162
|
+
DB_USER: |-
|
|
1163
|
+
my-user
|
|
1164
|
+
DB_PASSWORD: |-
|
|
1165
|
+
$(printf %s "$CL_stage_api_DB_PASSWORD" | sed 's/^/ /')
|
|
1166
|
+
DATABASE_URL: |-
|
|
1167
|
+
postgresql://$DB_USER:$DB_PASSWORD@localhost/$DB_NAME?host=/cloudsql/$CLOUD_SQL_INSTANCE_CONNECTION_NAME
|
|
1168
|
+
DATABASE_JDBC_URL: |-
|
|
1169
|
+
jdbc:postgresql:///$DB_NAME?cloudSqlInstance=$CLOUD_SQL_INSTANCE_CONNECTION_NAME&socketFactory=com.google.cloud.sql.postgres.SocketFactory&user=$DB_USER&password=$DB_PASSWORD
|
|
1170
|
+
CLOUD_RUN_JOB_TRIGGER_URL_migration: |-
|
|
1171
|
+
https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/jobs/pan-test-app-stage-api-migration:run
|
|
1172
|
+
CLOUD_RUN_JOB_TRIGGER_URL_send_reminders: |-
|
|
1173
|
+
https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/jobs/pan-test-app-stage-api-send-reminders:run
|
|
2242
1174
|
DEPLOY_CLOUD_RUN_PROJECT_ID: |-
|
|
2243
1175
|
google-project-id
|
|
2244
1176
|
DEPLOY_CLOUD_RUN_REGION: |-
|
|
2245
1177
|
europe-west6
|
|
2246
1178
|
GCLOUD_RUN_canonicalHostSuffix: |-
|
|
2247
|
-
$(printf %s "$
|
|
2248
|
-
API_URL: |-
|
|
2249
|
-
$(printf %s "https://$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')/graphql" | sed 's/^/ /')
|
|
1179
|
+
$(printf %s "$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | sed 's/^/ /')
|
|
2250
1180
|
_ALL_ENV_VAR_KEYS: |-
|
|
2251
|
-
["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","HOST_INTERNAL","HOST_CANONICAL","ROOT_URL_INTERNAL","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"
|
|
1181
|
+
["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","HOST_INTERNAL","HOST_CANONICAL","ROOT_URL_INTERNAL","CLOUD_SQL_INSTANCE_CONNECTION_NAME","DB_NAME","DB_USER","DB_PASSWORD","DATABASE_URL","DATABASE_JDBC_URL","CLOUD_RUN_JOB_TRIGGER_URL_migration","CLOUD_RUN_JOB_TRIGGER_URL_send_reminders","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]
|
|
2252
1182
|
|
|
2253
1183
|
EOF
|
|
2254
1184
|
- echo -e "\\e[0Ksection_end:$(date +%s):writeenvvars\\r\\e[0K"
|
|
2255
1185
|
- echo -e "\\e[0Ksection_start:$(date +%s):deploy[collapsed=true]\\r\\e[0KDeploy to cloud run"
|
|
2256
|
-
-
|
|
1186
|
+
- set +e
|
|
1187
|
+
- echo "ensuring Database..."
|
|
1188
|
+
- gcloud sql databases create pan-test-app-stage-api --instance=instancename --project projectId
|
|
1189
|
+
- set -e
|
|
1190
|
+
- set +e
|
|
1191
|
+
- gcloud scheduler jobs create http pan-test-app-stage-api-send-reminders-scheduler --project=google-project-id --location=europe-west6 --schedule="0 * * * *" --max-retry-attempts=0 --uri="https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/jobs/pan-test-app-stage-api-send-reminders:run" --http-method=POST --oauth-service-account-email=$GCLOUD_PROJECT_NUMBER-compute@developer.gserviceaccount.com
|
|
1192
|
+
- set -e
|
|
1193
|
+
- gcloud scheduler jobs update http pan-test-app-stage-api-send-reminders-scheduler --project=google-project-id --location=europe-west6 --schedule="0 * * * *" --max-retry-attempts=0 --uri="https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/jobs/pan-test-app-stage-api-send-reminders:run" --http-method=POST --oauth-service-account-email=$GCLOUD_PROJECT_NUMBER-compute@developer.gserviceaccount.com
|
|
1194
|
+
- set +e
|
|
1195
|
+
- gcloud run jobs create pan-test-app-stage-api-migration --command="yarn,migrate" --image=europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/stage/api:$DOCKER_IMAGE_TAG --project=google-project-id --region=europe-west6 --set-cloudsql-instances=projectId:region:instancename --labels=customer-name=pan,component-name=api,app-name=test-app,env-type=stage,env-name=stage,build-type=node,cloud-run-job-name=pan-test-app-stage-api-migration --memory=512Mi --task-timeout=10m --parallelism=1 --env-vars-file=____envvars.yaml --max-retries=0
|
|
1196
|
+
- set -e
|
|
1197
|
+
- 'gcloud run jobs update pan-test-app-stage-api-migration --command="yarn,migrate" --image=europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/stage/api:$DOCKER_IMAGE_TAG --project=google-project-id --region=europe-west6 --set-cloudsql-instances=projectId:region:instancename --labels=customer-name=pan,component-name=api,app-name=test-app,env-type=stage,env-name=stage,build-type=node,cloud-run-job-name=pan-test-app-stage-api-migration --memory=512Mi --task-timeout=10m --parallelism=1 --env-vars-file=____envvars.yaml --max-retries=0 '
|
|
1198
|
+
- set +e
|
|
1199
|
+
- gcloud run jobs create pan-test-app-stage-api-send-reminders --command="yarn,job:send-reminders" --image=europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/stage/api:$DOCKER_IMAGE_TAG --project=google-project-id --region=europe-west6 --set-cloudsql-instances=projectId:region:instancename --labels=customer-name=pan,component-name=api,app-name=test-app,env-type=stage,env-name=stage,build-type=node,cloud-run-job-name=pan-test-app-stage-api-send-reminders --memory=512Mi --task-timeout=15m --parallelism=1 --env-vars-file=____envvars.yaml --max-retries=0
|
|
1200
|
+
- set -e
|
|
1201
|
+
- 'gcloud run jobs update pan-test-app-stage-api-send-reminders --command="yarn,job:send-reminders" --image=europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/stage/api:$DOCKER_IMAGE_TAG --project=google-project-id --region=europe-west6 --set-cloudsql-instances=projectId:region:instancename --labels=customer-name=pan,component-name=api,app-name=test-app,env-type=stage,env-name=stage,build-type=node,cloud-run-job-name=pan-test-app-stage-api-send-reminders --memory=512Mi --task-timeout=15m --parallelism=1 --env-vars-file=____envvars.yaml --max-retries=0 '
|
|
1202
|
+
- gcloud run deploy pan-test-app-stage-api --command="yarn,start" --image=europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/stage/api:$DOCKER_IMAGE_TAG --project=google-project-id --region=europe-west6 --set-cloudsql-instances=projectId:region:instancename --labels=customer-name=pan,component-name=api,app-name=test-app,env-type=stage,env-name=stage,build-type=node,cloud-run-service-name=pan-test-app-stage-api --env-vars-file=____envvars.yaml --min-instances=0 --max-instances=5 --cpu-throttling --allow-unauthenticated --ingress=all --cpu-boost
|
|
1203
|
+
- gcloud run jobs execute pan-test-app-stage-api-migration --project=google-project-id --region=europe-west6
|
|
2257
1204
|
- echo -e "\\e[0Ksection_end:$(date +%s):deploy\\r\\e[0K"
|
|
2258
1205
|
- echo -e "\\e[0Ksection_start:$(date +%s):cleanup[collapsed=true]\\r\\e[0KCleanup"
|
|
2259
|
-
- gcloud run revisions list --project=google-project-id --region=europe-west6 --service=pan-test-app-stage-
|
|
2260
|
-
- gcloud artifacts docker images list europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/stage/
|
|
2261
|
-
- gcloud artifacts docker images list europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/
|
|
1206
|
+
- 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
|
|
1207
|
+
- 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
|
|
1208
|
+
- 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
|
|
2262
1209
|
- echo -e "\\e[0Ksection_end:$(date +%s):cleanup\\r\\e[0K"
|
|
2263
1210
|
- echo 'Uploading SBOM to Dependency Track'
|
|
2264
|
-
- /dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/
|
|
2265
|
-
- echo "CL_GITLAB_ENVIRONMENT_URL=https://$(printf %s "pan-test-app-stage-
|
|
1211
|
+
- /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
|
|
1212
|
+
- 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
|
|
2266
1213
|
environment:
|
|
2267
|
-
name: stage/
|
|
1214
|
+
name: stage/api
|
|
2268
1215
|
url: $CL_GITLAB_ENVIRONMENT_URL
|
|
2269
|
-
on_stop: '
|
|
1216
|
+
on_stop: 'api ๐ Stop โ ๏ธ | stage '
|
|
2270
1217
|
artifacts:
|
|
2271
1218
|
reports:
|
|
2272
1219
|
dotenv: gitlab_environment.env
|
|
@@ -2274,14 +1221,16 @@ variables:
|
|
|
2274
1221
|
- when: on_success
|
|
2275
1222
|
if: $CI_COMMIT_TAG
|
|
2276
1223
|
needs:
|
|
2277
|
-
- job: '
|
|
1224
|
+
- job: 'api ๐จ app | stage '
|
|
1225
|
+
artifacts: false
|
|
1226
|
+
- job: 'api ๐จ docker | stage '
|
|
2278
1227
|
artifacts: false
|
|
2279
|
-
- job: '
|
|
1228
|
+
- job: 'api ๐งพ sbom | stage '
|
|
2280
1229
|
artifacts: true
|
|
2281
1230
|
retry: *a1
|
|
2282
1231
|
interruptible: true
|
|
2283
1232
|
allow_failure: false
|
|
2284
|
-
'
|
|
1233
|
+
'api ๐ Stop โ ๏ธ | stage ':
|
|
2285
1234
|
stage: stop stage
|
|
2286
1235
|
image: path/to/docker/gcloud:the-version
|
|
2287
1236
|
variables:
|
|
@@ -2294,16 +1243,21 @@ variables:
|
|
|
2294
1243
|
- export CLOUDSDK_CORE_DISABLE_PROMPTS="1"
|
|
2295
1244
|
- echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
|
|
2296
1245
|
- set +e
|
|
2297
|
-
- gcloud auth activate-service-account --key-file=<(echo "$
|
|
2298
|
-
- gcloud run services delete pan-test-app-stage-
|
|
2299
|
-
- gcloud
|
|
2300
|
-
- gcloud
|
|
1246
|
+
- gcloud auth activate-service-account --key-file=<(echo "$CL_stage_api_GCLOUD_DEPLOY_credentialsKey")
|
|
1247
|
+
- gcloud run services delete pan-test-app-stage-api --project=google-project-id --region=europe-west6
|
|
1248
|
+
- gcloud scheduler jobs delete pan-test-app-stage-api-send-reminders-scheduler --project=google-project-id --location=europe-west6
|
|
1249
|
+
- gcloud run jobs executions list --project=google-project-id --region=europe-west6 --job pan-test-app-stage-api-migration --format="value(name)" | xargs -I {} gcloud run jobs executions delete {} --quiet --project=google-project-id --region=europe-west6
|
|
1250
|
+
- gcloud run jobs delete pan-test-app-stage-api-migration --project=google-project-id --region=europe-west6
|
|
1251
|
+
- gcloud run jobs executions list --project=google-project-id --region=europe-west6 --job pan-test-app-stage-api-send-reminders --format="value(name)" | xargs -I {} gcloud run jobs executions delete {} --quiet --project=google-project-id --region=europe-west6
|
|
1252
|
+
- gcloud run jobs delete pan-test-app-stage-api-send-reminders --project=google-project-id --region=europe-west6
|
|
1253
|
+
- gcloud artifacts docker images delete europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/stage/api --quiet --delete-tags
|
|
1254
|
+
- 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
|
|
2301
1255
|
- echo 'Disabling component in Dependency Track'
|
|
2302
|
-
- /dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" disable "pan-test-app/
|
|
1256
|
+
- /dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" disable "pan-test-app/api" "https://$(printf %s "pan-test-app-stage-api-$CL_stage_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" || true
|
|
2303
1257
|
- set -e
|
|
2304
|
-
- echo "CL_GITLAB_ENVIRONMENT_URL=https://$(printf %s "pan-test-app-stage-
|
|
1258
|
+
- 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
|
|
2305
1259
|
environment:
|
|
2306
|
-
name: stage/
|
|
1260
|
+
name: stage/api
|
|
2307
1261
|
url: $CL_GITLAB_ENVIRONMENT_URL
|
|
2308
1262
|
action: stop
|
|
2309
1263
|
artifacts:
|
|
@@ -2318,7 +1272,109 @@ variables:
|
|
|
2318
1272
|
retry: *a1
|
|
2319
1273
|
interruptible: true
|
|
2320
1274
|
allow_failure: true
|
|
2321
|
-
'
|
|
1275
|
+
'api ๐จ app | prod ':
|
|
1276
|
+
stage: build
|
|
1277
|
+
image: path/to/docker/jobs-default:the-version
|
|
1278
|
+
variables:
|
|
1279
|
+
KUBERNETES_CPU_REQUEST: '0.45'
|
|
1280
|
+
KUBERNETES_MEMORY_REQUEST: 1Gi
|
|
1281
|
+
KUBERNETES_MEMORY_LIMIT: 4Gi
|
|
1282
|
+
script:
|
|
1283
|
+
- echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
|
|
1284
|
+
- export ENV_SHORT="prod"
|
|
1285
|
+
- export APP_DIR="api"
|
|
1286
|
+
- export ENV_TYPE="prod"
|
|
1287
|
+
- export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
|
|
1288
|
+
- export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
|
|
1289
|
+
- 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")"
|
|
1290
|
+
- export HOST="$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
1291
|
+
- export ROOT_URL="https://$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
1292
|
+
- export HOST_INTERNAL="$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
1293
|
+
- export HOST_CANONICAL="$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
1294
|
+
- export ROOT_URL_INTERNAL="https://$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
1295
|
+
- export CLOUD_SQL_INSTANCE_CONNECTION_NAME="projectId:region:instancename"
|
|
1296
|
+
- export DB_NAME="pan-test-app-prod-api"
|
|
1297
|
+
- export DB_USER="my-user"
|
|
1298
|
+
- export DB_PASSWORD="$CL_prod_api_DB_PASSWORD"
|
|
1299
|
+
- export DATABASE_URL="postgresql://$DB_USER:$DB_PASSWORD@localhost/$DB_NAME?host=/cloudsql/$CLOUD_SQL_INSTANCE_CONNECTION_NAME"
|
|
1300
|
+
- export DATABASE_JDBC_URL="jdbc:postgresql:///$DB_NAME?cloudSqlInstance=$CLOUD_SQL_INSTANCE_CONNECTION_NAME&socketFactory=com.google.cloud.sql.postgres.SocketFactory&user=$DB_USER&password=$DB_PASSWORD"
|
|
1301
|
+
- export CLOUD_RUN_JOB_TRIGGER_URL_migration="https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/jobs/pan-test-app-prod-api-migration:run"
|
|
1302
|
+
- export CLOUD_RUN_JOB_TRIGGER_URL_send_reminders="https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/jobs/pan-test-app-prod-api-send-reminders:run"
|
|
1303
|
+
- export DEPLOY_CLOUD_RUN_PROJECT_ID="google-project-id"
|
|
1304
|
+
- export DEPLOY_CLOUD_RUN_REGION="europe-west6"
|
|
1305
|
+
- export GCLOUD_DEPLOY_credentialsKey="$CL_prod_api_GCLOUD_DEPLOY_credentialsKey"
|
|
1306
|
+
- export GCLOUD_RUN_canonicalHostSuffix="$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix"
|
|
1307
|
+
- export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOST\\",\\"ROOT_URL\\",\\"HOST_INTERNAL\\",\\"HOST_CANONICAL\\",\\"ROOT_URL_INTERNAL\\",\\"CLOUD_SQL_INSTANCE_CONNECTION_NAME\\",\\"DB_NAME\\",\\"DB_USER\\",\\"DB_PASSWORD\\",\\"DATABASE_URL\\",\\"DATABASE_JDBC_URL\\",\\"CLOUD_RUN_JOB_TRIGGER_URL_migration\\",\\"CLOUD_RUN_JOB_TRIGGER_URL_send_reminders\\",\\"DEPLOY_CLOUD_RUN_PROJECT_ID\\",\\"DEPLOY_CLOUD_RUN_REGION\\",\\"GCLOUD_DEPLOY_credentialsKey\\",\\"GCLOUD_RUN_canonicalHostSuffix\\"]"
|
|
1308
|
+
- echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
|
|
1309
|
+
- echo -e "\\e[0Ksection_start:$(date +%s):write-dotenv-api[collapsed=true]\\r\\e[0Kwrite dot env"
|
|
1310
|
+
- |-
|
|
1311
|
+
cat <<EOF > api/.env
|
|
1312
|
+
ENV_SHORT=prod
|
|
1313
|
+
APP_DIR=api
|
|
1314
|
+
ENV_TYPE=prod
|
|
1315
|
+
HOST=$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')
|
|
1316
|
+
ROOT_URL=https://$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')
|
|
1317
|
+
HOST_INTERNAL=$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')
|
|
1318
|
+
HOST_CANONICAL=$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')
|
|
1319
|
+
ROOT_URL_INTERNAL=https://$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')
|
|
1320
|
+
CLOUD_SQL_INSTANCE_CONNECTION_NAME=projectId:region:instancename
|
|
1321
|
+
DB_NAME=pan-test-app-prod-api
|
|
1322
|
+
DB_USER=my-user
|
|
1323
|
+
DB_PASSWORD=$CL_prod_api_DB_PASSWORD
|
|
1324
|
+
DATABASE_URL=postgresql://$DB_USER:$DB_PASSWORD@localhost/$DB_NAME?host=/cloudsql/$CLOUD_SQL_INSTANCE_CONNECTION_NAME
|
|
1325
|
+
DATABASE_JDBC_URL=jdbc:postgresql:///$DB_NAME?cloudSqlInstance=$CLOUD_SQL_INSTANCE_CONNECTION_NAME&socketFactory=com.google.cloud.sql.postgres.SocketFactory&user=$DB_USER&password=$DB_PASSWORD
|
|
1326
|
+
CLOUD_RUN_JOB_TRIGGER_URL_migration=https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/jobs/pan-test-app-prod-api-migration:run
|
|
1327
|
+
CLOUD_RUN_JOB_TRIGGER_URL_send_reminders=https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/jobs/pan-test-app-prod-api-send-reminders:run
|
|
1328
|
+
DEPLOY_CLOUD_RUN_PROJECT_ID=google-project-id
|
|
1329
|
+
DEPLOY_CLOUD_RUN_REGION=europe-west6
|
|
1330
|
+
GCLOUD_DEPLOY_credentialsKey=$CL_prod_api_GCLOUD_DEPLOY_credentialsKey
|
|
1331
|
+
GCLOUD_RUN_canonicalHostSuffix=$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix
|
|
1332
|
+
_ALL_ENV_VAR_KEYS=["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","HOST_INTERNAL","HOST_CANONICAL","ROOT_URL_INTERNAL","CLOUD_SQL_INSTANCE_CONNECTION_NAME","DB_NAME","DB_USER","DB_PASSWORD","DATABASE_URL","DATABASE_JDBC_URL","CLOUD_RUN_JOB_TRIGGER_URL_migration","CLOUD_RUN_JOB_TRIGGER_URL_send_reminders","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]
|
|
1333
|
+
EOF
|
|
1334
|
+
- echo -e "\\e[0Ksection_end:$(date +%s):write-dotenv-api\\r\\e[0K"
|
|
1335
|
+
- echo '{"id":"$(git describe --tags 2>/dev/null || git rev-parse HEAD)","time":"$CI_JOB_STARTED_AT"}' > api/__build_info.json
|
|
1336
|
+
- echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"
|
|
1337
|
+
- if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
|
|
1338
|
+
- if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
|
|
1339
|
+
- echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"
|
|
1340
|
+
- cd api
|
|
1341
|
+
- echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"
|
|
1342
|
+
- if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
|
|
1343
|
+
- if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
|
|
1344
|
+
- echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"
|
|
1345
|
+
- echo -e "\\e[0Ksection_start:$(date +%s):yarninstall[collapsed=true]\\r\\e[0KYarn install"
|
|
1346
|
+
- yarn install --immutable
|
|
1347
|
+
- echo -e "\\e[0Ksection_end:$(date +%s):yarninstall\\r\\e[0K"
|
|
1348
|
+
- yarn build
|
|
1349
|
+
cache:
|
|
1350
|
+
- key: api-yarn
|
|
1351
|
+
policy: pull-push
|
|
1352
|
+
paths:
|
|
1353
|
+
- api/.yarn
|
|
1354
|
+
- key: api-node-modules
|
|
1355
|
+
policy: pull-push
|
|
1356
|
+
paths:
|
|
1357
|
+
- api/node_modules
|
|
1358
|
+
- key: api-next-cache
|
|
1359
|
+
policy: pull-push
|
|
1360
|
+
paths:
|
|
1361
|
+
- api/.next/cache
|
|
1362
|
+
artifacts:
|
|
1363
|
+
paths:
|
|
1364
|
+
- api/__build_info.json
|
|
1365
|
+
- api/.next
|
|
1366
|
+
- api/dist
|
|
1367
|
+
exclude:
|
|
1368
|
+
- api/.env
|
|
1369
|
+
expire_in: 1 day
|
|
1370
|
+
when: always
|
|
1371
|
+
reports: {}
|
|
1372
|
+
rules:
|
|
1373
|
+
- if: $CI_COMMIT_TAG
|
|
1374
|
+
needs: []
|
|
1375
|
+
retry: *a1
|
|
1376
|
+
interruptible: true
|
|
1377
|
+
'api ๐จ docker | prod ':
|
|
2322
1378
|
stage: build
|
|
2323
1379
|
image: path/to/docker/docker-build:the-version
|
|
2324
1380
|
services:
|
|
@@ -2335,25 +1391,25 @@ variables:
|
|
|
2335
1391
|
KUBERNETES_MEMORY_LIMIT: 2Gi
|
|
2336
1392
|
script:
|
|
2337
1393
|
- echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
|
|
2338
|
-
- export APP_DIR="
|
|
1394
|
+
- export APP_DIR="api"
|
|
2339
1395
|
- export DOCKER_BUILD_CONTEXT="."
|
|
2340
1396
|
- export DOCKER_REGISTRY="europe-west6-docker.pkg.dev"
|
|
2341
|
-
- export DOCKER_IMAGE="europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/prod/
|
|
2342
|
-
- export DOCKER_CACHE_IMAGE="europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/
|
|
1397
|
+
- export DOCKER_IMAGE="europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/prod/api"
|
|
1398
|
+
- export DOCKER_CACHE_IMAGE="europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/api"
|
|
2343
1399
|
- export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"
|
|
2344
1400
|
- |-
|
|
2345
1401
|
export DOCKER_COPY_AND_INSTALL_APP="COPY --chown=node:node $APP_DIR .
|
|
2346
1402
|
RUN yarn plugin import workspace-tools
|
|
2347
1403
|
RUN yarn workspaces focus --production && yarn rebuild"
|
|
2348
1404
|
- |-
|
|
2349
|
-
export DOCKER_COPY_WORKSPACE_FILES="COPY --chown=node:node
|
|
2350
|
-
COPY --chown=node:node
|
|
1405
|
+
export DOCKER_COPY_WORKSPACE_FILES="COPY --chown=node:node api/package.json /app/api/package.json
|
|
1406
|
+
COPY --chown=node:node api/yarn.lock /app/api/yarn.lock
|
|
2351
1407
|
COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
|
|
2352
1408
|
COPY --chown=node:node .yarn /app/.yarn"
|
|
2353
1409
|
- echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
|
|
2354
1410
|
- ensureNodeDockerfile
|
|
2355
1411
|
- echo -e "\\e[0Ksection_start:$(date +%s):docker-login[collapsed=true]\\r\\e[0KDocker Login"
|
|
2356
|
-
- gcloud auth activate-service-account --key-file=<(echo "$
|
|
1412
|
+
- gcloud auth activate-service-account --key-file=<(echo "$CL_prod_api_GCLOUD_DEPLOY_credentialsKey")
|
|
2357
1413
|
- gcloud auth configure-docker europe-west6-docker.pkg.dev
|
|
2358
1414
|
- echo -e "\\e[0Ksection_end:$(date +%s):docker-login\\r\\e[0K"
|
|
2359
1415
|
- echo -e "\\e[0Ksection_start:$(date +%s):docker-build[collapsed=true]\\r\\e[0KDocker build"
|
|
@@ -2365,25 +1421,24 @@ variables:
|
|
|
2365
1421
|
- docker push $DOCKER_CACHE_IMAGE
|
|
2366
1422
|
- echo -e "\\e[0Ksection_end:$(date +%s):docker-push\\r\\e[0K"
|
|
2367
1423
|
cache:
|
|
2368
|
-
- key:
|
|
1424
|
+
- key: api-yarn
|
|
2369
1425
|
policy: pull
|
|
2370
1426
|
paths:
|
|
2371
|
-
-
|
|
1427
|
+
- api/.yarn
|
|
2372
1428
|
rules:
|
|
2373
1429
|
- if: $CI_COMMIT_TAG
|
|
2374
1430
|
needs:
|
|
2375
|
-
-
|
|
2376
|
-
artifacts: true
|
|
1431
|
+
- 'api ๐จ app | prod '
|
|
2377
1432
|
retry: *a1
|
|
2378
1433
|
interruptible: true
|
|
2379
|
-
'
|
|
1434
|
+
'api ๐งพ sbom | prod ':
|
|
2380
1435
|
stage: build
|
|
2381
1436
|
image: aquasec/trivy:0.38.3
|
|
2382
1437
|
variables: {}
|
|
2383
1438
|
script:
|
|
2384
1439
|
- echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
|
|
2385
1440
|
- echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
|
|
2386
|
-
- trivy fs --quiet --format cyclonedx --output "__sbom.json"
|
|
1441
|
+
- trivy fs --quiet --format cyclonedx --output "__sbom.json" api
|
|
2387
1442
|
artifacts:
|
|
2388
1443
|
paths:
|
|
2389
1444
|
- __sbom.json
|
|
@@ -2393,7 +1448,7 @@ variables:
|
|
|
2393
1448
|
retry: *a1
|
|
2394
1449
|
interruptible: true
|
|
2395
1450
|
allow_failure: true
|
|
2396
|
-
'
|
|
1451
|
+
'api ๐ Deploy | prod ':
|
|
2397
1452
|
stage: deploy prod
|
|
2398
1453
|
image: path/to/docker/gcloud:the-version
|
|
2399
1454
|
variables:
|
|
@@ -2403,30 +1458,37 @@ variables:
|
|
|
2403
1458
|
script:
|
|
2404
1459
|
- echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
|
|
2405
1460
|
- export ENV_SHORT="prod"
|
|
2406
|
-
- export APP_DIR="
|
|
1461
|
+
- export APP_DIR="api"
|
|
2407
1462
|
- export ENV_TYPE="prod"
|
|
2408
1463
|
- export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
|
|
2409
1464
|
- export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
|
|
2410
1465
|
- 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")"
|
|
2411
|
-
- export HOST="$(printf %s "pan-test-app-prod-
|
|
2412
|
-
- export ROOT_URL="https://$(printf %s "pan-test-app-prod-
|
|
2413
|
-
- export HOST_INTERNAL="$(printf %s "pan-test-app-prod-
|
|
2414
|
-
- export HOST_CANONICAL="$(printf %s "pan-test-app-prod-
|
|
2415
|
-
- export ROOT_URL_INTERNAL="https://$(printf %s "pan-test-app-prod-
|
|
1466
|
+
- export HOST="$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
1467
|
+
- export ROOT_URL="https://$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
1468
|
+
- export HOST_INTERNAL="$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
1469
|
+
- export HOST_CANONICAL="$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
1470
|
+
- export ROOT_URL_INTERNAL="https://$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
1471
|
+
- export CLOUD_SQL_INSTANCE_CONNECTION_NAME="projectId:region:instancename"
|
|
1472
|
+
- export DB_NAME="pan-test-app-prod-api"
|
|
1473
|
+
- export DB_USER="my-user"
|
|
1474
|
+
- export DB_PASSWORD="$CL_prod_api_DB_PASSWORD"
|
|
1475
|
+
- export DATABASE_URL="postgresql://$DB_USER:$DB_PASSWORD@localhost/$DB_NAME?host=/cloudsql/$CLOUD_SQL_INSTANCE_CONNECTION_NAME"
|
|
1476
|
+
- export DATABASE_JDBC_URL="jdbc:postgresql:///$DB_NAME?cloudSqlInstance=$CLOUD_SQL_INSTANCE_CONNECTION_NAME&socketFactory=com.google.cloud.sql.postgres.SocketFactory&user=$DB_USER&password=$DB_PASSWORD"
|
|
1477
|
+
- export CLOUD_RUN_JOB_TRIGGER_URL_migration="https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/jobs/pan-test-app-prod-api-migration:run"
|
|
1478
|
+
- export CLOUD_RUN_JOB_TRIGGER_URL_send_reminders="https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/jobs/pan-test-app-prod-api-send-reminders:run"
|
|
2416
1479
|
- export DEPLOY_CLOUD_RUN_PROJECT_ID="google-project-id"
|
|
2417
1480
|
- export DEPLOY_CLOUD_RUN_REGION="europe-west6"
|
|
2418
|
-
- export GCLOUD_DEPLOY_credentialsKey="$
|
|
2419
|
-
- export GCLOUD_RUN_canonicalHostSuffix="$
|
|
2420
|
-
- export
|
|
2421
|
-
- export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOST\\",\\"ROOT_URL\\",\\"HOST_INTERNAL\\",\\"HOST_CANONICAL\\",\\"ROOT_URL_INTERNAL\\",\\"DEPLOY_CLOUD_RUN_PROJECT_ID\\",\\"DEPLOY_CLOUD_RUN_REGION\\",\\"GCLOUD_DEPLOY_credentialsKey\\",\\"GCLOUD_RUN_canonicalHostSuffix\\",\\"API_URL\\"]"
|
|
1481
|
+
- export GCLOUD_DEPLOY_credentialsKey="$CL_prod_api_GCLOUD_DEPLOY_credentialsKey"
|
|
1482
|
+
- export GCLOUD_RUN_canonicalHostSuffix="$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix"
|
|
1483
|
+
- export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOST\\",\\"ROOT_URL\\",\\"HOST_INTERNAL\\",\\"HOST_CANONICAL\\",\\"ROOT_URL_INTERNAL\\",\\"CLOUD_SQL_INSTANCE_CONNECTION_NAME\\",\\"DB_NAME\\",\\"DB_USER\\",\\"DB_PASSWORD\\",\\"DATABASE_URL\\",\\"DATABASE_JDBC_URL\\",\\"CLOUD_RUN_JOB_TRIGGER_URL_migration\\",\\"CLOUD_RUN_JOB_TRIGGER_URL_send_reminders\\",\\"DEPLOY_CLOUD_RUN_PROJECT_ID\\",\\"DEPLOY_CLOUD_RUN_REGION\\",\\"GCLOUD_DEPLOY_credentialsKey\\",\\"GCLOUD_RUN_canonicalHostSuffix\\"]"
|
|
2422
1484
|
- export DOCKER_REGISTRY="europe-west6-docker.pkg.dev"
|
|
2423
|
-
- export DOCKER_IMAGE="europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/prod/
|
|
2424
|
-
- export DOCKER_CACHE_IMAGE="europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/
|
|
1485
|
+
- export DOCKER_IMAGE="europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/prod/api"
|
|
1486
|
+
- export DOCKER_CACHE_IMAGE="europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/api"
|
|
2425
1487
|
- export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"
|
|
2426
1488
|
- export CLOUDSDK_CORE_DISABLE_PROMPTS="1"
|
|
2427
1489
|
- echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
|
|
2428
1490
|
- echo -e "\\e[0Ksection_start:$(date +%s):prepare[collapsed=true]\\r\\e[0KPrepare..."
|
|
2429
|
-
- gcloud auth activate-service-account --key-file=<(echo "$
|
|
1491
|
+
- gcloud auth activate-service-account --key-file=<(echo "$CL_prod_api_GCLOUD_DEPLOY_credentialsKey")
|
|
2430
1492
|
- export GCLOUD_PROJECT_NUMBER=$(gcloud projects describe google-project-id --format="value(projectNumber)")
|
|
2431
1493
|
- 'echo "GCLOUD_PROJECT_NUMBER: $GCLOUD_PROJECT_NUMBER"'
|
|
2432
1494
|
- echo -e "\\e[0Ksection_end:$(date +%s):prepare\\r\\e[0K"
|
|
@@ -2436,7 +1498,7 @@ variables:
|
|
|
2436
1498
|
ENV_SHORT: |-
|
|
2437
1499
|
prod
|
|
2438
1500
|
APP_DIR: |-
|
|
2439
|
-
|
|
1501
|
+
api
|
|
2440
1502
|
ENV_TYPE: |-
|
|
2441
1503
|
prod
|
|
2442
1504
|
BUILD_INFO_BUILD_ID: |-
|
|
@@ -2446,43 +1508,74 @@ variables:
|
|
|
2446
1508
|
BUILD_INFO_CURRENT_VERSION: |-
|
|
2447
1509
|
$(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 's/^/ /')
|
|
2448
1510
|
HOST: |-
|
|
2449
|
-
$(printf %s "$(printf %s "pan-test-app-prod-
|
|
1511
|
+
$(printf %s "$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
|
|
2450
1512
|
ROOT_URL: |-
|
|
2451
|
-
$(printf %s "https://$(printf %s "pan-test-app-prod-
|
|
1513
|
+
$(printf %s "https://$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
|
|
2452
1514
|
HOST_INTERNAL: |-
|
|
2453
|
-
$(printf %s "$(printf %s "pan-test-app-prod-
|
|
1515
|
+
$(printf %s "$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
|
|
2454
1516
|
HOST_CANONICAL: |-
|
|
2455
|
-
$(printf %s "$(printf %s "pan-test-app-prod-
|
|
1517
|
+
$(printf %s "$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
|
|
2456
1518
|
ROOT_URL_INTERNAL: |-
|
|
2457
|
-
$(printf %s "https://$(printf %s "pan-test-app-prod-
|
|
1519
|
+
$(printf %s "https://$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
|
|
1520
|
+
CLOUD_SQL_INSTANCE_CONNECTION_NAME: |-
|
|
1521
|
+
projectId:region:instancename
|
|
1522
|
+
DB_NAME: |-
|
|
1523
|
+
pan-test-app-prod-api
|
|
1524
|
+
DB_USER: |-
|
|
1525
|
+
my-user
|
|
1526
|
+
DB_PASSWORD: |-
|
|
1527
|
+
$(printf %s "$CL_prod_api_DB_PASSWORD" | sed 's/^/ /')
|
|
1528
|
+
DATABASE_URL: |-
|
|
1529
|
+
postgresql://$DB_USER:$DB_PASSWORD@localhost/$DB_NAME?host=/cloudsql/$CLOUD_SQL_INSTANCE_CONNECTION_NAME
|
|
1530
|
+
DATABASE_JDBC_URL: |-
|
|
1531
|
+
jdbc:postgresql:///$DB_NAME?cloudSqlInstance=$CLOUD_SQL_INSTANCE_CONNECTION_NAME&socketFactory=com.google.cloud.sql.postgres.SocketFactory&user=$DB_USER&password=$DB_PASSWORD
|
|
1532
|
+
CLOUD_RUN_JOB_TRIGGER_URL_migration: |-
|
|
1533
|
+
https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/jobs/pan-test-app-prod-api-migration:run
|
|
1534
|
+
CLOUD_RUN_JOB_TRIGGER_URL_send_reminders: |-
|
|
1535
|
+
https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/jobs/pan-test-app-prod-api-send-reminders:run
|
|
2458
1536
|
DEPLOY_CLOUD_RUN_PROJECT_ID: |-
|
|
2459
1537
|
google-project-id
|
|
2460
1538
|
DEPLOY_CLOUD_RUN_REGION: |-
|
|
2461
1539
|
europe-west6
|
|
2462
1540
|
GCLOUD_RUN_canonicalHostSuffix: |-
|
|
2463
|
-
$(printf %s "$
|
|
2464
|
-
API_URL: |-
|
|
2465
|
-
$(printf %s "https://$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')/graphql" | sed 's/^/ /')
|
|
1541
|
+
$(printf %s "$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | sed 's/^/ /')
|
|
2466
1542
|
_ALL_ENV_VAR_KEYS: |-
|
|
2467
|
-
["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","HOST_INTERNAL","HOST_CANONICAL","ROOT_URL_INTERNAL","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"
|
|
1543
|
+
["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","HOST_INTERNAL","HOST_CANONICAL","ROOT_URL_INTERNAL","CLOUD_SQL_INSTANCE_CONNECTION_NAME","DB_NAME","DB_USER","DB_PASSWORD","DATABASE_URL","DATABASE_JDBC_URL","CLOUD_RUN_JOB_TRIGGER_URL_migration","CLOUD_RUN_JOB_TRIGGER_URL_send_reminders","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]
|
|
2468
1544
|
|
|
2469
1545
|
EOF
|
|
2470
1546
|
- echo -e "\\e[0Ksection_end:$(date +%s):writeenvvars\\r\\e[0K"
|
|
2471
1547
|
- echo -e "\\e[0Ksection_start:$(date +%s):deploy[collapsed=true]\\r\\e[0KDeploy to cloud run"
|
|
2472
|
-
-
|
|
1548
|
+
- set +e
|
|
1549
|
+
- echo "ensuring Database..."
|
|
1550
|
+
- gcloud sql databases create pan-test-app-prod-api --instance=instancename --project projectId
|
|
1551
|
+
- set -e
|
|
1552
|
+
- set +e
|
|
1553
|
+
- gcloud scheduler jobs create http pan-test-app-prod-api-send-reminders-scheduler --project=google-project-id --location=europe-west6 --schedule="0 * * * *" --max-retry-attempts=0 --uri="https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/jobs/pan-test-app-prod-api-send-reminders:run" --http-method=POST --oauth-service-account-email=$GCLOUD_PROJECT_NUMBER-compute@developer.gserviceaccount.com
|
|
1554
|
+
- set -e
|
|
1555
|
+
- gcloud scheduler jobs update http pan-test-app-prod-api-send-reminders-scheduler --project=google-project-id --location=europe-west6 --schedule="0 * * * *" --max-retry-attempts=0 --uri="https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/jobs/pan-test-app-prod-api-send-reminders:run" --http-method=POST --oauth-service-account-email=$GCLOUD_PROJECT_NUMBER-compute@developer.gserviceaccount.com
|
|
1556
|
+
- set +e
|
|
1557
|
+
- gcloud run jobs create pan-test-app-prod-api-migration --command="yarn,migrate" --image=europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/prod/api:$DOCKER_IMAGE_TAG --project=google-project-id --region=europe-west6 --set-cloudsql-instances=projectId:region:instancename --labels=customer-name=pan,component-name=api,app-name=test-app,env-type=prod,env-name=prod,build-type=node,cloud-run-job-name=pan-test-app-prod-api-migration --memory=512Mi --task-timeout=10m --parallelism=1 --env-vars-file=____envvars.yaml --max-retries=0
|
|
1558
|
+
- set -e
|
|
1559
|
+
- 'gcloud run jobs update pan-test-app-prod-api-migration --command="yarn,migrate" --image=europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/prod/api:$DOCKER_IMAGE_TAG --project=google-project-id --region=europe-west6 --set-cloudsql-instances=projectId:region:instancename --labels=customer-name=pan,component-name=api,app-name=test-app,env-type=prod,env-name=prod,build-type=node,cloud-run-job-name=pan-test-app-prod-api-migration --memory=512Mi --task-timeout=10m --parallelism=1 --env-vars-file=____envvars.yaml --max-retries=0 '
|
|
1560
|
+
- set +e
|
|
1561
|
+
- gcloud run jobs create pan-test-app-prod-api-send-reminders --command="yarn,job:send-reminders" --image=europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/prod/api:$DOCKER_IMAGE_TAG --project=google-project-id --region=europe-west6 --set-cloudsql-instances=projectId:region:instancename --labels=customer-name=pan,component-name=api,app-name=test-app,env-type=prod,env-name=prod,build-type=node,cloud-run-job-name=pan-test-app-prod-api-send-reminders --memory=512Mi --task-timeout=15m --parallelism=1 --env-vars-file=____envvars.yaml --max-retries=0
|
|
1562
|
+
- set -e
|
|
1563
|
+
- 'gcloud run jobs update pan-test-app-prod-api-send-reminders --command="yarn,job:send-reminders" --image=europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/prod/api:$DOCKER_IMAGE_TAG --project=google-project-id --region=europe-west6 --set-cloudsql-instances=projectId:region:instancename --labels=customer-name=pan,component-name=api,app-name=test-app,env-type=prod,env-name=prod,build-type=node,cloud-run-job-name=pan-test-app-prod-api-send-reminders --memory=512Mi --task-timeout=15m --parallelism=1 --env-vars-file=____envvars.yaml --max-retries=0 '
|
|
1564
|
+
- gcloud run deploy pan-test-app-prod-api --command="yarn,start" --image=europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/prod/api:$DOCKER_IMAGE_TAG --project=google-project-id --region=europe-west6 --set-cloudsql-instances=projectId:region:instancename --labels=customer-name=pan,component-name=api,app-name=test-app,env-type=prod,env-name=prod,build-type=node,cloud-run-service-name=pan-test-app-prod-api --env-vars-file=____envvars.yaml --min-instances=0 --max-instances=5 --cpu-throttling --allow-unauthenticated --ingress=all --cpu-boost
|
|
1565
|
+
- gcloud run jobs execute pan-test-app-prod-api-migration --project=google-project-id --region=europe-west6
|
|
2473
1566
|
- echo -e "\\e[0Ksection_end:$(date +%s):deploy\\r\\e[0K"
|
|
2474
1567
|
- echo -e "\\e[0Ksection_start:$(date +%s):cleanup[collapsed=true]\\r\\e[0KCleanup"
|
|
2475
|
-
- gcloud run revisions list --project=google-project-id --region=europe-west6 --service=pan-test-app-prod-
|
|
2476
|
-
- gcloud artifacts docker images list europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/prod/
|
|
2477
|
-
- gcloud artifacts docker images list europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/
|
|
1568
|
+
- 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
|
|
1569
|
+
- 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
|
|
1570
|
+
- 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
|
|
2478
1571
|
- echo -e "\\e[0Ksection_end:$(date +%s):cleanup\\r\\e[0K"
|
|
2479
1572
|
- echo 'Uploading SBOM to Dependency Track'
|
|
2480
|
-
- /dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/
|
|
2481
|
-
- echo "CL_GITLAB_ENVIRONMENT_URL=https://$(printf %s "pan-test-app-prod-
|
|
1573
|
+
- /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
|
|
1574
|
+
- 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
|
|
2482
1575
|
environment:
|
|
2483
|
-
name: prod/
|
|
1576
|
+
name: prod/api
|
|
2484
1577
|
url: $CL_GITLAB_ENVIRONMENT_URL
|
|
2485
|
-
on_stop: '
|
|
1578
|
+
on_stop: 'api ๐ Stop โ ๏ธ | prod '
|
|
2486
1579
|
artifacts:
|
|
2487
1580
|
reports:
|
|
2488
1581
|
dotenv: gitlab_environment.env
|
|
@@ -2490,14 +1583,16 @@ variables:
|
|
|
2490
1583
|
- when: manual
|
|
2491
1584
|
if: $CI_COMMIT_TAG
|
|
2492
1585
|
needs:
|
|
2493
|
-
- job: '
|
|
1586
|
+
- job: 'api ๐จ app | prod '
|
|
1587
|
+
artifacts: false
|
|
1588
|
+
- job: 'api ๐จ docker | prod '
|
|
2494
1589
|
artifacts: false
|
|
2495
|
-
- job: '
|
|
1590
|
+
- job: 'api ๐งพ sbom | prod '
|
|
2496
1591
|
artifacts: true
|
|
2497
1592
|
retry: *a1
|
|
2498
1593
|
interruptible: true
|
|
2499
1594
|
allow_failure: true
|
|
2500
|
-
'
|
|
1595
|
+
'api ๐ Stop โ ๏ธ | prod ':
|
|
2501
1596
|
stage: stop prod
|
|
2502
1597
|
image: path/to/docker/gcloud:the-version
|
|
2503
1598
|
variables:
|
|
@@ -2510,16 +1605,21 @@ variables:
|
|
|
2510
1605
|
- export CLOUDSDK_CORE_DISABLE_PROMPTS="1"
|
|
2511
1606
|
- echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
|
|
2512
1607
|
- set +e
|
|
2513
|
-
- gcloud auth activate-service-account --key-file=<(echo "$
|
|
2514
|
-
- gcloud run services delete pan-test-app-prod-
|
|
2515
|
-
- gcloud
|
|
2516
|
-
- gcloud
|
|
1608
|
+
- gcloud auth activate-service-account --key-file=<(echo "$CL_prod_api_GCLOUD_DEPLOY_credentialsKey")
|
|
1609
|
+
- gcloud run services delete pan-test-app-prod-api --project=google-project-id --region=europe-west6
|
|
1610
|
+
- gcloud scheduler jobs delete pan-test-app-prod-api-send-reminders-scheduler --project=google-project-id --location=europe-west6
|
|
1611
|
+
- gcloud run jobs executions list --project=google-project-id --region=europe-west6 --job pan-test-app-prod-api-migration --format="value(name)" | xargs -I {} gcloud run jobs executions delete {} --quiet --project=google-project-id --region=europe-west6
|
|
1612
|
+
- gcloud run jobs delete pan-test-app-prod-api-migration --project=google-project-id --region=europe-west6
|
|
1613
|
+
- gcloud run jobs executions list --project=google-project-id --region=europe-west6 --job pan-test-app-prod-api-send-reminders --format="value(name)" | xargs -I {} gcloud run jobs executions delete {} --quiet --project=google-project-id --region=europe-west6
|
|
1614
|
+
- gcloud run jobs delete pan-test-app-prod-api-send-reminders --project=google-project-id --region=europe-west6
|
|
1615
|
+
- gcloud artifacts docker images delete europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/prod/api --quiet --delete-tags
|
|
1616
|
+
- 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
|
|
2517
1617
|
- echo 'Disabling component in Dependency Track'
|
|
2518
|
-
- /dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" disable "pan-test-app/
|
|
1618
|
+
- /dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" disable "pan-test-app/api" "https://$(printf %s "pan-test-app-prod-api-$CL_prod_api_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" || true
|
|
2519
1619
|
- set -e
|
|
2520
|
-
- echo "CL_GITLAB_ENVIRONMENT_URL=https://$(printf %s "pan-test-app-prod-
|
|
1620
|
+
- 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
|
|
2521
1621
|
environment:
|
|
2522
|
-
name: prod/
|
|
1622
|
+
name: prod/api
|
|
2523
1623
|
url: $CL_GITLAB_ENVIRONMENT_URL
|
|
2524
1624
|
action: stop
|
|
2525
1625
|
artifacts:
|