@catladder/pipeline 1.75.4 → 1.76.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (112) hide show
  1. package/dist/build/base/createBuildJob.js +5 -27
  2. package/dist/build/base/writeBuildInfo.js +0 -3
  3. package/dist/build/custom/buildJob.js +3 -23
  4. package/dist/build/custom/index.js +3 -10
  5. package/dist/build/docker.js +5 -40
  6. package/dist/build/index.js +0 -8
  7. package/dist/build/node/buildJob.js +3 -25
  8. package/dist/build/node/cache.js +3 -21
  9. package/dist/build/node/index.js +3 -16
  10. package/dist/build/node/meteor.js +3 -20
  11. package/dist/build/node/testJob.js +5 -22
  12. package/dist/build/node/yarn.js +5 -18
  13. package/dist/build/rails/build.js +2 -8
  14. package/dist/build/rails/index.js +3 -11
  15. package/dist/build/rails/test.js +5 -18
  16. package/dist/build/types.d.ts +0 -9
  17. package/dist/build/types.js +0 -4
  18. package/dist/bundles/catladder-gitlab/index.js +1 -1
  19. package/dist/catladder-gitlab.js +6 -24
  20. package/dist/config/{configruedEnvs.test.d.ts → __tests__/configruedEnvs.test.d.ts} +0 -0
  21. package/dist/config/{configruedEnvs.test.js → __tests__/configruedEnvs.test.js} +10 -12
  22. package/dist/config/configruedEnvs.js +7 -22
  23. package/dist/config/index.js +0 -4
  24. package/dist/config/readConfig.js +2 -13
  25. package/dist/constants.js +1 -1
  26. package/dist/context/{resolveReferences.test.d.ts → __tests__/resolveReferences.test.d.ts} +0 -0
  27. package/dist/context/{resolveReferences.test.js → __tests__/resolveReferences.test.js} +52 -103
  28. package/dist/context/getEnvConfig.js +0 -8
  29. package/dist/context/getEnvType.js +0 -5
  30. package/dist/context/getEnvironment.js +13 -49
  31. package/dist/context/getEnvironmentContext.js +0 -5
  32. package/dist/context/getEnvironmentVariables.js +20 -83
  33. package/dist/context/getLabels.js +2 -13
  34. package/dist/context/index.js +13 -58
  35. package/dist/context/resolveReferences.js +36 -126
  36. package/dist/deploy/base.js +4 -19
  37. package/dist/deploy/cloudRun/deployJob.js +19 -61
  38. package/dist/deploy/cloudRun/index.js +17 -39
  39. package/dist/deploy/cloudRun/utils/database.js +11 -29
  40. package/dist/deploy/cloudRun/utils/gcloudServiceAccountLoginCommands.js +0 -4
  41. package/dist/deploy/cloudRun/utils/jobName.js +0 -2
  42. package/dist/deploy/custom/deployJob.js +3 -18
  43. package/dist/deploy/custom/index.js +0 -2
  44. package/dist/deploy/dockerTag/deployJob.js +0 -9
  45. package/dist/deploy/dockerTag/index.js +0 -2
  46. package/dist/deploy/index.js +0 -11
  47. package/dist/deploy/kubernetes/additionalSecretKeys.js +0 -9
  48. package/dist/deploy/kubernetes/cloudSql/index.js +0 -12
  49. package/dist/deploy/kubernetes/deployJob.js +3 -24
  50. package/dist/deploy/kubernetes/index.js +7 -17
  51. package/dist/deploy/kubernetes/kubeEnv.d.ts +0 -1
  52. package/dist/deploy/kubernetes/kubeEnv.js +5 -23
  53. package/dist/deploy/kubernetes/kubeValues.js +6 -24
  54. package/dist/deploy/kubernetes/mongodb.js +0 -24
  55. package/dist/deploy/kubernetes/processSecretsAsFiles.js +2 -10
  56. package/dist/deploy/types/base.d.ts +0 -1
  57. package/dist/deploy/types/custom.d.ts +0 -6
  58. package/dist/deploy/types/googleCloudRun.d.ts +4 -12
  59. package/dist/deploy/types/index.js +0 -10
  60. package/dist/deploy/types/kubernetes.d.ts +0 -28
  61. package/dist/deploy/utils.js +0 -11
  62. package/dist/index.js +0 -10
  63. package/dist/pipeline/commitInfo/getBuildId.d.ts +1 -0
  64. package/dist/pipeline/{createChildPipeline.test.js → commitInfo/getBuildId.js} +25 -84
  65. package/dist/pipeline/commitInfo/getCommitInfo.d.ts +2 -0
  66. package/dist/{build/tests/storybook.test.js → pipeline/commitInfo/getCommitInfo.js} +30 -104
  67. package/dist/pipeline/createChildPipeline.js +19 -76
  68. package/dist/pipeline/createJobs.js +35 -135
  69. package/dist/pipeline/gitlab/makeGitlabJob.d.ts +1 -0
  70. package/dist/pipeline/gitlab/makeGitlabJob.js +13 -15
  71. package/dist/pipeline/index.js +0 -4
  72. package/dist/pipeline/packageManager.js +20 -173
  73. package/dist/pipeline/yarn/yarnUtils.d.ts +4 -0
  74. package/dist/pipeline/yarn/yarnUtils.js +193 -0
  75. package/dist/runner/index.js +0 -3
  76. package/dist/tsconfig.tsbuildinfo +1 -1
  77. package/dist/types/config.d.ts +0 -13
  78. package/dist/types/config.js +5 -15
  79. package/dist/types/context.d.ts +0 -2
  80. package/dist/types/environmentContext.d.ts +0 -1
  81. package/dist/types/gitlab-types.d.ts +0 -1
  82. package/dist/types/index.js +0 -6
  83. package/dist/types/jobs.d.ts +5 -15
  84. package/dist/utils/gitlab.js +3 -13
  85. package/dist/utils/index.js +5 -15
  86. package/examples/__snapshots__/cloud-run-with-sql.ts.snap +1765 -0
  87. package/examples/__snapshots__/custom-build-job.ts.snap +1174 -0
  88. package/examples/__snapshots__/custom-envs.ts.snap +261 -0
  89. package/examples/__snapshots__/wait-for-other-deploy.ts.snap +1626 -0
  90. package/examples/__utils__/helpers.ts +14 -0
  91. package/examples/{cloud-sql.ts → cloud-run-with-sql.ts} +12 -15
  92. package/examples/custom-build-job.ts +4 -1
  93. package/examples/custom-envs.ts +31 -0
  94. package/examples/wait-for-other-deploy.ts +36 -0
  95. package/package.json +2 -2
  96. package/src/config/{configruedEnvs.test.ts → __tests__/configruedEnvs.test.ts} +3 -3
  97. package/src/context/{resolveReferences.test.ts → __tests__/resolveReferences.test.ts} +3 -3
  98. package/src/deploy/cloudRun/index.ts +2 -1
  99. package/src/deploy/types/googleCloudRun.ts +5 -0
  100. package/src/pipeline/commitInfo/getBuildId.ts +6 -0
  101. package/src/pipeline/commitInfo/getCommitInfo.ts +12 -0
  102. package/src/pipeline/createChildPipeline.ts +6 -1
  103. package/src/pipeline/createJobs.ts +3 -10
  104. package/src/pipeline/gitlab/makeGitlabJob.ts +7 -1
  105. package/src/pipeline/packageManager.ts +4 -38
  106. package/src/pipeline/yarn/yarnUtils.ts +37 -0
  107. package/src/types/jobs.ts +2 -1
  108. package/tsconfig.json +1 -1
  109. package/dist/build/tests/storybook.test.d.ts +0 -1
  110. package/dist/pipeline/createChildPipeline.test.d.ts +0 -1
  111. package/src/build/tests/storybook.test.ts +0 -54
  112. package/src/pipeline/createChildPipeline.test.ts +0 -49
@@ -0,0 +1,1765 @@
1
+ // Jest Snapshot v1, https://goo.gl/fbAQLP
2
+
3
+ exports[`matches snapshot 1`] = `
4
+ {
5
+ "mainBranch": {
6
+ "image": "path/to/docker/jobs-default:the-version",
7
+ "jobs": {
8
+ "api 👮 lint": {
9
+ "cache": [
10
+ {
11
+ "key": "api-yarn",
12
+ "paths": [
13
+ "api/.yarn",
14
+ ],
15
+ "policy": "pull-push",
16
+ },
17
+ {
18
+ "key": "api-node-modules",
19
+ "paths": [
20
+ "api/node_modules",
21
+ ],
22
+ "policy": "pull-push",
23
+ },
24
+ ],
25
+ "environment": undefined,
26
+ "interruptible": true,
27
+ "needs": [],
28
+ "retry": {
29
+ "max": 2,
30
+ "when": [
31
+ "runner_system_failure",
32
+ "stuck_or_timeout_failure",
33
+ ],
34
+ },
35
+ "script": [
36
+ "cd api",
37
+ "if [ -f ./.nvmrc ]; then source /root/.nvm/nvm.sh && nvm install <<< .nvmrc; fi",
38
+ "yarn install --immutable",
39
+ "yarn lint",
40
+ ],
41
+ "stage": "test",
42
+ "variables": {
43
+ "APP_PATH": "api",
44
+ "KUBERNETES_CPU_LIMIT": "2",
45
+ "KUBERNETES_CPU_REQUEST": "0.5",
46
+ "KUBERNETES_MEMORY_LIMIT": "4Gi",
47
+ "KUBERNETES_MEMORY_REQUEST": "2Gi",
48
+ },
49
+ },
50
+ "api 🔨 app | dev ": {
51
+ "artifacts": {
52
+ "paths": [
53
+ "api/__build_info.json",
54
+ "api/dist",
55
+ "api/.next",
56
+ ],
57
+ "reports": {
58
+ "junit": undefined,
59
+ },
60
+ },
61
+ "cache": [
62
+ {
63
+ "key": "api-yarn",
64
+ "paths": [
65
+ "api/.yarn",
66
+ ],
67
+ "policy": "pull-push",
68
+ },
69
+ {
70
+ "key": "api-node-modules",
71
+ "paths": [
72
+ "api/node_modules",
73
+ ],
74
+ "policy": "pull-push",
75
+ },
76
+ {
77
+ "key": "api-next-cache",
78
+ "paths": [
79
+ "api/.next/cache/",
80
+ ],
81
+ "policy": "pull-push",
82
+ },
83
+ ],
84
+ "environment": undefined,
85
+ "image": "path/to/docker/jobs-default:the-version",
86
+ "interruptible": true,
87
+ "needs": [],
88
+ "retry": {
89
+ "max": 2,
90
+ "when": [
91
+ "runner_system_failure",
92
+ "stuck_or_timeout_failure",
93
+ ],
94
+ },
95
+ "script": [
96
+ "echo '{"id":"some-id","time":"01-01-2023 12:13:14"}' > api/__build_info.json",
97
+ "if [ -f ./.nvmrc ]; then source /root/.nvm/nvm.sh && nvm install <<< .nvmrc; fi",
98
+ "cd api",
99
+ "if [ -f ./.nvmrc ]; then source /root/.nvm/nvm.sh && nvm install <<< .nvmrc; fi",
100
+ "yarn install --immutable",
101
+ "yarn build",
102
+ ],
103
+ "stage": "build",
104
+ "variables": {
105
+ "APP_DIR": "api",
106
+ "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",
107
+ "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",
108
+ "CLOUD_SQL_INSTANCE_CONNECTION_NAME": "projectId:region:instancename",
109
+ "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",
110
+ "DATABASE_URL": "postgresql://$DB_USER:$DB_PASSWORD@localhost/$DB_NAME?host=/cloudsql/$CLOUD_SQL_INSTANCE_CONNECTION_NAME",
111
+ "DB_NAME": "pan-test-app-dev-api",
112
+ "DB_PASSWORD": "$CL_dev_api_DB_PASSWORD",
113
+ "DB_USER": "my-user",
114
+ "ENV_SHORT": "dev",
115
+ "ENV_TYPE": "dev",
116
+ "GCLOUD_DEPLOY_credentialsKey": "$CL_dev_api_GCLOUD_DEPLOY_credentialsKey",
117
+ "HOST": "pan-test-app-dev-api-undefined",
118
+ "HOST_CANONICAL": "pan-test-app-dev-api-undefined",
119
+ "KUBERNETES_CPU_LIMIT": "2",
120
+ "KUBERNETES_CPU_REQUEST": "0.5",
121
+ "KUBERNETES_MEMORY_LIMIT": "4Gi",
122
+ "KUBERNETES_MEMORY_REQUEST": "2Gi",
123
+ "ROOT_URL": "https://pan-test-app-dev-api-undefined",
124
+ "_ALL_ENV_VAR_KEYS": "["ENV_SHORT","APP_DIR","ENV_TYPE","HOST","ROOT_URL","HOST_CANONICAL","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","GCLOUD_DEPLOY_credentialsKey"]",
125
+ },
126
+ },
127
+ "api 🔨 docker | dev ": {
128
+ "cache": [
129
+ {
130
+ "key": "api-yarn",
131
+ "paths": [
132
+ "api/.yarn",
133
+ ],
134
+ "policy": "pull",
135
+ },
136
+ ],
137
+ "environment": undefined,
138
+ "image": "path/to/docker/docker-build:the-version",
139
+ "interruptible": true,
140
+ "needs": [
141
+ "api 🔨 app | dev ",
142
+ ],
143
+ "retry": {
144
+ "max": 2,
145
+ "when": [
146
+ "runner_system_failure",
147
+ "stuck_or_timeout_failure",
148
+ ],
149
+ },
150
+ "script": [
151
+ "ensureNodeDockerfile",
152
+ "docker login --username gitlab-ci-token --password $CI_JOB_TOKEN $CI_REGISTRY",
153
+ "docker version",
154
+ "docker build --network host --cache-from $DOCKER_CACHE_IMAGE --tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG -f $APP_DIR/Dockerfile . --build-arg BUILDKIT_INLINE_CACHE=1",
155
+ "docker push $DOCKER_IMAGE:$DOCKER_IMAGE_TAG",
156
+ "docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG $DOCKER_CACHE_IMAGE",
157
+ "docker push $DOCKER_CACHE_IMAGE",
158
+ ],
159
+ "services": [
160
+ {
161
+ "command": [
162
+ "--tls=false",
163
+ ],
164
+ "name": "docker:20-dind",
165
+ },
166
+ ],
167
+ "stage": "build",
168
+ "variables": {
169
+ "APP_DIR": "api",
170
+ "DOCKERFILE_ADDITIONS": undefined,
171
+ "DOCKERFILE_ADDITIONS_END": undefined,
172
+ "DOCKER_BUILDKIT": "1",
173
+ "DOCKER_CACHE_IMAGE": "$DOCKER_REGISTRY_IMAGE_PATH/caches/api",
174
+ "DOCKER_COPY_WORKSPACE_FILES": "COPY --chown=node:node api/package.json /app/api/package.json
175
+ COPY --chown=node:node api/yarn.lock /app/api/yarn.lock",
176
+ "DOCKER_DIR": ".",
177
+ "DOCKER_DRIVER": "overlay2",
178
+ "DOCKER_HOST": "tcp://0.0.0.0:2375",
179
+ "DOCKER_IMAGE": "$DOCKER_REGISTRY_IMAGE_PATH/$DOCKER_IMAGE_NAME",
180
+ "DOCKER_IMAGE_NAME": "dev/api",
181
+ "DOCKER_IMAGE_TAG": "$CI_COMMIT_SHA",
182
+ "DOCKER_REGISTRY": "$CI_REGISTRY",
183
+ "DOCKER_REGISTRY_IMAGE_PATH": "$CI_REGISTRY_IMAGE",
184
+ "DOCKER_TLS_CERTDIR": "",
185
+ "KUBERNETES_CPU_LIMIT": "1",
186
+ "KUBERNETES_CPU_REQUEST": "0.5",
187
+ "KUBERNETES_MEMORY_LIMIT": "2Gi",
188
+ "KUBERNETES_MEMORY_REQUEST": "1Gi",
189
+ "YARN_INSTALL": "yarn plugin import workspace-tools && yarn workspaces focus --production && yarn rebuild",
190
+ "YARN_INSTALL_WITHOUT_SCRIPTS": "YARN_ENABLE_SCRIPTS=false yarn plugin import workspace-tools && yarn workspaces focus --production && yarn rebuild",
191
+ },
192
+ },
193
+ "api 🚀 Deploy | dev ": {
194
+ "allow_failure": false,
195
+ "artifacts": {
196
+ "paths": [
197
+ "____envvars.yaml",
198
+ ],
199
+ },
200
+ "environment": {
201
+ "auto_stop_in": "4 weeks",
202
+ "name": "dev/api",
203
+ "on_stop": "api 🛑 Stop ⚠️ | dev ",
204
+ "url": "https://pan-test-app-dev-api-undefined",
205
+ },
206
+ "image": "path/to/docker/gcloud:the-version",
207
+ "interruptible": true,
208
+ "needs": [
209
+ {
210
+ "artifacts": false,
211
+ "job": "api 👮 lint",
212
+ },
213
+ {
214
+ "artifacts": false,
215
+ "job": "api 🔨 app | dev ",
216
+ },
217
+ {
218
+ "artifacts": false,
219
+ "job": "api 🔨 docker | dev ",
220
+ },
221
+ {
222
+ "artifacts": false,
223
+ "job": "api 🧪 test",
224
+ },
225
+ {
226
+ "artifacts": false,
227
+ "job": "api 🛡 audit",
228
+ },
229
+ ],
230
+ "retry": {
231
+ "max": 2,
232
+ "when": [
233
+ "runner_system_failure",
234
+ "stuck_or_timeout_failure",
235
+ ],
236
+ },
237
+ "rules": [
238
+ {
239
+ "when": "on_success",
240
+ },
241
+ ],
242
+ "script": [
243
+ "echo $CL_dev_api_GCLOUD_DEPLOY_credentialsKey > ./____keyfile.json
244
+ ",
245
+ "gcloud auth activate-service-account --key-file="./____keyfile.json"",
246
+ "export GCLOUD_PROJECT_NUMBER=$(gcloud projects describe google-project-id --format="value(projectNumber)")",
247
+ "echo "GCLOUD_PROJECT_NUMBER: $GCLOUD_PROJECT_NUMBER"",
248
+ "docker login --username gitlab-ci-token --password $CI_JOB_TOKEN $CI_REGISTRY",
249
+ "gcloud auth configure-docker europe-west6-docker.pkg.dev",
250
+ "docker pull $DOCKER_IMAGE:$DOCKER_IMAGE_TAG",
251
+ "docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG",
252
+ "docker push europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG",
253
+ "echo "$ENV_VARS" > ____envvars.yaml",
254
+ "set +e",
255
+ "echo "ensuring Database..."",
256
+ "gcloud sql databases create pan-test-app-dev-api --instance=instancename --project projectId",
257
+ "set -e",
258
+ "set +e",
259
+ "gcloud scheduler jobs create http pan-test-app-dev-api-send-reminders-scheduler --project=google-project-id --location europe-west6 --schedule="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",
260
+ "set -e",
261
+ "gcloud scheduler jobs update http pan-test-app-dev-api-send-reminders-scheduler --project=google-project-id --location europe-west6 --schedule="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",
262
+ "set +e",
263
+ "gcloud beta 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/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG --project google-project-id --region=europe-west6 --set-cloudsql-instances=projectId:region:instancename --labels customer-name=pan,app-name=test-app,env-type=dev,env-name=dev,build-type=node --memory=512Mi",
264
+ "set -e",
265
+ "gcloud beta 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/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG --project google-project-id --region=europe-west6 --set-cloudsql-instances=projectId:region:instancename --labels customer-name=pan,app-name=test-app,env-type=dev,env-name=dev,build-type=node --memory=512Mi --env-vars-file=____envvars.yaml",
266
+ "set +e",
267
+ "gcloud beta 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/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG --project google-project-id --region=europe-west6 --set-cloudsql-instances=projectId:region:instancename --labels customer-name=pan,app-name=test-app,env-type=dev,env-name=dev,build-type=node --memory=512Mi",
268
+ "set -e",
269
+ "gcloud beta 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/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG --project google-project-id --region=europe-west6 --set-cloudsql-instances=projectId:region:instancename --labels customer-name=pan,app-name=test-app,env-type=dev,env-name=dev,build-type=node --memory=512Mi --env-vars-file=____envvars.yaml",
270
+ "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/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG --project google-project-id --region=europe-west6 --set-cloudsql-instances=projectId:region:instancename --labels customer-name=pan,app-name=test-app,env-type=dev,env-name=dev,build-type=node --env-vars-file=____envvars.yaml --allow-unauthenticated",
271
+ "gcloud beta run jobs execute pan-test-app-dev-api-migration --project google-project-id --region=europe-west6",
272
+ "docker image rm europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG",
273
+ ],
274
+ "services": [
275
+ {
276
+ "command": [
277
+ "--tls=false",
278
+ ],
279
+ "name": "docker:20-dind",
280
+ },
281
+ ],
282
+ "stage": "deploy dev",
283
+ "variables": {
284
+ "APP_DIR": "api",
285
+ "CLOUDSDK_CORE_DISABLE_PROMPTS": "1",
286
+ "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",
287
+ "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",
288
+ "CLOUD_SQL_INSTANCE_CONNECTION_NAME": "projectId:region:instancename",
289
+ "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",
290
+ "DATABASE_URL": "postgresql://$DB_USER:$DB_PASSWORD@localhost/$DB_NAME?host=/cloudsql/$CLOUD_SQL_INSTANCE_CONNECTION_NAME",
291
+ "DB_NAME": "pan-test-app-dev-api",
292
+ "DB_PASSWORD": "$CL_dev_api_DB_PASSWORD",
293
+ "DB_USER": "my-user",
294
+ "DOCKERFILE_ADDITIONS": undefined,
295
+ "DOCKERFILE_ADDITIONS_END": undefined,
296
+ "DOCKER_BUILDKIT": "1",
297
+ "DOCKER_CACHE_IMAGE": "$DOCKER_REGISTRY_IMAGE_PATH/caches/api",
298
+ "DOCKER_DIR": ".",
299
+ "DOCKER_DRIVER": "overlay2",
300
+ "DOCKER_HOST": "tcp://0.0.0.0:2375",
301
+ "DOCKER_IMAGE": "$DOCKER_REGISTRY_IMAGE_PATH/$DOCKER_IMAGE_NAME",
302
+ "DOCKER_IMAGE_NAME": "dev/api",
303
+ "DOCKER_IMAGE_TAG": "$CI_COMMIT_SHA",
304
+ "DOCKER_REGISTRY": "$CI_REGISTRY",
305
+ "DOCKER_REGISTRY_IMAGE_PATH": "$CI_REGISTRY_IMAGE",
306
+ "DOCKER_TLS_CERTDIR": "",
307
+ "ENV_SHORT": "dev",
308
+ "ENV_TYPE": "dev",
309
+ "ENV_VARS": "ENV_SHORT: 'dev'
310
+ APP_DIR: 'api'
311
+ ENV_TYPE: 'dev'
312
+ HOST: 'pan-test-app-dev-api-undefined'
313
+ ROOT_URL: 'https://pan-test-app-dev-api-undefined'
314
+ HOST_CANONICAL: 'pan-test-app-dev-api-undefined'
315
+ CLOUD_SQL_INSTANCE_CONNECTION_NAME: 'projectId:region:instancename'
316
+ DB_NAME: 'pan-test-app-dev-api'
317
+ DB_USER: 'my-user'
318
+ DB_PASSWORD: '$CL_dev_api_DB_PASSWORD'
319
+ DATABASE_URL: 'postgresql://$DB_USER:$DB_PASSWORD@localhost/$DB_NAME?host=/cloudsql/$CLOUD_SQL_INSTANCE_CONNECTION_NAME'
320
+ 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'
321
+ 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'
322
+ 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'
323
+ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","HOST","ROOT_URL","HOST_CANONICAL","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","GCLOUD_DEPLOY_credentialsKey"]'
324
+ ",
325
+ "GCLOUD_DEPLOY_credentialsKey": "$CL_dev_api_GCLOUD_DEPLOY_credentialsKey",
326
+ "HOST": "pan-test-app-dev-api-undefined",
327
+ "HOST_CANONICAL": "pan-test-app-dev-api-undefined",
328
+ "KUBERNETES_CPU_LIMIT": "1",
329
+ "KUBERNETES_CPU_REQUEST": "0.5",
330
+ "KUBERNETES_MEMORY_LIMIT": "2Gi",
331
+ "KUBERNETES_MEMORY_REQUEST": "1Gi",
332
+ "ROOT_URL": "https://pan-test-app-dev-api-undefined",
333
+ "_ALL_ENV_VAR_KEYS": "["ENV_SHORT","APP_DIR","ENV_TYPE","HOST","ROOT_URL","HOST_CANONICAL","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","GCLOUD_DEPLOY_credentialsKey"]",
334
+ },
335
+ },
336
+ "api 🛑 Stop ⚠️ | dev ": {
337
+ "environment": {
338
+ "action": "stop",
339
+ "name": "dev/api",
340
+ "url": "https://pan-test-app-dev-api-undefined",
341
+ },
342
+ "image": "path/to/docker/gcloud:the-version",
343
+ "interruptible": true,
344
+ "needs": [],
345
+ "retry": {
346
+ "max": 2,
347
+ "when": [
348
+ "runner_system_failure",
349
+ "stuck_or_timeout_failure",
350
+ ],
351
+ },
352
+ "rules": [
353
+ {
354
+ "allow_failure": true,
355
+ "if": "$CI_COMMIT_BRANCH =~ /^[0-9]+\\.([0-9]+|x)\\.x$/",
356
+ "when": "on_success",
357
+ },
358
+ {
359
+ "allow_failure": true,
360
+ "when": "manual",
361
+ },
362
+ ],
363
+ "script": [
364
+ "echo $CL_dev_api_GCLOUD_DEPLOY_credentialsKey > ./____keyfile.json
365
+ ",
366
+ "gcloud auth activate-service-account --key-file="./____keyfile.json"",
367
+ "gcloud run services delete pan-test-app-dev-api --project google-project-id --region=europe-west6",
368
+ "set +e",
369
+ "gcloud scheduler jobs delete pan-test-app-dev-api-send-reminders-scheduler --project=google-project-id --location europe-west6",
370
+ "set -e",
371
+ "gcloud beta run jobs delete pan-test-app-dev-api-migration --project google-project-id --region=europe-west6",
372
+ "gcloud beta run jobs delete pan-test-app-dev-api-send-reminders --project google-project-id --region=europe-west6",
373
+ ],
374
+ "stage": "stop dev",
375
+ "variables": {
376
+ "CLOUDSDK_CORE_DISABLE_PROMPTS": "1",
377
+ "GIT_STRATEGY": "none",
378
+ "KUBERNETES_CPU_LIMIT": "1",
379
+ "KUBERNETES_CPU_REQUEST": "0.5",
380
+ "KUBERNETES_MEMORY_LIMIT": "500Mi",
381
+ "KUBERNETES_MEMORY_REQUEST": "200Mi",
382
+ },
383
+ },
384
+ "api 🛡 audit": {
385
+ "allow_failure": true,
386
+ "cache": undefined,
387
+ "environment": undefined,
388
+ "interruptible": true,
389
+ "needs": [],
390
+ "retry": {
391
+ "max": 2,
392
+ "when": [
393
+ "runner_system_failure",
394
+ "stuck_or_timeout_failure",
395
+ ],
396
+ },
397
+ "script": [
398
+ "cd api",
399
+ "yarn npm audit --environment production",
400
+ ],
401
+ "stage": "test",
402
+ "variables": {
403
+ "APP_PATH": "api",
404
+ "KUBERNETES_CPU_LIMIT": "2",
405
+ "KUBERNETES_CPU_REQUEST": "0.5",
406
+ "KUBERNETES_MEMORY_LIMIT": "4Gi",
407
+ "KUBERNETES_MEMORY_REQUEST": "2Gi",
408
+ },
409
+ },
410
+ "api 🧪 test": {
411
+ "cache": [
412
+ {
413
+ "key": "api-yarn",
414
+ "paths": [
415
+ "api/.yarn",
416
+ ],
417
+ "policy": "pull-push",
418
+ },
419
+ {
420
+ "key": "api-node-modules",
421
+ "paths": [
422
+ "api/node_modules",
423
+ ],
424
+ "policy": "pull-push",
425
+ },
426
+ ],
427
+ "environment": undefined,
428
+ "image": "path/to/docker/jobs-testing-chrome:the-version",
429
+ "interruptible": true,
430
+ "needs": [],
431
+ "retry": {
432
+ "max": 2,
433
+ "when": [
434
+ "runner_system_failure",
435
+ "stuck_or_timeout_failure",
436
+ ],
437
+ },
438
+ "script": [
439
+ "cd api",
440
+ "if [ -f ./.nvmrc ]; then source /root/.nvm/nvm.sh && nvm install <<< .nvmrc; fi",
441
+ "yarn install --immutable",
442
+ "yarn test",
443
+ ],
444
+ "stage": "test",
445
+ "variables": {
446
+ "APP_PATH": "api",
447
+ "KUBERNETES_CPU_LIMIT": "2",
448
+ "KUBERNETES_CPU_REQUEST": "0.5",
449
+ "KUBERNETES_MEMORY_LIMIT": "4Gi",
450
+ "KUBERNETES_MEMORY_REQUEST": "2Gi",
451
+ },
452
+ },
453
+ },
454
+ "stages": [
455
+ "setup",
456
+ "setup dev",
457
+ "setup review",
458
+ "setup stage",
459
+ "setup prod",
460
+ "setup local",
461
+ "test",
462
+ "test dev",
463
+ "test review",
464
+ "test stage",
465
+ "test prod",
466
+ "test local",
467
+ "build",
468
+ "build dev",
469
+ "build review",
470
+ "build stage",
471
+ "build prod",
472
+ "build local",
473
+ "deploy",
474
+ "deploy dev",
475
+ "deploy review",
476
+ "deploy stage",
477
+ "deploy prod",
478
+ "deploy local",
479
+ "verify",
480
+ "verify dev",
481
+ "verify review",
482
+ "verify stage",
483
+ "verify prod",
484
+ "verify local",
485
+ "rollback",
486
+ "rollback dev",
487
+ "rollback review",
488
+ "rollback stage",
489
+ "rollback prod",
490
+ "rollback local",
491
+ "stop",
492
+ "stop dev",
493
+ "stop review",
494
+ "stop stage",
495
+ "stop prod",
496
+ "stop local",
497
+ ],
498
+ "variables": {
499
+ "FF_USE_FASTZIP": "true",
500
+ },
501
+ "workflow": {
502
+ "rules": [
503
+ {
504
+ "if": "$CI_COMMIT_TAG",
505
+ },
506
+ {
507
+ "if": "$CI_COMMIT_MESSAGE =~ /^chore\\(release\\).*/",
508
+ "when": "never",
509
+ },
510
+ {
511
+ "if": "$CI_COMMIT_BRANCH =~ /^[0-9]+.([0-9]+|x).x$/",
512
+ },
513
+ {
514
+ "if": "$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH",
515
+ },
516
+ {
517
+ "if": "$CI_MERGE_REQUEST_ID",
518
+ },
519
+ ],
520
+ },
521
+ },
522
+ "mr": {
523
+ "image": "path/to/docker/jobs-default:the-version",
524
+ "jobs": {
525
+ "api 👮 lint": {
526
+ "cache": [
527
+ {
528
+ "key": "api-yarn",
529
+ "paths": [
530
+ "api/.yarn",
531
+ ],
532
+ "policy": "pull-push",
533
+ },
534
+ {
535
+ "key": "api-node-modules",
536
+ "paths": [
537
+ "api/node_modules",
538
+ ],
539
+ "policy": "pull-push",
540
+ },
541
+ ],
542
+ "environment": undefined,
543
+ "interruptible": true,
544
+ "needs": [],
545
+ "retry": {
546
+ "max": 2,
547
+ "when": [
548
+ "runner_system_failure",
549
+ "stuck_or_timeout_failure",
550
+ ],
551
+ },
552
+ "script": [
553
+ "cd api",
554
+ "if [ -f ./.nvmrc ]; then source /root/.nvm/nvm.sh && nvm install <<< .nvmrc; fi",
555
+ "yarn install --immutable",
556
+ "yarn lint",
557
+ ],
558
+ "stage": "test",
559
+ "variables": {
560
+ "APP_PATH": "api",
561
+ "KUBERNETES_CPU_LIMIT": "2",
562
+ "KUBERNETES_CPU_REQUEST": "0.5",
563
+ "KUBERNETES_MEMORY_LIMIT": "4Gi",
564
+ "KUBERNETES_MEMORY_REQUEST": "2Gi",
565
+ },
566
+ },
567
+ "api 🔨 app | review ": {
568
+ "artifacts": {
569
+ "paths": [
570
+ "api/__build_info.json",
571
+ "api/dist",
572
+ "api/.next",
573
+ ],
574
+ "reports": {
575
+ "junit": undefined,
576
+ },
577
+ },
578
+ "cache": [
579
+ {
580
+ "key": "api-yarn",
581
+ "paths": [
582
+ "api/.yarn",
583
+ ],
584
+ "policy": "pull-push",
585
+ },
586
+ {
587
+ "key": "api-node-modules",
588
+ "paths": [
589
+ "api/node_modules",
590
+ ],
591
+ "policy": "pull-push",
592
+ },
593
+ {
594
+ "key": "api-next-cache",
595
+ "paths": [
596
+ "api/.next/cache/",
597
+ ],
598
+ "policy": "pull-push",
599
+ },
600
+ ],
601
+ "environment": undefined,
602
+ "image": "path/to/docker/jobs-default:the-version",
603
+ "interruptible": true,
604
+ "needs": [],
605
+ "retry": {
606
+ "max": 2,
607
+ "when": [
608
+ "runner_system_failure",
609
+ "stuck_or_timeout_failure",
610
+ ],
611
+ },
612
+ "script": [
613
+ "echo '{"id":"some-id","time":"01-01-2023 12:13:14"}' > api/__build_info.json",
614
+ "if [ -f ./.nvmrc ]; then source /root/.nvm/nvm.sh && nvm install <<< .nvmrc; fi",
615
+ "cd api",
616
+ "if [ -f ./.nvmrc ]; then source /root/.nvm/nvm.sh && nvm install <<< .nvmrc; fi",
617
+ "yarn install --immutable",
618
+ "yarn build",
619
+ ],
620
+ "stage": "build",
621
+ "variables": {
622
+ "APP_DIR": "api",
623
+ "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-review-mr1234-api-migration:run",
624
+ "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-review-mr1234-api-send-reminders:run",
625
+ "CLOUD_SQL_INSTANCE_CONNECTION_NAME": "projectId:region:instancename",
626
+ "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",
627
+ "DATABASE_URL": "postgresql://$DB_USER:$DB_PASSWORD@localhost/$DB_NAME?host=/cloudsql/$CLOUD_SQL_INSTANCE_CONNECTION_NAME",
628
+ "DB_NAME": "pan-test-app-review-mr1234-api",
629
+ "DB_PASSWORD": "$CL_review_api_DB_PASSWORD",
630
+ "DB_USER": "my-user",
631
+ "ENV_SHORT": "review",
632
+ "ENV_TYPE": "review",
633
+ "GCLOUD_DEPLOY_credentialsKey": "$CL_review_api_GCLOUD_DEPLOY_credentialsKey",
634
+ "HOST": "pan-test-app-review-mr1234-api-undefined",
635
+ "HOST_CANONICAL": "pan-test-app-review-mr1234-api-undefined",
636
+ "KUBERNETES_CPU_LIMIT": "2",
637
+ "KUBERNETES_CPU_REQUEST": "0.5",
638
+ "KUBERNETES_MEMORY_LIMIT": "4Gi",
639
+ "KUBERNETES_MEMORY_REQUEST": "2Gi",
640
+ "ROOT_URL": "https://pan-test-app-review-mr1234-api-undefined",
641
+ "_ALL_ENV_VAR_KEYS": "["ENV_SHORT","APP_DIR","ENV_TYPE","HOST","ROOT_URL","HOST_CANONICAL","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","GCLOUD_DEPLOY_credentialsKey"]",
642
+ },
643
+ },
644
+ "api 🔨 docker | review ": {
645
+ "cache": [
646
+ {
647
+ "key": "api-yarn",
648
+ "paths": [
649
+ "api/.yarn",
650
+ ],
651
+ "policy": "pull",
652
+ },
653
+ ],
654
+ "environment": undefined,
655
+ "image": "path/to/docker/docker-build:the-version",
656
+ "interruptible": true,
657
+ "needs": [
658
+ "api 🔨 app | review ",
659
+ ],
660
+ "retry": {
661
+ "max": 2,
662
+ "when": [
663
+ "runner_system_failure",
664
+ "stuck_or_timeout_failure",
665
+ ],
666
+ },
667
+ "script": [
668
+ "ensureNodeDockerfile",
669
+ "docker login --username gitlab-ci-token --password $CI_JOB_TOKEN $CI_REGISTRY",
670
+ "docker version",
671
+ "docker build --network host --cache-from $DOCKER_CACHE_IMAGE --tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG -f $APP_DIR/Dockerfile . --build-arg BUILDKIT_INLINE_CACHE=1",
672
+ "docker push $DOCKER_IMAGE:$DOCKER_IMAGE_TAG",
673
+ "docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG $DOCKER_CACHE_IMAGE",
674
+ "docker push $DOCKER_CACHE_IMAGE",
675
+ ],
676
+ "services": [
677
+ {
678
+ "command": [
679
+ "--tls=false",
680
+ ],
681
+ "name": "docker:20-dind",
682
+ },
683
+ ],
684
+ "stage": "build",
685
+ "variables": {
686
+ "APP_DIR": "api",
687
+ "DOCKERFILE_ADDITIONS": undefined,
688
+ "DOCKERFILE_ADDITIONS_END": undefined,
689
+ "DOCKER_BUILDKIT": "1",
690
+ "DOCKER_CACHE_IMAGE": "$DOCKER_REGISTRY_IMAGE_PATH/caches/api",
691
+ "DOCKER_COPY_WORKSPACE_FILES": "COPY --chown=node:node api/package.json /app/api/package.json
692
+ COPY --chown=node:node api/yarn.lock /app/api/yarn.lock",
693
+ "DOCKER_DIR": ".",
694
+ "DOCKER_DRIVER": "overlay2",
695
+ "DOCKER_HOST": "tcp://0.0.0.0:2375",
696
+ "DOCKER_IMAGE": "$DOCKER_REGISTRY_IMAGE_PATH/$DOCKER_IMAGE_NAME",
697
+ "DOCKER_IMAGE_NAME": "review/api",
698
+ "DOCKER_IMAGE_TAG": "$CI_COMMIT_SHA",
699
+ "DOCKER_REGISTRY": "$CI_REGISTRY",
700
+ "DOCKER_REGISTRY_IMAGE_PATH": "$CI_REGISTRY_IMAGE",
701
+ "DOCKER_TLS_CERTDIR": "",
702
+ "KUBERNETES_CPU_LIMIT": "1",
703
+ "KUBERNETES_CPU_REQUEST": "0.5",
704
+ "KUBERNETES_MEMORY_LIMIT": "2Gi",
705
+ "KUBERNETES_MEMORY_REQUEST": "1Gi",
706
+ "YARN_INSTALL": "yarn plugin import workspace-tools && yarn workspaces focus --production && yarn rebuild",
707
+ "YARN_INSTALL_WITHOUT_SCRIPTS": "YARN_ENABLE_SCRIPTS=false yarn plugin import workspace-tools && yarn workspaces focus --production && yarn rebuild",
708
+ },
709
+ },
710
+ "api 🚀 Deploy | review ": {
711
+ "allow_failure": false,
712
+ "artifacts": {
713
+ "paths": [
714
+ "____envvars.yaml",
715
+ ],
716
+ },
717
+ "environment": {
718
+ "auto_stop_in": "2 week",
719
+ "name": "review/some-commit/api",
720
+ "on_stop": "api 🛑 Stop ⚠️ | review ",
721
+ "url": "https://pan-test-app-review-mr1234-api-undefined",
722
+ },
723
+ "image": "path/to/docker/gcloud:the-version",
724
+ "interruptible": true,
725
+ "needs": [
726
+ {
727
+ "artifacts": false,
728
+ "job": "api 👮 lint",
729
+ },
730
+ {
731
+ "artifacts": false,
732
+ "job": "api 🔨 app | review ",
733
+ },
734
+ {
735
+ "artifacts": false,
736
+ "job": "api 🔨 docker | review ",
737
+ },
738
+ {
739
+ "artifacts": false,
740
+ "job": "api 🧪 test",
741
+ },
742
+ {
743
+ "artifacts": false,
744
+ "job": "api 🛡 audit",
745
+ },
746
+ ],
747
+ "retry": {
748
+ "max": 2,
749
+ "when": [
750
+ "runner_system_failure",
751
+ "stuck_or_timeout_failure",
752
+ ],
753
+ },
754
+ "rules": [
755
+ {
756
+ "when": "on_success",
757
+ },
758
+ ],
759
+ "script": [
760
+ "echo $CL_review_api_GCLOUD_DEPLOY_credentialsKey > ./____keyfile.json
761
+ ",
762
+ "gcloud auth activate-service-account --key-file="./____keyfile.json"",
763
+ "export GCLOUD_PROJECT_NUMBER=$(gcloud projects describe google-project-id --format="value(projectNumber)")",
764
+ "echo "GCLOUD_PROJECT_NUMBER: $GCLOUD_PROJECT_NUMBER"",
765
+ "docker login --username gitlab-ci-token --password $CI_JOB_TOKEN $CI_REGISTRY",
766
+ "gcloud auth configure-docker europe-west6-docker.pkg.dev",
767
+ "docker pull $DOCKER_IMAGE:$DOCKER_IMAGE_TAG",
768
+ "docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG",
769
+ "docker push europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG",
770
+ "echo "$ENV_VARS" > ____envvars.yaml",
771
+ "set +e",
772
+ "echo "ensuring Database..."",
773
+ "gcloud sql databases create pan-test-app-review-mr1234-api --instance=instancename --project projectId",
774
+ "set -e",
775
+ "set +e",
776
+ "gcloud scheduler jobs create http pan-test-app-review-mr1234-api-send-reminders-scheduler --project=google-project-id --location europe-west6 --schedule="0 * * * *" --uri="https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/jobs/pan-test-app-review-mr1234-api-send-reminders:run" --http-method POST --oauth-service-account-email $GCLOUD_PROJECT_NUMBER-compute@developer.gserviceaccount.com",
777
+ "set -e",
778
+ "gcloud scheduler jobs update http pan-test-app-review-mr1234-api-send-reminders-scheduler --project=google-project-id --location europe-west6 --schedule="0 * * * *" --uri="https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/jobs/pan-test-app-review-mr1234-api-send-reminders:run" --http-method POST --oauth-service-account-email $GCLOUD_PROJECT_NUMBER-compute@developer.gserviceaccount.com",
779
+ "set +e",
780
+ "gcloud beta run jobs create pan-test-app-review-mr1234-api-migration --command="yarn,migrate" --image europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG --project google-project-id --region=europe-west6 --set-cloudsql-instances=projectId:region:instancename --labels customer-name=pan,app-name=test-app,env-type=review,env-name=review,build-type=node --memory=512Mi",
781
+ "set -e",
782
+ "gcloud beta run jobs update pan-test-app-review-mr1234-api-migration --command="yarn,migrate" --image europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG --project google-project-id --region=europe-west6 --set-cloudsql-instances=projectId:region:instancename --labels customer-name=pan,app-name=test-app,env-type=review,env-name=review,build-type=node --memory=512Mi --env-vars-file=____envvars.yaml",
783
+ "set +e",
784
+ "gcloud beta run jobs create pan-test-app-review-mr1234-api-send-reminders --command="yarn,job:send-reminders" --image europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG --project google-project-id --region=europe-west6 --set-cloudsql-instances=projectId:region:instancename --labels customer-name=pan,app-name=test-app,env-type=review,env-name=review,build-type=node --memory=512Mi",
785
+ "set -e",
786
+ "gcloud beta run jobs update pan-test-app-review-mr1234-api-send-reminders --command="yarn,job:send-reminders" --image europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG --project google-project-id --region=europe-west6 --set-cloudsql-instances=projectId:region:instancename --labels customer-name=pan,app-name=test-app,env-type=review,env-name=review,build-type=node --memory=512Mi --env-vars-file=____envvars.yaml",
787
+ "gcloud run deploy pan-test-app-review-mr1234-api --command="yarn,start" --image europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG --project google-project-id --region=europe-west6 --set-cloudsql-instances=projectId:region:instancename --labels customer-name=pan,app-name=test-app,env-type=review,env-name=review,build-type=node --env-vars-file=____envvars.yaml --allow-unauthenticated",
788
+ "gcloud beta run jobs execute pan-test-app-review-mr1234-api-migration --project google-project-id --region=europe-west6",
789
+ "docker image rm europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG",
790
+ ],
791
+ "services": [
792
+ {
793
+ "command": [
794
+ "--tls=false",
795
+ ],
796
+ "name": "docker:20-dind",
797
+ },
798
+ ],
799
+ "stage": "deploy review",
800
+ "variables": {
801
+ "APP_DIR": "api",
802
+ "CLOUDSDK_CORE_DISABLE_PROMPTS": "1",
803
+ "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-review-mr1234-api-migration:run",
804
+ "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-review-mr1234-api-send-reminders:run",
805
+ "CLOUD_SQL_INSTANCE_CONNECTION_NAME": "projectId:region:instancename",
806
+ "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",
807
+ "DATABASE_URL": "postgresql://$DB_USER:$DB_PASSWORD@localhost/$DB_NAME?host=/cloudsql/$CLOUD_SQL_INSTANCE_CONNECTION_NAME",
808
+ "DB_NAME": "pan-test-app-review-mr1234-api",
809
+ "DB_PASSWORD": "$CL_review_api_DB_PASSWORD",
810
+ "DB_USER": "my-user",
811
+ "DOCKERFILE_ADDITIONS": undefined,
812
+ "DOCKERFILE_ADDITIONS_END": undefined,
813
+ "DOCKER_BUILDKIT": "1",
814
+ "DOCKER_CACHE_IMAGE": "$DOCKER_REGISTRY_IMAGE_PATH/caches/api",
815
+ "DOCKER_DIR": ".",
816
+ "DOCKER_DRIVER": "overlay2",
817
+ "DOCKER_HOST": "tcp://0.0.0.0:2375",
818
+ "DOCKER_IMAGE": "$DOCKER_REGISTRY_IMAGE_PATH/$DOCKER_IMAGE_NAME",
819
+ "DOCKER_IMAGE_NAME": "review/api",
820
+ "DOCKER_IMAGE_TAG": "$CI_COMMIT_SHA",
821
+ "DOCKER_REGISTRY": "$CI_REGISTRY",
822
+ "DOCKER_REGISTRY_IMAGE_PATH": "$CI_REGISTRY_IMAGE",
823
+ "DOCKER_TLS_CERTDIR": "",
824
+ "ENV_SHORT": "review",
825
+ "ENV_TYPE": "review",
826
+ "ENV_VARS": "ENV_SHORT: 'review'
827
+ APP_DIR: 'api'
828
+ ENV_TYPE: 'review'
829
+ HOST: 'pan-test-app-review-mr1234-api-undefined'
830
+ ROOT_URL: 'https://pan-test-app-review-mr1234-api-undefined'
831
+ HOST_CANONICAL: 'pan-test-app-review-mr1234-api-undefined'
832
+ CLOUD_SQL_INSTANCE_CONNECTION_NAME: 'projectId:region:instancename'
833
+ DB_NAME: 'pan-test-app-review-mr1234-api'
834
+ DB_USER: 'my-user'
835
+ DB_PASSWORD: '$CL_review_api_DB_PASSWORD'
836
+ DATABASE_URL: 'postgresql://$DB_USER:$DB_PASSWORD@localhost/$DB_NAME?host=/cloudsql/$CLOUD_SQL_INSTANCE_CONNECTION_NAME'
837
+ 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'
838
+ 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-review-mr1234-api-migration:run'
839
+ 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-review-mr1234-api-send-reminders:run'
840
+ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","HOST","ROOT_URL","HOST_CANONICAL","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","GCLOUD_DEPLOY_credentialsKey"]'
841
+ ",
842
+ "GCLOUD_DEPLOY_credentialsKey": "$CL_review_api_GCLOUD_DEPLOY_credentialsKey",
843
+ "HOST": "pan-test-app-review-mr1234-api-undefined",
844
+ "HOST_CANONICAL": "pan-test-app-review-mr1234-api-undefined",
845
+ "KUBERNETES_CPU_LIMIT": "1",
846
+ "KUBERNETES_CPU_REQUEST": "0.5",
847
+ "KUBERNETES_MEMORY_LIMIT": "2Gi",
848
+ "KUBERNETES_MEMORY_REQUEST": "1Gi",
849
+ "ROOT_URL": "https://pan-test-app-review-mr1234-api-undefined",
850
+ "_ALL_ENV_VAR_KEYS": "["ENV_SHORT","APP_DIR","ENV_TYPE","HOST","ROOT_URL","HOST_CANONICAL","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","GCLOUD_DEPLOY_credentialsKey"]",
851
+ },
852
+ },
853
+ "api 🛑 Stop ⚠️ | review ": {
854
+ "environment": {
855
+ "action": "stop",
856
+ "name": "review/some-commit/api",
857
+ "url": "https://pan-test-app-review-mr1234-api-undefined",
858
+ },
859
+ "image": "path/to/docker/gcloud:the-version",
860
+ "interruptible": true,
861
+ "needs": [],
862
+ "retry": {
863
+ "max": 2,
864
+ "when": [
865
+ "runner_system_failure",
866
+ "stuck_or_timeout_failure",
867
+ ],
868
+ },
869
+ "rules": [
870
+ {
871
+ "allow_failure": true,
872
+ "if": "$CI_COMMIT_BRANCH =~ /^[0-9]+\\.([0-9]+|x)\\.x$/",
873
+ "when": "on_success",
874
+ },
875
+ {
876
+ "allow_failure": true,
877
+ "when": "manual",
878
+ },
879
+ ],
880
+ "script": [
881
+ "echo $CL_review_api_GCLOUD_DEPLOY_credentialsKey > ./____keyfile.json
882
+ ",
883
+ "gcloud auth activate-service-account --key-file="./____keyfile.json"",
884
+ "gcloud run services delete pan-test-app-review-mr1234-api --project google-project-id --region=europe-west6",
885
+ "set +e",
886
+ "gcloud scheduler jobs delete pan-test-app-review-mr1234-api-send-reminders-scheduler --project=google-project-id --location europe-west6",
887
+ "set -e",
888
+ "gcloud beta run jobs delete pan-test-app-review-mr1234-api-migration --project google-project-id --region=europe-west6",
889
+ "gcloud beta run jobs delete pan-test-app-review-mr1234-api-send-reminders --project google-project-id --region=europe-west6",
890
+ "echo "deleting database pan-test-app-review-mr1234-api..."",
891
+ "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"",
892
+ "
893
+ until gcloud sql databases delete pan-test-app-review-mr1234-api --instance=instancename --project projectId &> /dev/null
894
+ do
895
+ echo "Trying again."
896
+ sleep 10
897
+ done
898
+ ",
899
+ ],
900
+ "stage": "stop review",
901
+ "variables": {
902
+ "CLOUDSDK_CORE_DISABLE_PROMPTS": "1",
903
+ "GIT_STRATEGY": "none",
904
+ "KUBERNETES_CPU_LIMIT": "1",
905
+ "KUBERNETES_CPU_REQUEST": "0.5",
906
+ "KUBERNETES_MEMORY_LIMIT": "500Mi",
907
+ "KUBERNETES_MEMORY_REQUEST": "200Mi",
908
+ },
909
+ },
910
+ "api 🛡 audit": {
911
+ "allow_failure": true,
912
+ "cache": undefined,
913
+ "environment": undefined,
914
+ "interruptible": true,
915
+ "needs": [],
916
+ "retry": {
917
+ "max": 2,
918
+ "when": [
919
+ "runner_system_failure",
920
+ "stuck_or_timeout_failure",
921
+ ],
922
+ },
923
+ "script": [
924
+ "cd api",
925
+ "yarn npm audit --environment production",
926
+ ],
927
+ "stage": "test",
928
+ "variables": {
929
+ "APP_PATH": "api",
930
+ "KUBERNETES_CPU_LIMIT": "2",
931
+ "KUBERNETES_CPU_REQUEST": "0.5",
932
+ "KUBERNETES_MEMORY_LIMIT": "4Gi",
933
+ "KUBERNETES_MEMORY_REQUEST": "2Gi",
934
+ },
935
+ },
936
+ "api 🧪 test": {
937
+ "cache": [
938
+ {
939
+ "key": "api-yarn",
940
+ "paths": [
941
+ "api/.yarn",
942
+ ],
943
+ "policy": "pull-push",
944
+ },
945
+ {
946
+ "key": "api-node-modules",
947
+ "paths": [
948
+ "api/node_modules",
949
+ ],
950
+ "policy": "pull-push",
951
+ },
952
+ ],
953
+ "environment": undefined,
954
+ "image": "path/to/docker/jobs-testing-chrome:the-version",
955
+ "interruptible": true,
956
+ "needs": [],
957
+ "retry": {
958
+ "max": 2,
959
+ "when": [
960
+ "runner_system_failure",
961
+ "stuck_or_timeout_failure",
962
+ ],
963
+ },
964
+ "script": [
965
+ "cd api",
966
+ "if [ -f ./.nvmrc ]; then source /root/.nvm/nvm.sh && nvm install <<< .nvmrc; fi",
967
+ "yarn install --immutable",
968
+ "yarn test",
969
+ ],
970
+ "stage": "test",
971
+ "variables": {
972
+ "APP_PATH": "api",
973
+ "KUBERNETES_CPU_LIMIT": "2",
974
+ "KUBERNETES_CPU_REQUEST": "0.5",
975
+ "KUBERNETES_MEMORY_LIMIT": "4Gi",
976
+ "KUBERNETES_MEMORY_REQUEST": "2Gi",
977
+ },
978
+ },
979
+ },
980
+ "stages": [
981
+ "setup",
982
+ "setup dev",
983
+ "setup review",
984
+ "setup stage",
985
+ "setup prod",
986
+ "setup local",
987
+ "test",
988
+ "test dev",
989
+ "test review",
990
+ "test stage",
991
+ "test prod",
992
+ "test local",
993
+ "build",
994
+ "build dev",
995
+ "build review",
996
+ "build stage",
997
+ "build prod",
998
+ "build local",
999
+ "deploy",
1000
+ "deploy dev",
1001
+ "deploy review",
1002
+ "deploy stage",
1003
+ "deploy prod",
1004
+ "deploy local",
1005
+ "verify",
1006
+ "verify dev",
1007
+ "verify review",
1008
+ "verify stage",
1009
+ "verify prod",
1010
+ "verify local",
1011
+ "rollback",
1012
+ "rollback dev",
1013
+ "rollback review",
1014
+ "rollback stage",
1015
+ "rollback prod",
1016
+ "rollback local",
1017
+ "stop",
1018
+ "stop dev",
1019
+ "stop review",
1020
+ "stop stage",
1021
+ "stop prod",
1022
+ "stop local",
1023
+ ],
1024
+ "variables": {
1025
+ "FF_USE_FASTZIP": "true",
1026
+ },
1027
+ "workflow": {
1028
+ "rules": [
1029
+ {
1030
+ "if": "$CI_COMMIT_TAG",
1031
+ },
1032
+ {
1033
+ "if": "$CI_COMMIT_MESSAGE =~ /^chore\\(release\\).*/",
1034
+ "when": "never",
1035
+ },
1036
+ {
1037
+ "if": "$CI_COMMIT_BRANCH =~ /^[0-9]+.([0-9]+|x).x$/",
1038
+ },
1039
+ {
1040
+ "if": "$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH",
1041
+ },
1042
+ {
1043
+ "if": "$CI_MERGE_REQUEST_ID",
1044
+ },
1045
+ ],
1046
+ },
1047
+ },
1048
+ "taggedRelease": {
1049
+ "image": "path/to/docker/jobs-default:the-version",
1050
+ "jobs": {
1051
+ "api 🔨 app | prod ": {
1052
+ "artifacts": {
1053
+ "paths": [
1054
+ "api/__build_info.json",
1055
+ "api/dist",
1056
+ "api/.next",
1057
+ ],
1058
+ "reports": {
1059
+ "junit": undefined,
1060
+ },
1061
+ },
1062
+ "cache": [
1063
+ {
1064
+ "key": "api-yarn",
1065
+ "paths": [
1066
+ "api/.yarn",
1067
+ ],
1068
+ "policy": "pull-push",
1069
+ },
1070
+ {
1071
+ "key": "api-node-modules",
1072
+ "paths": [
1073
+ "api/node_modules",
1074
+ ],
1075
+ "policy": "pull-push",
1076
+ },
1077
+ {
1078
+ "key": "api-next-cache",
1079
+ "paths": [
1080
+ "api/.next/cache/",
1081
+ ],
1082
+ "policy": "pull-push",
1083
+ },
1084
+ ],
1085
+ "environment": undefined,
1086
+ "image": "path/to/docker/jobs-default:the-version",
1087
+ "interruptible": true,
1088
+ "needs": [],
1089
+ "retry": {
1090
+ "max": 2,
1091
+ "when": [
1092
+ "runner_system_failure",
1093
+ "stuck_or_timeout_failure",
1094
+ ],
1095
+ },
1096
+ "script": [
1097
+ "echo '{"id":"some-id","time":"01-01-2023 12:13:14"}' > api/__build_info.json",
1098
+ "if [ -f ./.nvmrc ]; then source /root/.nvm/nvm.sh && nvm install <<< .nvmrc; fi",
1099
+ "cd api",
1100
+ "if [ -f ./.nvmrc ]; then source /root/.nvm/nvm.sh && nvm install <<< .nvmrc; fi",
1101
+ "yarn install --immutable",
1102
+ "yarn build",
1103
+ ],
1104
+ "stage": "build",
1105
+ "variables": {
1106
+ "APP_DIR": "api",
1107
+ "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",
1108
+ "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",
1109
+ "CLOUD_SQL_INSTANCE_CONNECTION_NAME": "projectId:region:instancename",
1110
+ "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",
1111
+ "DATABASE_URL": "postgresql://$DB_USER:$DB_PASSWORD@localhost/$DB_NAME?host=/cloudsql/$CLOUD_SQL_INSTANCE_CONNECTION_NAME",
1112
+ "DB_NAME": "pan-test-app-prod-api",
1113
+ "DB_PASSWORD": "$CL_prod_api_DB_PASSWORD",
1114
+ "DB_USER": "my-user",
1115
+ "ENV_SHORT": "prod",
1116
+ "ENV_TYPE": "prod",
1117
+ "GCLOUD_DEPLOY_credentialsKey": "$CL_prod_api_GCLOUD_DEPLOY_credentialsKey",
1118
+ "HOST": "pan-test-app-prod-api-undefined",
1119
+ "HOST_CANONICAL": "pan-test-app-prod-api-undefined",
1120
+ "KUBERNETES_CPU_LIMIT": "2",
1121
+ "KUBERNETES_CPU_REQUEST": "0.5",
1122
+ "KUBERNETES_MEMORY_LIMIT": "4Gi",
1123
+ "KUBERNETES_MEMORY_REQUEST": "2Gi",
1124
+ "ROOT_URL": "https://pan-test-app-prod-api-undefined",
1125
+ "_ALL_ENV_VAR_KEYS": "["ENV_SHORT","APP_DIR","ENV_TYPE","HOST","ROOT_URL","HOST_CANONICAL","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","GCLOUD_DEPLOY_credentialsKey"]",
1126
+ },
1127
+ },
1128
+ "api 🔨 app | stage ": {
1129
+ "artifacts": {
1130
+ "paths": [
1131
+ "api/__build_info.json",
1132
+ "api/dist",
1133
+ "api/.next",
1134
+ ],
1135
+ "reports": {
1136
+ "junit": undefined,
1137
+ },
1138
+ },
1139
+ "cache": [
1140
+ {
1141
+ "key": "api-yarn",
1142
+ "paths": [
1143
+ "api/.yarn",
1144
+ ],
1145
+ "policy": "pull-push",
1146
+ },
1147
+ {
1148
+ "key": "api-node-modules",
1149
+ "paths": [
1150
+ "api/node_modules",
1151
+ ],
1152
+ "policy": "pull-push",
1153
+ },
1154
+ {
1155
+ "key": "api-next-cache",
1156
+ "paths": [
1157
+ "api/.next/cache/",
1158
+ ],
1159
+ "policy": "pull-push",
1160
+ },
1161
+ ],
1162
+ "environment": undefined,
1163
+ "image": "path/to/docker/jobs-default:the-version",
1164
+ "interruptible": true,
1165
+ "needs": [],
1166
+ "retry": {
1167
+ "max": 2,
1168
+ "when": [
1169
+ "runner_system_failure",
1170
+ "stuck_or_timeout_failure",
1171
+ ],
1172
+ },
1173
+ "script": [
1174
+ "echo '{"id":"some-id","time":"01-01-2023 12:13:14"}' > api/__build_info.json",
1175
+ "if [ -f ./.nvmrc ]; then source /root/.nvm/nvm.sh && nvm install <<< .nvmrc; fi",
1176
+ "cd api",
1177
+ "if [ -f ./.nvmrc ]; then source /root/.nvm/nvm.sh && nvm install <<< .nvmrc; fi",
1178
+ "yarn install --immutable",
1179
+ "yarn build",
1180
+ ],
1181
+ "stage": "build",
1182
+ "variables": {
1183
+ "APP_DIR": "api",
1184
+ "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",
1185
+ "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",
1186
+ "CLOUD_SQL_INSTANCE_CONNECTION_NAME": "projectId:region:instancename",
1187
+ "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",
1188
+ "DATABASE_URL": "postgresql://$DB_USER:$DB_PASSWORD@localhost/$DB_NAME?host=/cloudsql/$CLOUD_SQL_INSTANCE_CONNECTION_NAME",
1189
+ "DB_NAME": "pan-test-app-stage-api",
1190
+ "DB_PASSWORD": "$CL_stage_api_DB_PASSWORD",
1191
+ "DB_USER": "my-user",
1192
+ "ENV_SHORT": "stage",
1193
+ "ENV_TYPE": "stage",
1194
+ "GCLOUD_DEPLOY_credentialsKey": "$CL_stage_api_GCLOUD_DEPLOY_credentialsKey",
1195
+ "HOST": "pan-test-app-stage-api-undefined",
1196
+ "HOST_CANONICAL": "pan-test-app-stage-api-undefined",
1197
+ "KUBERNETES_CPU_LIMIT": "2",
1198
+ "KUBERNETES_CPU_REQUEST": "0.5",
1199
+ "KUBERNETES_MEMORY_LIMIT": "4Gi",
1200
+ "KUBERNETES_MEMORY_REQUEST": "2Gi",
1201
+ "ROOT_URL": "https://pan-test-app-stage-api-undefined",
1202
+ "_ALL_ENV_VAR_KEYS": "["ENV_SHORT","APP_DIR","ENV_TYPE","HOST","ROOT_URL","HOST_CANONICAL","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","GCLOUD_DEPLOY_credentialsKey"]",
1203
+ },
1204
+ },
1205
+ "api 🔨 docker | prod ": {
1206
+ "cache": [
1207
+ {
1208
+ "key": "api-yarn",
1209
+ "paths": [
1210
+ "api/.yarn",
1211
+ ],
1212
+ "policy": "pull",
1213
+ },
1214
+ ],
1215
+ "environment": undefined,
1216
+ "image": "path/to/docker/docker-build:the-version",
1217
+ "interruptible": true,
1218
+ "needs": [
1219
+ "api 🔨 app | prod ",
1220
+ ],
1221
+ "retry": {
1222
+ "max": 2,
1223
+ "when": [
1224
+ "runner_system_failure",
1225
+ "stuck_or_timeout_failure",
1226
+ ],
1227
+ },
1228
+ "script": [
1229
+ "ensureNodeDockerfile",
1230
+ "docker login --username gitlab-ci-token --password $CI_JOB_TOKEN $CI_REGISTRY",
1231
+ "docker version",
1232
+ "docker build --network host --cache-from $DOCKER_CACHE_IMAGE --tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG -f $APP_DIR/Dockerfile . --build-arg BUILDKIT_INLINE_CACHE=1",
1233
+ "docker push $DOCKER_IMAGE:$DOCKER_IMAGE_TAG",
1234
+ "docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG $DOCKER_CACHE_IMAGE",
1235
+ "docker push $DOCKER_CACHE_IMAGE",
1236
+ ],
1237
+ "services": [
1238
+ {
1239
+ "command": [
1240
+ "--tls=false",
1241
+ ],
1242
+ "name": "docker:20-dind",
1243
+ },
1244
+ ],
1245
+ "stage": "build",
1246
+ "variables": {
1247
+ "APP_DIR": "api",
1248
+ "DOCKERFILE_ADDITIONS": undefined,
1249
+ "DOCKERFILE_ADDITIONS_END": undefined,
1250
+ "DOCKER_BUILDKIT": "1",
1251
+ "DOCKER_CACHE_IMAGE": "$DOCKER_REGISTRY_IMAGE_PATH/caches/api",
1252
+ "DOCKER_COPY_WORKSPACE_FILES": "COPY --chown=node:node api/package.json /app/api/package.json
1253
+ COPY --chown=node:node api/yarn.lock /app/api/yarn.lock",
1254
+ "DOCKER_DIR": ".",
1255
+ "DOCKER_DRIVER": "overlay2",
1256
+ "DOCKER_HOST": "tcp://0.0.0.0:2375",
1257
+ "DOCKER_IMAGE": "$DOCKER_REGISTRY_IMAGE_PATH/$DOCKER_IMAGE_NAME",
1258
+ "DOCKER_IMAGE_NAME": "prod/api",
1259
+ "DOCKER_IMAGE_TAG": "$CI_COMMIT_SHA",
1260
+ "DOCKER_REGISTRY": "$CI_REGISTRY",
1261
+ "DOCKER_REGISTRY_IMAGE_PATH": "$CI_REGISTRY_IMAGE",
1262
+ "DOCKER_TLS_CERTDIR": "",
1263
+ "KUBERNETES_CPU_LIMIT": "1",
1264
+ "KUBERNETES_CPU_REQUEST": "0.5",
1265
+ "KUBERNETES_MEMORY_LIMIT": "2Gi",
1266
+ "KUBERNETES_MEMORY_REQUEST": "1Gi",
1267
+ "YARN_INSTALL": "yarn plugin import workspace-tools && yarn workspaces focus --production && yarn rebuild",
1268
+ "YARN_INSTALL_WITHOUT_SCRIPTS": "YARN_ENABLE_SCRIPTS=false yarn plugin import workspace-tools && yarn workspaces focus --production && yarn rebuild",
1269
+ },
1270
+ },
1271
+ "api 🔨 docker | stage ": {
1272
+ "cache": [
1273
+ {
1274
+ "key": "api-yarn",
1275
+ "paths": [
1276
+ "api/.yarn",
1277
+ ],
1278
+ "policy": "pull",
1279
+ },
1280
+ ],
1281
+ "environment": undefined,
1282
+ "image": "path/to/docker/docker-build:the-version",
1283
+ "interruptible": true,
1284
+ "needs": [
1285
+ "api 🔨 app | stage ",
1286
+ ],
1287
+ "retry": {
1288
+ "max": 2,
1289
+ "when": [
1290
+ "runner_system_failure",
1291
+ "stuck_or_timeout_failure",
1292
+ ],
1293
+ },
1294
+ "script": [
1295
+ "ensureNodeDockerfile",
1296
+ "docker login --username gitlab-ci-token --password $CI_JOB_TOKEN $CI_REGISTRY",
1297
+ "docker version",
1298
+ "docker build --network host --cache-from $DOCKER_CACHE_IMAGE --tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG -f $APP_DIR/Dockerfile . --build-arg BUILDKIT_INLINE_CACHE=1",
1299
+ "docker push $DOCKER_IMAGE:$DOCKER_IMAGE_TAG",
1300
+ "docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG $DOCKER_CACHE_IMAGE",
1301
+ "docker push $DOCKER_CACHE_IMAGE",
1302
+ ],
1303
+ "services": [
1304
+ {
1305
+ "command": [
1306
+ "--tls=false",
1307
+ ],
1308
+ "name": "docker:20-dind",
1309
+ },
1310
+ ],
1311
+ "stage": "build",
1312
+ "variables": {
1313
+ "APP_DIR": "api",
1314
+ "DOCKERFILE_ADDITIONS": undefined,
1315
+ "DOCKERFILE_ADDITIONS_END": undefined,
1316
+ "DOCKER_BUILDKIT": "1",
1317
+ "DOCKER_CACHE_IMAGE": "$DOCKER_REGISTRY_IMAGE_PATH/caches/api",
1318
+ "DOCKER_COPY_WORKSPACE_FILES": "COPY --chown=node:node api/package.json /app/api/package.json
1319
+ COPY --chown=node:node api/yarn.lock /app/api/yarn.lock",
1320
+ "DOCKER_DIR": ".",
1321
+ "DOCKER_DRIVER": "overlay2",
1322
+ "DOCKER_HOST": "tcp://0.0.0.0:2375",
1323
+ "DOCKER_IMAGE": "$DOCKER_REGISTRY_IMAGE_PATH/$DOCKER_IMAGE_NAME",
1324
+ "DOCKER_IMAGE_NAME": "stage/api",
1325
+ "DOCKER_IMAGE_TAG": "$CI_COMMIT_SHA",
1326
+ "DOCKER_REGISTRY": "$CI_REGISTRY",
1327
+ "DOCKER_REGISTRY_IMAGE_PATH": "$CI_REGISTRY_IMAGE",
1328
+ "DOCKER_TLS_CERTDIR": "",
1329
+ "KUBERNETES_CPU_LIMIT": "1",
1330
+ "KUBERNETES_CPU_REQUEST": "0.5",
1331
+ "KUBERNETES_MEMORY_LIMIT": "2Gi",
1332
+ "KUBERNETES_MEMORY_REQUEST": "1Gi",
1333
+ "YARN_INSTALL": "yarn plugin import workspace-tools && yarn workspaces focus --production && yarn rebuild",
1334
+ "YARN_INSTALL_WITHOUT_SCRIPTS": "YARN_ENABLE_SCRIPTS=false yarn plugin import workspace-tools && yarn workspaces focus --production && yarn rebuild",
1335
+ },
1336
+ },
1337
+ "api 🚀 Deploy | prod ": {
1338
+ "allow_failure": true,
1339
+ "artifacts": {
1340
+ "paths": [
1341
+ "____envvars.yaml",
1342
+ ],
1343
+ },
1344
+ "environment": {
1345
+ "auto_stop_in": undefined,
1346
+ "name": "prod/api",
1347
+ "on_stop": "api 🛑 Stop ⚠️ | prod ",
1348
+ "url": "https://pan-test-app-prod-api-undefined",
1349
+ },
1350
+ "image": "path/to/docker/gcloud:the-version",
1351
+ "interruptible": true,
1352
+ "needs": [
1353
+ {
1354
+ "artifacts": false,
1355
+ "job": "api 🔨 app | prod ",
1356
+ },
1357
+ {
1358
+ "artifacts": false,
1359
+ "job": "api 🔨 docker | prod ",
1360
+ },
1361
+ ],
1362
+ "retry": {
1363
+ "max": 2,
1364
+ "when": [
1365
+ "runner_system_failure",
1366
+ "stuck_or_timeout_failure",
1367
+ ],
1368
+ },
1369
+ "rules": [
1370
+ {
1371
+ "when": "manual",
1372
+ },
1373
+ ],
1374
+ "script": [
1375
+ "echo $CL_prod_api_GCLOUD_DEPLOY_credentialsKey > ./____keyfile.json
1376
+ ",
1377
+ "gcloud auth activate-service-account --key-file="./____keyfile.json"",
1378
+ "export GCLOUD_PROJECT_NUMBER=$(gcloud projects describe google-project-id --format="value(projectNumber)")",
1379
+ "echo "GCLOUD_PROJECT_NUMBER: $GCLOUD_PROJECT_NUMBER"",
1380
+ "docker login --username gitlab-ci-token --password $CI_JOB_TOKEN $CI_REGISTRY",
1381
+ "gcloud auth configure-docker europe-west6-docker.pkg.dev",
1382
+ "docker pull $DOCKER_IMAGE:$DOCKER_IMAGE_TAG",
1383
+ "docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG",
1384
+ "docker push europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG",
1385
+ "echo "$ENV_VARS" > ____envvars.yaml",
1386
+ "set +e",
1387
+ "echo "ensuring Database..."",
1388
+ "gcloud sql databases create pan-test-app-prod-api --instance=instancename --project projectId",
1389
+ "set -e",
1390
+ "set +e",
1391
+ "gcloud scheduler jobs create http pan-test-app-prod-api-send-reminders-scheduler --project=google-project-id --location europe-west6 --schedule="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",
1392
+ "set -e",
1393
+ "gcloud scheduler jobs update http pan-test-app-prod-api-send-reminders-scheduler --project=google-project-id --location europe-west6 --schedule="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",
1394
+ "set +e",
1395
+ "gcloud beta 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/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG --project google-project-id --region=europe-west6 --set-cloudsql-instances=projectId:region:instancename --labels customer-name=pan,app-name=test-app,env-type=prod,env-name=prod,build-type=node --memory=512Mi",
1396
+ "set -e",
1397
+ "gcloud beta 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/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG --project google-project-id --region=europe-west6 --set-cloudsql-instances=projectId:region:instancename --labels customer-name=pan,app-name=test-app,env-type=prod,env-name=prod,build-type=node --memory=512Mi --env-vars-file=____envvars.yaml",
1398
+ "set +e",
1399
+ "gcloud beta 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/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG --project google-project-id --region=europe-west6 --set-cloudsql-instances=projectId:region:instancename --labels customer-name=pan,app-name=test-app,env-type=prod,env-name=prod,build-type=node --memory=512Mi",
1400
+ "set -e",
1401
+ "gcloud beta 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/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG --project google-project-id --region=europe-west6 --set-cloudsql-instances=projectId:region:instancename --labels customer-name=pan,app-name=test-app,env-type=prod,env-name=prod,build-type=node --memory=512Mi --env-vars-file=____envvars.yaml",
1402
+ "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/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG --project google-project-id --region=europe-west6 --set-cloudsql-instances=projectId:region:instancename --labels customer-name=pan,app-name=test-app,env-type=prod,env-name=prod,build-type=node --env-vars-file=____envvars.yaml --allow-unauthenticated",
1403
+ "gcloud beta run jobs execute pan-test-app-prod-api-migration --project google-project-id --region=europe-west6",
1404
+ "docker image rm europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG",
1405
+ ],
1406
+ "services": [
1407
+ {
1408
+ "command": [
1409
+ "--tls=false",
1410
+ ],
1411
+ "name": "docker:20-dind",
1412
+ },
1413
+ ],
1414
+ "stage": "deploy prod",
1415
+ "variables": {
1416
+ "APP_DIR": "api",
1417
+ "CLOUDSDK_CORE_DISABLE_PROMPTS": "1",
1418
+ "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",
1419
+ "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",
1420
+ "CLOUD_SQL_INSTANCE_CONNECTION_NAME": "projectId:region:instancename",
1421
+ "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",
1422
+ "DATABASE_URL": "postgresql://$DB_USER:$DB_PASSWORD@localhost/$DB_NAME?host=/cloudsql/$CLOUD_SQL_INSTANCE_CONNECTION_NAME",
1423
+ "DB_NAME": "pan-test-app-prod-api",
1424
+ "DB_PASSWORD": "$CL_prod_api_DB_PASSWORD",
1425
+ "DB_USER": "my-user",
1426
+ "DOCKERFILE_ADDITIONS": undefined,
1427
+ "DOCKERFILE_ADDITIONS_END": undefined,
1428
+ "DOCKER_BUILDKIT": "1",
1429
+ "DOCKER_CACHE_IMAGE": "$DOCKER_REGISTRY_IMAGE_PATH/caches/api",
1430
+ "DOCKER_DIR": ".",
1431
+ "DOCKER_DRIVER": "overlay2",
1432
+ "DOCKER_HOST": "tcp://0.0.0.0:2375",
1433
+ "DOCKER_IMAGE": "$DOCKER_REGISTRY_IMAGE_PATH/$DOCKER_IMAGE_NAME",
1434
+ "DOCKER_IMAGE_NAME": "prod/api",
1435
+ "DOCKER_IMAGE_TAG": "$CI_COMMIT_SHA",
1436
+ "DOCKER_REGISTRY": "$CI_REGISTRY",
1437
+ "DOCKER_REGISTRY_IMAGE_PATH": "$CI_REGISTRY_IMAGE",
1438
+ "DOCKER_TLS_CERTDIR": "",
1439
+ "ENV_SHORT": "prod",
1440
+ "ENV_TYPE": "prod",
1441
+ "ENV_VARS": "ENV_SHORT: 'prod'
1442
+ APP_DIR: 'api'
1443
+ ENV_TYPE: 'prod'
1444
+ HOST: 'pan-test-app-prod-api-undefined'
1445
+ ROOT_URL: 'https://pan-test-app-prod-api-undefined'
1446
+ HOST_CANONICAL: 'pan-test-app-prod-api-undefined'
1447
+ CLOUD_SQL_INSTANCE_CONNECTION_NAME: 'projectId:region:instancename'
1448
+ DB_NAME: 'pan-test-app-prod-api'
1449
+ DB_USER: 'my-user'
1450
+ DB_PASSWORD: '$CL_prod_api_DB_PASSWORD'
1451
+ DATABASE_URL: 'postgresql://$DB_USER:$DB_PASSWORD@localhost/$DB_NAME?host=/cloudsql/$CLOUD_SQL_INSTANCE_CONNECTION_NAME'
1452
+ 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'
1453
+ 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'
1454
+ 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'
1455
+ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","HOST","ROOT_URL","HOST_CANONICAL","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","GCLOUD_DEPLOY_credentialsKey"]'
1456
+ ",
1457
+ "GCLOUD_DEPLOY_credentialsKey": "$CL_prod_api_GCLOUD_DEPLOY_credentialsKey",
1458
+ "HOST": "pan-test-app-prod-api-undefined",
1459
+ "HOST_CANONICAL": "pan-test-app-prod-api-undefined",
1460
+ "KUBERNETES_CPU_LIMIT": "1",
1461
+ "KUBERNETES_CPU_REQUEST": "0.5",
1462
+ "KUBERNETES_MEMORY_LIMIT": "2Gi",
1463
+ "KUBERNETES_MEMORY_REQUEST": "1Gi",
1464
+ "ROOT_URL": "https://pan-test-app-prod-api-undefined",
1465
+ "_ALL_ENV_VAR_KEYS": "["ENV_SHORT","APP_DIR","ENV_TYPE","HOST","ROOT_URL","HOST_CANONICAL","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","GCLOUD_DEPLOY_credentialsKey"]",
1466
+ },
1467
+ },
1468
+ "api 🚀 Deploy | stage ": {
1469
+ "allow_failure": false,
1470
+ "artifacts": {
1471
+ "paths": [
1472
+ "____envvars.yaml",
1473
+ ],
1474
+ },
1475
+ "environment": {
1476
+ "auto_stop_in": undefined,
1477
+ "name": "stage/api",
1478
+ "on_stop": "api 🛑 Stop ⚠️ | stage ",
1479
+ "url": "https://pan-test-app-stage-api-undefined",
1480
+ },
1481
+ "image": "path/to/docker/gcloud:the-version",
1482
+ "interruptible": true,
1483
+ "needs": [
1484
+ {
1485
+ "artifacts": false,
1486
+ "job": "api 🔨 app | stage ",
1487
+ },
1488
+ {
1489
+ "artifacts": false,
1490
+ "job": "api 🔨 docker | stage ",
1491
+ },
1492
+ ],
1493
+ "retry": {
1494
+ "max": 2,
1495
+ "when": [
1496
+ "runner_system_failure",
1497
+ "stuck_or_timeout_failure",
1498
+ ],
1499
+ },
1500
+ "rules": [
1501
+ {
1502
+ "when": "on_success",
1503
+ },
1504
+ ],
1505
+ "script": [
1506
+ "echo $CL_stage_api_GCLOUD_DEPLOY_credentialsKey > ./____keyfile.json
1507
+ ",
1508
+ "gcloud auth activate-service-account --key-file="./____keyfile.json"",
1509
+ "export GCLOUD_PROJECT_NUMBER=$(gcloud projects describe google-project-id --format="value(projectNumber)")",
1510
+ "echo "GCLOUD_PROJECT_NUMBER: $GCLOUD_PROJECT_NUMBER"",
1511
+ "docker login --username gitlab-ci-token --password $CI_JOB_TOKEN $CI_REGISTRY",
1512
+ "gcloud auth configure-docker europe-west6-docker.pkg.dev",
1513
+ "docker pull $DOCKER_IMAGE:$DOCKER_IMAGE_TAG",
1514
+ "docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG",
1515
+ "docker push europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG",
1516
+ "echo "$ENV_VARS" > ____envvars.yaml",
1517
+ "set +e",
1518
+ "echo "ensuring Database..."",
1519
+ "gcloud sql databases create pan-test-app-stage-api --instance=instancename --project projectId",
1520
+ "set -e",
1521
+ "set +e",
1522
+ "gcloud scheduler jobs create http pan-test-app-stage-api-send-reminders-scheduler --project=google-project-id --location europe-west6 --schedule="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",
1523
+ "set -e",
1524
+ "gcloud scheduler jobs update http pan-test-app-stage-api-send-reminders-scheduler --project=google-project-id --location europe-west6 --schedule="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",
1525
+ "set +e",
1526
+ "gcloud beta 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/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG --project google-project-id --region=europe-west6 --set-cloudsql-instances=projectId:region:instancename --labels customer-name=pan,app-name=test-app,env-type=stage,env-name=stage,build-type=node --memory=512Mi",
1527
+ "set -e",
1528
+ "gcloud beta 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/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG --project google-project-id --region=europe-west6 --set-cloudsql-instances=projectId:region:instancename --labels customer-name=pan,app-name=test-app,env-type=stage,env-name=stage,build-type=node --memory=512Mi --env-vars-file=____envvars.yaml",
1529
+ "set +e",
1530
+ "gcloud beta 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/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG --project google-project-id --region=europe-west6 --set-cloudsql-instances=projectId:region:instancename --labels customer-name=pan,app-name=test-app,env-type=stage,env-name=stage,build-type=node --memory=512Mi",
1531
+ "set -e",
1532
+ "gcloud beta 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/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG --project google-project-id --region=europe-west6 --set-cloudsql-instances=projectId:region:instancename --labels customer-name=pan,app-name=test-app,env-type=stage,env-name=stage,build-type=node --memory=512Mi --env-vars-file=____envvars.yaml",
1533
+ "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/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG --project google-project-id --region=europe-west6 --set-cloudsql-instances=projectId:region:instancename --labels customer-name=pan,app-name=test-app,env-type=stage,env-name=stage,build-type=node --env-vars-file=____envvars.yaml --allow-unauthenticated",
1534
+ "gcloud beta run jobs execute pan-test-app-stage-api-migration --project google-project-id --region=europe-west6",
1535
+ "docker image rm europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG",
1536
+ ],
1537
+ "services": [
1538
+ {
1539
+ "command": [
1540
+ "--tls=false",
1541
+ ],
1542
+ "name": "docker:20-dind",
1543
+ },
1544
+ ],
1545
+ "stage": "deploy stage",
1546
+ "variables": {
1547
+ "APP_DIR": "api",
1548
+ "CLOUDSDK_CORE_DISABLE_PROMPTS": "1",
1549
+ "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",
1550
+ "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",
1551
+ "CLOUD_SQL_INSTANCE_CONNECTION_NAME": "projectId:region:instancename",
1552
+ "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",
1553
+ "DATABASE_URL": "postgresql://$DB_USER:$DB_PASSWORD@localhost/$DB_NAME?host=/cloudsql/$CLOUD_SQL_INSTANCE_CONNECTION_NAME",
1554
+ "DB_NAME": "pan-test-app-stage-api",
1555
+ "DB_PASSWORD": "$CL_stage_api_DB_PASSWORD",
1556
+ "DB_USER": "my-user",
1557
+ "DOCKERFILE_ADDITIONS": undefined,
1558
+ "DOCKERFILE_ADDITIONS_END": undefined,
1559
+ "DOCKER_BUILDKIT": "1",
1560
+ "DOCKER_CACHE_IMAGE": "$DOCKER_REGISTRY_IMAGE_PATH/caches/api",
1561
+ "DOCKER_DIR": ".",
1562
+ "DOCKER_DRIVER": "overlay2",
1563
+ "DOCKER_HOST": "tcp://0.0.0.0:2375",
1564
+ "DOCKER_IMAGE": "$DOCKER_REGISTRY_IMAGE_PATH/$DOCKER_IMAGE_NAME",
1565
+ "DOCKER_IMAGE_NAME": "stage/api",
1566
+ "DOCKER_IMAGE_TAG": "$CI_COMMIT_SHA",
1567
+ "DOCKER_REGISTRY": "$CI_REGISTRY",
1568
+ "DOCKER_REGISTRY_IMAGE_PATH": "$CI_REGISTRY_IMAGE",
1569
+ "DOCKER_TLS_CERTDIR": "",
1570
+ "ENV_SHORT": "stage",
1571
+ "ENV_TYPE": "stage",
1572
+ "ENV_VARS": "ENV_SHORT: 'stage'
1573
+ APP_DIR: 'api'
1574
+ ENV_TYPE: 'stage'
1575
+ HOST: 'pan-test-app-stage-api-undefined'
1576
+ ROOT_URL: 'https://pan-test-app-stage-api-undefined'
1577
+ HOST_CANONICAL: 'pan-test-app-stage-api-undefined'
1578
+ CLOUD_SQL_INSTANCE_CONNECTION_NAME: 'projectId:region:instancename'
1579
+ DB_NAME: 'pan-test-app-stage-api'
1580
+ DB_USER: 'my-user'
1581
+ DB_PASSWORD: '$CL_stage_api_DB_PASSWORD'
1582
+ DATABASE_URL: 'postgresql://$DB_USER:$DB_PASSWORD@localhost/$DB_NAME?host=/cloudsql/$CLOUD_SQL_INSTANCE_CONNECTION_NAME'
1583
+ 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'
1584
+ 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'
1585
+ 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'
1586
+ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","HOST","ROOT_URL","HOST_CANONICAL","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","GCLOUD_DEPLOY_credentialsKey"]'
1587
+ ",
1588
+ "GCLOUD_DEPLOY_credentialsKey": "$CL_stage_api_GCLOUD_DEPLOY_credentialsKey",
1589
+ "HOST": "pan-test-app-stage-api-undefined",
1590
+ "HOST_CANONICAL": "pan-test-app-stage-api-undefined",
1591
+ "KUBERNETES_CPU_LIMIT": "1",
1592
+ "KUBERNETES_CPU_REQUEST": "0.5",
1593
+ "KUBERNETES_MEMORY_LIMIT": "2Gi",
1594
+ "KUBERNETES_MEMORY_REQUEST": "1Gi",
1595
+ "ROOT_URL": "https://pan-test-app-stage-api-undefined",
1596
+ "_ALL_ENV_VAR_KEYS": "["ENV_SHORT","APP_DIR","ENV_TYPE","HOST","ROOT_URL","HOST_CANONICAL","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","GCLOUD_DEPLOY_credentialsKey"]",
1597
+ },
1598
+ },
1599
+ "api 🛑 Stop ⚠️ | prod ": {
1600
+ "environment": {
1601
+ "action": "stop",
1602
+ "name": "prod/api",
1603
+ "url": "https://pan-test-app-prod-api-undefined",
1604
+ },
1605
+ "image": "path/to/docker/gcloud:the-version",
1606
+ "interruptible": true,
1607
+ "needs": [],
1608
+ "retry": {
1609
+ "max": 2,
1610
+ "when": [
1611
+ "runner_system_failure",
1612
+ "stuck_or_timeout_failure",
1613
+ ],
1614
+ },
1615
+ "rules": [
1616
+ {
1617
+ "allow_failure": true,
1618
+ "if": "$CI_COMMIT_BRANCH =~ /^[0-9]+\\.([0-9]+|x)\\.x$/",
1619
+ "when": "on_success",
1620
+ },
1621
+ {
1622
+ "allow_failure": true,
1623
+ "when": "manual",
1624
+ },
1625
+ ],
1626
+ "script": [
1627
+ "echo $CL_prod_api_GCLOUD_DEPLOY_credentialsKey > ./____keyfile.json
1628
+ ",
1629
+ "gcloud auth activate-service-account --key-file="./____keyfile.json"",
1630
+ "gcloud run services delete pan-test-app-prod-api --project google-project-id --region=europe-west6",
1631
+ "set +e",
1632
+ "gcloud scheduler jobs delete pan-test-app-prod-api-send-reminders-scheduler --project=google-project-id --location europe-west6",
1633
+ "set -e",
1634
+ "gcloud beta run jobs delete pan-test-app-prod-api-migration --project google-project-id --region=europe-west6",
1635
+ "gcloud beta run jobs delete pan-test-app-prod-api-send-reminders --project google-project-id --region=europe-west6",
1636
+ ],
1637
+ "stage": "stop prod",
1638
+ "variables": {
1639
+ "CLOUDSDK_CORE_DISABLE_PROMPTS": "1",
1640
+ "GIT_STRATEGY": "none",
1641
+ "KUBERNETES_CPU_LIMIT": "1",
1642
+ "KUBERNETES_CPU_REQUEST": "0.5",
1643
+ "KUBERNETES_MEMORY_LIMIT": "500Mi",
1644
+ "KUBERNETES_MEMORY_REQUEST": "200Mi",
1645
+ },
1646
+ },
1647
+ "api 🛑 Stop ⚠️ | stage ": {
1648
+ "environment": {
1649
+ "action": "stop",
1650
+ "name": "stage/api",
1651
+ "url": "https://pan-test-app-stage-api-undefined",
1652
+ },
1653
+ "image": "path/to/docker/gcloud:the-version",
1654
+ "interruptible": true,
1655
+ "needs": [],
1656
+ "retry": {
1657
+ "max": 2,
1658
+ "when": [
1659
+ "runner_system_failure",
1660
+ "stuck_or_timeout_failure",
1661
+ ],
1662
+ },
1663
+ "rules": [
1664
+ {
1665
+ "allow_failure": true,
1666
+ "if": "$CI_COMMIT_BRANCH =~ /^[0-9]+\\.([0-9]+|x)\\.x$/",
1667
+ "when": "on_success",
1668
+ },
1669
+ {
1670
+ "allow_failure": true,
1671
+ "when": "manual",
1672
+ },
1673
+ ],
1674
+ "script": [
1675
+ "echo $CL_stage_api_GCLOUD_DEPLOY_credentialsKey > ./____keyfile.json
1676
+ ",
1677
+ "gcloud auth activate-service-account --key-file="./____keyfile.json"",
1678
+ "gcloud run services delete pan-test-app-stage-api --project google-project-id --region=europe-west6",
1679
+ "set +e",
1680
+ "gcloud scheduler jobs delete pan-test-app-stage-api-send-reminders-scheduler --project=google-project-id --location europe-west6",
1681
+ "set -e",
1682
+ "gcloud beta run jobs delete pan-test-app-stage-api-migration --project google-project-id --region=europe-west6",
1683
+ "gcloud beta run jobs delete pan-test-app-stage-api-send-reminders --project google-project-id --region=europe-west6",
1684
+ ],
1685
+ "stage": "stop stage",
1686
+ "variables": {
1687
+ "CLOUDSDK_CORE_DISABLE_PROMPTS": "1",
1688
+ "GIT_STRATEGY": "none",
1689
+ "KUBERNETES_CPU_LIMIT": "1",
1690
+ "KUBERNETES_CPU_REQUEST": "0.5",
1691
+ "KUBERNETES_MEMORY_LIMIT": "500Mi",
1692
+ "KUBERNETES_MEMORY_REQUEST": "200Mi",
1693
+ },
1694
+ },
1695
+ },
1696
+ "stages": [
1697
+ "setup",
1698
+ "setup dev",
1699
+ "setup review",
1700
+ "setup stage",
1701
+ "setup prod",
1702
+ "setup local",
1703
+ "test",
1704
+ "test dev",
1705
+ "test review",
1706
+ "test stage",
1707
+ "test prod",
1708
+ "test local",
1709
+ "build",
1710
+ "build dev",
1711
+ "build review",
1712
+ "build stage",
1713
+ "build prod",
1714
+ "build local",
1715
+ "deploy",
1716
+ "deploy dev",
1717
+ "deploy review",
1718
+ "deploy stage",
1719
+ "deploy prod",
1720
+ "deploy local",
1721
+ "verify",
1722
+ "verify dev",
1723
+ "verify review",
1724
+ "verify stage",
1725
+ "verify prod",
1726
+ "verify local",
1727
+ "rollback",
1728
+ "rollback dev",
1729
+ "rollback review",
1730
+ "rollback stage",
1731
+ "rollback prod",
1732
+ "rollback local",
1733
+ "stop",
1734
+ "stop dev",
1735
+ "stop review",
1736
+ "stop stage",
1737
+ "stop prod",
1738
+ "stop local",
1739
+ ],
1740
+ "variables": {
1741
+ "FF_USE_FASTZIP": "true",
1742
+ },
1743
+ "workflow": {
1744
+ "rules": [
1745
+ {
1746
+ "if": "$CI_COMMIT_TAG",
1747
+ },
1748
+ {
1749
+ "if": "$CI_COMMIT_MESSAGE =~ /^chore\\(release\\).*/",
1750
+ "when": "never",
1751
+ },
1752
+ {
1753
+ "if": "$CI_COMMIT_BRANCH =~ /^[0-9]+.([0-9]+|x).x$/",
1754
+ },
1755
+ {
1756
+ "if": "$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH",
1757
+ },
1758
+ {
1759
+ "if": "$CI_MERGE_REQUEST_ID",
1760
+ },
1761
+ ],
1762
+ },
1763
+ },
1764
+ }
1765
+ `;