@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,1168 @@
1
+ // Jest Snapshot v1, https://goo.gl/fbAQLP
2
+
3
+ exports[`matches snapshot for custom-deploy 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: path/to/docker/jobs-default:the-version
81
+ variables:
82
+ KUBERNETES_CPU_REQUEST: '0.45'
83
+ KUBERNETES_MEMORY_REQUEST: 1Gi
84
+ KUBERNETES_MEMORY_LIMIT: 4Gi
85
+ script:
86
+ - collapseable_section_start "injectvars" "Injecting variables"
87
+ - export APP_PATH="www"
88
+ - collapseable_section_end "injectvars"
89
+ - cd www
90
+ - yarn npm audit --environment production
91
+ rules:
92
+ - when: never
93
+ if: $CI_COMMIT_MESSAGE =~ /^chore\\(release\\).*/
94
+ - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
95
+ - if: $CI_MERGE_REQUEST_ID
96
+ needs: []
97
+ retry: &a1
98
+ max: 2
99
+ when:
100
+ - runner_system_failure
101
+ - stuck_or_timeout_failure
102
+ interruptible: true
103
+ allow_failure: true
104
+ www ๐Ÿ‘ฎ lint:
105
+ stage: test
106
+ image: path/to/docker/jobs-default:the-version
107
+ variables:
108
+ KUBERNETES_CPU_REQUEST: '0.45'
109
+ KUBERNETES_MEMORY_REQUEST: 1Gi
110
+ KUBERNETES_MEMORY_LIMIT: 4Gi
111
+ script:
112
+ - collapseable_section_start "injectvars" "Injecting variables"
113
+ - export APP_PATH="www"
114
+ - collapseable_section_end "injectvars"
115
+ - collapseable_section_start "nodeinstall" "Ensure node version"
116
+ - if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
117
+ - if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
118
+ - collapseable_section_end "nodeinstall"
119
+ - cd www
120
+ - collapseable_section_start "nodeinstall" "Ensure node version"
121
+ - if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
122
+ - if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
123
+ - collapseable_section_end "nodeinstall"
124
+ - collapseable_section_start "yarninstall" "Yarn install"
125
+ - yarn install --immutable
126
+ - collapseable_section_end "yarninstall"
127
+ - yarn lint
128
+ cache:
129
+ - key: www-yarn
130
+ policy: pull-push
131
+ paths:
132
+ - www/.yarn
133
+ - key: www-node-modules
134
+ policy: pull-push
135
+ paths:
136
+ - www/node_modules
137
+ rules:
138
+ - when: never
139
+ if: $CI_COMMIT_MESSAGE =~ /^chore\\(release\\).*/
140
+ - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
141
+ - if: $CI_MERGE_REQUEST_ID
142
+ needs: []
143
+ retry: *a1
144
+ interruptible: true
145
+ www ๐Ÿงช test:
146
+ stage: test
147
+ image: path/to/docker/jobs-testing-chrome:the-version
148
+ variables:
149
+ KUBERNETES_CPU_REQUEST: '0.45'
150
+ KUBERNETES_MEMORY_REQUEST: 1Gi
151
+ KUBERNETES_MEMORY_LIMIT: 4Gi
152
+ script:
153
+ - collapseable_section_start "injectvars" "Injecting variables"
154
+ - export APP_PATH="www"
155
+ - collapseable_section_end "injectvars"
156
+ - collapseable_section_start "nodeinstall" "Ensure node version"
157
+ - if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
158
+ - if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
159
+ - collapseable_section_end "nodeinstall"
160
+ - cd www
161
+ - collapseable_section_start "nodeinstall" "Ensure node version"
162
+ - if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
163
+ - if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
164
+ - collapseable_section_end "nodeinstall"
165
+ - collapseable_section_start "yarninstall" "Yarn install"
166
+ - yarn install --immutable
167
+ - collapseable_section_end "yarninstall"
168
+ - yarn test
169
+ cache:
170
+ - key: www-yarn
171
+ policy: pull-push
172
+ paths:
173
+ - www/.yarn
174
+ - key: www-node-modules
175
+ policy: pull-push
176
+ paths:
177
+ - www/node_modules
178
+ rules:
179
+ - when: never
180
+ if: $CI_COMMIT_MESSAGE =~ /^chore\\(release\\).*/
181
+ - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
182
+ - if: $CI_MERGE_REQUEST_ID
183
+ needs: []
184
+ retry: *a1
185
+ interruptible: true
186
+ 'www ๐Ÿ”จ app | dev ':
187
+ stage: build
188
+ image: path/to/docker/jobs-default:the-version
189
+ variables:
190
+ KUBERNETES_CPU_REQUEST: '0.45'
191
+ KUBERNETES_MEMORY_REQUEST: 1Gi
192
+ KUBERNETES_MEMORY_LIMIT: 4Gi
193
+ script:
194
+ - collapseable_section_start "injectvars" "Injecting variables"
195
+ - export ENV_SHORT="dev"
196
+ - export APP_DIR="www"
197
+ - export ENV_TYPE="dev"
198
+ - export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
199
+ - export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
200
+ - export BUILD_INFO_CURRENT_VERSION="$(tag=$(git ls-remote origin "refs/tags/v*[0-9]" 2>/dev/null | cut -f 2- | sort -V | tail -1 | sed 's/refs\\/tags\\/v//'); [ -z "$tag" ] && echo "0.0.0" || echo "$tag")"
201
+ - export HOSTNAME="unknown-host.example.com"
202
+ - export ROOT_URL="https://unknown-host.example.com"
203
+ - export HOSTNAME_INTERNAL="unknown-host.example.com"
204
+ - export ROOT_URL_INTERNAL="https://unknown-host.example.com"
205
+ - 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\\"]"
206
+ - collapseable_section_end "injectvars"
207
+ - collapseable_section_start "write-dotenv-www" "write dot env for www"
208
+ - |-
209
+ cat <<EOF > www/.env
210
+ ENV_SHORT=dev
211
+ APP_DIR=www
212
+ ENV_TYPE=dev
213
+ HOSTNAME=unknown-host.example.com
214
+ ROOT_URL=https://unknown-host.example.com
215
+ HOSTNAME_INTERNAL=unknown-host.example.com
216
+ ROOT_URL_INTERNAL=https://unknown-host.example.com
217
+ _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"]
218
+ EOF
219
+ - collapseable_section_end "write-dotenv-www"
220
+ - echo '{"id":"$(git describe --tags 2>/dev/null || git rev-parse HEAD)","time":"$CI_JOB_STARTED_AT"}' > www/__build_info.json
221
+ - collapseable_section_start "nodeinstall" "Ensure node version"
222
+ - if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
223
+ - if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
224
+ - collapseable_section_end "nodeinstall"
225
+ - cd www
226
+ - collapseable_section_start "nodeinstall" "Ensure node version"
227
+ - if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
228
+ - if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
229
+ - collapseable_section_end "nodeinstall"
230
+ - collapseable_section_start "yarninstall" "Yarn install"
231
+ - yarn install --immutable
232
+ - collapseable_section_end "yarninstall"
233
+ - yarn build
234
+ cache:
235
+ - key: www-yarn
236
+ policy: pull-push
237
+ paths:
238
+ - www/.yarn
239
+ - key: www-node-modules
240
+ policy: pull-push
241
+ paths:
242
+ - www/node_modules
243
+ artifacts:
244
+ paths:
245
+ - www/__build_info.json
246
+ - www/.next
247
+ - www/dist
248
+ exclude:
249
+ - www/.env
250
+ expire_in: 1 day
251
+ when: always
252
+ reports: {}
253
+ rules:
254
+ - when: never
255
+ if: $CI_COMMIT_MESSAGE =~ /^chore\\(release\\).*/
256
+ - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
257
+ needs: []
258
+ retry: *a1
259
+ interruptible: true
260
+ 'www ๐Ÿ”จ docker | dev ':
261
+ stage: build
262
+ image: path/to/docker/docker-build:the-version
263
+ services:
264
+ - name: docker:24.0.6-dind
265
+ command:
266
+ - --tls=false
267
+ - --registry-mirror=https://mirror.gcr.io
268
+ variables:
269
+ DOCKER_HOST: tcp://0.0.0.0:2375
270
+ DOCKER_TLS_CERTDIR: ''
271
+ DOCKER_DRIVER: overlay2
272
+ DOCKER_BUILDKIT: '1'
273
+ KUBERNETES_CPU_REQUEST: '0.45'
274
+ KUBERNETES_MEMORY_REQUEST: 1Gi
275
+ KUBERNETES_MEMORY_LIMIT: 2Gi
276
+ script:
277
+ - collapseable_section_start "injectvars" "Injecting variables"
278
+ - export APP_DIR="www"
279
+ - export DOCKER_BUILD_CONTEXT="."
280
+ - export DOCKER_REGISTRY="$CI_REGISTRY"
281
+ - export DOCKER_CACHE_IMAGE="$CI_REGISTRY_IMAGE/caches/www"
282
+ - export DOCKER_IMAGE_NAME="dev/www"
283
+ - export DOCKER_IMAGE="$CI_REGISTRY_IMAGE/$DOCKER_IMAGE_NAME"
284
+ - export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"
285
+ - |-
286
+ export DOCKER_COPY_AND_INSTALL_APP="COPY --chown=node:node $APP_DIR .
287
+ RUN yarn plugin import workspace-tools
288
+ RUN yarn workspaces focus --production && yarn rebuild"
289
+ - |-
290
+ export DOCKER_COPY_WORKSPACE_FILES="COPY --chown=node:node www/package.json /app/www/package.json
291
+ COPY --chown=node:node www/yarn.lock /app/www/yarn.lock
292
+ COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
293
+ COPY --chown=node:node .yarn /app/.yarn"
294
+ - collapseable_section_end "injectvars"
295
+ - ensureNodeDockerfile
296
+ - collapseable_section_start "docker-login" "Docker Login"
297
+ - docker login --username gitlab-ci-token --password $CI_JOB_TOKEN $CI_REGISTRY
298
+ - collapseable_section_end "docker-login"
299
+ - collapseable_section_start "docker-build" "Docker build"
300
+ - 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
301
+ - collapseable_section_end "docker-build"
302
+ - collapseable_section_start "docker-push" "Docker push and tag"
303
+ - docker push $DOCKER_IMAGE:$DOCKER_IMAGE_TAG
304
+ - docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG $DOCKER_CACHE_IMAGE
305
+ - docker push $DOCKER_CACHE_IMAGE
306
+ - collapseable_section_end "docker-push"
307
+ cache:
308
+ - key: www-yarn
309
+ policy: pull
310
+ paths:
311
+ - www/.yarn
312
+ rules:
313
+ - when: never
314
+ if: $CI_COMMIT_MESSAGE =~ /^chore\\(release\\).*/
315
+ - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
316
+ needs:
317
+ - 'www ๐Ÿ”จ app | dev '
318
+ retry: *a1
319
+ interruptible: true
320
+ 'www ๐Ÿงพ sbom | dev ':
321
+ stage: build
322
+ image: aquasec/trivy:0.38.3
323
+ variables: {}
324
+ script:
325
+ - collapseable_section_start "injectvars" "Injecting variables"
326
+ - collapseable_section_end "injectvars"
327
+ - trivy fs --quiet --format cyclonedx --output "__sbom.json" www
328
+ artifacts:
329
+ paths:
330
+ - __sbom.json
331
+ rules:
332
+ - when: never
333
+ if: $CI_COMMIT_MESSAGE =~ /^chore\\(release\\).*/
334
+ - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
335
+ needs: []
336
+ retry: *a1
337
+ interruptible: true
338
+ allow_failure: true
339
+ 'www ๐Ÿš€ Deploy | dev ':
340
+ stage: deploy dev
341
+ image: path/to/docker/jobs-default:the-version
342
+ variables:
343
+ KUBERNETES_CPU_REQUEST: '1'
344
+ KUBERNETES_MEMORY_REQUEST: 1024Mi
345
+ KUBERNETES_MEMORY_LIMIT: 2048Mi
346
+ script:
347
+ - collapseable_section_start "injectvars" "Injecting variables"
348
+ - export ENV_SHORT="dev"
349
+ - export APP_DIR="www"
350
+ - export ENV_TYPE="dev"
351
+ - export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
352
+ - export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
353
+ - 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")"
354
+ - export HOSTNAME="unknown-host.example.com"
355
+ - export ROOT_URL="https://unknown-host.example.com"
356
+ - export HOSTNAME_INTERNAL="unknown-host.example.com"
357
+ - export ROOT_URL_INTERNAL="https://unknown-host.example.com"
358
+ - 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\\"]"
359
+ - export DOCKER_REGISTRY="$CI_REGISTRY"
360
+ - export DOCKER_CACHE_IMAGE="$CI_REGISTRY_IMAGE/caches/www"
361
+ - export DOCKER_IMAGE_NAME="dev/www"
362
+ - export DOCKER_IMAGE="$CI_REGISTRY_IMAGE/$DOCKER_IMAGE_NAME"
363
+ - export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"
364
+ - export DEPLOY_API_KEY="$CL_dev_www_DEPLOY_API_KEY"
365
+ - collapseable_section_end "injectvars"
366
+ - cd www
367
+ - echo 'would deploy'
368
+ - echo 'Uploading SBOM to Dependency Track'
369
+ - /dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/www" "https://unknown-host.example.com" "__sbom.json" vex.json || true
370
+ - echo "CL_GITLAB_ENVIRONMENT_URL=https://unknown-host.example.com" >> gitlab_environment.env
371
+ environment:
372
+ name: dev/www
373
+ url: $CL_GITLAB_ENVIRONMENT_URL
374
+ on_stop: 'www ๐Ÿ›‘ Stop โš ๏ธ | dev '
375
+ auto_stop_in: 4 weeks
376
+ artifacts:
377
+ reports:
378
+ dotenv: gitlab_environment.env
379
+ rules:
380
+ - when: never
381
+ if: $CI_COMMIT_MESSAGE =~ /^chore\\(release\\).*/
382
+ - when: on_success
383
+ if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
384
+ needs:
385
+ - job: www ๐Ÿ‘ฎ lint
386
+ artifacts: false
387
+ - job: 'www ๐Ÿ”จ app | dev '
388
+ artifacts: false
389
+ - job: 'www ๐Ÿ”จ docker | dev '
390
+ artifacts: false
391
+ - job: www ๐Ÿงช test
392
+ artifacts: false
393
+ - job: 'www ๐Ÿงพ sbom | dev '
394
+ artifacts: true
395
+ - job: www ๐Ÿ›ก audit
396
+ artifacts: false
397
+ retry: *a1
398
+ interruptible: true
399
+ allow_failure: false
400
+ 'www ๐Ÿ›‘ Stop โš ๏ธ | dev ':
401
+ stage: stop dev
402
+ image: path/to/docker/jobs-default:the-version
403
+ variables:
404
+ KUBERNETES_CPU_REQUEST: '0.22'
405
+ KUBERNETES_MEMORY_REQUEST: 200Mi
406
+ KUBERNETES_MEMORY_LIMIT: 400Mi
407
+ GIT_STRATEGY: none
408
+ script:
409
+ - collapseable_section_start "injectvars" "Injecting variables"
410
+ - export DEPLOY_API_KEY="$CL_dev_www_DEPLOY_API_KEY"
411
+ - collapseable_section_end "injectvars"
412
+ - echo 'would stop'
413
+ - echo 'Disabling component in Dependency Track'
414
+ - /dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" disable "pan-test-app/www" "https://unknown-host.example.com" || true
415
+ - echo "CL_GITLAB_ENVIRONMENT_URL=https://unknown-host.example.com" >> gitlab_environment.env
416
+ environment:
417
+ name: dev/www
418
+ url: $CL_GITLAB_ENVIRONMENT_URL
419
+ action: stop
420
+ artifacts:
421
+ reports:
422
+ dotenv: gitlab_environment.env
423
+ rules:
424
+ - if: $CI_COMMIT_BRANCH =~ /^[0-9]+\\.([0-9]+|x)\\.x$/
425
+ when: on_success
426
+ - when: never
427
+ if: $CI_COMMIT_MESSAGE =~ /^chore\\(release\\).*/
428
+ - when: manual
429
+ if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
430
+ needs: []
431
+ retry: *a1
432
+ interruptible: true
433
+ allow_failure: true
434
+ 'www ๐Ÿ”จ app | review ':
435
+ stage: build
436
+ image: path/to/docker/jobs-default:the-version
437
+ variables:
438
+ KUBERNETES_CPU_REQUEST: '0.45'
439
+ KUBERNETES_MEMORY_REQUEST: 1Gi
440
+ KUBERNETES_MEMORY_LIMIT: 4Gi
441
+ script:
442
+ - collapseable_section_start "injectvars" "Injecting variables"
443
+ - export ENV_SHORT="review"
444
+ - export APP_DIR="www"
445
+ - export ENV_TYPE="review"
446
+ - export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
447
+ - export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
448
+ - 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")"
449
+ - export HOSTNAME="unknown-host.example.com"
450
+ - export ROOT_URL="https://unknown-host.example.com"
451
+ - export HOSTNAME_INTERNAL="unknown-host.example.com"
452
+ - export ROOT_URL_INTERNAL="https://unknown-host.example.com"
453
+ - 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\\"]"
454
+ - collapseable_section_end "injectvars"
455
+ - collapseable_section_start "write-dotenv-www" "write dot env for www"
456
+ - |-
457
+ cat <<EOF > www/.env
458
+ ENV_SHORT=review
459
+ APP_DIR=www
460
+ ENV_TYPE=review
461
+ HOSTNAME=unknown-host.example.com
462
+ ROOT_URL=https://unknown-host.example.com
463
+ HOSTNAME_INTERNAL=unknown-host.example.com
464
+ ROOT_URL_INTERNAL=https://unknown-host.example.com
465
+ _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"]
466
+ EOF
467
+ - collapseable_section_end "write-dotenv-www"
468
+ - echo '{"id":"$(git describe --tags 2>/dev/null || git rev-parse HEAD)","time":"$CI_JOB_STARTED_AT"}' > www/__build_info.json
469
+ - collapseable_section_start "nodeinstall" "Ensure node version"
470
+ - if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
471
+ - if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
472
+ - collapseable_section_end "nodeinstall"
473
+ - cd www
474
+ - collapseable_section_start "nodeinstall" "Ensure node version"
475
+ - if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
476
+ - if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
477
+ - collapseable_section_end "nodeinstall"
478
+ - collapseable_section_start "yarninstall" "Yarn install"
479
+ - yarn install --immutable
480
+ - collapseable_section_end "yarninstall"
481
+ - yarn build
482
+ cache:
483
+ - key: www-yarn
484
+ policy: pull-push
485
+ paths:
486
+ - www/.yarn
487
+ - key: www-node-modules
488
+ policy: pull-push
489
+ paths:
490
+ - www/node_modules
491
+ artifacts:
492
+ paths:
493
+ - www/__build_info.json
494
+ - www/.next
495
+ - www/dist
496
+ exclude:
497
+ - www/.env
498
+ expire_in: 1 day
499
+ when: always
500
+ reports: {}
501
+ rules:
502
+ - if: $CI_MERGE_REQUEST_ID
503
+ needs: []
504
+ retry: *a1
505
+ interruptible: true
506
+ 'www ๐Ÿ”จ docker | review ':
507
+ stage: build
508
+ image: path/to/docker/docker-build:the-version
509
+ services:
510
+ - name: docker:24.0.6-dind
511
+ command:
512
+ - --tls=false
513
+ - --registry-mirror=https://mirror.gcr.io
514
+ variables:
515
+ DOCKER_HOST: tcp://0.0.0.0:2375
516
+ DOCKER_TLS_CERTDIR: ''
517
+ DOCKER_DRIVER: overlay2
518
+ DOCKER_BUILDKIT: '1'
519
+ KUBERNETES_CPU_REQUEST: '0.45'
520
+ KUBERNETES_MEMORY_REQUEST: 1Gi
521
+ KUBERNETES_MEMORY_LIMIT: 2Gi
522
+ script:
523
+ - collapseable_section_start "injectvars" "Injecting variables"
524
+ - export APP_DIR="www"
525
+ - export DOCKER_BUILD_CONTEXT="."
526
+ - export DOCKER_REGISTRY="$CI_REGISTRY"
527
+ - export DOCKER_CACHE_IMAGE="$CI_REGISTRY_IMAGE/caches/www"
528
+ - export DOCKER_IMAGE_NAME="review/www"
529
+ - export DOCKER_IMAGE="$CI_REGISTRY_IMAGE/$DOCKER_IMAGE_NAME"
530
+ - export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"
531
+ - |-
532
+ export DOCKER_COPY_AND_INSTALL_APP="COPY --chown=node:node $APP_DIR .
533
+ RUN yarn plugin import workspace-tools
534
+ RUN yarn workspaces focus --production && yarn rebuild"
535
+ - |-
536
+ export DOCKER_COPY_WORKSPACE_FILES="COPY --chown=node:node www/package.json /app/www/package.json
537
+ COPY --chown=node:node www/yarn.lock /app/www/yarn.lock
538
+ COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
539
+ COPY --chown=node:node .yarn /app/.yarn"
540
+ - collapseable_section_end "injectvars"
541
+ - ensureNodeDockerfile
542
+ - collapseable_section_start "docker-login" "Docker Login"
543
+ - docker login --username gitlab-ci-token --password $CI_JOB_TOKEN $CI_REGISTRY
544
+ - collapseable_section_end "docker-login"
545
+ - collapseable_section_start "docker-build" "Docker build"
546
+ - 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
547
+ - collapseable_section_end "docker-build"
548
+ - collapseable_section_start "docker-push" "Docker push and tag"
549
+ - docker push $DOCKER_IMAGE:$DOCKER_IMAGE_TAG
550
+ - docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG $DOCKER_CACHE_IMAGE
551
+ - docker push $DOCKER_CACHE_IMAGE
552
+ - collapseable_section_end "docker-push"
553
+ cache:
554
+ - key: www-yarn
555
+ policy: pull
556
+ paths:
557
+ - www/.yarn
558
+ rules:
559
+ - if: $CI_MERGE_REQUEST_ID
560
+ needs:
561
+ - 'www ๐Ÿ”จ app | review '
562
+ retry: *a1
563
+ interruptible: true
564
+ 'www ๐Ÿงพ sbom | review ':
565
+ stage: build
566
+ image: aquasec/trivy:0.38.3
567
+ variables: {}
568
+ script:
569
+ - collapseable_section_start "injectvars" "Injecting variables"
570
+ - collapseable_section_end "injectvars"
571
+ - trivy fs --quiet --format cyclonedx --output "__sbom.json" www
572
+ artifacts:
573
+ paths:
574
+ - __sbom.json
575
+ rules:
576
+ - if: $CI_MERGE_REQUEST_ID
577
+ needs: []
578
+ retry: *a1
579
+ interruptible: true
580
+ allow_failure: true
581
+ 'www ๐Ÿš€ Deploy | review ':
582
+ stage: deploy review
583
+ image: path/to/docker/jobs-default:the-version
584
+ variables:
585
+ KUBERNETES_CPU_REQUEST: '1'
586
+ KUBERNETES_MEMORY_REQUEST: 1024Mi
587
+ KUBERNETES_MEMORY_LIMIT: 2048Mi
588
+ script:
589
+ - collapseable_section_start "injectvars" "Injecting variables"
590
+ - export ENV_SHORT="review"
591
+ - export APP_DIR="www"
592
+ - export ENV_TYPE="review"
593
+ - export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
594
+ - export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
595
+ - 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")"
596
+ - export HOSTNAME="unknown-host.example.com"
597
+ - export ROOT_URL="https://unknown-host.example.com"
598
+ - export HOSTNAME_INTERNAL="unknown-host.example.com"
599
+ - export ROOT_URL_INTERNAL="https://unknown-host.example.com"
600
+ - 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\\"]"
601
+ - export DOCKER_REGISTRY="$CI_REGISTRY"
602
+ - export DOCKER_CACHE_IMAGE="$CI_REGISTRY_IMAGE/caches/www"
603
+ - export DOCKER_IMAGE_NAME="review/www"
604
+ - export DOCKER_IMAGE="$CI_REGISTRY_IMAGE/$DOCKER_IMAGE_NAME"
605
+ - export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"
606
+ - export DEPLOY_API_KEY="$CL_review_www_DEPLOY_API_KEY"
607
+ - collapseable_section_end "injectvars"
608
+ - cd www
609
+ - echo 'would deploy'
610
+ - echo 'Uploading SBOM to Dependency Track'
611
+ - /dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/www" "https://unknown-host.example.com" "__sbom.json" vex.json || true
612
+ - echo "CL_GITLAB_ENVIRONMENT_URL=https://unknown-host.example.com" >> gitlab_environment.env
613
+ environment:
614
+ name: review/$CI_COMMIT_REF_NAME/www
615
+ url: $CL_GITLAB_ENVIRONMENT_URL
616
+ on_stop: 'www ๐Ÿ›‘ Stop โš ๏ธ | review '
617
+ auto_stop_in: 1 week
618
+ artifacts:
619
+ reports:
620
+ dotenv: gitlab_environment.env
621
+ rules:
622
+ - when: on_success
623
+ if: $CI_MERGE_REQUEST_ID
624
+ needs:
625
+ - job: www ๐Ÿ‘ฎ lint
626
+ artifacts: false
627
+ - job: 'www ๐Ÿ”จ app | review '
628
+ artifacts: false
629
+ - job: 'www ๐Ÿ”จ docker | review '
630
+ artifacts: false
631
+ - job: www ๐Ÿงช test
632
+ artifacts: false
633
+ - job: 'www ๐Ÿงพ sbom | review '
634
+ artifacts: true
635
+ - job: www ๐Ÿ›ก audit
636
+ artifacts: false
637
+ retry: *a1
638
+ interruptible: true
639
+ allow_failure: false
640
+ 'www ๐Ÿ›‘ Stop โš ๏ธ | review ':
641
+ stage: stop review
642
+ image: path/to/docker/jobs-default:the-version
643
+ variables:
644
+ KUBERNETES_CPU_REQUEST: '0.22'
645
+ KUBERNETES_MEMORY_REQUEST: 200Mi
646
+ KUBERNETES_MEMORY_LIMIT: 400Mi
647
+ GIT_STRATEGY: none
648
+ script:
649
+ - collapseable_section_start "injectvars" "Injecting variables"
650
+ - export DEPLOY_API_KEY="$CL_review_www_DEPLOY_API_KEY"
651
+ - collapseable_section_end "injectvars"
652
+ - echo 'would stop'
653
+ - echo 'Disabling component in Dependency Track'
654
+ - /dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" disable "pan-test-app/www" "https://unknown-host.example.com" || true
655
+ - echo "CL_GITLAB_ENVIRONMENT_URL=https://unknown-host.example.com" >> gitlab_environment.env
656
+ environment:
657
+ name: review/$CI_COMMIT_REF_NAME/www
658
+ url: $CL_GITLAB_ENVIRONMENT_URL
659
+ action: stop
660
+ artifacts:
661
+ reports:
662
+ dotenv: gitlab_environment.env
663
+ rules:
664
+ - if: $CI_COMMIT_BRANCH =~ /^[0-9]+\\.([0-9]+|x)\\.x$/
665
+ when: on_success
666
+ - when: manual
667
+ if: $CI_MERGE_REQUEST_ID
668
+ needs: []
669
+ retry: *a1
670
+ interruptible: true
671
+ allow_failure: true
672
+ 'www ๐Ÿ”จ app | stage ':
673
+ stage: build
674
+ image: path/to/docker/jobs-default:the-version
675
+ variables:
676
+ KUBERNETES_CPU_REQUEST: '0.45'
677
+ KUBERNETES_MEMORY_REQUEST: 1Gi
678
+ KUBERNETES_MEMORY_LIMIT: 4Gi
679
+ script:
680
+ - collapseable_section_start "injectvars" "Injecting variables"
681
+ - export ENV_SHORT="stage"
682
+ - export APP_DIR="www"
683
+ - export ENV_TYPE="stage"
684
+ - export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
685
+ - export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
686
+ - 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")"
687
+ - export HOSTNAME="unknown-host.example.com"
688
+ - export ROOT_URL="https://unknown-host.example.com"
689
+ - export HOSTNAME_INTERNAL="unknown-host.example.com"
690
+ - export ROOT_URL_INTERNAL="https://unknown-host.example.com"
691
+ - 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\\"]"
692
+ - collapseable_section_end "injectvars"
693
+ - collapseable_section_start "write-dotenv-www" "write dot env for www"
694
+ - |-
695
+ cat <<EOF > www/.env
696
+ ENV_SHORT=stage
697
+ APP_DIR=www
698
+ ENV_TYPE=stage
699
+ HOSTNAME=unknown-host.example.com
700
+ ROOT_URL=https://unknown-host.example.com
701
+ HOSTNAME_INTERNAL=unknown-host.example.com
702
+ ROOT_URL_INTERNAL=https://unknown-host.example.com
703
+ _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"]
704
+ EOF
705
+ - collapseable_section_end "write-dotenv-www"
706
+ - echo '{"id":"$(git describe --tags 2>/dev/null || git rev-parse HEAD)","time":"$CI_JOB_STARTED_AT"}' > www/__build_info.json
707
+ - collapseable_section_start "nodeinstall" "Ensure node version"
708
+ - if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
709
+ - if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
710
+ - collapseable_section_end "nodeinstall"
711
+ - cd www
712
+ - collapseable_section_start "nodeinstall" "Ensure node version"
713
+ - if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
714
+ - if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
715
+ - collapseable_section_end "nodeinstall"
716
+ - collapseable_section_start "yarninstall" "Yarn install"
717
+ - yarn install --immutable
718
+ - collapseable_section_end "yarninstall"
719
+ - yarn build
720
+ cache:
721
+ - key: www-yarn
722
+ policy: pull-push
723
+ paths:
724
+ - www/.yarn
725
+ - key: www-node-modules
726
+ policy: pull-push
727
+ paths:
728
+ - www/node_modules
729
+ artifacts:
730
+ paths:
731
+ - www/__build_info.json
732
+ - www/.next
733
+ - www/dist
734
+ exclude:
735
+ - www/.env
736
+ expire_in: 1 day
737
+ when: always
738
+ reports: {}
739
+ rules:
740
+ - if: $CI_COMMIT_TAG
741
+ needs: []
742
+ retry: *a1
743
+ interruptible: true
744
+ 'www ๐Ÿ”จ docker | stage ':
745
+ stage: build
746
+ image: path/to/docker/docker-build:the-version
747
+ services:
748
+ - name: docker:24.0.6-dind
749
+ command:
750
+ - --tls=false
751
+ - --registry-mirror=https://mirror.gcr.io
752
+ variables:
753
+ DOCKER_HOST: tcp://0.0.0.0:2375
754
+ DOCKER_TLS_CERTDIR: ''
755
+ DOCKER_DRIVER: overlay2
756
+ DOCKER_BUILDKIT: '1'
757
+ KUBERNETES_CPU_REQUEST: '0.45'
758
+ KUBERNETES_MEMORY_REQUEST: 1Gi
759
+ KUBERNETES_MEMORY_LIMIT: 2Gi
760
+ script:
761
+ - collapseable_section_start "injectvars" "Injecting variables"
762
+ - export APP_DIR="www"
763
+ - export DOCKER_BUILD_CONTEXT="."
764
+ - export DOCKER_REGISTRY="$CI_REGISTRY"
765
+ - export DOCKER_CACHE_IMAGE="$CI_REGISTRY_IMAGE/caches/www"
766
+ - export DOCKER_IMAGE_NAME="stage/www"
767
+ - export DOCKER_IMAGE="$CI_REGISTRY_IMAGE/$DOCKER_IMAGE_NAME"
768
+ - export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"
769
+ - |-
770
+ export DOCKER_COPY_AND_INSTALL_APP="COPY --chown=node:node $APP_DIR .
771
+ RUN yarn plugin import workspace-tools
772
+ RUN yarn workspaces focus --production && yarn rebuild"
773
+ - |-
774
+ export DOCKER_COPY_WORKSPACE_FILES="COPY --chown=node:node www/package.json /app/www/package.json
775
+ COPY --chown=node:node www/yarn.lock /app/www/yarn.lock
776
+ COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
777
+ COPY --chown=node:node .yarn /app/.yarn"
778
+ - collapseable_section_end "injectvars"
779
+ - ensureNodeDockerfile
780
+ - collapseable_section_start "docker-login" "Docker Login"
781
+ - docker login --username gitlab-ci-token --password $CI_JOB_TOKEN $CI_REGISTRY
782
+ - collapseable_section_end "docker-login"
783
+ - collapseable_section_start "docker-build" "Docker build"
784
+ - 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
785
+ - collapseable_section_end "docker-build"
786
+ - collapseable_section_start "docker-push" "Docker push and tag"
787
+ - docker push $DOCKER_IMAGE:$DOCKER_IMAGE_TAG
788
+ - docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG $DOCKER_CACHE_IMAGE
789
+ - docker push $DOCKER_CACHE_IMAGE
790
+ - collapseable_section_end "docker-push"
791
+ cache:
792
+ - key: www-yarn
793
+ policy: pull
794
+ paths:
795
+ - www/.yarn
796
+ rules:
797
+ - if: $CI_COMMIT_TAG
798
+ needs:
799
+ - 'www ๐Ÿ”จ app | stage '
800
+ retry: *a1
801
+ interruptible: true
802
+ 'www ๐Ÿงพ sbom | stage ':
803
+ stage: build
804
+ image: aquasec/trivy:0.38.3
805
+ variables: {}
806
+ script:
807
+ - collapseable_section_start "injectvars" "Injecting variables"
808
+ - collapseable_section_end "injectvars"
809
+ - trivy fs --quiet --format cyclonedx --output "__sbom.json" www
810
+ artifacts:
811
+ paths:
812
+ - __sbom.json
813
+ rules:
814
+ - if: $CI_COMMIT_TAG
815
+ needs: []
816
+ retry: *a1
817
+ interruptible: true
818
+ allow_failure: true
819
+ 'www ๐Ÿš€ Deploy | stage ':
820
+ stage: deploy stage
821
+ image: path/to/docker/jobs-default:the-version
822
+ variables:
823
+ KUBERNETES_CPU_REQUEST: '1'
824
+ KUBERNETES_MEMORY_REQUEST: 1024Mi
825
+ KUBERNETES_MEMORY_LIMIT: 2048Mi
826
+ script:
827
+ - collapseable_section_start "injectvars" "Injecting variables"
828
+ - export ENV_SHORT="stage"
829
+ - export APP_DIR="www"
830
+ - export ENV_TYPE="stage"
831
+ - export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
832
+ - export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
833
+ - 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")"
834
+ - export HOSTNAME="unknown-host.example.com"
835
+ - export ROOT_URL="https://unknown-host.example.com"
836
+ - export HOSTNAME_INTERNAL="unknown-host.example.com"
837
+ - export ROOT_URL_INTERNAL="https://unknown-host.example.com"
838
+ - 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\\"]"
839
+ - export DOCKER_REGISTRY="$CI_REGISTRY"
840
+ - export DOCKER_CACHE_IMAGE="$CI_REGISTRY_IMAGE/caches/www"
841
+ - export DOCKER_IMAGE_NAME="stage/www"
842
+ - export DOCKER_IMAGE="$CI_REGISTRY_IMAGE/$DOCKER_IMAGE_NAME"
843
+ - export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"
844
+ - export DEPLOY_API_KEY="$CL_stage_www_DEPLOY_API_KEY"
845
+ - collapseable_section_end "injectvars"
846
+ - cd www
847
+ - echo 'would deploy'
848
+ - echo 'Uploading SBOM to Dependency Track'
849
+ - /dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/www" "https://unknown-host.example.com" "__sbom.json" vex.json || true
850
+ - echo "CL_GITLAB_ENVIRONMENT_URL=https://unknown-host.example.com" >> gitlab_environment.env
851
+ environment:
852
+ name: stage/www
853
+ url: $CL_GITLAB_ENVIRONMENT_URL
854
+ on_stop: 'www ๐Ÿ›‘ Stop โš ๏ธ | stage '
855
+ artifacts:
856
+ reports:
857
+ dotenv: gitlab_environment.env
858
+ rules:
859
+ - when: on_success
860
+ if: $CI_COMMIT_TAG
861
+ needs:
862
+ - job: 'www ๐Ÿ”จ app | stage '
863
+ artifacts: false
864
+ - job: 'www ๐Ÿ”จ docker | stage '
865
+ artifacts: false
866
+ - job: 'www ๐Ÿงพ sbom | stage '
867
+ artifacts: true
868
+ retry: *a1
869
+ interruptible: true
870
+ allow_failure: false
871
+ 'www ๐Ÿ›‘ Stop โš ๏ธ | stage ':
872
+ stage: stop stage
873
+ image: path/to/docker/jobs-default:the-version
874
+ variables:
875
+ KUBERNETES_CPU_REQUEST: '0.22'
876
+ KUBERNETES_MEMORY_REQUEST: 200Mi
877
+ KUBERNETES_MEMORY_LIMIT: 400Mi
878
+ GIT_STRATEGY: none
879
+ script:
880
+ - collapseable_section_start "injectvars" "Injecting variables"
881
+ - export DEPLOY_API_KEY="$CL_stage_www_DEPLOY_API_KEY"
882
+ - collapseable_section_end "injectvars"
883
+ - echo 'would stop'
884
+ - echo 'Disabling component in Dependency Track'
885
+ - /dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" disable "pan-test-app/www" "https://unknown-host.example.com" || true
886
+ - echo "CL_GITLAB_ENVIRONMENT_URL=https://unknown-host.example.com" >> gitlab_environment.env
887
+ environment:
888
+ name: stage/www
889
+ url: $CL_GITLAB_ENVIRONMENT_URL
890
+ action: stop
891
+ artifacts:
892
+ reports:
893
+ dotenv: gitlab_environment.env
894
+ rules:
895
+ - if: $CI_COMMIT_BRANCH =~ /^[0-9]+\\.([0-9]+|x)\\.x$/
896
+ when: on_success
897
+ - when: manual
898
+ if: $CI_COMMIT_TAG
899
+ needs: []
900
+ retry: *a1
901
+ interruptible: true
902
+ allow_failure: true
903
+ 'www ๐Ÿ”จ app | prod ':
904
+ stage: build
905
+ image: path/to/docker/jobs-default:the-version
906
+ variables:
907
+ KUBERNETES_CPU_REQUEST: '0.45'
908
+ KUBERNETES_MEMORY_REQUEST: 1Gi
909
+ KUBERNETES_MEMORY_LIMIT: 4Gi
910
+ script:
911
+ - collapseable_section_start "injectvars" "Injecting variables"
912
+ - export ENV_SHORT="prod"
913
+ - export APP_DIR="www"
914
+ - export ENV_TYPE="prod"
915
+ - export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
916
+ - export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
917
+ - 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")"
918
+ - export HOSTNAME="unknown-host.example.com"
919
+ - export ROOT_URL="https://unknown-host.example.com"
920
+ - export HOSTNAME_INTERNAL="unknown-host.example.com"
921
+ - export ROOT_URL_INTERNAL="https://unknown-host.example.com"
922
+ - 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\\"]"
923
+ - collapseable_section_end "injectvars"
924
+ - collapseable_section_start "write-dotenv-www" "write dot env for www"
925
+ - |-
926
+ cat <<EOF > www/.env
927
+ ENV_SHORT=prod
928
+ APP_DIR=www
929
+ ENV_TYPE=prod
930
+ HOSTNAME=unknown-host.example.com
931
+ ROOT_URL=https://unknown-host.example.com
932
+ HOSTNAME_INTERNAL=unknown-host.example.com
933
+ ROOT_URL_INTERNAL=https://unknown-host.example.com
934
+ _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"]
935
+ EOF
936
+ - collapseable_section_end "write-dotenv-www"
937
+ - echo '{"id":"$(git describe --tags 2>/dev/null || git rev-parse HEAD)","time":"$CI_JOB_STARTED_AT"}' > www/__build_info.json
938
+ - collapseable_section_start "nodeinstall" "Ensure node version"
939
+ - if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
940
+ - if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
941
+ - collapseable_section_end "nodeinstall"
942
+ - cd www
943
+ - collapseable_section_start "nodeinstall" "Ensure node version"
944
+ - if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
945
+ - if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
946
+ - collapseable_section_end "nodeinstall"
947
+ - collapseable_section_start "yarninstall" "Yarn install"
948
+ - yarn install --immutable
949
+ - collapseable_section_end "yarninstall"
950
+ - yarn build
951
+ cache:
952
+ - key: www-yarn
953
+ policy: pull-push
954
+ paths:
955
+ - www/.yarn
956
+ - key: www-node-modules
957
+ policy: pull-push
958
+ paths:
959
+ - www/node_modules
960
+ artifacts:
961
+ paths:
962
+ - www/__build_info.json
963
+ - www/.next
964
+ - www/dist
965
+ exclude:
966
+ - www/.env
967
+ expire_in: 1 day
968
+ when: always
969
+ reports: {}
970
+ rules:
971
+ - if: $CI_COMMIT_TAG
972
+ needs: []
973
+ retry: *a1
974
+ interruptible: true
975
+ 'www ๐Ÿ”จ docker | prod ':
976
+ stage: build
977
+ image: path/to/docker/docker-build:the-version
978
+ services:
979
+ - name: docker:24.0.6-dind
980
+ command:
981
+ - --tls=false
982
+ - --registry-mirror=https://mirror.gcr.io
983
+ variables:
984
+ DOCKER_HOST: tcp://0.0.0.0:2375
985
+ DOCKER_TLS_CERTDIR: ''
986
+ DOCKER_DRIVER: overlay2
987
+ DOCKER_BUILDKIT: '1'
988
+ KUBERNETES_CPU_REQUEST: '0.45'
989
+ KUBERNETES_MEMORY_REQUEST: 1Gi
990
+ KUBERNETES_MEMORY_LIMIT: 2Gi
991
+ script:
992
+ - collapseable_section_start "injectvars" "Injecting variables"
993
+ - export APP_DIR="www"
994
+ - export DOCKER_BUILD_CONTEXT="."
995
+ - export DOCKER_REGISTRY="$CI_REGISTRY"
996
+ - export DOCKER_CACHE_IMAGE="$CI_REGISTRY_IMAGE/caches/www"
997
+ - export DOCKER_IMAGE_NAME="prod/www"
998
+ - export DOCKER_IMAGE="$CI_REGISTRY_IMAGE/$DOCKER_IMAGE_NAME"
999
+ - export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"
1000
+ - |-
1001
+ export DOCKER_COPY_AND_INSTALL_APP="COPY --chown=node:node $APP_DIR .
1002
+ RUN yarn plugin import workspace-tools
1003
+ RUN yarn workspaces focus --production && yarn rebuild"
1004
+ - |-
1005
+ export DOCKER_COPY_WORKSPACE_FILES="COPY --chown=node:node www/package.json /app/www/package.json
1006
+ COPY --chown=node:node www/yarn.lock /app/www/yarn.lock
1007
+ COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
1008
+ COPY --chown=node:node .yarn /app/.yarn"
1009
+ - collapseable_section_end "injectvars"
1010
+ - ensureNodeDockerfile
1011
+ - collapseable_section_start "docker-login" "Docker Login"
1012
+ - docker login --username gitlab-ci-token --password $CI_JOB_TOKEN $CI_REGISTRY
1013
+ - collapseable_section_end "docker-login"
1014
+ - collapseable_section_start "docker-build" "Docker build"
1015
+ - 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
1016
+ - collapseable_section_end "docker-build"
1017
+ - collapseable_section_start "docker-push" "Docker push and tag"
1018
+ - docker push $DOCKER_IMAGE:$DOCKER_IMAGE_TAG
1019
+ - docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG $DOCKER_CACHE_IMAGE
1020
+ - docker push $DOCKER_CACHE_IMAGE
1021
+ - collapseable_section_end "docker-push"
1022
+ cache:
1023
+ - key: www-yarn
1024
+ policy: pull
1025
+ paths:
1026
+ - www/.yarn
1027
+ rules:
1028
+ - if: $CI_COMMIT_TAG
1029
+ needs:
1030
+ - 'www ๐Ÿ”จ app | prod '
1031
+ retry: *a1
1032
+ interruptible: true
1033
+ 'www ๐Ÿงพ sbom | prod ':
1034
+ stage: build
1035
+ image: aquasec/trivy:0.38.3
1036
+ variables: {}
1037
+ script:
1038
+ - collapseable_section_start "injectvars" "Injecting variables"
1039
+ - collapseable_section_end "injectvars"
1040
+ - trivy fs --quiet --format cyclonedx --output "__sbom.json" www
1041
+ artifacts:
1042
+ paths:
1043
+ - __sbom.json
1044
+ rules:
1045
+ - if: $CI_COMMIT_TAG
1046
+ needs: []
1047
+ retry: *a1
1048
+ interruptible: true
1049
+ allow_failure: true
1050
+ 'www ๐Ÿš€ Deploy | prod ':
1051
+ stage: deploy prod
1052
+ image: path/to/docker/jobs-default:the-version
1053
+ variables:
1054
+ KUBERNETES_CPU_REQUEST: '1'
1055
+ KUBERNETES_MEMORY_REQUEST: 1024Mi
1056
+ KUBERNETES_MEMORY_LIMIT: 2048Mi
1057
+ script:
1058
+ - collapseable_section_start "injectvars" "Injecting variables"
1059
+ - export ENV_SHORT="prod"
1060
+ - export APP_DIR="www"
1061
+ - export ENV_TYPE="prod"
1062
+ - export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
1063
+ - export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
1064
+ - 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")"
1065
+ - export HOSTNAME="unknown-host.example.com"
1066
+ - export ROOT_URL="https://unknown-host.example.com"
1067
+ - export HOSTNAME_INTERNAL="unknown-host.example.com"
1068
+ - export ROOT_URL_INTERNAL="https://unknown-host.example.com"
1069
+ - 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\\"]"
1070
+ - export DOCKER_REGISTRY="$CI_REGISTRY"
1071
+ - export DOCKER_CACHE_IMAGE="$CI_REGISTRY_IMAGE/caches/www"
1072
+ - export DOCKER_IMAGE_NAME="prod/www"
1073
+ - export DOCKER_IMAGE="$CI_REGISTRY_IMAGE/$DOCKER_IMAGE_NAME"
1074
+ - export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"
1075
+ - export DEPLOY_API_KEY="$CL_prod_www_DEPLOY_API_KEY"
1076
+ - collapseable_section_end "injectvars"
1077
+ - cd www
1078
+ - echo 'would deploy'
1079
+ - echo 'Uploading SBOM to Dependency Track'
1080
+ - /dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/www" "https://unknown-host.example.com" "__sbom.json" vex.json || true
1081
+ - echo "CL_GITLAB_ENVIRONMENT_URL=https://unknown-host.example.com" >> gitlab_environment.env
1082
+ environment:
1083
+ name: prod/www
1084
+ url: $CL_GITLAB_ENVIRONMENT_URL
1085
+ on_stop: 'www ๐Ÿ›‘ Stop โš ๏ธ | prod '
1086
+ artifacts:
1087
+ reports:
1088
+ dotenv: gitlab_environment.env
1089
+ rules:
1090
+ - when: manual
1091
+ if: $CI_COMMIT_TAG
1092
+ needs:
1093
+ - job: 'www ๐Ÿ”จ app | prod '
1094
+ artifacts: false
1095
+ - job: 'www ๐Ÿ”จ docker | prod '
1096
+ artifacts: false
1097
+ - job: 'www ๐Ÿงพ sbom | prod '
1098
+ artifacts: true
1099
+ retry: *a1
1100
+ interruptible: true
1101
+ allow_failure: true
1102
+ 'www ๐Ÿ›‘ Stop โš ๏ธ | prod ':
1103
+ stage: stop prod
1104
+ image: path/to/docker/jobs-default:the-version
1105
+ variables:
1106
+ KUBERNETES_CPU_REQUEST: '0.22'
1107
+ KUBERNETES_MEMORY_REQUEST: 200Mi
1108
+ KUBERNETES_MEMORY_LIMIT: 400Mi
1109
+ GIT_STRATEGY: none
1110
+ script:
1111
+ - collapseable_section_start "injectvars" "Injecting variables"
1112
+ - export DEPLOY_API_KEY="$CL_prod_www_DEPLOY_API_KEY"
1113
+ - collapseable_section_end "injectvars"
1114
+ - echo 'would stop'
1115
+ - echo 'Disabling component in Dependency Track'
1116
+ - /dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" disable "pan-test-app/www" "https://unknown-host.example.com" || true
1117
+ - echo "CL_GITLAB_ENVIRONMENT_URL=https://unknown-host.example.com" >> gitlab_environment.env
1118
+ environment:
1119
+ name: prod/www
1120
+ url: $CL_GITLAB_ENVIRONMENT_URL
1121
+ action: stop
1122
+ artifacts:
1123
+ reports:
1124
+ dotenv: gitlab_environment.env
1125
+ rules:
1126
+ - if: $CI_COMMIT_BRANCH =~ /^[0-9]+\\.([0-9]+|x)\\.x$/
1127
+ when: on_success
1128
+ - when: manual
1129
+ if: $CI_COMMIT_TAG
1130
+ needs: []
1131
+ retry: *a1
1132
+ interruptible: true
1133
+ allow_failure: true
1134
+ create release:
1135
+ stage: release
1136
+ image: path/to/docker/semantic-release:the-version
1137
+ script:
1138
+ - semanticRelease
1139
+ - echo '๐Ÿ‘‰ The project access token might be invald - run \`project-renew-token\` in catladder CLI to fix.'
1140
+ rules:
1141
+ - &a2
1142
+ if: $CI_COMMIT_MESSAGE =~ /^chore\\(release\\).*/
1143
+ when: never
1144
+ - &a3
1145
+ if: $CI_PIPELINE_SOURCE == "schedule"
1146
+ when: never
1147
+ - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH && $AUTO_RELEASE == "true"
1148
+ when: on_success
1149
+ - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
1150
+ when: manual
1151
+ - if: $CI_COMMIT_BRANCH =~ /^[0-9]+.([0-9]+|x).x$/
1152
+ when: manual
1153
+ โš ๏ธ force create release:
1154
+ stage: release
1155
+ image: path/to/docker/semantic-release:the-version
1156
+ script:
1157
+ - semanticRelease
1158
+ - echo '๐Ÿ‘‰ The project access token might be invald - run \`project-renew-token\` in catladder CLI to fix.'
1159
+ rules:
1160
+ - *a2
1161
+ - *a3
1162
+ - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
1163
+ when: manual
1164
+ - if: $CI_COMMIT_BRANCH =~ /^[0-9]+.([0-9]+|x).x$/
1165
+ when: manual
1166
+ needs: []
1167
+ "
1168
+ `;