@catladder/pipeline 0.0.0-more-collapse-deeb54d7 โ†’ 0.0.0-multiple-gitlab-includes-3df5566d

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 (597) hide show
  1. package/README.md +17 -0
  2. package/dist/bash/BashExpression.d.ts +36 -0
  3. package/dist/bash/BashExpression.js +114 -0
  4. package/dist/bash/bashEscape.d.ts +34 -0
  5. package/dist/bash/bashEscape.js +114 -0
  6. package/dist/bash/bashExpressionPerPipelineType.d.ts +6 -0
  7. package/dist/bash/bashExpressionPerPipelineType.js +11 -0
  8. package/dist/bash/bashYaml.d.ts +10 -0
  9. package/dist/bash/bashYaml.js +69 -0
  10. package/dist/bash/getInjectVarsScript.d.ts +2 -0
  11. package/dist/bash/getInjectVarsScript.js +47 -0
  12. package/dist/bash/index.d.ts +2 -0
  13. package/dist/bash/index.js +26 -0
  14. package/dist/build/artifacts/createBuildJobArtifact.d.ts +3 -0
  15. package/dist/build/artifacts/createBuildJobArtifact.js +97 -0
  16. package/dist/build/base/__tests__/createArtifactsConfig.test.js +3 -1
  17. package/dist/build/base/constants.d.ts +0 -1
  18. package/dist/build/base/constants.js +4 -3
  19. package/dist/build/base/createAppBuildJob.d.ts +5 -3
  20. package/dist/build/base/createAppBuildJob.js +18 -15
  21. package/dist/build/base/createArtifactsConfig.d.ts +1 -1
  22. package/dist/build/base/createArtifactsConfig.js +3 -1
  23. package/dist/build/base/createBuildJobDefinition.d.ts +6 -0
  24. package/dist/build/base/createBuildJobDefinition.js +58 -0
  25. package/dist/build/base/index.d.ts +7 -4
  26. package/dist/build/base/index.js +17 -6
  27. package/dist/build/base/writeBuildInfo.d.ts +2 -2
  28. package/dist/build/base/writeBuildInfo.js +4 -3
  29. package/dist/build/base/writeDotEnv.d.ts +3 -2
  30. package/dist/build/base/writeDotEnv.js +30 -6
  31. package/dist/build/cache/createJobCache.d.ts +7 -0
  32. package/dist/build/cache/createJobCache.js +115 -0
  33. package/dist/build/cache/getAllCacheConfigsFromConfig.d.ts +3 -0
  34. package/dist/build/cache/getAllCacheConfigsFromConfig.js +64 -0
  35. package/dist/build/cache/transformLegacyJobCache.d.ts +3 -0
  36. package/dist/build/cache/transformLegacyJobCache.js +29 -0
  37. package/dist/build/custom/__tests__/testJob.test.js +15 -16
  38. package/dist/build/custom/buildJob.d.ts +2 -2
  39. package/dist/build/custom/buildJob.js +8 -67
  40. package/dist/build/custom/index.d.ts +2 -2
  41. package/dist/build/custom/index.js +3 -1
  42. package/dist/build/custom/testJob.d.ts +4 -4
  43. package/dist/build/custom/testJob.js +25 -21
  44. package/dist/build/docker.d.ts +48 -39
  45. package/dist/build/docker.js +112 -37
  46. package/dist/build/index.d.ts +14 -7
  47. package/dist/build/index.js +44 -16
  48. package/dist/build/node/buildJob.d.ts +6 -2
  49. package/dist/build/node/buildJob.js +39 -48
  50. package/dist/build/node/cache.d.ts +4 -5
  51. package/dist/build/node/cache.js +18 -23
  52. package/dist/build/node/constants.d.ts +0 -1
  53. package/dist/build/node/constants.js +5 -4
  54. package/dist/build/node/index.d.ts +4 -4
  55. package/dist/build/node/index.js +3 -1
  56. package/dist/build/node/meteor.d.ts +2 -2
  57. package/dist/build/node/meteor.js +10 -12
  58. package/dist/build/node/testJob.d.ts +3 -2
  59. package/dist/build/node/testJob.js +29 -19
  60. package/dist/build/node/yarn.d.ts +3 -2
  61. package/dist/build/node/yarn.js +13 -13
  62. package/dist/build/rails/build.d.ts +2 -2
  63. package/dist/build/rails/build.js +24 -8
  64. package/dist/build/rails/index.d.ts +2 -2
  65. package/dist/build/rails/index.js +3 -1
  66. package/dist/build/rails/test.d.ts +2 -2
  67. package/dist/build/rails/test.js +20 -12
  68. package/dist/build/sbom.d.ts +2 -2
  69. package/dist/build/sbom.js +9 -6
  70. package/dist/build/types.d.ts +152 -47
  71. package/dist/build/types.js +10 -2
  72. package/dist/catladder-gitlab.js +129 -49
  73. package/dist/config/__tests__/configruedEnvs.test.js +3 -1
  74. package/dist/config/__tests__/getAllEnvs.test.js +79 -0
  75. package/dist/config/__tests__/getAllEnvsInAllComponents.test.d.ts +1 -0
  76. package/dist/config/__tests__/getAllEnvsInAllComponents.test.js +73 -0
  77. package/dist/config/configruedEnvs.js +3 -1
  78. package/dist/config/index.js +13 -7
  79. package/dist/config/readConfig.d.ts +2 -2
  80. package/dist/config/readConfig.js +191 -40
  81. package/dist/constants.js +5 -3
  82. package/dist/context/createAllComponentsContext.d.ts +12 -0
  83. package/dist/{pipeline/commitInfo/getCommitInfo.js โ†’ context/createAllComponentsContext.js} +35 -19
  84. package/dist/context/createComponentContext.d.ts +11 -0
  85. package/dist/context/createComponentContext.js +255 -0
  86. package/dist/context/createWorkspaceContext.d.ts +16 -0
  87. package/dist/context/createWorkspaceContext.js +173 -0
  88. package/dist/context/getBuildInfoVariables.d.ts +6 -0
  89. package/dist/context/getBuildInfoVariables.js +55 -0
  90. package/dist/context/getEnvConfig.js +5 -2
  91. package/dist/context/getEnvType.js +3 -1
  92. package/dist/context/getEnvironment.d.ts +3 -3
  93. package/dist/context/getEnvironment.js +11 -12
  94. package/dist/context/getEnvironmentContext.d.ts +7 -3
  95. package/dist/context/getEnvironmentContext.js +21 -11
  96. package/dist/context/getEnvironmentVariables.d.ts +22 -5
  97. package/dist/context/getEnvironmentVariables.js +81 -49
  98. package/dist/context/getLabels.d.ts +2 -2
  99. package/dist/context/getLabels.js +9 -7
  100. package/dist/context/getReviewSlug.d.ts +4 -0
  101. package/dist/context/getReviewSlug.js +21 -0
  102. package/dist/context/index.d.ts +2 -4
  103. package/dist/context/index.js +15 -162
  104. package/dist/context/transformJobOnlyVars.d.ts +5 -2
  105. package/dist/context/transformJobOnlyVars.js +4 -2
  106. package/dist/context/utils/envVars.d.ts +1 -1
  107. package/dist/context/utils/envVars.js +5 -2
  108. package/dist/defaults/index.js +3 -1
  109. package/dist/deploy/base/deploy.d.ts +3 -3
  110. package/dist/deploy/base/deploy.js +38 -22
  111. package/dist/deploy/base/index.d.ts +3 -5
  112. package/dist/deploy/base/index.js +3 -1
  113. package/dist/deploy/base/rollback.d.ts +3 -3
  114. package/dist/deploy/base/rollback.js +13 -9
  115. package/dist/deploy/base/stop.d.ts +3 -3
  116. package/dist/deploy/base/stop.js +16 -11
  117. package/dist/deploy/base/types.d.ts +1 -1
  118. package/dist/deploy/base/types.js +3 -1
  119. package/dist/deploy/base/variables.d.ts +0 -1
  120. package/dist/deploy/base/variables.js +4 -3
  121. package/dist/deploy/cloudRun/artifactsRegistry.d.ts +19 -0
  122. package/dist/deploy/cloudRun/artifactsRegistry.js +125 -0
  123. package/dist/deploy/cloudRun/cleanup.d.ts +2 -0
  124. package/dist/deploy/cloudRun/cleanup.js +53 -0
  125. package/dist/deploy/cloudRun/cloudRunRevisions.d.ts +2 -0
  126. package/dist/deploy/cloudRun/cloudRunRevisions.js +62 -0
  127. package/dist/deploy/cloudRun/createJobs/cloudRunJobs.d.ts +7 -0
  128. package/dist/deploy/cloudRun/createJobs/cloudRunJobs.js +207 -0
  129. package/dist/deploy/cloudRun/createJobs/cloudRunServices.d.ts +4 -0
  130. package/dist/deploy/cloudRun/createJobs/cloudRunServices.js +96 -0
  131. package/dist/deploy/cloudRun/createJobs/common.d.ts +18 -0
  132. package/dist/deploy/cloudRun/createJobs/common.js +93 -0
  133. package/dist/deploy/cloudRun/createJobs/constants.d.ts +1 -0
  134. package/dist/deploy/cloudRun/createJobs/constants.js +7 -0
  135. package/dist/deploy/cloudRun/createJobs/getCloudRunDeployScripts.d.ts +2 -0
  136. package/dist/deploy/cloudRun/createJobs/getCloudRunDeployScripts.js +62 -0
  137. package/dist/deploy/cloudRun/createJobs/getCloudRunStopScripts.d.ts +2 -0
  138. package/dist/deploy/cloudRun/createJobs/getCloudRunStopScripts.js +54 -0
  139. package/dist/deploy/cloudRun/createJobs/index.d.ts +3 -0
  140. package/dist/deploy/cloudRun/createJobs/index.js +57 -0
  141. package/dist/deploy/cloudRun/createJobs/volumes.d.ts +3 -0
  142. package/dist/deploy/cloudRun/createJobs/volumes.js +58 -0
  143. package/dist/deploy/cloudRun/index.d.ts +2 -2
  144. package/dist/deploy/cloudRun/index.js +17 -10
  145. package/dist/deploy/cloudRun/utils/createArgsString.d.ts +3 -1
  146. package/dist/deploy/cloudRun/utils/createArgsString.js +25 -17
  147. package/dist/deploy/cloudRun/utils/database.d.ts +6 -4
  148. package/dist/deploy/cloudRun/utils/database.js +28 -15
  149. package/dist/deploy/cloudRun/utils/gcloudServiceAccountLoginCommands.d.ts +2 -2
  150. package/dist/deploy/cloudRun/utils/gcloudServiceAccountLoginCommands.js +4 -2
  151. package/dist/deploy/cloudRun/utils/getServiceName.d.ts +2 -0
  152. package/dist/deploy/cloudRun/utils/getServiceName.js +10 -0
  153. package/dist/deploy/cloudRun/utils/jobName.d.ts +2 -1
  154. package/dist/deploy/cloudRun/utils/jobName.js +4 -2
  155. package/dist/deploy/cloudRun/utils/removeFirstLinesFromCommandOutput.d.ts +9 -0
  156. package/dist/deploy/cloudRun/utils/removeFirstLinesFromCommandOutput.js +18 -0
  157. package/dist/deploy/cloudSql/utils.d.ts +2 -1
  158. package/dist/deploy/cloudSql/utils.js +7 -2
  159. package/dist/deploy/custom/deployJob.d.ts +2 -2
  160. package/dist/deploy/custom/deployJob.js +10 -9
  161. package/dist/deploy/custom/index.d.ts +2 -2
  162. package/dist/deploy/custom/index.js +3 -1
  163. package/dist/deploy/dockerTag/deployJob.d.ts +2 -2
  164. package/dist/deploy/dockerTag/deployJob.js +38 -7
  165. package/dist/deploy/dockerTag/index.d.ts +2 -2
  166. package/dist/deploy/dockerTag/index.js +3 -1
  167. package/dist/deploy/index.d.ts +10 -9
  168. package/dist/deploy/index.js +13 -7
  169. package/dist/deploy/kubernetes/additionalSecretKeys.d.ts +3 -1
  170. package/dist/deploy/kubernetes/additionalSecretKeys.js +3 -1
  171. package/dist/deploy/kubernetes/cloudSql/index.d.ts +6 -5
  172. package/dist/deploy/kubernetes/cloudSql/index.js +14 -21
  173. package/dist/deploy/kubernetes/deployJob.d.ts +2 -2
  174. package/dist/deploy/kubernetes/deployJob.js +23 -22
  175. package/dist/deploy/kubernetes/index.d.ts +2 -2
  176. package/dist/deploy/kubernetes/index.js +52 -15
  177. package/dist/deploy/kubernetes/kubeEnv.d.ts +5 -4
  178. package/dist/deploy/kubernetes/kubeEnv.js +9 -5
  179. package/dist/deploy/kubernetes/kubeValues.d.ts +5 -6
  180. package/dist/deploy/kubernetes/kubeValues.js +16 -18
  181. package/dist/deploy/kubernetes/mongodb.d.ts +2 -2
  182. package/dist/deploy/kubernetes/mongodb.js +14 -12
  183. package/dist/deploy/sbom.d.ts +4 -4
  184. package/dist/deploy/sbom.js +7 -4
  185. package/dist/deploy/types/base.d.ts +5 -5
  186. package/dist/deploy/types/base.js +3 -1
  187. package/dist/deploy/types/custom.d.ts +3 -7
  188. package/dist/deploy/types/custom.js +3 -1
  189. package/dist/deploy/types/dockerTag.d.ts +3 -1
  190. package/dist/deploy/types/dockerTag.js +3 -1
  191. package/dist/deploy/types/googleCloudRun.d.ts +127 -24
  192. package/dist/deploy/types/googleCloudRun.js +3 -1
  193. package/dist/deploy/types/index.d.ts +6 -6
  194. package/dist/deploy/types/index.js +14 -8
  195. package/dist/deploy/types/kubernetes.d.ts +25 -54
  196. package/dist/deploy/types/kubernetes.js +3 -1
  197. package/dist/deploy/utils.d.ts +2 -2
  198. package/dist/deploy/utils.js +5 -2
  199. package/dist/globalScriptFunctions/index.d.ts +14 -0
  200. package/dist/globalScriptFunctions/index.js +37 -0
  201. package/dist/index.d.ts +5 -2
  202. package/dist/index.js +18 -9
  203. package/dist/packageInfos.d.ts +4 -0
  204. package/dist/packageInfos.js +20 -0
  205. package/dist/pipeline/__tests__/getPipelineStages.test.d.ts +1 -0
  206. package/dist/pipeline/__tests__/getPipelineStages.test.js +73 -0
  207. package/dist/pipeline/createAllJobs.d.ts +16 -6
  208. package/dist/pipeline/createAllJobs.js +99 -27
  209. package/dist/pipeline/createJobsForComponent.d.ts +2 -2
  210. package/dist/pipeline/createJobsForComponent.js +9 -149
  211. package/dist/pipeline/createJobsForWorkspace.d.ts +3 -0
  212. package/dist/pipeline/createJobsForWorkspace.js +12 -0
  213. package/dist/pipeline/createMainPipeline.d.ts +3 -0
  214. package/dist/pipeline/createMainPipeline.js +283 -0
  215. package/dist/pipeline/generatePipelineFiles.d.ts +7 -0
  216. package/dist/pipeline/generatePipelineFiles.js +304 -0
  217. package/dist/pipeline/getPipelineStages.d.ts +7 -0
  218. package/dist/pipeline/getPipelineStages.js +56 -0
  219. package/dist/pipeline/gitlab/createGitlabJobs.d.ts +11 -14
  220. package/dist/pipeline/gitlab/createGitlabJobs.js +258 -74
  221. package/dist/pipeline/gitlab/createGitlabPipeline.d.ts +9 -0
  222. package/dist/pipeline/gitlab/createGitlabPipeline.js +77 -0
  223. package/dist/pipeline/gitlab/gitlabReleaseJobs.d.ts +33 -0
  224. package/dist/pipeline/gitlab/gitlabReleaseJobs.js +25 -0
  225. package/dist/pipeline/gitlab/sortGitLabJobDefProps.d.ts +7 -0
  226. package/dist/pipeline/gitlab/sortGitLabJobDefProps.js +27 -0
  227. package/dist/pipeline/index.d.ts +3 -2
  228. package/dist/pipeline/index.js +16 -9
  229. package/dist/pipeline/packageManager.d.ts +3 -2
  230. package/dist/pipeline/packageManager.js +50 -24
  231. package/dist/pipeline/yarn/yarnUtils.d.ts +3 -2
  232. package/dist/pipeline/yarn/yarnUtils.js +65 -17
  233. package/dist/rules/index.d.ts +7 -2
  234. package/dist/rules/index.js +34 -16
  235. package/dist/runner/index.d.ts +1 -1
  236. package/dist/runner/index.js +3 -1
  237. package/dist/tsconfig.tsbuildinfo +1 -1
  238. package/dist/types/config.d.ts +44 -29
  239. package/dist/types/config.js +5 -2
  240. package/dist/types/context.d.ts +124 -40
  241. package/dist/types/context.js +12 -1
  242. package/dist/types/environmentContext.d.ts +15 -12
  243. package/dist/types/environmentContext.js +3 -1
  244. package/dist/types/gitlab-ci-yml.d.ts +30 -30
  245. package/dist/types/gitlab-ci-yml.js +3 -2
  246. package/dist/types/gitlab-types.d.ts +8 -8
  247. package/dist/types/gitlab-types.js +3 -1
  248. package/dist/types/index.d.ts +1 -0
  249. package/dist/types/index.js +14 -7
  250. package/dist/types/jobDefinition.d.ts +11 -0
  251. package/dist/types/jobDefinition.js +5 -0
  252. package/dist/types/jobs.d.ts +30 -15
  253. package/dist/types/jobs.js +3 -1
  254. package/dist/types/pipeline.d.ts +3 -3
  255. package/dist/types/pipeline.js +3 -1
  256. package/dist/types/utils.d.ts +1 -1
  257. package/dist/types/utils.js +3 -1
  258. package/dist/utils/gitlab.js +7 -2
  259. package/dist/utils/index.d.ts +2 -1
  260. package/dist/utils/index.js +10 -3
  261. package/dist/utils/jsonParse.d.ts +1 -0
  262. package/dist/utils/jsonParse.js +14 -0
  263. package/dist/utils/removeUndefined.d.ts +1 -0
  264. package/dist/utils/removeUndefined.js +36 -0
  265. package/dist/utils/writeFiles.d.ts +11 -0
  266. package/dist/{pipeline/commitInfo/getBuildId.js โ†’ utils/writeFiles.js} +39 -22
  267. package/dist/variables/VariableValue.d.ts +3 -0
  268. package/dist/variables/VariableValue.js +5 -0
  269. package/dist/variables/VariableValueContainingReferences.d.ts +24 -0
  270. package/dist/variables/VariableValueContainingReferences.js +97 -0
  271. package/dist/variables/__tests__/resolveAllReferences.test.d.ts +1 -0
  272. package/dist/variables/__tests__/resolveAllReferences.test.js +218 -0
  273. package/dist/variables/__tests__/resolveAllReferencesOnce.test.d.ts +1 -0
  274. package/dist/variables/__tests__/resolveAllReferencesOnce.test.js +171 -0
  275. package/dist/variables/__tests__/resolveReferencesOnce.test.d.ts +1 -0
  276. package/dist/variables/__tests__/resolveReferencesOnce.test.js +199 -0
  277. package/dist/variables/__tests__/variableValue.test.d.ts +1 -0
  278. package/dist/variables/__tests__/variableValue.test.js +36 -0
  279. package/dist/variables/resolveAllReferences.d.ts +3 -0
  280. package/dist/{pipeline/createChildPipeline.js โ†’ variables/resolveAllReferences.js} +44 -47
  281. package/dist/variables/resolveAllReferencesOnce.d.ts +5 -0
  282. package/dist/variables/resolveAllReferencesOnce.js +191 -0
  283. package/dist/variables/resolveReferencesOnce.d.ts +8 -0
  284. package/dist/variables/resolveReferencesOnce.js +22 -0
  285. package/examples/.test-gen-ignore +1 -0
  286. package/examples/__snapshots__/cloud-run-http2.test.ts.snap +1418 -0
  287. package/examples/__snapshots__/cloud-run-memory-limit.test.ts.snap +1418 -0
  288. package/examples/__snapshots__/cloud-run-meteor-with-worker.test.ts.snap +1418 -0
  289. package/examples/__snapshots__/cloud-run-nextjs.test.ts.snap +1434 -0
  290. package/examples/__snapshots__/cloud-run-no-cpu-throttling.test.ts.snap +1418 -0
  291. package/examples/__snapshots__/cloud-run-no-service.test.ts.snap +1526 -0
  292. package/examples/__snapshots__/cloud-run-non-public.test.ts.snap +1418 -0
  293. package/examples/__snapshots__/cloud-run-post-stop-job.test.ts.snap +1436 -0
  294. package/examples/__snapshots__/cloud-run-service-custom-vpc-connector.test.ts.snap +1418 -0
  295. package/examples/__snapshots__/cloud-run-service-custom-vpc.test.ts.snap +1418 -0
  296. package/examples/__snapshots__/cloud-run-service-gen2.test.ts.snap +1418 -0
  297. package/examples/__snapshots__/cloud-run-service-increase-timout.test.ts.snap +1418 -0
  298. package/examples/__snapshots__/cloud-run-service-with-volumes.test.ts.snap +1490 -0
  299. package/examples/__snapshots__/cloud-run-storybook.test.ts.snap +1302 -0
  300. package/examples/__snapshots__/cloud-run-with-ngnix.test.ts.snap +1418 -0
  301. package/examples/__snapshots__/cloud-run-with-sql-reuse-db.test.ts.snap +2998 -0
  302. package/examples/__snapshots__/cloud-run-with-sql.test.ts.snap +1733 -0
  303. package/examples/__snapshots__/cloud-run-with-worker.test.ts.snap +1426 -0
  304. package/examples/__snapshots__/custom-build-job-with-tests.test.ts.snap +1285 -0
  305. package/examples/__snapshots__/custom-build-job.test.ts.snap +1174 -0
  306. package/examples/__snapshots__/custom-deploy.test.ts.snap +1168 -0
  307. package/examples/__snapshots__/custom-envs.test.ts.snap +798 -0
  308. package/examples/__snapshots__/custom-sbom-java.test.ts.snap +1182 -0
  309. package/examples/__snapshots__/git-submodule.test.ts.snap +1419 -0
  310. package/examples/__snapshots__/kubernetes-application-customization.test.ts.snap +1759 -0
  311. package/examples/__snapshots__/kubernetes-with-cloud-sql.test.ts.snap +1779 -0
  312. package/examples/__snapshots__/kubernetes-with-jobs.test.ts.snap +3357 -0
  313. package/examples/__snapshots__/kubernetes-with-mongodb.test.ts.snap +1883 -0
  314. package/examples/__snapshots__/local-dot-env.test.ts.snap +1342 -0
  315. package/examples/__snapshots__/meteor-kubernetes.test.ts.snap +1836 -0
  316. package/examples/__snapshots__/multiline-var.test.ts.snap +5679 -0
  317. package/examples/__snapshots__/native-app.test.ts.snap +2206 -0
  318. package/examples/__snapshots__/node-build-with-custom-image.test.ts.snap +1418 -0
  319. package/examples/__snapshots__/node-build-with-docker-additions.test.ts.snap +1426 -0
  320. package/examples/__snapshots__/rails-k8s-with-worker-dockerfile.test.ts.snap +1487 -0
  321. package/examples/__snapshots__/rails-k8s-with-worker.test.ts.snap +1471 -0
  322. package/examples/__snapshots__/referencing-other-vars.test.ts.snap +4739 -0
  323. package/examples/__snapshots__/wait-for-other-deploy.test.ts.snap +1368 -0
  324. package/examples/__snapshots__/workspace-api-www-turbo-cache.test.ts.snap +2338 -0
  325. package/examples/__snapshots__/workspace-api-www.test.ts.snap +2330 -0
  326. package/examples/__utils__/helpers.ts +9 -12
  327. package/examples/cloud-run-http2.test.ts +11 -0
  328. package/examples/cloud-run-http2.ts +29 -0
  329. package/examples/cloud-run-memory-limit.test.ts +11 -0
  330. package/examples/cloud-run-memory-limit.ts +10 -5
  331. package/examples/cloud-run-meteor-with-worker.test.ts +11 -0
  332. package/examples/cloud-run-meteor-with-worker.ts +37 -0
  333. package/examples/cloud-run-nextjs.test.ts +11 -0
  334. package/examples/cloud-run-nextjs.ts +28 -0
  335. package/examples/cloud-run-no-cpu-throttling.test.ts +11 -0
  336. package/examples/cloud-run-no-cpu-throttling.ts +6 -4
  337. package/examples/cloud-run-no-service.test.ts +11 -0
  338. package/examples/cloud-run-no-service.ts +33 -0
  339. package/examples/cloud-run-non-public.test.ts +11 -0
  340. package/examples/cloud-run-non-public.ts +5 -4
  341. package/examples/cloud-run-post-stop-job.test.ts +11 -0
  342. package/examples/cloud-run-post-stop-job.ts +42 -0
  343. package/examples/cloud-run-service-custom-vpc-connector.test.ts +11 -0
  344. package/examples/cloud-run-service-custom-vpc-connector.ts +30 -0
  345. package/examples/cloud-run-service-custom-vpc.test.ts +11 -0
  346. package/examples/cloud-run-service-custom-vpc.ts +31 -0
  347. package/examples/cloud-run-service-gen2.test.ts +11 -0
  348. package/examples/cloud-run-service-gen2.ts +29 -0
  349. package/examples/cloud-run-service-increase-timout.test.ts +11 -0
  350. package/examples/cloud-run-service-increase-timout.ts +29 -0
  351. package/examples/cloud-run-service-with-volumes.test.ts +11 -0
  352. package/examples/cloud-run-service-with-volumes.ts +56 -0
  353. package/examples/cloud-run-storybook.test.ts +11 -0
  354. package/examples/cloud-run-storybook.ts +33 -0
  355. package/examples/cloud-run-with-ngnix.test.ts +11 -0
  356. package/examples/cloud-run-with-ngnix.ts +29 -0
  357. package/examples/cloud-run-with-sql-reuse-db.test.ts +11 -0
  358. package/examples/cloud-run-with-sql-reuse-db.ts +5 -4
  359. package/examples/cloud-run-with-sql.test.ts +11 -0
  360. package/examples/cloud-run-with-sql.ts +6 -20
  361. package/examples/cloud-run-with-worker.test.ts +11 -0
  362. package/examples/cloud-run-with-worker.ts +37 -0
  363. package/examples/custom-build-job-with-tests.test.ts +11 -0
  364. package/examples/custom-build-job-with-tests.ts +5 -4
  365. package/examples/custom-build-job.test.ts +11 -0
  366. package/examples/custom-build-job.ts +5 -4
  367. package/examples/custom-deploy.test.ts +11 -0
  368. package/examples/custom-deploy.ts +12 -4
  369. package/examples/custom-envs.test.ts +11 -0
  370. package/examples/custom-envs.ts +5 -4
  371. package/examples/custom-sbom-java.test.ts +11 -0
  372. package/examples/custom-sbom-java.ts +10 -6
  373. package/examples/git-submodule.test.ts +11 -0
  374. package/examples/git-submodule.ts +30 -0
  375. package/examples/kubernetes-application-customization.test.ts +11 -0
  376. package/examples/kubernetes-application-customization.ts +7 -4
  377. package/examples/kubernetes-with-cloud-sql.test.ts +11 -0
  378. package/examples/kubernetes-with-cloud-sql.ts +7 -4
  379. package/examples/kubernetes-with-jobs.test.ts +11 -0
  380. package/examples/kubernetes-with-jobs.ts +7 -4
  381. package/examples/kubernetes-with-mongodb.test.ts +11 -0
  382. package/examples/kubernetes-with-mongodb.ts +7 -4
  383. package/examples/local-dot-env.test.ts +11 -0
  384. package/examples/local-dot-env.ts +27 -0
  385. package/examples/meteor-kubernetes.test.ts +11 -0
  386. package/examples/meteor-kubernetes.ts +4 -5
  387. package/examples/multiline-var.test.ts +11 -0
  388. package/examples/multiline-var.ts +107 -0
  389. package/examples/native-app.test.ts +11 -0
  390. package/examples/native-app.ts +22 -17
  391. package/examples/node-build-with-custom-image.test.ts +11 -0
  392. package/examples/node-build-with-custom-image.ts +5 -4
  393. package/examples/node-build-with-docker-additions.test.ts +11 -0
  394. package/examples/node-build-with-docker-additions.ts +29 -0
  395. package/examples/rails-k8s-with-worker-dockerfile.test.ts +33 -0
  396. package/examples/rails-k8s-with-worker.test.ts +11 -0
  397. package/examples/rails-k8s-with-worker.ts +14 -11
  398. package/examples/referencing-other-vars.test.ts +11 -0
  399. package/examples/referencing-other-vars.ts +83 -0
  400. package/examples/wait-for-other-deploy.test.ts +11 -0
  401. package/examples/wait-for-other-deploy.ts +5 -4
  402. package/examples/workspace-api-www-turbo-cache.test.ts +11 -0
  403. package/examples/workspace-api-www-turbo-cache.ts +52 -0
  404. package/examples/workspace-api-www.test.ts +11 -0
  405. package/examples/workspace-api-www.ts +46 -0
  406. package/package.json +75 -26
  407. package/scripts/generate-examples-test.ts +84 -0
  408. package/scripts/generate-gitlab-ci-types.ts +2 -2
  409. package/scripts/tsconfig.json +7 -0
  410. package/src/bash/BashExpression.ts +78 -0
  411. package/src/bash/bashEscape.ts +158 -0
  412. package/src/bash/bashExpressionPerPipelineType.ts +16 -0
  413. package/src/bash/bashYaml.ts +80 -0
  414. package/src/bash/getInjectVarsScript.ts +21 -0
  415. package/src/bash/index.ts +2 -0
  416. package/src/build/artifacts/createBuildJobArtifact.ts +61 -0
  417. package/src/build/base/__tests__/createArtifactsConfig.test.ts +3 -3
  418. package/src/build/base/constants.ts +2 -2
  419. package/src/build/base/createAppBuildJob.ts +40 -24
  420. package/src/build/base/createArtifactsConfig.ts +2 -2
  421. package/src/build/base/createBuildJobDefinition.ts +37 -0
  422. package/src/build/base/index.ts +37 -8
  423. package/src/build/base/writeBuildInfo.ts +3 -3
  424. package/src/build/base/writeDotEnv.ts +25 -6
  425. package/src/build/cache/createJobCache.ts +83 -0
  426. package/src/build/cache/getAllCacheConfigsFromConfig.ts +28 -0
  427. package/src/build/cache/transformLegacyJobCache.ts +14 -0
  428. package/src/build/custom/__tests__/testJob.test.ts +10 -13
  429. package/src/build/custom/buildJob.ts +11 -37
  430. package/src/build/custom/index.ts +2 -2
  431. package/src/build/custom/testJob.ts +24 -22
  432. package/src/build/docker.ts +145 -49
  433. package/src/build/index.ts +42 -10
  434. package/src/build/node/buildJob.ts +65 -62
  435. package/src/build/node/cache.ts +30 -35
  436. package/src/build/node/constants.ts +2 -3
  437. package/src/build/node/index.ts +8 -4
  438. package/src/build/node/meteor.ts +16 -24
  439. package/src/build/node/testJob.ts +47 -26
  440. package/src/build/node/yarn.ts +32 -16
  441. package/src/build/rails/build.ts +21 -9
  442. package/src/build/rails/index.ts +2 -2
  443. package/src/build/rails/test.ts +22 -12
  444. package/src/build/sbom.ts +15 -10
  445. package/src/build/types.ts +190 -47
  446. package/src/catladder-gitlab.ts +7 -56
  447. package/src/config/__tests__/__snapshots__/getAllEnvs.test.ts.snap +31 -0
  448. package/src/config/__tests__/__snapshots__/getAllEnvsInAllComponents.test.ts.snap +15 -0
  449. package/src/config/__tests__/getAllEnvs.test.ts +71 -0
  450. package/src/config/__tests__/getAllEnvsInAllComponents.test.ts +63 -0
  451. package/src/config/configruedEnvs.ts +6 -6
  452. package/src/config/readConfig.ts +15 -22
  453. package/src/constants.ts +5 -2
  454. package/src/context/createAllComponentsContext.ts +31 -0
  455. package/src/context/createComponentContext.ts +134 -0
  456. package/src/context/createWorkspaceContext.ts +56 -0
  457. package/src/context/getBuildInfoVariables.ts +36 -0
  458. package/src/context/getEnvConfig.ts +3 -3
  459. package/src/context/getEnvType.ts +1 -1
  460. package/src/context/getEnvironment.ts +8 -24
  461. package/src/context/getEnvironmentContext.ts +25 -29
  462. package/src/context/getEnvironmentVariables.ts +104 -76
  463. package/src/context/getLabels.ts +5 -5
  464. package/src/context/getReviewSlug.ts +27 -0
  465. package/src/context/index.ts +1 -65
  466. package/src/context/transformJobOnlyVars.ts +6 -3
  467. package/src/context/utils/envVars.ts +5 -4
  468. package/src/deploy/base/deploy.ts +63 -47
  469. package/src/deploy/base/index.ts +11 -6
  470. package/src/deploy/base/rollback.ts +11 -16
  471. package/src/deploy/base/stop.ts +11 -15
  472. package/src/deploy/base/variables.ts +1 -2
  473. package/src/deploy/cloudRun/artifactsRegistry.ts +126 -0
  474. package/src/deploy/cloudRun/cleanup.ts +30 -0
  475. package/src/deploy/cloudRun/cloudRunRevisions.ts +65 -0
  476. package/src/deploy/cloudRun/createJobs/cloudRunJobs.ts +227 -0
  477. package/src/deploy/cloudRun/createJobs/cloudRunServices.ts +86 -0
  478. package/src/deploy/cloudRun/createJobs/common.ts +59 -0
  479. package/src/deploy/cloudRun/createJobs/constants.ts +1 -0
  480. package/src/deploy/cloudRun/createJobs/getCloudRunDeployScripts.ts +71 -0
  481. package/src/deploy/cloudRun/createJobs/getCloudRunStopScripts.ts +34 -0
  482. package/src/deploy/cloudRun/createJobs/index.ts +51 -0
  483. package/src/deploy/cloudRun/createJobs/volumes.ts +23 -0
  484. package/src/deploy/cloudRun/index.ts +85 -59
  485. package/src/deploy/cloudRun/utils/createArgsString.ts +21 -13
  486. package/src/deploy/cloudRun/utils/database.ts +31 -9
  487. package/src/deploy/cloudRun/utils/gcloudServiceAccountLoginCommands.ts +9 -11
  488. package/src/deploy/cloudRun/utils/getServiceName.ts +3 -0
  489. package/src/deploy/cloudRun/utils/jobName.ts +7 -2
  490. package/src/deploy/cloudRun/utils/removeFirstLinesFromCommandOutput.ts +12 -0
  491. package/src/deploy/cloudSql/utils.ts +13 -10
  492. package/src/deploy/custom/deployJob.ts +15 -10
  493. package/src/deploy/custom/index.ts +2 -2
  494. package/src/deploy/dockerTag/deployJob.ts +7 -8
  495. package/src/deploy/dockerTag/index.ts +8 -7
  496. package/src/deploy/index.ts +15 -12
  497. package/src/deploy/kubernetes/additionalSecretKeys.ts +3 -1
  498. package/src/deploy/kubernetes/cloudSql/index.ts +16 -25
  499. package/src/deploy/kubernetes/deployJob.ts +30 -21
  500. package/src/deploy/kubernetes/index.ts +43 -35
  501. package/src/deploy/kubernetes/kubeEnv.ts +12 -10
  502. package/src/deploy/kubernetes/kubeValues.ts +15 -19
  503. package/src/deploy/kubernetes/mongodb.ts +15 -15
  504. package/src/deploy/sbom.ts +18 -10
  505. package/src/deploy/types/base.ts +3 -3
  506. package/src/deploy/types/custom.ts +3 -7
  507. package/src/deploy/types/dockerTag.ts +2 -0
  508. package/src/deploy/types/googleCloudRun.ts +133 -10
  509. package/src/deploy/types/index.ts +2 -2
  510. package/src/deploy/types/kubernetes.ts +5 -36
  511. package/src/deploy/utils.ts +5 -5
  512. package/src/globalScriptFunctions/index.ts +30 -0
  513. package/src/index.ts +4 -1
  514. package/src/packageInfos.ts +14 -0
  515. package/src/pipeline/__tests__/__snapshots__/getPipelineStages.test.ts.snap +69 -0
  516. package/src/pipeline/__tests__/getPipelineStages.test.ts +63 -0
  517. package/src/pipeline/createAllJobs.ts +67 -33
  518. package/src/pipeline/createJobsForComponent.ts +10 -38
  519. package/src/pipeline/createJobsForWorkspace.ts +12 -0
  520. package/src/pipeline/createMainPipeline.ts +119 -0
  521. package/src/pipeline/generatePipelineFiles.ts +100 -0
  522. package/src/pipeline/getPipelineStages.ts +23 -0
  523. package/src/pipeline/gitlab/createGitlabJobs.ts +388 -108
  524. package/src/pipeline/gitlab/createGitlabPipeline.ts +35 -0
  525. package/src/pipeline/gitlab/gitlabReleaseJobs.ts +23 -0
  526. package/src/pipeline/gitlab/sortGitLabJobDefProps.ts +59 -0
  527. package/src/pipeline/index.ts +2 -1
  528. package/src/pipeline/packageManager.ts +44 -26
  529. package/src/pipeline/yarn/yarnUtils.ts +39 -10
  530. package/src/rules/index.ts +36 -9
  531. package/src/runner/index.ts +0 -1
  532. package/src/types/config.ts +43 -16
  533. package/src/types/context.ts +165 -37
  534. package/src/types/environmentContext.ts +18 -13
  535. package/src/types/gitlab-ci-yml.ts +0 -1
  536. package/src/types/gitlab-types.ts +10 -7
  537. package/src/types/index.ts +1 -0
  538. package/src/types/jobDefinition.ts +34 -0
  539. package/src/types/jobs.ts +31 -15
  540. package/src/types/utils.ts +4 -4
  541. package/src/utils/gitlab.ts +20 -3
  542. package/src/utils/index.ts +6 -3
  543. package/src/utils/jsonParse.ts +7 -0
  544. package/src/utils/removeUndefined.ts +4 -0
  545. package/src/utils/writeFiles.ts +52 -0
  546. package/src/variables/VariableValue.ts +6 -0
  547. package/src/variables/VariableValueContainingReferences.ts +89 -0
  548. package/src/variables/__tests__/resolveAllReferences.test.ts +110 -0
  549. package/src/variables/__tests__/resolveAllReferencesOnce.test.ts +64 -0
  550. package/src/variables/__tests__/resolveReferencesOnce.test.ts +117 -0
  551. package/src/variables/__tests__/variableValue.test.ts +73 -0
  552. package/src/variables/resolveAllReferences.ts +46 -0
  553. package/src/variables/resolveAllReferencesOnce.ts +44 -0
  554. package/src/variables/resolveReferencesOnce.ts +29 -0
  555. package/bin/catladder-gitlab-dev.js +0 -3
  556. package/bin/catladder-gitlab.js +0 -3
  557. package/dist/bundles/catladder-gitlab/index.js +0 -33838
  558. package/dist/context/__tests__/resolveReferences.test.js +0 -336
  559. package/dist/context/resolveReferences.d.ts +0 -4
  560. package/dist/context/resolveReferences.js +0 -254
  561. package/dist/deploy/cloudRun/deployJob.d.ts +0 -3
  562. package/dist/deploy/cloudRun/deployJob.js +0 -248
  563. package/dist/deploy/kubernetes/processSecretsAsFiles.d.ts +0 -84
  564. package/dist/deploy/kubernetes/processSecretsAsFiles.js +0 -31
  565. package/dist/pipeline/commitInfo/getBuildId.d.ts +0 -6
  566. package/dist/pipeline/commitInfo/getCommitInfo.d.ts +0 -2
  567. package/dist/pipeline/createChildPipeline.d.ts +0 -3
  568. package/examples/__snapshots__/cloud-run-memory-limit.ts.snap +0 -1780
  569. package/examples/__snapshots__/cloud-run-no-cpu-throttling.ts.snap +0 -1780
  570. package/examples/__snapshots__/cloud-run-non-public.ts.snap +0 -1780
  571. package/examples/__snapshots__/cloud-run-with-sql-reuse-db.ts.snap +0 -3532
  572. package/examples/__snapshots__/cloud-run-with-sql.ts.snap +0 -3543
  573. package/examples/__snapshots__/custom-build-job-with-tests.ts.snap +0 -1656
  574. package/examples/__snapshots__/custom-build-job.ts.snap +0 -1362
  575. package/examples/__snapshots__/custom-deploy.ts.snap +0 -1556
  576. package/examples/__snapshots__/custom-envs.ts.snap +0 -1050
  577. package/examples/__snapshots__/custom-sbom-java.ts.snap +0 -1370
  578. package/examples/__snapshots__/kubernetes-application-customization.ts.snap +0 -2468
  579. package/examples/__snapshots__/kubernetes-with-cloud-sql-legacy.ts.snap +0 -2428
  580. package/examples/__snapshots__/kubernetes-with-cloud-sql.ts.snap +0 -2440
  581. package/examples/__snapshots__/kubernetes-with-jobs.ts.snap +0 -4453
  582. package/examples/__snapshots__/kubernetes-with-mongodb.ts.snap +0 -2632
  583. package/examples/__snapshots__/meteor-kubernetes.ts.snap +0 -2557
  584. package/examples/__snapshots__/native-app.ts.snap +0 -2878
  585. package/examples/__snapshots__/node-build-with-custom-image.ts.snap +0 -1780
  586. package/examples/__snapshots__/rails-k8s-with-worker.ts.snap +0 -4189
  587. package/examples/__snapshots__/wait-for-other-deploy.ts.snap +0 -1922
  588. package/examples/kubernetes-with-cloud-sql-legacy.ts +0 -33
  589. package/scripts/bundle +0 -2
  590. package/src/context/__tests__/resolveReferences.test.ts +0 -143
  591. package/src/context/resolveReferences.ts +0 -70
  592. package/src/deploy/cloudRun/deployJob.ts +0 -301
  593. package/src/deploy/kubernetes/processSecretsAsFiles.ts +0 -34
  594. package/src/pipeline/commitInfo/getBuildId.ts +0 -17
  595. package/src/pipeline/commitInfo/getCommitInfo.ts +0 -15
  596. package/src/pipeline/createChildPipeline.ts +0 -45
  597. /package/dist/{context/__tests__/resolveReferences.test.d.ts โ†’ config/__tests__/getAllEnvs.test.d.ts} +0 -0
@@ -0,0 +1,1285 @@
1
+ // Jest Snapshot v1, https://goo.gl/fbAQLP
2
+
3
+ exports[`matches snapshot for custom-build-job-with-tests local pipeline YAML 1`] = `
4
+ "image: path/to/docker/jobs-default:the-version
5
+ stages:
6
+ - setup
7
+ - setup dev
8
+ - setup review
9
+ - setup stage
10
+ - setup prod
11
+ - test
12
+ - test dev
13
+ - test review
14
+ - test stage
15
+ - test prod
16
+ - build
17
+ - build dev
18
+ - build review
19
+ - build stage
20
+ - build prod
21
+ - deploy
22
+ - deploy dev
23
+ - deploy review
24
+ - deploy stage
25
+ - deploy prod
26
+ - verify
27
+ - verify dev
28
+ - verify review
29
+ - verify stage
30
+ - verify prod
31
+ - rollback
32
+ - rollback dev
33
+ - rollback review
34
+ - rollback stage
35
+ - rollback prod
36
+ - stop
37
+ - stop dev
38
+ - stop review
39
+ - stop stage
40
+ - stop prod
41
+ - release
42
+ variables:
43
+ FF_USE_FASTZIP: 'true'
44
+ ARTIFACT_COMPRESSION_LEVEL: fast
45
+ CACHE_COMPRESSION_LEVEL: fast
46
+ TRANSFER_METER_FREQUENCY: 5s
47
+ GIT_DEPTH: '1'
48
+ before_script:
49
+ - |-
50
+ function escapeForDotEnv () {
51
+ input="\${1:-$(cat)}"
52
+ input="\${input//$'\\n'/\\\\n}"
53
+ if [[ "$input" == *\\\\n* ]]; then
54
+ if [[ "$input" == *\\"* && "$input" == *\\'* && "$input" == *\\\`* ]]; then
55
+ printf "\\"%s\\"\\n" "$input"
56
+ elif [[ "$input" == *\\"* && "$input" == *\\'* ]]; then
57
+ printf "\`%s\`\\n" "$input"
58
+ elif [[ "$input" == *\\"* ]]; then
59
+ printf "'%s'\\n" "$input"
60
+ else
61
+ printf "\\"%s\\"\\n" "$input"
62
+ fi
63
+ else
64
+ printf "%s\\n" "$input"
65
+ fi
66
+ }
67
+ - |-
68
+ function collapseable_section_start () {
69
+ local section_title="\${1}"
70
+ local section_description="\${2:-$section_title}"
71
+ echo -e "section_start:\`date +%s\`:\${section_title}[collapsed=true]\\r\\e[0K\${section_description}"
72
+ }
73
+ - |-
74
+ function collapseable_section_end () {
75
+ local section_title="\${1}"
76
+ echo -e "section_end:\`date +%s\`:\${section_title}\\r\\e[0K"
77
+ }
78
+ www ๐Ÿ›ก audit:
79
+ stage: test
80
+ image: audit-image
81
+ services: &a1
82
+ - name: job-service-1
83
+ command:
84
+ - --some-command=some-value
85
+ variables:
86
+ KUBERNETES_CPU_REQUEST: '0.45'
87
+ KUBERNETES_MEMORY_REQUEST: 1Gi
88
+ KUBERNETES_MEMORY_LIMIT: 4Gi
89
+ script:
90
+ - collapseable_section_start "injectvars" "Injecting variables"
91
+ - export APP_PATH="www"
92
+ - collapseable_section_end "injectvars"
93
+ - audit
94
+ artifacts:
95
+ paths: []
96
+ reports:
97
+ junit:
98
+ - www/dist/audit.xml
99
+ rules:
100
+ - when: never
101
+ if: $CI_COMMIT_MESSAGE =~ /^chore\\(release\\).*/
102
+ - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
103
+ - if: $CI_MERGE_REQUEST_ID
104
+ needs: []
105
+ retry: &a2
106
+ max: 2
107
+ when:
108
+ - runner_system_failure
109
+ - stuck_or_timeout_failure
110
+ interruptible: true
111
+ allow_failure: true
112
+ www ๐Ÿ‘ฎ lint:
113
+ stage: test
114
+ image: lint-image
115
+ services: *a1
116
+ variables:
117
+ KUBERNETES_CPU_REQUEST: '0.45'
118
+ KUBERNETES_MEMORY_REQUEST: 1Gi
119
+ KUBERNETES_MEMORY_LIMIT: 4Gi
120
+ script:
121
+ - collapseable_section_start "injectvars" "Injecting variables"
122
+ - export APP_PATH="www"
123
+ - collapseable_section_end "injectvars"
124
+ - lint
125
+ artifacts:
126
+ paths: []
127
+ reports:
128
+ junit:
129
+ - www/dist/lint.xml
130
+ rules:
131
+ - when: never
132
+ if: $CI_COMMIT_MESSAGE =~ /^chore\\(release\\).*/
133
+ - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
134
+ - if: $CI_MERGE_REQUEST_ID
135
+ needs: []
136
+ retry: *a2
137
+ interruptible: true
138
+ www ๐Ÿงช test:
139
+ stage: test
140
+ image: test-image
141
+ services: *a1
142
+ variables:
143
+ KUBERNETES_CPU_REQUEST: '0.45'
144
+ KUBERNETES_MEMORY_REQUEST: 1Gi
145
+ KUBERNETES_MEMORY_LIMIT: 4Gi
146
+ script:
147
+ - collapseable_section_start "injectvars" "Injecting variables"
148
+ - export APP_PATH="www"
149
+ - collapseable_section_end "injectvars"
150
+ - test
151
+ artifacts:
152
+ paths: []
153
+ reports:
154
+ junit:
155
+ - www/dist/TEST-*.xml
156
+ - www/dist/junit-*.xml
157
+ rules:
158
+ - when: never
159
+ if: $CI_COMMIT_MESSAGE =~ /^chore\\(release\\).*/
160
+ - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
161
+ - if: $CI_MERGE_REQUEST_ID
162
+ needs: []
163
+ retry: *a2
164
+ interruptible: true
165
+ 'www ๐Ÿ”จ app | dev ':
166
+ stage: build
167
+ image: foo
168
+ services:
169
+ - name: job-service-1
170
+ command:
171
+ - --some-command=some-value
172
+ variables:
173
+ KUBERNETES_CPU_REQUEST: '0.45'
174
+ KUBERNETES_MEMORY_REQUEST: 1Gi
175
+ KUBERNETES_MEMORY_LIMIT: 4Gi
176
+ script:
177
+ - collapseable_section_start "injectvars" "Injecting variables"
178
+ - export ENV_SHORT="dev"
179
+ - export APP_DIR="www"
180
+ - export ENV_TYPE="dev"
181
+ - export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
182
+ - export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
183
+ - export BUILD_INFO_CURRENT_VERSION="$(tag=$(git ls-remote origin "refs/tags/v*[0-9]" 2>/dev/null | cut -f 2- | sort -V | tail -1 | sed 's/refs\\/tags\\/v//'); [ -z "$tag" ] && echo "0.0.0" || echo "$tag")"
184
+ - export HOSTNAME="$(printf %s "pan-test-app-dev-www-$CL_dev_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
185
+ - export ROOT_URL="https://$(printf %s "pan-test-app-dev-www-$CL_dev_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
186
+ - export HOSTNAME_INTERNAL="$(printf %s "pan-test-app-dev-www-$CL_dev_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
187
+ - export ROOT_URL_INTERNAL="https://$(printf %s "pan-test-app-dev-www-$CL_dev_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
188
+ - export DEPLOY_CLOUD_RUN_PROJECT_ID="asdf"
189
+ - export DEPLOY_CLOUD_RUN_REGION="asia-east1"
190
+ - export GCLOUD_DEPLOY_credentialsKey="$CL_dev_www_GCLOUD_DEPLOY_credentialsKey"
191
+ - export GCLOUD_RUN_canonicalHostSuffix="$CL_dev_www_GCLOUD_RUN_canonicalHostSuffix"
192
+ - export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOSTNAME\\",\\"ROOT_URL\\",\\"HOSTNAME_INTERNAL\\",\\"ROOT_URL_INTERNAL\\",\\"DEPLOY_CLOUD_RUN_PROJECT_ID\\",\\"DEPLOY_CLOUD_RUN_REGION\\",\\"GCLOUD_DEPLOY_credentialsKey\\",\\"GCLOUD_RUN_canonicalHostSuffix\\"]"
193
+ - collapseable_section_end "injectvars"
194
+ - collapseable_section_start "write-dotenv-www" "write dot env for www"
195
+ - |-
196
+ cat <<EOF > www/.env
197
+ ENV_SHORT=dev
198
+ APP_DIR=www
199
+ ENV_TYPE=dev
200
+ HOSTNAME=$(printf %s "$(printf %s "pan-test-app-dev-www-$CL_dev_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | escapeForDotEnv)
201
+ ROOT_URL=$(printf %s "https://$(printf %s "pan-test-app-dev-www-$CL_dev_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | escapeForDotEnv)
202
+ HOSTNAME_INTERNAL=$(printf %s "$(printf %s "pan-test-app-dev-www-$CL_dev_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | escapeForDotEnv)
203
+ ROOT_URL_INTERNAL=$(printf %s "https://$(printf %s "pan-test-app-dev-www-$CL_dev_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | escapeForDotEnv)
204
+ DEPLOY_CLOUD_RUN_PROJECT_ID=asdf
205
+ DEPLOY_CLOUD_RUN_REGION=asia-east1
206
+ GCLOUD_DEPLOY_credentialsKey=$(printf %s "$CL_dev_www_GCLOUD_DEPLOY_credentialsKey" | escapeForDotEnv)
207
+ GCLOUD_RUN_canonicalHostSuffix=$(printf %s "$CL_dev_www_GCLOUD_RUN_canonicalHostSuffix" | escapeForDotEnv)
208
+ _ALL_ENV_VAR_KEYS=["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOSTNAME","ROOT_URL","HOSTNAME_INTERNAL","ROOT_URL_INTERNAL","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]
209
+ EOF
210
+ - collapseable_section_end "write-dotenv-www"
211
+ - echo '{"id":"$(git describe --tags 2>/dev/null || git rev-parse HEAD)","time":"$CI_JOB_STARTED_AT"}' > www/__build_info.json
212
+ - collapseable_section_start "nodeinstall" "Ensure node version"
213
+ - if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
214
+ - if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
215
+ - collapseable_section_end "nodeinstall"
216
+ - cd www
217
+ artifacts:
218
+ paths:
219
+ - www/__build_info.json
220
+ - www/dist
221
+ exclude:
222
+ - www/.env
223
+ expire_in: 1 day
224
+ when: always
225
+ reports: {}
226
+ rules:
227
+ - when: never
228
+ if: $CI_COMMIT_MESSAGE =~ /^chore\\(release\\).*/
229
+ - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
230
+ needs: []
231
+ retry: *a2
232
+ interruptible: true
233
+ 'www ๐Ÿ”จ docker | dev ':
234
+ stage: build
235
+ image: path/to/docker/docker-build:the-version
236
+ services:
237
+ - name: docker:24.0.6-dind
238
+ command:
239
+ - --tls=false
240
+ - --registry-mirror=https://mirror.gcr.io
241
+ variables:
242
+ DOCKER_HOST: tcp://0.0.0.0:2375
243
+ DOCKER_TLS_CERTDIR: ''
244
+ DOCKER_DRIVER: overlay2
245
+ DOCKER_BUILDKIT: '1'
246
+ KUBERNETES_CPU_REQUEST: '0.45'
247
+ KUBERNETES_MEMORY_REQUEST: 1Gi
248
+ KUBERNETES_MEMORY_LIMIT: 2Gi
249
+ script:
250
+ - collapseable_section_start "injectvars" "Injecting variables"
251
+ - export APP_DIR="www"
252
+ - export DOCKER_BUILD_CONTEXT="."
253
+ - export DOCKER_REGISTRY="asia-east1-docker.pkg.dev"
254
+ - export DOCKER_IMAGE="asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/dev/www"
255
+ - export DOCKER_CACHE_IMAGE="asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/caches/www"
256
+ - export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"
257
+ - collapseable_section_end "injectvars"
258
+ - ensureNginxDockerfile
259
+ - collapseable_section_start "docker-login" "Docker Login"
260
+ - gcloud auth activate-service-account --key-file=<(echo "$CL_dev_www_GCLOUD_DEPLOY_credentialsKey")
261
+ - gcloud auth configure-docker asia-east1-docker.pkg.dev
262
+ - collapseable_section_end "docker-login"
263
+ - collapseable_section_start "docker-build" "Docker build"
264
+ - docker build --network host --cache-from $DOCKER_CACHE_IMAGE --tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG -f $APP_DIR/Dockerfile $DOCKER_BUILD_CONTEXT --build-arg BUILDKIT_INLINE_CACHE=1
265
+ - collapseable_section_end "docker-build"
266
+ - collapseable_section_start "docker-push" "Docker push and tag"
267
+ - docker push $DOCKER_IMAGE:$DOCKER_IMAGE_TAG
268
+ - docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG $DOCKER_CACHE_IMAGE
269
+ - docker push $DOCKER_CACHE_IMAGE
270
+ - collapseable_section_end "docker-push"
271
+ rules:
272
+ - when: never
273
+ if: $CI_COMMIT_MESSAGE =~ /^chore\\(release\\).*/
274
+ - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
275
+ needs:
276
+ - 'www ๐Ÿ”จ app | dev '
277
+ retry: *a2
278
+ interruptible: true
279
+ 'www ๐Ÿงพ sbom | dev ':
280
+ stage: build
281
+ image: aquasec/trivy:0.38.3
282
+ variables: {}
283
+ script:
284
+ - collapseable_section_start "injectvars" "Injecting variables"
285
+ - collapseable_section_end "injectvars"
286
+ - trivy fs --quiet --format cyclonedx --output "__sbom.json" www
287
+ artifacts:
288
+ paths:
289
+ - __sbom.json
290
+ rules:
291
+ - when: never
292
+ if: $CI_COMMIT_MESSAGE =~ /^chore\\(release\\).*/
293
+ - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
294
+ needs: []
295
+ retry: *a2
296
+ interruptible: true
297
+ allow_failure: true
298
+ 'www ๐Ÿš€ Deploy | dev ':
299
+ stage: deploy dev
300
+ image: path/to/docker/gcloud:the-version
301
+ variables:
302
+ KUBERNETES_CPU_REQUEST: '0.22'
303
+ KUBERNETES_MEMORY_REQUEST: 200Mi
304
+ KUBERNETES_MEMORY_LIMIT: 400Mi
305
+ script:
306
+ - collapseable_section_start "injectvars" "Injecting variables"
307
+ - export ENV_SHORT="dev"
308
+ - export APP_DIR="www"
309
+ - export ENV_TYPE="dev"
310
+ - export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
311
+ - export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
312
+ - export BUILD_INFO_CURRENT_VERSION="$(tag=$(git ls-remote origin "refs/tags/v*[0-9]" 2>/dev/null | cut -f 2- | sort -V | tail -1 | sed 's/refs\\/tags\\/v//'); [ -z "$tag" ] && echo "0.0.0" || echo "$tag")"
313
+ - export HOSTNAME="$(printf %s "pan-test-app-dev-www-$CL_dev_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
314
+ - export ROOT_URL="https://$(printf %s "pan-test-app-dev-www-$CL_dev_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
315
+ - export HOSTNAME_INTERNAL="$(printf %s "pan-test-app-dev-www-$CL_dev_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
316
+ - export ROOT_URL_INTERNAL="https://$(printf %s "pan-test-app-dev-www-$CL_dev_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
317
+ - export DEPLOY_CLOUD_RUN_PROJECT_ID="asdf"
318
+ - export DEPLOY_CLOUD_RUN_REGION="asia-east1"
319
+ - export GCLOUD_DEPLOY_credentialsKey="$CL_dev_www_GCLOUD_DEPLOY_credentialsKey"
320
+ - export GCLOUD_RUN_canonicalHostSuffix="$CL_dev_www_GCLOUD_RUN_canonicalHostSuffix"
321
+ - export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOSTNAME\\",\\"ROOT_URL\\",\\"HOSTNAME_INTERNAL\\",\\"ROOT_URL_INTERNAL\\",\\"DEPLOY_CLOUD_RUN_PROJECT_ID\\",\\"DEPLOY_CLOUD_RUN_REGION\\",\\"GCLOUD_DEPLOY_credentialsKey\\",\\"GCLOUD_RUN_canonicalHostSuffix\\"]"
322
+ - export DOCKER_REGISTRY="asia-east1-docker.pkg.dev"
323
+ - export DOCKER_IMAGE="asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/dev/www"
324
+ - export DOCKER_CACHE_IMAGE="asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/caches/www"
325
+ - export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"
326
+ - export CLOUDSDK_CORE_DISABLE_PROMPTS="1"
327
+ - collapseable_section_end "injectvars"
328
+ - collapseable_section_start "prepare" "Prepare..."
329
+ - gcloud auth activate-service-account --key-file=<(echo "$CL_dev_www_GCLOUD_DEPLOY_credentialsKey")
330
+ - export GCLOUD_PROJECT_NUMBER=$(gcloud projects describe asdf --format="value(projectNumber)")
331
+ - 'echo "GCLOUD_PROJECT_NUMBER: $GCLOUD_PROJECT_NUMBER"'
332
+ - collapseable_section_end "prepare"
333
+ - collapseable_section_start "writeenvvars" "Write env vars to file"
334
+ - |
335
+ cat > ____envvars.yaml <<EOF
336
+ ENV_SHORT: |-
337
+ dev
338
+ APP_DIR: |-
339
+ www
340
+ ENV_TYPE: |-
341
+ dev
342
+ BUILD_INFO_BUILD_ID: |-
343
+ $(printf %s "$(git describe --tags 2>/dev/null || git rev-parse HEAD)" | sed '1!s/^/ /')
344
+ BUILD_INFO_BUILD_TIME: |-
345
+ $(printf %s "$CI_JOB_STARTED_AT" | sed '1!s/^/ /')
346
+ BUILD_INFO_CURRENT_VERSION: |-
347
+ $(printf %s "$(tag=$(git ls-remote origin "refs/tags/v*[0-9]" 2>/dev/null | cut -f 2- | sort -V | tail -1 | sed 's/refs\\/tags\\/v//'); [ -z "$tag" ] && echo "0.0.0" || echo "$tag")" | sed '1!s/^/ /')
348
+ HOSTNAME: |-
349
+ $(printf %s "$(printf %s "pan-test-app-dev-www-$CL_dev_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
350
+ ROOT_URL: |-
351
+ $(printf %s "https://$(printf %s "pan-test-app-dev-www-$CL_dev_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
352
+ HOSTNAME_INTERNAL: |-
353
+ $(printf %s "$(printf %s "pan-test-app-dev-www-$CL_dev_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
354
+ ROOT_URL_INTERNAL: |-
355
+ $(printf %s "https://$(printf %s "pan-test-app-dev-www-$CL_dev_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
356
+ DEPLOY_CLOUD_RUN_PROJECT_ID: |-
357
+ asdf
358
+ DEPLOY_CLOUD_RUN_REGION: |-
359
+ asia-east1
360
+ GCLOUD_RUN_canonicalHostSuffix: |-
361
+ $(printf %s "$CL_dev_www_GCLOUD_RUN_canonicalHostSuffix" | sed '1!s/^/ /')
362
+ _ALL_ENV_VAR_KEYS: |-
363
+ ["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOSTNAME","ROOT_URL","HOSTNAME_INTERNAL","ROOT_URL_INTERNAL","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]
364
+
365
+ EOF
366
+ - collapseable_section_end "writeenvvars"
367
+ - collapseable_section_start "deploy" "Deploy to cloud run"
368
+ - gcloud run deploy pan-test-app-dev-www --command="" --image=asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/dev/www:$DOCKER_IMAGE_TAG --project=asdf --region=asia-east1 --labels=customer-name=pan,component-name=www,app-name=test-app,env-type=dev,env-name=dev,build-type=custom,cloud-run-service-name=pan-test-app-dev-www --env-vars-file=____envvars.yaml --min-instances=0 --max-instances=100 --cpu-throttling --allow-unauthenticated --ingress=all --cpu-boost
369
+ - collapseable_section_end "deploy"
370
+ - collapseable_section_start "cleanup" "Cleanup"
371
+ - gcloud run revisions list --project=asdf --region=asia-east1 --service=pan-test-app-dev-www --limit=unlimited --sort-by=metadata.creationTimestamp --format="value(name)" --filter='(status.conditions.status=False OR status.conditions.status=Unknown)' | while read -r revisionname; do gcloud run revisions delete --project=asdf --region=asia-east1 --quiet $revisionname ; done
372
+ - gcloud artifacts docker images list asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/dev/www --sort-by=~CREATE_TIME --format="value(version)" | tail -n +2 | while read -r version; do gcloud artifacts docker images delete asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/dev/www@$version --quiet --delete-tags; done
373
+ - gcloud artifacts docker images list asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/caches/www --sort-by=~CREATE_TIME --format="value(version)" | tail -n +2 | while read -r version; do gcloud artifacts docker images delete asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/caches/www@$version --quiet --delete-tags; done
374
+ - collapseable_section_end "cleanup"
375
+ - echo 'Uploading SBOM to Dependency Track'
376
+ - /dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/www" "https://$(printf %s "pan-test-app-dev-www-$CL_dev_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" "__sbom.json" vex.json || true
377
+ - echo "CL_GITLAB_ENVIRONMENT_URL=https://$(printf %s "pan-test-app-dev-www-$CL_dev_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" >> gitlab_environment.env
378
+ environment:
379
+ name: dev/www
380
+ url: $CL_GITLAB_ENVIRONMENT_URL
381
+ on_stop: 'www ๐Ÿ›‘ Stop โš ๏ธ | dev '
382
+ auto_stop_in: 4 weeks
383
+ artifacts:
384
+ reports:
385
+ dotenv: gitlab_environment.env
386
+ rules:
387
+ - when: never
388
+ if: $CI_COMMIT_MESSAGE =~ /^chore\\(release\\).*/
389
+ - when: on_success
390
+ if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
391
+ needs:
392
+ - job: www ๐Ÿ‘ฎ lint
393
+ artifacts: false
394
+ - job: 'www ๐Ÿ”จ app | dev '
395
+ artifacts: false
396
+ - job: 'www ๐Ÿ”จ docker | dev '
397
+ artifacts: false
398
+ - job: www ๐Ÿงช test
399
+ artifacts: false
400
+ - job: 'www ๐Ÿงพ sbom | dev '
401
+ artifacts: true
402
+ - job: www ๐Ÿ›ก audit
403
+ artifacts: false
404
+ retry: *a2
405
+ interruptible: true
406
+ allow_failure: false
407
+ 'www ๐Ÿ›‘ Stop โš ๏ธ | dev ':
408
+ stage: stop dev
409
+ image: path/to/docker/gcloud:the-version
410
+ variables:
411
+ KUBERNETES_CPU_REQUEST: '0.22'
412
+ KUBERNETES_MEMORY_REQUEST: 200Mi
413
+ KUBERNETES_MEMORY_LIMIT: 400Mi
414
+ GIT_STRATEGY: none
415
+ script:
416
+ - collapseable_section_start "injectvars" "Injecting variables"
417
+ - export CLOUDSDK_CORE_DISABLE_PROMPTS="1"
418
+ - collapseable_section_end "injectvars"
419
+ - set +e
420
+ - gcloud auth activate-service-account --key-file=<(echo "$CL_dev_www_GCLOUD_DEPLOY_credentialsKey")
421
+ - gcloud run services delete pan-test-app-dev-www --project=asdf --region=asia-east1
422
+ - gcloud artifacts docker images delete asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/dev/www --quiet --delete-tags
423
+ - gcloud artifacts docker images list asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/caches/www --sort-by=~CREATE_TIME --format="value(version)" | tail -n +2 | while read -r version; do gcloud artifacts docker images delete asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/caches/www@$version --quiet --delete-tags; done
424
+ - echo 'Disabling component in Dependency Track'
425
+ - /dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" disable "pan-test-app/www" "https://$(printf %s "pan-test-app-dev-www-$CL_dev_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" || true
426
+ - set -e
427
+ - echo "CL_GITLAB_ENVIRONMENT_URL=https://$(printf %s "pan-test-app-dev-www-$CL_dev_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" >> gitlab_environment.env
428
+ environment:
429
+ name: dev/www
430
+ url: $CL_GITLAB_ENVIRONMENT_URL
431
+ action: stop
432
+ artifacts:
433
+ reports:
434
+ dotenv: gitlab_environment.env
435
+ rules:
436
+ - if: $CI_COMMIT_BRANCH =~ /^[0-9]+\\.([0-9]+|x)\\.x$/
437
+ when: on_success
438
+ - when: never
439
+ if: $CI_COMMIT_MESSAGE =~ /^chore\\(release\\).*/
440
+ - when: manual
441
+ if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
442
+ needs: []
443
+ retry: *a2
444
+ interruptible: true
445
+ allow_failure: true
446
+ 'www ๐Ÿ”จ app | review ':
447
+ stage: build
448
+ image: foo
449
+ services:
450
+ - name: job-service-1
451
+ command:
452
+ - --some-command=some-value
453
+ variables:
454
+ KUBERNETES_CPU_REQUEST: '0.45'
455
+ KUBERNETES_MEMORY_REQUEST: 1Gi
456
+ KUBERNETES_MEMORY_LIMIT: 4Gi
457
+ script:
458
+ - collapseable_section_start "injectvars" "Injecting variables"
459
+ - export ENV_SHORT="review"
460
+ - export APP_DIR="www"
461
+ - export ENV_TYPE="review"
462
+ - export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
463
+ - export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
464
+ - export BUILD_INFO_CURRENT_VERSION="$(tag=$(git ls-remote origin "refs/tags/v*[0-9]" 2>/dev/null | cut -f 2- | sort -V | tail -1 | sed 's/refs\\/tags\\/v//'); [ -z "$tag" ] && echo "0.0.0" || echo "$tag")"
465
+ - export HOSTNAME="$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-www-$CL_review_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
466
+ - export ROOT_URL="https://$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-www-$CL_review_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
467
+ - export HOSTNAME_INTERNAL="$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-www-$CL_review_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
468
+ - export ROOT_URL_INTERNAL="https://$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-www-$CL_review_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
469
+ - export DEPLOY_CLOUD_RUN_PROJECT_ID="asdf"
470
+ - export DEPLOY_CLOUD_RUN_REGION="asia-east1"
471
+ - export GCLOUD_DEPLOY_credentialsKey="$CL_review_www_GCLOUD_DEPLOY_credentialsKey"
472
+ - export GCLOUD_RUN_canonicalHostSuffix="$CL_review_www_GCLOUD_RUN_canonicalHostSuffix"
473
+ - export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOSTNAME\\",\\"ROOT_URL\\",\\"HOSTNAME_INTERNAL\\",\\"ROOT_URL_INTERNAL\\",\\"DEPLOY_CLOUD_RUN_PROJECT_ID\\",\\"DEPLOY_CLOUD_RUN_REGION\\",\\"GCLOUD_DEPLOY_credentialsKey\\",\\"GCLOUD_RUN_canonicalHostSuffix\\"]"
474
+ - collapseable_section_end "injectvars"
475
+ - collapseable_section_start "write-dotenv-www" "write dot env for www"
476
+ - |-
477
+ cat <<EOF > www/.env
478
+ ENV_SHORT=review
479
+ APP_DIR=www
480
+ ENV_TYPE=review
481
+ HOSTNAME=$(printf %s "$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-www-$CL_review_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | escapeForDotEnv)
482
+ ROOT_URL=$(printf %s "https://$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-www-$CL_review_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | escapeForDotEnv)
483
+ HOSTNAME_INTERNAL=$(printf %s "$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-www-$CL_review_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | escapeForDotEnv)
484
+ ROOT_URL_INTERNAL=$(printf %s "https://$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-www-$CL_review_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | escapeForDotEnv)
485
+ DEPLOY_CLOUD_RUN_PROJECT_ID=asdf
486
+ DEPLOY_CLOUD_RUN_REGION=asia-east1
487
+ GCLOUD_DEPLOY_credentialsKey=$(printf %s "$CL_review_www_GCLOUD_DEPLOY_credentialsKey" | escapeForDotEnv)
488
+ GCLOUD_RUN_canonicalHostSuffix=$(printf %s "$CL_review_www_GCLOUD_RUN_canonicalHostSuffix" | escapeForDotEnv)
489
+ _ALL_ENV_VAR_KEYS=["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOSTNAME","ROOT_URL","HOSTNAME_INTERNAL","ROOT_URL_INTERNAL","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]
490
+ EOF
491
+ - collapseable_section_end "write-dotenv-www"
492
+ - echo '{"id":"$(git describe --tags 2>/dev/null || git rev-parse HEAD)","time":"$CI_JOB_STARTED_AT"}' > www/__build_info.json
493
+ - collapseable_section_start "nodeinstall" "Ensure node version"
494
+ - if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
495
+ - if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
496
+ - collapseable_section_end "nodeinstall"
497
+ - cd www
498
+ artifacts:
499
+ paths:
500
+ - www/__build_info.json
501
+ - www/dist
502
+ exclude:
503
+ - www/.env
504
+ expire_in: 1 day
505
+ when: always
506
+ reports: {}
507
+ rules:
508
+ - if: $CI_MERGE_REQUEST_ID
509
+ needs: []
510
+ retry: *a2
511
+ interruptible: true
512
+ 'www ๐Ÿ”จ docker | review ':
513
+ stage: build
514
+ image: path/to/docker/docker-build:the-version
515
+ services:
516
+ - name: docker:24.0.6-dind
517
+ command:
518
+ - --tls=false
519
+ - --registry-mirror=https://mirror.gcr.io
520
+ variables:
521
+ DOCKER_HOST: tcp://0.0.0.0:2375
522
+ DOCKER_TLS_CERTDIR: ''
523
+ DOCKER_DRIVER: overlay2
524
+ DOCKER_BUILDKIT: '1'
525
+ KUBERNETES_CPU_REQUEST: '0.45'
526
+ KUBERNETES_MEMORY_REQUEST: 1Gi
527
+ KUBERNETES_MEMORY_LIMIT: 2Gi
528
+ script:
529
+ - collapseable_section_start "injectvars" "Injecting variables"
530
+ - export APP_DIR="www"
531
+ - export DOCKER_BUILD_CONTEXT="."
532
+ - export DOCKER_REGISTRY="asia-east1-docker.pkg.dev"
533
+ - export DOCKER_IMAGE="asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/review/www/$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })"
534
+ - export DOCKER_CACHE_IMAGE="asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/caches/www"
535
+ - export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"
536
+ - collapseable_section_end "injectvars"
537
+ - ensureNginxDockerfile
538
+ - collapseable_section_start "docker-login" "Docker Login"
539
+ - gcloud auth activate-service-account --key-file=<(echo "$CL_review_www_GCLOUD_DEPLOY_credentialsKey")
540
+ - gcloud auth configure-docker asia-east1-docker.pkg.dev
541
+ - collapseable_section_end "docker-login"
542
+ - collapseable_section_start "docker-build" "Docker build"
543
+ - docker build --network host --cache-from $DOCKER_CACHE_IMAGE --tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG -f $APP_DIR/Dockerfile $DOCKER_BUILD_CONTEXT --build-arg BUILDKIT_INLINE_CACHE=1
544
+ - collapseable_section_end "docker-build"
545
+ - collapseable_section_start "docker-push" "Docker push and tag"
546
+ - docker push $DOCKER_IMAGE:$DOCKER_IMAGE_TAG
547
+ - docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG $DOCKER_CACHE_IMAGE
548
+ - docker push $DOCKER_CACHE_IMAGE
549
+ - collapseable_section_end "docker-push"
550
+ rules:
551
+ - if: $CI_MERGE_REQUEST_ID
552
+ needs:
553
+ - 'www ๐Ÿ”จ app | review '
554
+ retry: *a2
555
+ interruptible: true
556
+ 'www ๐Ÿงพ sbom | review ':
557
+ stage: build
558
+ image: aquasec/trivy:0.38.3
559
+ variables: {}
560
+ script:
561
+ - collapseable_section_start "injectvars" "Injecting variables"
562
+ - collapseable_section_end "injectvars"
563
+ - trivy fs --quiet --format cyclonedx --output "__sbom.json" www
564
+ artifacts:
565
+ paths:
566
+ - __sbom.json
567
+ rules:
568
+ - if: $CI_MERGE_REQUEST_ID
569
+ needs: []
570
+ retry: *a2
571
+ interruptible: true
572
+ allow_failure: true
573
+ 'www ๐Ÿš€ Deploy | review ':
574
+ stage: deploy review
575
+ image: path/to/docker/gcloud:the-version
576
+ variables:
577
+ KUBERNETES_CPU_REQUEST: '0.22'
578
+ KUBERNETES_MEMORY_REQUEST: 200Mi
579
+ KUBERNETES_MEMORY_LIMIT: 400Mi
580
+ script:
581
+ - collapseable_section_start "injectvars" "Injecting variables"
582
+ - export ENV_SHORT="review"
583
+ - export APP_DIR="www"
584
+ - export ENV_TYPE="review"
585
+ - export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
586
+ - export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
587
+ - export BUILD_INFO_CURRENT_VERSION="$(tag=$(git ls-remote origin "refs/tags/v*[0-9]" 2>/dev/null | cut -f 2- | sort -V | tail -1 | sed 's/refs\\/tags\\/v//'); [ -z "$tag" ] && echo "0.0.0" || echo "$tag")"
588
+ - export HOSTNAME="$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-www-$CL_review_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
589
+ - export ROOT_URL="https://$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-www-$CL_review_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
590
+ - export HOSTNAME_INTERNAL="$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-www-$CL_review_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
591
+ - export ROOT_URL_INTERNAL="https://$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-www-$CL_review_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
592
+ - export DEPLOY_CLOUD_RUN_PROJECT_ID="asdf"
593
+ - export DEPLOY_CLOUD_RUN_REGION="asia-east1"
594
+ - export GCLOUD_DEPLOY_credentialsKey="$CL_review_www_GCLOUD_DEPLOY_credentialsKey"
595
+ - export GCLOUD_RUN_canonicalHostSuffix="$CL_review_www_GCLOUD_RUN_canonicalHostSuffix"
596
+ - export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOSTNAME\\",\\"ROOT_URL\\",\\"HOSTNAME_INTERNAL\\",\\"ROOT_URL_INTERNAL\\",\\"DEPLOY_CLOUD_RUN_PROJECT_ID\\",\\"DEPLOY_CLOUD_RUN_REGION\\",\\"GCLOUD_DEPLOY_credentialsKey\\",\\"GCLOUD_RUN_canonicalHostSuffix\\"]"
597
+ - export DOCKER_REGISTRY="asia-east1-docker.pkg.dev"
598
+ - export DOCKER_IMAGE="asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/review/www/$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })"
599
+ - export DOCKER_CACHE_IMAGE="asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/caches/www"
600
+ - export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"
601
+ - export CLOUDSDK_CORE_DISABLE_PROMPTS="1"
602
+ - collapseable_section_end "injectvars"
603
+ - collapseable_section_start "prepare" "Prepare..."
604
+ - gcloud auth activate-service-account --key-file=<(echo "$CL_review_www_GCLOUD_DEPLOY_credentialsKey")
605
+ - export GCLOUD_PROJECT_NUMBER=$(gcloud projects describe asdf --format="value(projectNumber)")
606
+ - 'echo "GCLOUD_PROJECT_NUMBER: $GCLOUD_PROJECT_NUMBER"'
607
+ - collapseable_section_end "prepare"
608
+ - collapseable_section_start "writeenvvars" "Write env vars to file"
609
+ - |
610
+ cat > ____envvars.yaml <<EOF
611
+ ENV_SHORT: |-
612
+ review
613
+ APP_DIR: |-
614
+ www
615
+ ENV_TYPE: |-
616
+ review
617
+ BUILD_INFO_BUILD_ID: |-
618
+ $(printf %s "$(git describe --tags 2>/dev/null || git rev-parse HEAD)" | sed '1!s/^/ /')
619
+ BUILD_INFO_BUILD_TIME: |-
620
+ $(printf %s "$CI_JOB_STARTED_AT" | sed '1!s/^/ /')
621
+ BUILD_INFO_CURRENT_VERSION: |-
622
+ $(printf %s "$(tag=$(git ls-remote origin "refs/tags/v*[0-9]" 2>/dev/null | cut -f 2- | sort -V | tail -1 | sed 's/refs\\/tags\\/v//'); [ -z "$tag" ] && echo "0.0.0" || echo "$tag")" | sed '1!s/^/ /')
623
+ HOSTNAME: |-
624
+ $(printf %s "$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-www-$CL_review_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
625
+ ROOT_URL: |-
626
+ $(printf %s "https://$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-www-$CL_review_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
627
+ HOSTNAME_INTERNAL: |-
628
+ $(printf %s "$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-www-$CL_review_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
629
+ ROOT_URL_INTERNAL: |-
630
+ $(printf %s "https://$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-www-$CL_review_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
631
+ DEPLOY_CLOUD_RUN_PROJECT_ID: |-
632
+ asdf
633
+ DEPLOY_CLOUD_RUN_REGION: |-
634
+ asia-east1
635
+ GCLOUD_RUN_canonicalHostSuffix: |-
636
+ $(printf %s "$CL_review_www_GCLOUD_RUN_canonicalHostSuffix" | sed '1!s/^/ /')
637
+ _ALL_ENV_VAR_KEYS: |-
638
+ ["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOSTNAME","ROOT_URL","HOSTNAME_INTERNAL","ROOT_URL_INTERNAL","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]
639
+
640
+ EOF
641
+ - collapseable_section_end "writeenvvars"
642
+ - collapseable_section_start "deploy" "Deploy to cloud run"
643
+ - gcloud run deploy $(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-www" | awk '{print tolower($0)}') --command="" --image=asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/review/www/$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }):$DOCKER_IMAGE_TAG --project=asdf --region=asia-east1 --labels=customer-name=pan,component-name=www,app-name=test-app,env-type=review,env-name=review,build-type=custom,cloud-run-service-name=$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-www" | awk '{print tolower($0)}') --env-vars-file=____envvars.yaml --min-instances=0 --max-instances=100 --cpu-throttling --allow-unauthenticated --ingress=all --cpu-boost
644
+ - collapseable_section_end "deploy"
645
+ - collapseable_section_start "cleanup" "Cleanup"
646
+ - gcloud run revisions list --project=asdf --region=asia-east1 --service=$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-www" | awk '{print tolower($0)}') --limit=unlimited --sort-by=metadata.creationTimestamp --format="value(name)" --filter='(status.conditions.status=False OR status.conditions.status=Unknown)' | while read -r revisionname; do gcloud run revisions delete --project=asdf --region=asia-east1 --quiet $revisionname ; done
647
+ - gcloud artifacts docker images list asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/review/www/$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }) --sort-by=~CREATE_TIME --format="value(version)" | tail -n +2 | while read -r version; do gcloud artifacts docker images delete asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/review/www/$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })@$version --quiet --delete-tags; done
648
+ - gcloud artifacts docker images list asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/caches/www --sort-by=~CREATE_TIME --format="value(version)" | tail -n +2 | while read -r version; do gcloud artifacts docker images delete asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/caches/www@$version --quiet --delete-tags; done
649
+ - set +e
650
+ - gcloud artifacts docker images delete asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/review/www --quiet --delete-tags
651
+ - set -e
652
+ - collapseable_section_end "cleanup"
653
+ - echo 'Uploading SBOM to Dependency Track'
654
+ - /dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/www" "https://$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-www-$CL_review_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" "__sbom.json" vex.json || true
655
+ - echo "CL_GITLAB_ENVIRONMENT_URL=https://$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-www-$CL_review_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" >> gitlab_environment.env
656
+ environment:
657
+ name: review/$CI_COMMIT_REF_NAME/www
658
+ url: $CL_GITLAB_ENVIRONMENT_URL
659
+ on_stop: 'www ๐Ÿ›‘ Stop โš ๏ธ | review '
660
+ auto_stop_in: 1 week
661
+ artifacts:
662
+ reports:
663
+ dotenv: gitlab_environment.env
664
+ rules:
665
+ - when: on_success
666
+ if: $CI_MERGE_REQUEST_ID
667
+ needs:
668
+ - job: www ๐Ÿ‘ฎ lint
669
+ artifacts: false
670
+ - job: 'www ๐Ÿ”จ app | review '
671
+ artifacts: false
672
+ - job: 'www ๐Ÿ”จ docker | review '
673
+ artifacts: false
674
+ - job: www ๐Ÿงช test
675
+ artifacts: false
676
+ - job: 'www ๐Ÿงพ sbom | review '
677
+ artifacts: true
678
+ - job: www ๐Ÿ›ก audit
679
+ artifacts: false
680
+ retry: *a2
681
+ interruptible: true
682
+ allow_failure: false
683
+ 'www ๐Ÿ›‘ Stop โš ๏ธ | review ':
684
+ stage: stop review
685
+ image: path/to/docker/gcloud:the-version
686
+ variables:
687
+ KUBERNETES_CPU_REQUEST: '0.22'
688
+ KUBERNETES_MEMORY_REQUEST: 200Mi
689
+ KUBERNETES_MEMORY_LIMIT: 400Mi
690
+ GIT_STRATEGY: none
691
+ script:
692
+ - collapseable_section_start "injectvars" "Injecting variables"
693
+ - export CLOUDSDK_CORE_DISABLE_PROMPTS="1"
694
+ - collapseable_section_end "injectvars"
695
+ - set +e
696
+ - gcloud auth activate-service-account --key-file=<(echo "$CL_review_www_GCLOUD_DEPLOY_credentialsKey")
697
+ - gcloud run services delete $(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-www" | awk '{print tolower($0)}') --project=asdf --region=asia-east1
698
+ - gcloud artifacts docker images delete asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/review/www/$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }) --quiet --delete-tags
699
+ - gcloud artifacts docker images list asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/caches/www --sort-by=~CREATE_TIME --format="value(version)" | tail -n +2 | while read -r version; do gcloud artifacts docker images delete asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/caches/www@$version --quiet --delete-tags; done
700
+ - set +e
701
+ - gcloud artifacts docker images delete asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/review/www --quiet --delete-tags
702
+ - set -e
703
+ - echo 'Disabling component in Dependency Track'
704
+ - /dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" disable "pan-test-app/www" "https://$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-www-$CL_review_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" || true
705
+ - set -e
706
+ - echo "CL_GITLAB_ENVIRONMENT_URL=https://$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-www-$CL_review_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" >> gitlab_environment.env
707
+ environment:
708
+ name: review/$CI_COMMIT_REF_NAME/www
709
+ url: $CL_GITLAB_ENVIRONMENT_URL
710
+ action: stop
711
+ artifacts:
712
+ reports:
713
+ dotenv: gitlab_environment.env
714
+ rules:
715
+ - if: $CI_COMMIT_BRANCH =~ /^[0-9]+\\.([0-9]+|x)\\.x$/
716
+ when: on_success
717
+ - when: manual
718
+ if: $CI_MERGE_REQUEST_ID
719
+ needs: []
720
+ retry: *a2
721
+ interruptible: true
722
+ allow_failure: true
723
+ 'www ๐Ÿ”จ app | stage ':
724
+ stage: build
725
+ image: foo
726
+ services:
727
+ - name: job-service-1
728
+ command:
729
+ - --some-command=some-value
730
+ variables:
731
+ KUBERNETES_CPU_REQUEST: '0.45'
732
+ KUBERNETES_MEMORY_REQUEST: 1Gi
733
+ KUBERNETES_MEMORY_LIMIT: 4Gi
734
+ script:
735
+ - collapseable_section_start "injectvars" "Injecting variables"
736
+ - export ENV_SHORT="stage"
737
+ - export APP_DIR="www"
738
+ - export ENV_TYPE="stage"
739
+ - export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
740
+ - export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
741
+ - export BUILD_INFO_CURRENT_VERSION="$(tag=$(git ls-remote origin "refs/tags/v*[0-9]" 2>/dev/null | cut -f 2- | sort -V | tail -1 | sed 's/refs\\/tags\\/v//'); [ -z "$tag" ] && echo "0.0.0" || echo "$tag")"
742
+ - export HOSTNAME="$(printf %s "pan-test-app-stage-www-$CL_stage_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
743
+ - export ROOT_URL="https://$(printf %s "pan-test-app-stage-www-$CL_stage_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
744
+ - export HOSTNAME_INTERNAL="$(printf %s "pan-test-app-stage-www-$CL_stage_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
745
+ - export ROOT_URL_INTERNAL="https://$(printf %s "pan-test-app-stage-www-$CL_stage_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
746
+ - export DEPLOY_CLOUD_RUN_PROJECT_ID="asdf"
747
+ - export DEPLOY_CLOUD_RUN_REGION="asia-east1"
748
+ - export GCLOUD_DEPLOY_credentialsKey="$CL_stage_www_GCLOUD_DEPLOY_credentialsKey"
749
+ - export GCLOUD_RUN_canonicalHostSuffix="$CL_stage_www_GCLOUD_RUN_canonicalHostSuffix"
750
+ - export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOSTNAME\\",\\"ROOT_URL\\",\\"HOSTNAME_INTERNAL\\",\\"ROOT_URL_INTERNAL\\",\\"DEPLOY_CLOUD_RUN_PROJECT_ID\\",\\"DEPLOY_CLOUD_RUN_REGION\\",\\"GCLOUD_DEPLOY_credentialsKey\\",\\"GCLOUD_RUN_canonicalHostSuffix\\"]"
751
+ - collapseable_section_end "injectvars"
752
+ - collapseable_section_start "write-dotenv-www" "write dot env for www"
753
+ - |-
754
+ cat <<EOF > www/.env
755
+ ENV_SHORT=stage
756
+ APP_DIR=www
757
+ ENV_TYPE=stage
758
+ HOSTNAME=$(printf %s "$(printf %s "pan-test-app-stage-www-$CL_stage_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | escapeForDotEnv)
759
+ ROOT_URL=$(printf %s "https://$(printf %s "pan-test-app-stage-www-$CL_stage_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | escapeForDotEnv)
760
+ HOSTNAME_INTERNAL=$(printf %s "$(printf %s "pan-test-app-stage-www-$CL_stage_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | escapeForDotEnv)
761
+ ROOT_URL_INTERNAL=$(printf %s "https://$(printf %s "pan-test-app-stage-www-$CL_stage_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | escapeForDotEnv)
762
+ DEPLOY_CLOUD_RUN_PROJECT_ID=asdf
763
+ DEPLOY_CLOUD_RUN_REGION=asia-east1
764
+ GCLOUD_DEPLOY_credentialsKey=$(printf %s "$CL_stage_www_GCLOUD_DEPLOY_credentialsKey" | escapeForDotEnv)
765
+ GCLOUD_RUN_canonicalHostSuffix=$(printf %s "$CL_stage_www_GCLOUD_RUN_canonicalHostSuffix" | escapeForDotEnv)
766
+ _ALL_ENV_VAR_KEYS=["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOSTNAME","ROOT_URL","HOSTNAME_INTERNAL","ROOT_URL_INTERNAL","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]
767
+ EOF
768
+ - collapseable_section_end "write-dotenv-www"
769
+ - echo '{"id":"$(git describe --tags 2>/dev/null || git rev-parse HEAD)","time":"$CI_JOB_STARTED_AT"}' > www/__build_info.json
770
+ - collapseable_section_start "nodeinstall" "Ensure node version"
771
+ - if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
772
+ - if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
773
+ - collapseable_section_end "nodeinstall"
774
+ - cd www
775
+ artifacts:
776
+ paths:
777
+ - www/__build_info.json
778
+ - www/dist
779
+ exclude:
780
+ - www/.env
781
+ expire_in: 1 day
782
+ when: always
783
+ reports: {}
784
+ rules:
785
+ - if: $CI_COMMIT_TAG
786
+ needs: []
787
+ retry: *a2
788
+ interruptible: true
789
+ 'www ๐Ÿ”จ docker | stage ':
790
+ stage: build
791
+ image: path/to/docker/docker-build:the-version
792
+ services:
793
+ - name: docker:24.0.6-dind
794
+ command:
795
+ - --tls=false
796
+ - --registry-mirror=https://mirror.gcr.io
797
+ variables:
798
+ DOCKER_HOST: tcp://0.0.0.0:2375
799
+ DOCKER_TLS_CERTDIR: ''
800
+ DOCKER_DRIVER: overlay2
801
+ DOCKER_BUILDKIT: '1'
802
+ KUBERNETES_CPU_REQUEST: '0.45'
803
+ KUBERNETES_MEMORY_REQUEST: 1Gi
804
+ KUBERNETES_MEMORY_LIMIT: 2Gi
805
+ script:
806
+ - collapseable_section_start "injectvars" "Injecting variables"
807
+ - export APP_DIR="www"
808
+ - export DOCKER_BUILD_CONTEXT="."
809
+ - export DOCKER_REGISTRY="asia-east1-docker.pkg.dev"
810
+ - export DOCKER_IMAGE="asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/stage/www"
811
+ - export DOCKER_CACHE_IMAGE="asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/caches/www"
812
+ - export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"
813
+ - collapseable_section_end "injectvars"
814
+ - ensureNginxDockerfile
815
+ - collapseable_section_start "docker-login" "Docker Login"
816
+ - gcloud auth activate-service-account --key-file=<(echo "$CL_stage_www_GCLOUD_DEPLOY_credentialsKey")
817
+ - gcloud auth configure-docker asia-east1-docker.pkg.dev
818
+ - collapseable_section_end "docker-login"
819
+ - collapseable_section_start "docker-build" "Docker build"
820
+ - docker build --network host --cache-from $DOCKER_CACHE_IMAGE --tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG -f $APP_DIR/Dockerfile $DOCKER_BUILD_CONTEXT --build-arg BUILDKIT_INLINE_CACHE=1
821
+ - collapseable_section_end "docker-build"
822
+ - collapseable_section_start "docker-push" "Docker push and tag"
823
+ - docker push $DOCKER_IMAGE:$DOCKER_IMAGE_TAG
824
+ - docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG $DOCKER_CACHE_IMAGE
825
+ - docker push $DOCKER_CACHE_IMAGE
826
+ - collapseable_section_end "docker-push"
827
+ rules:
828
+ - if: $CI_COMMIT_TAG
829
+ needs:
830
+ - 'www ๐Ÿ”จ app | stage '
831
+ retry: *a2
832
+ interruptible: true
833
+ 'www ๐Ÿงพ sbom | stage ':
834
+ stage: build
835
+ image: aquasec/trivy:0.38.3
836
+ variables: {}
837
+ script:
838
+ - collapseable_section_start "injectvars" "Injecting variables"
839
+ - collapseable_section_end "injectvars"
840
+ - trivy fs --quiet --format cyclonedx --output "__sbom.json" www
841
+ artifacts:
842
+ paths:
843
+ - __sbom.json
844
+ rules:
845
+ - if: $CI_COMMIT_TAG
846
+ needs: []
847
+ retry: *a2
848
+ interruptible: true
849
+ allow_failure: true
850
+ 'www ๐Ÿš€ Deploy | stage ':
851
+ stage: deploy stage
852
+ image: path/to/docker/gcloud:the-version
853
+ variables:
854
+ KUBERNETES_CPU_REQUEST: '0.22'
855
+ KUBERNETES_MEMORY_REQUEST: 200Mi
856
+ KUBERNETES_MEMORY_LIMIT: 400Mi
857
+ script:
858
+ - collapseable_section_start "injectvars" "Injecting variables"
859
+ - export ENV_SHORT="stage"
860
+ - export APP_DIR="www"
861
+ - export ENV_TYPE="stage"
862
+ - export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
863
+ - export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
864
+ - export BUILD_INFO_CURRENT_VERSION="$(tag=$(git ls-remote origin "refs/tags/v*[0-9]" 2>/dev/null | cut -f 2- | sort -V | tail -1 | sed 's/refs\\/tags\\/v//'); [ -z "$tag" ] && echo "0.0.0" || echo "$tag")"
865
+ - export HOSTNAME="$(printf %s "pan-test-app-stage-www-$CL_stage_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
866
+ - export ROOT_URL="https://$(printf %s "pan-test-app-stage-www-$CL_stage_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
867
+ - export HOSTNAME_INTERNAL="$(printf %s "pan-test-app-stage-www-$CL_stage_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
868
+ - export ROOT_URL_INTERNAL="https://$(printf %s "pan-test-app-stage-www-$CL_stage_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
869
+ - export DEPLOY_CLOUD_RUN_PROJECT_ID="asdf"
870
+ - export DEPLOY_CLOUD_RUN_REGION="asia-east1"
871
+ - export GCLOUD_DEPLOY_credentialsKey="$CL_stage_www_GCLOUD_DEPLOY_credentialsKey"
872
+ - export GCLOUD_RUN_canonicalHostSuffix="$CL_stage_www_GCLOUD_RUN_canonicalHostSuffix"
873
+ - export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOSTNAME\\",\\"ROOT_URL\\",\\"HOSTNAME_INTERNAL\\",\\"ROOT_URL_INTERNAL\\",\\"DEPLOY_CLOUD_RUN_PROJECT_ID\\",\\"DEPLOY_CLOUD_RUN_REGION\\",\\"GCLOUD_DEPLOY_credentialsKey\\",\\"GCLOUD_RUN_canonicalHostSuffix\\"]"
874
+ - export DOCKER_REGISTRY="asia-east1-docker.pkg.dev"
875
+ - export DOCKER_IMAGE="asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/stage/www"
876
+ - export DOCKER_CACHE_IMAGE="asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/caches/www"
877
+ - export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"
878
+ - export CLOUDSDK_CORE_DISABLE_PROMPTS="1"
879
+ - collapseable_section_end "injectvars"
880
+ - collapseable_section_start "prepare" "Prepare..."
881
+ - gcloud auth activate-service-account --key-file=<(echo "$CL_stage_www_GCLOUD_DEPLOY_credentialsKey")
882
+ - export GCLOUD_PROJECT_NUMBER=$(gcloud projects describe asdf --format="value(projectNumber)")
883
+ - 'echo "GCLOUD_PROJECT_NUMBER: $GCLOUD_PROJECT_NUMBER"'
884
+ - collapseable_section_end "prepare"
885
+ - collapseable_section_start "writeenvvars" "Write env vars to file"
886
+ - |
887
+ cat > ____envvars.yaml <<EOF
888
+ ENV_SHORT: |-
889
+ stage
890
+ APP_DIR: |-
891
+ www
892
+ ENV_TYPE: |-
893
+ stage
894
+ BUILD_INFO_BUILD_ID: |-
895
+ $(printf %s "$(git describe --tags 2>/dev/null || git rev-parse HEAD)" | sed '1!s/^/ /')
896
+ BUILD_INFO_BUILD_TIME: |-
897
+ $(printf %s "$CI_JOB_STARTED_AT" | sed '1!s/^/ /')
898
+ BUILD_INFO_CURRENT_VERSION: |-
899
+ $(printf %s "$(tag=$(git ls-remote origin "refs/tags/v*[0-9]" 2>/dev/null | cut -f 2- | sort -V | tail -1 | sed 's/refs\\/tags\\/v//'); [ -z "$tag" ] && echo "0.0.0" || echo "$tag")" | sed '1!s/^/ /')
900
+ HOSTNAME: |-
901
+ $(printf %s "$(printf %s "pan-test-app-stage-www-$CL_stage_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
902
+ ROOT_URL: |-
903
+ $(printf %s "https://$(printf %s "pan-test-app-stage-www-$CL_stage_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
904
+ HOSTNAME_INTERNAL: |-
905
+ $(printf %s "$(printf %s "pan-test-app-stage-www-$CL_stage_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
906
+ ROOT_URL_INTERNAL: |-
907
+ $(printf %s "https://$(printf %s "pan-test-app-stage-www-$CL_stage_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
908
+ DEPLOY_CLOUD_RUN_PROJECT_ID: |-
909
+ asdf
910
+ DEPLOY_CLOUD_RUN_REGION: |-
911
+ asia-east1
912
+ GCLOUD_RUN_canonicalHostSuffix: |-
913
+ $(printf %s "$CL_stage_www_GCLOUD_RUN_canonicalHostSuffix" | sed '1!s/^/ /')
914
+ _ALL_ENV_VAR_KEYS: |-
915
+ ["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOSTNAME","ROOT_URL","HOSTNAME_INTERNAL","ROOT_URL_INTERNAL","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]
916
+
917
+ EOF
918
+ - collapseable_section_end "writeenvvars"
919
+ - collapseable_section_start "deploy" "Deploy to cloud run"
920
+ - gcloud run deploy pan-test-app-stage-www --command="" --image=asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/stage/www:$DOCKER_IMAGE_TAG --project=asdf --region=asia-east1 --labels=customer-name=pan,component-name=www,app-name=test-app,env-type=stage,env-name=stage,build-type=custom,cloud-run-service-name=pan-test-app-stage-www --env-vars-file=____envvars.yaml --min-instances=0 --max-instances=100 --cpu-throttling --allow-unauthenticated --ingress=all --cpu-boost
921
+ - collapseable_section_end "deploy"
922
+ - collapseable_section_start "cleanup" "Cleanup"
923
+ - gcloud run revisions list --project=asdf --region=asia-east1 --service=pan-test-app-stage-www --limit=unlimited --sort-by=metadata.creationTimestamp --format="value(name)" --filter='(status.conditions.status=False OR status.conditions.status=Unknown)' | while read -r revisionname; do gcloud run revisions delete --project=asdf --region=asia-east1 --quiet $revisionname ; done
924
+ - gcloud artifacts docker images list asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/stage/www --sort-by=~CREATE_TIME --format="value(version)" | tail -n +2 | while read -r version; do gcloud artifacts docker images delete asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/stage/www@$version --quiet --delete-tags; done
925
+ - gcloud artifacts docker images list asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/caches/www --sort-by=~CREATE_TIME --format="value(version)" | tail -n +2 | while read -r version; do gcloud artifacts docker images delete asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/caches/www@$version --quiet --delete-tags; done
926
+ - collapseable_section_end "cleanup"
927
+ - echo 'Uploading SBOM to Dependency Track'
928
+ - /dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/www" "https://$(printf %s "pan-test-app-stage-www-$CL_stage_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" "__sbom.json" vex.json || true
929
+ - echo "CL_GITLAB_ENVIRONMENT_URL=https://$(printf %s "pan-test-app-stage-www-$CL_stage_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" >> gitlab_environment.env
930
+ environment:
931
+ name: stage/www
932
+ url: $CL_GITLAB_ENVIRONMENT_URL
933
+ on_stop: 'www ๐Ÿ›‘ Stop โš ๏ธ | stage '
934
+ artifacts:
935
+ reports:
936
+ dotenv: gitlab_environment.env
937
+ rules:
938
+ - when: on_success
939
+ if: $CI_COMMIT_TAG
940
+ needs:
941
+ - job: 'www ๐Ÿ”จ app | stage '
942
+ artifacts: false
943
+ - job: 'www ๐Ÿ”จ docker | stage '
944
+ artifacts: false
945
+ - job: 'www ๐Ÿงพ sbom | stage '
946
+ artifacts: true
947
+ retry: *a2
948
+ interruptible: true
949
+ allow_failure: false
950
+ 'www ๐Ÿ›‘ Stop โš ๏ธ | stage ':
951
+ stage: stop stage
952
+ image: path/to/docker/gcloud:the-version
953
+ variables:
954
+ KUBERNETES_CPU_REQUEST: '0.22'
955
+ KUBERNETES_MEMORY_REQUEST: 200Mi
956
+ KUBERNETES_MEMORY_LIMIT: 400Mi
957
+ GIT_STRATEGY: none
958
+ script:
959
+ - collapseable_section_start "injectvars" "Injecting variables"
960
+ - export CLOUDSDK_CORE_DISABLE_PROMPTS="1"
961
+ - collapseable_section_end "injectvars"
962
+ - set +e
963
+ - gcloud auth activate-service-account --key-file=<(echo "$CL_stage_www_GCLOUD_DEPLOY_credentialsKey")
964
+ - gcloud run services delete pan-test-app-stage-www --project=asdf --region=asia-east1
965
+ - gcloud artifacts docker images delete asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/stage/www --quiet --delete-tags
966
+ - gcloud artifacts docker images list asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/caches/www --sort-by=~CREATE_TIME --format="value(version)" | tail -n +2 | while read -r version; do gcloud artifacts docker images delete asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/caches/www@$version --quiet --delete-tags; done
967
+ - echo 'Disabling component in Dependency Track'
968
+ - /dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" disable "pan-test-app/www" "https://$(printf %s "pan-test-app-stage-www-$CL_stage_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" || true
969
+ - set -e
970
+ - echo "CL_GITLAB_ENVIRONMENT_URL=https://$(printf %s "pan-test-app-stage-www-$CL_stage_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" >> gitlab_environment.env
971
+ environment:
972
+ name: stage/www
973
+ url: $CL_GITLAB_ENVIRONMENT_URL
974
+ action: stop
975
+ artifacts:
976
+ reports:
977
+ dotenv: gitlab_environment.env
978
+ rules:
979
+ - if: $CI_COMMIT_BRANCH =~ /^[0-9]+\\.([0-9]+|x)\\.x$/
980
+ when: on_success
981
+ - when: manual
982
+ if: $CI_COMMIT_TAG
983
+ needs: []
984
+ retry: *a2
985
+ interruptible: true
986
+ allow_failure: true
987
+ 'www ๐Ÿ”จ app | prod ':
988
+ stage: build
989
+ image: foo
990
+ services:
991
+ - name: job-service-1
992
+ command:
993
+ - --some-command=some-value
994
+ variables:
995
+ KUBERNETES_CPU_REQUEST: '0.45'
996
+ KUBERNETES_MEMORY_REQUEST: 1Gi
997
+ KUBERNETES_MEMORY_LIMIT: 4Gi
998
+ script:
999
+ - collapseable_section_start "injectvars" "Injecting variables"
1000
+ - export ENV_SHORT="prod"
1001
+ - export APP_DIR="www"
1002
+ - export ENV_TYPE="prod"
1003
+ - export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
1004
+ - export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
1005
+ - export BUILD_INFO_CURRENT_VERSION="$(tag=$(git ls-remote origin "refs/tags/v*[0-9]" 2>/dev/null | cut -f 2- | sort -V | tail -1 | sed 's/refs\\/tags\\/v//'); [ -z "$tag" ] && echo "0.0.0" || echo "$tag")"
1006
+ - export HOSTNAME="$(printf %s "pan-test-app-prod-www-$CL_prod_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
1007
+ - export ROOT_URL="https://$(printf %s "pan-test-app-prod-www-$CL_prod_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
1008
+ - export HOSTNAME_INTERNAL="$(printf %s "pan-test-app-prod-www-$CL_prod_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
1009
+ - export ROOT_URL_INTERNAL="https://$(printf %s "pan-test-app-prod-www-$CL_prod_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
1010
+ - export DEPLOY_CLOUD_RUN_PROJECT_ID="asdf"
1011
+ - export DEPLOY_CLOUD_RUN_REGION="asia-east1"
1012
+ - export GCLOUD_DEPLOY_credentialsKey="$CL_prod_www_GCLOUD_DEPLOY_credentialsKey"
1013
+ - export GCLOUD_RUN_canonicalHostSuffix="$CL_prod_www_GCLOUD_RUN_canonicalHostSuffix"
1014
+ - export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOSTNAME\\",\\"ROOT_URL\\",\\"HOSTNAME_INTERNAL\\",\\"ROOT_URL_INTERNAL\\",\\"DEPLOY_CLOUD_RUN_PROJECT_ID\\",\\"DEPLOY_CLOUD_RUN_REGION\\",\\"GCLOUD_DEPLOY_credentialsKey\\",\\"GCLOUD_RUN_canonicalHostSuffix\\"]"
1015
+ - collapseable_section_end "injectvars"
1016
+ - collapseable_section_start "write-dotenv-www" "write dot env for www"
1017
+ - |-
1018
+ cat <<EOF > www/.env
1019
+ ENV_SHORT=prod
1020
+ APP_DIR=www
1021
+ ENV_TYPE=prod
1022
+ HOSTNAME=$(printf %s "$(printf %s "pan-test-app-prod-www-$CL_prod_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | escapeForDotEnv)
1023
+ ROOT_URL=$(printf %s "https://$(printf %s "pan-test-app-prod-www-$CL_prod_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | escapeForDotEnv)
1024
+ HOSTNAME_INTERNAL=$(printf %s "$(printf %s "pan-test-app-prod-www-$CL_prod_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | escapeForDotEnv)
1025
+ ROOT_URL_INTERNAL=$(printf %s "https://$(printf %s "pan-test-app-prod-www-$CL_prod_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | escapeForDotEnv)
1026
+ DEPLOY_CLOUD_RUN_PROJECT_ID=asdf
1027
+ DEPLOY_CLOUD_RUN_REGION=asia-east1
1028
+ GCLOUD_DEPLOY_credentialsKey=$(printf %s "$CL_prod_www_GCLOUD_DEPLOY_credentialsKey" | escapeForDotEnv)
1029
+ GCLOUD_RUN_canonicalHostSuffix=$(printf %s "$CL_prod_www_GCLOUD_RUN_canonicalHostSuffix" | escapeForDotEnv)
1030
+ _ALL_ENV_VAR_KEYS=["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOSTNAME","ROOT_URL","HOSTNAME_INTERNAL","ROOT_URL_INTERNAL","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]
1031
+ EOF
1032
+ - collapseable_section_end "write-dotenv-www"
1033
+ - echo '{"id":"$(git describe --tags 2>/dev/null || git rev-parse HEAD)","time":"$CI_JOB_STARTED_AT"}' > www/__build_info.json
1034
+ - collapseable_section_start "nodeinstall" "Ensure node version"
1035
+ - if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
1036
+ - if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
1037
+ - collapseable_section_end "nodeinstall"
1038
+ - cd www
1039
+ artifacts:
1040
+ paths:
1041
+ - www/__build_info.json
1042
+ - www/dist
1043
+ exclude:
1044
+ - www/.env
1045
+ expire_in: 1 day
1046
+ when: always
1047
+ reports: {}
1048
+ rules:
1049
+ - if: $CI_COMMIT_TAG
1050
+ needs: []
1051
+ retry: *a2
1052
+ interruptible: true
1053
+ 'www ๐Ÿ”จ docker | prod ':
1054
+ stage: build
1055
+ image: path/to/docker/docker-build:the-version
1056
+ services:
1057
+ - name: docker:24.0.6-dind
1058
+ command:
1059
+ - --tls=false
1060
+ - --registry-mirror=https://mirror.gcr.io
1061
+ variables:
1062
+ DOCKER_HOST: tcp://0.0.0.0:2375
1063
+ DOCKER_TLS_CERTDIR: ''
1064
+ DOCKER_DRIVER: overlay2
1065
+ DOCKER_BUILDKIT: '1'
1066
+ KUBERNETES_CPU_REQUEST: '0.45'
1067
+ KUBERNETES_MEMORY_REQUEST: 1Gi
1068
+ KUBERNETES_MEMORY_LIMIT: 2Gi
1069
+ script:
1070
+ - collapseable_section_start "injectvars" "Injecting variables"
1071
+ - export APP_DIR="www"
1072
+ - export DOCKER_BUILD_CONTEXT="."
1073
+ - export DOCKER_REGISTRY="asia-east1-docker.pkg.dev"
1074
+ - export DOCKER_IMAGE="asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/prod/www"
1075
+ - export DOCKER_CACHE_IMAGE="asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/caches/www"
1076
+ - export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"
1077
+ - collapseable_section_end "injectvars"
1078
+ - ensureNginxDockerfile
1079
+ - collapseable_section_start "docker-login" "Docker Login"
1080
+ - gcloud auth activate-service-account --key-file=<(echo "$CL_prod_www_GCLOUD_DEPLOY_credentialsKey")
1081
+ - gcloud auth configure-docker asia-east1-docker.pkg.dev
1082
+ - collapseable_section_end "docker-login"
1083
+ - collapseable_section_start "docker-build" "Docker build"
1084
+ - docker build --network host --cache-from $DOCKER_CACHE_IMAGE --tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG -f $APP_DIR/Dockerfile $DOCKER_BUILD_CONTEXT --build-arg BUILDKIT_INLINE_CACHE=1
1085
+ - collapseable_section_end "docker-build"
1086
+ - collapseable_section_start "docker-push" "Docker push and tag"
1087
+ - docker push $DOCKER_IMAGE:$DOCKER_IMAGE_TAG
1088
+ - docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG $DOCKER_CACHE_IMAGE
1089
+ - docker push $DOCKER_CACHE_IMAGE
1090
+ - collapseable_section_end "docker-push"
1091
+ rules:
1092
+ - if: $CI_COMMIT_TAG
1093
+ needs:
1094
+ - 'www ๐Ÿ”จ app | prod '
1095
+ retry: *a2
1096
+ interruptible: true
1097
+ 'www ๐Ÿงพ sbom | prod ':
1098
+ stage: build
1099
+ image: aquasec/trivy:0.38.3
1100
+ variables: {}
1101
+ script:
1102
+ - collapseable_section_start "injectvars" "Injecting variables"
1103
+ - collapseable_section_end "injectvars"
1104
+ - trivy fs --quiet --format cyclonedx --output "__sbom.json" www
1105
+ artifacts:
1106
+ paths:
1107
+ - __sbom.json
1108
+ rules:
1109
+ - if: $CI_COMMIT_TAG
1110
+ needs: []
1111
+ retry: *a2
1112
+ interruptible: true
1113
+ allow_failure: true
1114
+ 'www ๐Ÿš€ Deploy | prod ':
1115
+ stage: deploy prod
1116
+ image: path/to/docker/gcloud:the-version
1117
+ variables:
1118
+ KUBERNETES_CPU_REQUEST: '0.22'
1119
+ KUBERNETES_MEMORY_REQUEST: 200Mi
1120
+ KUBERNETES_MEMORY_LIMIT: 400Mi
1121
+ script:
1122
+ - collapseable_section_start "injectvars" "Injecting variables"
1123
+ - export ENV_SHORT="prod"
1124
+ - export APP_DIR="www"
1125
+ - export ENV_TYPE="prod"
1126
+ - export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
1127
+ - export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
1128
+ - export BUILD_INFO_CURRENT_VERSION="$(tag=$(git ls-remote origin "refs/tags/v*[0-9]" 2>/dev/null | cut -f 2- | sort -V | tail -1 | sed 's/refs\\/tags\\/v//'); [ -z "$tag" ] && echo "0.0.0" || echo "$tag")"
1129
+ - export HOSTNAME="$(printf %s "pan-test-app-prod-www-$CL_prod_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
1130
+ - export ROOT_URL="https://$(printf %s "pan-test-app-prod-www-$CL_prod_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
1131
+ - export HOSTNAME_INTERNAL="$(printf %s "pan-test-app-prod-www-$CL_prod_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
1132
+ - export ROOT_URL_INTERNAL="https://$(printf %s "pan-test-app-prod-www-$CL_prod_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
1133
+ - export DEPLOY_CLOUD_RUN_PROJECT_ID="asdf"
1134
+ - export DEPLOY_CLOUD_RUN_REGION="asia-east1"
1135
+ - export GCLOUD_DEPLOY_credentialsKey="$CL_prod_www_GCLOUD_DEPLOY_credentialsKey"
1136
+ - export GCLOUD_RUN_canonicalHostSuffix="$CL_prod_www_GCLOUD_RUN_canonicalHostSuffix"
1137
+ - export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOSTNAME\\",\\"ROOT_URL\\",\\"HOSTNAME_INTERNAL\\",\\"ROOT_URL_INTERNAL\\",\\"DEPLOY_CLOUD_RUN_PROJECT_ID\\",\\"DEPLOY_CLOUD_RUN_REGION\\",\\"GCLOUD_DEPLOY_credentialsKey\\",\\"GCLOUD_RUN_canonicalHostSuffix\\"]"
1138
+ - export DOCKER_REGISTRY="asia-east1-docker.pkg.dev"
1139
+ - export DOCKER_IMAGE="asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/prod/www"
1140
+ - export DOCKER_CACHE_IMAGE="asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/caches/www"
1141
+ - export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"
1142
+ - export CLOUDSDK_CORE_DISABLE_PROMPTS="1"
1143
+ - collapseable_section_end "injectvars"
1144
+ - collapseable_section_start "prepare" "Prepare..."
1145
+ - gcloud auth activate-service-account --key-file=<(echo "$CL_prod_www_GCLOUD_DEPLOY_credentialsKey")
1146
+ - export GCLOUD_PROJECT_NUMBER=$(gcloud projects describe asdf --format="value(projectNumber)")
1147
+ - 'echo "GCLOUD_PROJECT_NUMBER: $GCLOUD_PROJECT_NUMBER"'
1148
+ - collapseable_section_end "prepare"
1149
+ - collapseable_section_start "writeenvvars" "Write env vars to file"
1150
+ - |
1151
+ cat > ____envvars.yaml <<EOF
1152
+ ENV_SHORT: |-
1153
+ prod
1154
+ APP_DIR: |-
1155
+ www
1156
+ ENV_TYPE: |-
1157
+ prod
1158
+ BUILD_INFO_BUILD_ID: |-
1159
+ $(printf %s "$(git describe --tags 2>/dev/null || git rev-parse HEAD)" | sed '1!s/^/ /')
1160
+ BUILD_INFO_BUILD_TIME: |-
1161
+ $(printf %s "$CI_JOB_STARTED_AT" | sed '1!s/^/ /')
1162
+ BUILD_INFO_CURRENT_VERSION: |-
1163
+ $(printf %s "$(tag=$(git ls-remote origin "refs/tags/v*[0-9]" 2>/dev/null | cut -f 2- | sort -V | tail -1 | sed 's/refs\\/tags\\/v//'); [ -z "$tag" ] && echo "0.0.0" || echo "$tag")" | sed '1!s/^/ /')
1164
+ HOSTNAME: |-
1165
+ $(printf %s "$(printf %s "pan-test-app-prod-www-$CL_prod_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
1166
+ ROOT_URL: |-
1167
+ $(printf %s "https://$(printf %s "pan-test-app-prod-www-$CL_prod_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
1168
+ HOSTNAME_INTERNAL: |-
1169
+ $(printf %s "$(printf %s "pan-test-app-prod-www-$CL_prod_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
1170
+ ROOT_URL_INTERNAL: |-
1171
+ $(printf %s "https://$(printf %s "pan-test-app-prod-www-$CL_prod_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
1172
+ DEPLOY_CLOUD_RUN_PROJECT_ID: |-
1173
+ asdf
1174
+ DEPLOY_CLOUD_RUN_REGION: |-
1175
+ asia-east1
1176
+ GCLOUD_RUN_canonicalHostSuffix: |-
1177
+ $(printf %s "$CL_prod_www_GCLOUD_RUN_canonicalHostSuffix" | sed '1!s/^/ /')
1178
+ _ALL_ENV_VAR_KEYS: |-
1179
+ ["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOSTNAME","ROOT_URL","HOSTNAME_INTERNAL","ROOT_URL_INTERNAL","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]
1180
+
1181
+ EOF
1182
+ - collapseable_section_end "writeenvvars"
1183
+ - collapseable_section_start "deploy" "Deploy to cloud run"
1184
+ - gcloud run deploy pan-test-app-prod-www --command="" --image=asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/prod/www:$DOCKER_IMAGE_TAG --project=asdf --region=asia-east1 --labels=customer-name=pan,component-name=www,app-name=test-app,env-type=prod,env-name=prod,build-type=custom,cloud-run-service-name=pan-test-app-prod-www --env-vars-file=____envvars.yaml --min-instances=0 --max-instances=100 --cpu-throttling --allow-unauthenticated --ingress=all --cpu-boost
1185
+ - collapseable_section_end "deploy"
1186
+ - collapseable_section_start "cleanup" "Cleanup"
1187
+ - gcloud run revisions list --project=asdf --region=asia-east1 --service=pan-test-app-prod-www --limit=unlimited --sort-by=metadata.creationTimestamp --format="value(name)" --filter='(status.conditions.status=False OR status.conditions.status=Unknown)' | tail -n +6 | while read -r revisionname; do gcloud run revisions delete --project=asdf --region=asia-east1 --quiet $revisionname ; done
1188
+ - gcloud artifacts docker images list asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/prod/www --sort-by=~CREATE_TIME --format="value(version)" | tail -n +7 | while read -r version; do gcloud artifacts docker images delete asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/prod/www@$version --quiet --delete-tags; done
1189
+ - gcloud artifacts docker images list asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/caches/www --sort-by=~CREATE_TIME --format="value(version)" | tail -n +2 | while read -r version; do gcloud artifacts docker images delete asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/caches/www@$version --quiet --delete-tags; done
1190
+ - collapseable_section_end "cleanup"
1191
+ - echo 'Uploading SBOM to Dependency Track'
1192
+ - /dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/www" "https://$(printf %s "pan-test-app-prod-www-$CL_prod_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" "__sbom.json" vex.json || true
1193
+ - echo "CL_GITLAB_ENVIRONMENT_URL=https://$(printf %s "pan-test-app-prod-www-$CL_prod_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" >> gitlab_environment.env
1194
+ environment:
1195
+ name: prod/www
1196
+ url: $CL_GITLAB_ENVIRONMENT_URL
1197
+ on_stop: 'www ๐Ÿ›‘ Stop โš ๏ธ | prod '
1198
+ artifacts:
1199
+ reports:
1200
+ dotenv: gitlab_environment.env
1201
+ rules:
1202
+ - when: manual
1203
+ if: $CI_COMMIT_TAG
1204
+ needs:
1205
+ - job: 'www ๐Ÿ”จ app | prod '
1206
+ artifacts: false
1207
+ - job: 'www ๐Ÿ”จ docker | prod '
1208
+ artifacts: false
1209
+ - job: 'www ๐Ÿงพ sbom | prod '
1210
+ artifacts: true
1211
+ retry: *a2
1212
+ interruptible: true
1213
+ allow_failure: true
1214
+ 'www ๐Ÿ›‘ Stop โš ๏ธ | prod ':
1215
+ stage: stop prod
1216
+ image: path/to/docker/gcloud:the-version
1217
+ variables:
1218
+ KUBERNETES_CPU_REQUEST: '0.22'
1219
+ KUBERNETES_MEMORY_REQUEST: 200Mi
1220
+ KUBERNETES_MEMORY_LIMIT: 400Mi
1221
+ GIT_STRATEGY: none
1222
+ script:
1223
+ - collapseable_section_start "injectvars" "Injecting variables"
1224
+ - export CLOUDSDK_CORE_DISABLE_PROMPTS="1"
1225
+ - collapseable_section_end "injectvars"
1226
+ - set +e
1227
+ - gcloud auth activate-service-account --key-file=<(echo "$CL_prod_www_GCLOUD_DEPLOY_credentialsKey")
1228
+ - gcloud run services delete pan-test-app-prod-www --project=asdf --region=asia-east1
1229
+ - gcloud artifacts docker images delete asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/prod/www --quiet --delete-tags
1230
+ - gcloud artifacts docker images list asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/caches/www --sort-by=~CREATE_TIME --format="value(version)" | tail -n +2 | while read -r version; do gcloud artifacts docker images delete asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/caches/www@$version --quiet --delete-tags; done
1231
+ - echo 'Disabling component in Dependency Track'
1232
+ - /dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" disable "pan-test-app/www" "https://$(printf %s "pan-test-app-prod-www-$CL_prod_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" || true
1233
+ - set -e
1234
+ - echo "CL_GITLAB_ENVIRONMENT_URL=https://$(printf %s "pan-test-app-prod-www-$CL_prod_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" >> gitlab_environment.env
1235
+ environment:
1236
+ name: prod/www
1237
+ url: $CL_GITLAB_ENVIRONMENT_URL
1238
+ action: stop
1239
+ artifacts:
1240
+ reports:
1241
+ dotenv: gitlab_environment.env
1242
+ rules:
1243
+ - if: $CI_COMMIT_BRANCH =~ /^[0-9]+\\.([0-9]+|x)\\.x$/
1244
+ when: on_success
1245
+ - when: manual
1246
+ if: $CI_COMMIT_TAG
1247
+ needs: []
1248
+ retry: *a2
1249
+ interruptible: true
1250
+ allow_failure: true
1251
+ create release:
1252
+ stage: release
1253
+ image: path/to/docker/semantic-release:the-version
1254
+ script:
1255
+ - semanticRelease
1256
+ - echo '๐Ÿ‘‰ The project access token might be invald - run \`project-renew-token\` in catladder CLI to fix.'
1257
+ rules:
1258
+ - &a3
1259
+ if: $CI_COMMIT_MESSAGE =~ /^chore\\(release\\).*/
1260
+ when: never
1261
+ - &a4
1262
+ if: $CI_PIPELINE_SOURCE == "schedule"
1263
+ when: never
1264
+ - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH && $AUTO_RELEASE == "true"
1265
+ when: on_success
1266
+ - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
1267
+ when: manual
1268
+ - if: $CI_COMMIT_BRANCH =~ /^[0-9]+.([0-9]+|x).x$/
1269
+ when: manual
1270
+ โš ๏ธ force create release:
1271
+ stage: release
1272
+ image: path/to/docker/semantic-release:the-version
1273
+ script:
1274
+ - semanticRelease
1275
+ - echo '๐Ÿ‘‰ The project access token might be invald - run \`project-renew-token\` in catladder CLI to fix.'
1276
+ rules:
1277
+ - *a3
1278
+ - *a4
1279
+ - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
1280
+ when: manual
1281
+ - if: $CI_COMMIT_BRANCH =~ /^[0-9]+.([0-9]+|x).x$/
1282
+ when: manual
1283
+ needs: []
1284
+ "
1285
+ `;