@catladder/pipeline 0.0.0-node16-ddfae617 → 0.0.0-prettier-cbceeed9

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