@vaharoni/devops 1.2.12 → 1.2.14

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 (330) hide show
  1. package/dist/chunk-N7EX3HJH.js +139 -0
  2. package/dist/chunk-RZ46YYZZ.js +420 -0
  3. package/dist/chunk-WKP7EQNU.js +421 -0
  4. package/dist/devops.d.ts +0 -2
  5. package/dist/devops.js +3235 -91
  6. package/dist/index.d.ts +972 -4
  7. package/dist/index.js +67 -3
  8. package/dist/plugins.d.ts +95 -4
  9. package/dist/plugins.js +20 -6
  10. package/dist/src/target-templates/README.md +1 -0
  11. package/dist/src/target-templates/cluster-resource-options/README.md +2 -0
  12. package/dist/src/target-templates/cluster-resource-options/dns-test/dns-test.yaml +60 -0
  13. package/dist/src/target-templates/cluster-resource-options/milvus/production/milvus-values.yaml +2 -0
  14. package/dist/src/target-templates/cluster-resource-options/milvus/staging/milvus-values.yaml +2 -0
  15. package/dist/src/target-templates/cluster-resource-options/monitoring-ingress/monitoring-ingress.yaml +62 -0
  16. package/dist/src/target-templates/cluster-resource-options/postgres/daily-operator-restart.yaml +54 -0
  17. package/dist/src/target-templates/cluster-resource-options/postgres/production/cluster/PodDisruptionBudget.yaml +27 -0
  18. package/dist/src/target-templates/cluster-resource-options/postgres/production/cluster/SGCluster.yaml +47 -0
  19. package/dist/src/target-templates/cluster-resource-options/postgres/production/cluster/StackGres-alerts.yaml +191 -0
  20. package/dist/src/target-templates/cluster-resource-options/postgres/production/configurations/06-SGDistributedLogs.yaml +11 -0
  21. package/dist/src/target-templates/cluster-resource-options/postgres/production/configurations/07-SGObjectStorage.yaml +18 -0
  22. package/dist/src/target-templates/cluster-resource-options/postgres/production/configurations/08-SGScript.yaml +12 -0
  23. package/dist/src/target-templates/cluster-resource-options/postgres/stackgres-ui-ingress.yaml +35 -0
  24. package/dist/src/target-templates/cluster-resource-options/postgres/staging/cluster/SGCluster.yaml +42 -0
  25. package/dist/src/target-templates/cluster-resource-options/postgres/staging/configurations/07-SGObjectStorage.yaml +18 -0
  26. package/dist/src/target-templates/cluster-resource-options/postgres/staging/configurations/08-SGScript.yaml +12 -0
  27. package/dist/src/target-templates/cluster-resource-options/prefect/production/prefect-values.yaml +14 -0
  28. package/dist/src/target-templates/cluster-resource-options/prefect/staging/prefect-values.yaml +14 -0
  29. package/dist/src/target-templates/cluster-resource-options/redis/production/redis-values.yaml +20 -0
  30. package/dist/src/target-templates/cluster-resource-options/redis/staging/redis-values.yaml +8 -0
  31. package/dist/src/target-templates/infra-variants/README.md +2 -0
  32. package/dist/src/target-templates/infra-variants/digitalocean/.devops/config/constants.yaml +18 -0
  33. package/dist/src/target-templates/infra-variants/digitalocean/.github/workflows/k8s-build.yaml +91 -0
  34. package/dist/src/target-templates/infra-variants/gcloud/.devops/config/constants.yaml +15 -0
  35. package/dist/src/target-templates/infra-variants/gcloud/.devops/manifests/ingress.yaml.hb +22 -0
  36. package/dist/src/target-templates/infra-variants/gcloud/.github/workflows/k8s-build.yaml +95 -0
  37. package/dist/src/target-templates/infra-variants/hetzner/.devops/config/constants.yaml +18 -0
  38. package/dist/src/target-templates/infra-variants/hetzner/.devops/infra/hetzner/abandoned/harbor-values.yaml +30 -0
  39. package/dist/src/target-templates/infra-variants/hetzner/.devops/infra/hetzner/abandoned/hcloud-config.yaml +134 -0
  40. package/dist/src/target-templates/infra-variants/hetzner/.devops/infra/hetzner/cert-manager.yaml +25 -0
  41. package/dist/src/target-templates/infra-variants/hetzner/.devops/infra/hetzner/harbor-cert.yaml +13 -0
  42. package/dist/src/target-templates/infra-variants/hetzner/.devops/infra/hetzner/harbor-values.yaml +76 -0
  43. package/dist/src/target-templates/infra-variants/hetzner/.devops/infra/hetzner/hcloud-config.yaml +113 -0
  44. package/dist/src/target-templates/infra-variants/hetzner/.devops/infra/hetzner/ingress-nginx-annotations.yaml +49 -0
  45. package/dist/src/target-templates/infra-variants/hetzner/.devops/infra/hetzner/ingress-nginx-configmap.yaml +8 -0
  46. package/dist/src/target-templates/infra-variants/hetzner/.devops/infra/hetzner/retain-storage-class.yaml +8 -0
  47. package/dist/src/target-templates/infra-variants/hetzner/.github/workflows/k8s-build.yaml +93 -0
  48. package/dist/src/target-templates/lang-variants-common/README.md +4 -0
  49. package/dist/src/target-templates/lang-variants-common/python/.cursor/rules/monorepo-python.mdc +56 -0
  50. package/dist/src/target-templates/lang-variants-common/python/.devops/config/images.yaml +89 -0
  51. package/dist/src/target-templates/lang-variants-common/python/.devops/docker-images/python-services/python-exec.sh +8 -0
  52. package/dist/src/target-templates/lang-variants-common/python/.devops/docker-images/python-services/python-run.sh +8 -0
  53. package/dist/src/target-templates/lang-variants-common/python/.devops/docker-images/python-services.Dockerfile +29 -0
  54. package/dist/src/target-templates/lang-variants-common/python/.devops/manifests/_index.yaml +21 -0
  55. package/dist/src/target-templates/lang-variants-common/python/.devops/manifests/prefect.yaml.hb +63 -0
  56. package/dist/src/target-templates/lang-variants-common/python/applications/example-data-pipeline/pyproject.toml +14 -0
  57. package/dist/src/target-templates/lang-variants-common/python/applications/example-data-pipeline/src/example_data_pipeline/main.py +38 -0
  58. package/dist/src/target-templates/lang-variants-common/python/applications/example-python/pyproject.toml +20 -0
  59. package/dist/src/target-templates/lang-variants-common/python/applications/example-python/src/example_python/__init__.py +0 -0
  60. package/dist/src/target-templates/lang-variants-common/python/applications/example-python/src/example_python/main.py +13 -0
  61. package/dist/src/target-templates/lang-variants-common/python/applications/example-python/src/example_python/scripts.py +17 -0
  62. package/dist/src/target-templates/lang-variants-common/python/applications/example-python/tests/__init__.py +0 -0
  63. package/dist/src/target-templates/lang-variants-common/python/devopspy +3 -0
  64. package/dist/src/target-templates/lang-variants-common/python/libs/example-python-lib/pyproject.toml +11 -0
  65. package/dist/src/target-templates/lang-variants-common/python/libs/example-python-lib/src/example_python_lib/__init__.py +2 -0
  66. package/dist/src/target-templates/lang-variants-common/python/pyproject.toml +16 -0
  67. package/dist/src/target-templates/lang-variants-common/typescript/.cursor/rules/monorepo-typescript.mdc +51 -0
  68. package/dist/src/target-templates/lang-variants-common/typescript/.devops/config/images.yaml +69 -0
  69. package/dist/src/target-templates/lang-variants-common/typescript/.devops/docker-images/cloudrun.Dockerfile +31 -0
  70. package/dist/src/target-templates/lang-variants-common/typescript/.devops/docker-images/common/docker-common.sh +23 -0
  71. package/dist/src/target-templates/lang-variants-common/typescript/.devops/docker-images/node-services/node-exec.sh +8 -0
  72. package/dist/src/target-templates/lang-variants-common/typescript/.devops/docker-images/node-services/node-run.sh +8 -0
  73. package/dist/src/target-templates/lang-variants-common/typescript/.devops/docker-images/node-services.Dockerfile +31 -0
  74. package/dist/src/target-templates/lang-variants-common/typescript/.devops/env.example.yaml +23 -0
  75. package/dist/src/target-templates/lang-variants-common/typescript/.devops/manifests/_index.yaml +19 -0
  76. package/dist/src/target-templates/lang-variants-common/typescript/.devops/manifests/cron-jobs.yaml.hb +56 -0
  77. package/dist/src/target-templates/lang-variants-common/typescript/.devops/manifests/db-migrate-job.yaml.hb +43 -0
  78. package/dist/src/target-templates/lang-variants-common/typescript/.devops/manifests/deployment-debug.yaml.hb +42 -0
  79. package/dist/src/target-templates/lang-variants-common/typescript/.devops/manifests/deployment-process.yaml.hb +48 -0
  80. package/dist/src/target-templates/lang-variants-common/typescript/.devops/manifests/deployment-web.yaml.hb +54 -0
  81. package/dist/src/target-templates/lang-variants-common/typescript/.devops/manifests/ingress.yaml.hb +21 -0
  82. package/dist/src/target-templates/lang-variants-common/typescript/.devops/manifests/service.yaml.hb +15 -0
  83. package/dist/src/target-templates/lang-variants-common/typescript/.envrc +5 -0
  84. package/dist/src/target-templates/lang-variants-common/typescript/.github/actions/build-image@v1/action.yaml +81 -0
  85. package/dist/src/target-templates/lang-variants-common/typescript/.github/actions/connect-to-digital-ocean@v1/action.yaml +29 -0
  86. package/dist/src/target-templates/lang-variants-common/typescript/.github/actions/connect-to-gke@v1/action.yaml +43 -0
  87. package/dist/src/target-templates/lang-variants-common/typescript/.github/actions/connect-to-hetzner@v1/action.yaml +31 -0
  88. package/dist/src/target-templates/lang-variants-common/typescript/.github/actions/db-migrate@v1/action.yaml +23 -0
  89. package/dist/src/target-templates/lang-variants-common/typescript/.github/actions/deploy-image-cloudrun@v1/action.yaml +71 -0
  90. package/dist/src/target-templates/lang-variants-common/typescript/.github/actions/deploy-image-k8s@v1/action.yaml +37 -0
  91. package/dist/src/target-templates/lang-variants-common/typescript/.github/actions/setup-prereq@v1/action.yaml +24 -0
  92. package/dist/src/target-templates/lang-variants-common/typescript/applications/example-node/index.ts +30 -0
  93. package/dist/src/target-templates/lang-variants-common/typescript/applications/example-node/package.json +26 -0
  94. package/dist/src/target-templates/lang-variants-common/typescript/applications/example-node/tsconfig.json +3 -0
  95. package/dist/src/target-templates/lang-variants-common/typescript/applications/jobs/README.md +68 -0
  96. package/dist/src/target-templates/lang-variants-common/typescript/applications/jobs/index.ts +1 -0
  97. package/dist/src/target-templates/lang-variants-common/typescript/applications/jobs/package.json +30 -0
  98. package/dist/src/target-templates/lang-variants-common/typescript/applications/jobs/tsconfig.json +3 -0
  99. package/dist/src/target-templates/lang-variants-common/typescript/config/.env.development +1 -0
  100. package/dist/src/target-templates/lang-variants-common/typescript/config/.env.global +4 -0
  101. package/dist/src/target-templates/lang-variants-common/typescript/config/.env.test +1 -0
  102. package/dist/src/target-templates/lang-variants-common/typescript/devops +3 -0
  103. package/dist/src/target-templates/lang-variants-common/typescript/libs/example-node-lib/index.ts +3 -0
  104. package/dist/src/target-templates/lang-variants-common/typescript/libs/example-node-lib/package.json +12 -0
  105. package/dist/src/target-templates/lang-variants-common/typescript/libs/example-node-lib/tsconfig.json +3 -0
  106. package/dist/src/target-templates/lang-variants-common/typescript/tmp/.gitkeep +0 -0
  107. package/dist/src/target-templates/lang-variants-common/typescript/tsconfig.json +27 -0
  108. package/dist/src/target-templates/lang-variants-prisma/README.md +3 -0
  109. package/dist/src/target-templates/lang-variants-prisma/python/.cursor/rules/prisma-python.mdc +55 -0
  110. package/dist/src/target-templates/lang-variants-prisma/python/.cursor/rules/testing-python.mdc +89 -0
  111. package/dist/src/target-templates/lang-variants-prisma/python/db/db/__init__.py +0 -0
  112. package/dist/src/target-templates/lang-variants-prisma/python/db/db/db_client_test.py +46 -0
  113. package/dist/src/target-templates/lang-variants-prisma/python/db/pyproject.toml +14 -0
  114. package/dist/src/target-templates/lang-variants-prisma/typescript/.cursor/rules/prisma-typescript.mdc +54 -0
  115. package/dist/src/target-templates/lang-variants-prisma/typescript/.cursor/rules/testing-typescript.mdc +103 -0
  116. package/dist/src/target-templates/lang-variants-prisma/typescript/db/db-client-test.ts +142 -0
  117. package/dist/src/target-templates/lang-variants-prisma/typescript/db/db-client.ts +19 -0
  118. package/dist/src/target-templates/lang-variants-prisma/typescript/db/env.yaml +4 -0
  119. package/dist/src/target-templates/lang-variants-prisma/typescript/db/package.json +17 -0
  120. package/dist/src/target-templates/lang-variants-prisma/typescript/db/prisma/schema.prisma +24 -0
  121. package/dist/src/target-templates/lang-variants-prisma/typescript/db/prisma-setup-vitest.ts +27 -0
  122. package/dist/src/target-templates/lang-variants-prisma/typescript/db/tsconfig.json +3 -0
  123. package/dist/src/target-templates/lang-variants-prisma/typescript/dml/package.json +7 -0
  124. package/dist/src/target-templates/lang-variants-prisma/typescript/dml/tsconfig.json +3 -0
  125. package/package.json +3 -2
  126. package/src/cli/core/exec.ts +2 -4
  127. package/src/cli/core/run.ts +2 -4
  128. package/src/cli/extensions/prisma.ts +2 -4
  129. package/src/libs/init-generator.ts +2 -4
  130. package/src/pkg-root.ts +14 -0
  131. package/src/plugins.ts +2 -4
  132. package/src/target-templates/lang-variants-common/python/.cursor/rules/monorepo-python.mdc +56 -0
  133. package/src/target-templates/lang-variants-common/typescript/.cursor/rules/monorepo-typescript.mdc +51 -0
  134. package/src/target-templates/lang-variants-prisma/python/.cursor/rules/prisma-python.mdc +55 -0
  135. package/src/target-templates/lang-variants-prisma/python/.cursor/rules/testing-python.mdc +89 -0
  136. package/src/target-templates/lang-variants-prisma/typescript/.cursor/rules/prisma-typescript.mdc +54 -0
  137. package/src/target-templates/lang-variants-prisma/typescript/.cursor/rules/testing-typescript.mdc +103 -0
  138. package/src/target-templates/lang-variants-prisma/typescript/db/db-client-test.ts +5 -3
  139. package/dist/app-support/crypto/aes.d.ts +0 -15
  140. package/dist/app-support/crypto/aes.d.ts.map +0 -1
  141. package/dist/app-support/crypto/aes.js +0 -56
  142. package/dist/app-support/crypto/aes.spec.d.ts +0 -2
  143. package/dist/app-support/crypto/aes.spec.d.ts.map +0 -1
  144. package/dist/app-support/crypto/aes.spec.js +0 -58
  145. package/dist/app-support/crypto/index.d.ts +0 -16
  146. package/dist/app-support/crypto/index.d.ts.map +0 -1
  147. package/dist/app-support/crypto/index.js +0 -31
  148. package/dist/app-support/crypto/internal-token.d.ts +0 -20
  149. package/dist/app-support/crypto/internal-token.d.ts.map +0 -1
  150. package/dist/app-support/crypto/internal-token.js +0 -42
  151. package/dist/app-support/crypto/internal-token.spec.d.ts +0 -2
  152. package/dist/app-support/crypto/internal-token.spec.d.ts.map +0 -1
  153. package/dist/app-support/crypto/internal-token.spec.js +0 -45
  154. package/dist/app-support/crypto/secret.d.ts +0 -3
  155. package/dist/app-support/crypto/secret.d.ts.map +0 -1
  156. package/dist/app-support/crypto/secret.js +0 -12
  157. package/dist/app-support/crypto/secret.spec.d.ts +0 -2
  158. package/dist/app-support/crypto/secret.spec.d.ts.map +0 -1
  159. package/dist/app-support/crypto/secret.spec.js +0 -15
  160. package/dist/app-support/discovery/dev-discovery-loader.d.ts +0 -2
  161. package/dist/app-support/discovery/dev-discovery-loader.d.ts.map +0 -1
  162. package/dist/app-support/discovery/dev-discovery-loader.js +0 -30
  163. package/dist/app-support/discovery/service-endpoint.d.ts +0 -2
  164. package/dist/app-support/discovery/service-endpoint.d.ts.map +0 -1
  165. package/dist/app-support/discovery/service-endpoint.js +0 -10
  166. package/dist/cli/common.d.ts +0 -89
  167. package/dist/cli/common.d.ts.map +0 -1
  168. package/dist/cli/common.js +0 -246
  169. package/dist/cli/common.spec.d.ts +0 -2
  170. package/dist/cli/common.spec.d.ts.map +0 -1
  171. package/dist/cli/common.spec.js +0 -64
  172. package/dist/cli/core/affected.d.ts +0 -9
  173. package/dist/cli/core/affected.d.ts.map +0 -1
  174. package/dist/cli/core/affected.js +0 -101
  175. package/dist/cli/core/cloudrun.d.ts +0 -9
  176. package/dist/cli/core/cloudrun.d.ts.map +0 -1
  177. package/dist/cli/core/cloudrun.js +0 -119
  178. package/dist/cli/core/console.d.ts +0 -10
  179. package/dist/cli/core/console.d.ts.map +0 -1
  180. package/dist/cli/core/console.js +0 -50
  181. package/dist/cli/core/constant.d.ts +0 -9
  182. package/dist/cli/core/constant.d.ts.map +0 -1
  183. package/dist/cli/core/constant.js +0 -20
  184. package/dist/cli/core/env.d.ts +0 -9
  185. package/dist/cli/core/env.d.ts.map +0 -1
  186. package/dist/cli/core/env.js +0 -65
  187. package/dist/cli/core/exec.d.ts +0 -9
  188. package/dist/cli/core/exec.d.ts.map +0 -1
  189. package/dist/cli/core/exec.js +0 -48
  190. package/dist/cli/core/image.d.ts +0 -9
  191. package/dist/cli/core/image.d.ts.map +0 -1
  192. package/dist/cli/core/image.js +0 -153
  193. package/dist/cli/core/index.d.ts +0 -16
  194. package/dist/cli/core/index.d.ts.map +0 -1
  195. package/dist/cli/core/index.js +0 -15
  196. package/dist/cli/core/init.d.ts +0 -9
  197. package/dist/cli/core/init.d.ts.map +0 -1
  198. package/dist/cli/core/init.js +0 -219
  199. package/dist/cli/core/job.d.ts +0 -9
  200. package/dist/cli/core/job.d.ts.map +0 -1
  201. package/dist/cli/core/job.js +0 -65
  202. package/dist/cli/core/namespace.d.ts +0 -9
  203. package/dist/cli/core/namespace.d.ts.map +0 -1
  204. package/dist/cli/core/namespace.js +0 -67
  205. package/dist/cli/core/prep-build.d.ts +0 -10
  206. package/dist/cli/core/prep-build.d.ts.map +0 -1
  207. package/dist/cli/core/prep-build.js +0 -109
  208. package/dist/cli/core/registry.d.ts +0 -9
  209. package/dist/cli/core/registry.d.ts.map +0 -1
  210. package/dist/cli/core/registry.js +0 -66
  211. package/dist/cli/core/run-many.d.ts +0 -10
  212. package/dist/cli/core/run-many.d.ts.map +0 -1
  213. package/dist/cli/core/run-many.js +0 -48
  214. package/dist/cli/core/run.d.ts +0 -9
  215. package/dist/cli/core/run.d.ts.map +0 -1
  216. package/dist/cli/core/run.js +0 -35
  217. package/dist/cli/core/test.d.ts +0 -9
  218. package/dist/cli/core/test.d.ts.map +0 -1
  219. package/dist/cli/core/test.js +0 -26
  220. package/dist/cli/extensions/dml.d.ts +0 -9
  221. package/dist/cli/extensions/dml.d.ts.map +0 -1
  222. package/dist/cli/extensions/dml.js +0 -114
  223. package/dist/cli/extensions/index.d.ts +0 -9
  224. package/dist/cli/extensions/index.d.ts.map +0 -1
  225. package/dist/cli/extensions/index.js +0 -8
  226. package/dist/cli/extensions/internal-curl.d.ts +0 -10
  227. package/dist/cli/extensions/internal-curl.d.ts.map +0 -1
  228. package/dist/cli/extensions/internal-curl.js +0 -41
  229. package/dist/cli/extensions/jwt.d.ts +0 -9
  230. package/dist/cli/extensions/jwt.d.ts.map +0 -1
  231. package/dist/cli/extensions/jwt.js +0 -25
  232. package/dist/cli/extensions/prisma.d.ts +0 -9
  233. package/dist/cli/extensions/prisma.d.ts.map +0 -1
  234. package/dist/cli/extensions/prisma.js +0 -23
  235. package/dist/cli/extensions/redis-bitnami.d.ts +0 -11
  236. package/dist/cli/extensions/redis-bitnami.d.ts.map +0 -1
  237. package/dist/cli/extensions/redis-bitnami.js +0 -74
  238. package/dist/cli/extensions/redis-ha.d.ts +0 -11
  239. package/dist/cli/extensions/redis-ha.d.ts.map +0 -1
  240. package/dist/cli/extensions/redis-ha.js +0 -51
  241. package/dist/cli/extensions/stackgres.d.ts +0 -10
  242. package/dist/cli/extensions/stackgres.d.ts.map +0 -1
  243. package/dist/cli/extensions/stackgres.js +0 -117
  244. package/dist/cli/extensions/template.d.ts +0 -9
  245. package/dist/cli/extensions/template.d.ts.map +0 -1
  246. package/dist/cli/extensions/template.js +0 -121
  247. package/dist/devops.d.ts.map +0 -1
  248. package/dist/index.d.ts.map +0 -1
  249. package/dist/libs/affected-entities.d.ts +0 -15
  250. package/dist/libs/affected-entities.d.ts.map +0 -1
  251. package/dist/libs/affected-entities.js +0 -52
  252. package/dist/libs/cloudrun-helpers.d.ts +0 -16
  253. package/dist/libs/cloudrun-helpers.d.ts.map +0 -1
  254. package/dist/libs/cloudrun-helpers.js +0 -81
  255. package/dist/libs/config.d.ts +0 -7
  256. package/dist/libs/config.d.ts.map +0 -1
  257. package/dist/libs/config.js +0 -102
  258. package/dist/libs/digital-ocean/container-reg.d.ts +0 -6
  259. package/dist/libs/digital-ocean/container-reg.d.ts.map +0 -1
  260. package/dist/libs/digital-ocean/container-reg.js +0 -74
  261. package/dist/libs/discovery/dependencies.d.ts +0 -19
  262. package/dist/libs/discovery/dependencies.d.ts.map +0 -1
  263. package/dist/libs/discovery/dependencies.js +0 -62
  264. package/dist/libs/discovery/dependencies.spec.d.ts +0 -2
  265. package/dist/libs/discovery/dependencies.spec.d.ts.map +0 -1
  266. package/dist/libs/discovery/dependencies.spec.js +0 -21
  267. package/dist/libs/discovery/images.d.ts +0 -5
  268. package/dist/libs/discovery/images.d.ts.map +0 -1
  269. package/dist/libs/discovery/images.js +0 -45
  270. package/dist/libs/discovery/index.d.ts +0 -6
  271. package/dist/libs/discovery/index.d.ts.map +0 -1
  272. package/dist/libs/discovery/index.js +0 -67
  273. package/dist/libs/discovery/process-common.d.ts +0 -25
  274. package/dist/libs/discovery/process-common.d.ts.map +0 -1
  275. package/dist/libs/discovery/process-common.js +0 -40
  276. package/dist/libs/discovery/process-package-json.d.ts +0 -3
  277. package/dist/libs/discovery/process-package-json.d.ts.map +0 -1
  278. package/dist/libs/discovery/process-package-json.js +0 -40
  279. package/dist/libs/discovery/process-pyproject-toml.d.ts +0 -3
  280. package/dist/libs/discovery/process-pyproject-toml.d.ts.map +0 -1
  281. package/dist/libs/discovery/process-pyproject-toml.js +0 -49
  282. package/dist/libs/git-helpers.d.ts +0 -8
  283. package/dist/libs/git-helpers.d.ts.map +0 -1
  284. package/dist/libs/git-helpers.js +0 -20
  285. package/dist/libs/hetzner/reg-secret.d.ts +0 -3
  286. package/dist/libs/hetzner/reg-secret.d.ts.map +0 -1
  287. package/dist/libs/hetzner/reg-secret.js +0 -39
  288. package/dist/libs/init-generator.d.ts +0 -41
  289. package/dist/libs/init-generator.d.ts.map +0 -1
  290. package/dist/libs/init-generator.js +0 -123
  291. package/dist/libs/k8s-constants.d.ts +0 -13
  292. package/dist/libs/k8s-constants.d.ts.map +0 -1
  293. package/dist/libs/k8s-constants.js +0 -91
  294. package/dist/libs/k8s-db.d.ts +0 -18
  295. package/dist/libs/k8s-db.d.ts.map +0 -1
  296. package/dist/libs/k8s-db.js +0 -73
  297. package/dist/libs/k8s-generate.d.ts +0 -17
  298. package/dist/libs/k8s-generate.d.ts.map +0 -1
  299. package/dist/libs/k8s-generate.js +0 -193
  300. package/dist/libs/k8s-helpers.d.ts +0 -11
  301. package/dist/libs/k8s-helpers.d.ts.map +0 -1
  302. package/dist/libs/k8s-helpers.js +0 -42
  303. package/dist/libs/k8s-image-config.d.ts +0 -8
  304. package/dist/libs/k8s-image-config.d.ts.map +0 -1
  305. package/dist/libs/k8s-image-config.js +0 -113
  306. package/dist/libs/k8s-job-waiter.d.ts +0 -8
  307. package/dist/libs/k8s-job-waiter.d.ts.map +0 -1
  308. package/dist/libs/k8s-job-waiter.js +0 -84
  309. package/dist/libs/k8s-namespace.d.ts +0 -7
  310. package/dist/libs/k8s-namespace.d.ts.map +0 -1
  311. package/dist/libs/k8s-namespace.js +0 -27
  312. package/dist/libs/k8s-redis-bitnami.d.ts +0 -6
  313. package/dist/libs/k8s-redis-bitnami.d.ts.map +0 -1
  314. package/dist/libs/k8s-redis-bitnami.js +0 -31
  315. package/dist/libs/k8s-redis-ha.d.ts +0 -3
  316. package/dist/libs/k8s-redis-ha.d.ts.map +0 -1
  317. package/dist/libs/k8s-redis-ha.js +0 -15
  318. package/dist/libs/k8s-secrets-manager.d.ts +0 -6
  319. package/dist/libs/k8s-secrets-manager.d.ts.map +0 -1
  320. package/dist/libs/k8s-secrets-manager.js +0 -64
  321. package/dist/libs/validate-env.d.ts +0 -56
  322. package/dist/libs/validate-env.d.ts.map +0 -1
  323. package/dist/libs/validate-env.js +0 -214
  324. package/dist/libs/validate-env.spec.d.ts +0 -2
  325. package/dist/libs/validate-env.spec.d.ts.map +0 -1
  326. package/dist/libs/validate-env.spec.js +0 -168
  327. package/dist/plugins.d.ts.map +0 -1
  328. package/dist/types/index.d.ts +0 -939
  329. package/dist/types/index.d.ts.map +0 -1
  330. package/dist/types/index.js +0 -82
@@ -1,3 +0,0 @@
1
- export declare function copySecretHarborToNamespace(monorepoEnv: string): void;
2
- export declare function patchServiceAccountImagePullSecret(monorepoEnv: string): void;
3
- //# sourceMappingURL=reg-secret.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"reg-secret.d.ts","sourceRoot":"","sources":["../../../src/libs/hetzner/reg-secret.ts"],"names":[],"mappings":"AAgBA,wBAAgB,2BAA2B,CAAC,WAAW,EAAE,MAAM,QA2B9D;AAED,wBAAgB,kCAAkC,CAAC,WAAW,EAAE,MAAM,QAQrE"}
@@ -1,39 +0,0 @@
1
- import { CommandExecutor } from "../../cli/common";
2
- import { getConst } from "../config";
3
- import { envToNamespace } from "../k8s-constants";
4
- import { kubectlCommand } from "../k8s-helpers";
5
- function isApplicable() {
6
- const infra = getConst("infra");
7
- if (infra !== "hetzner") {
8
- console.warn("Setting up registry permissions is only needed for Harbor in a Hetzner setup");
9
- return false;
10
- }
11
- return true;
12
- }
13
- export function copySecretHarborToNamespace(monorepoEnv) {
14
- if (!isApplicable())
15
- return;
16
- const cmd = kubectlCommand("get secret harbor-registry-secret -o json", {
17
- monorepoEnv,
18
- namespace: "harbor",
19
- });
20
- const secretStr = new CommandExecutor(cmd, { quiet: true }).exec();
21
- const secretJson = JSON.parse(secretStr);
22
- const { apiVersion, data, kind, metadata: { name }, type, } = secretJson;
23
- const relevantParts = {
24
- apiVersion,
25
- data,
26
- kind,
27
- metadata: { name, namespace: envToNamespace(monorepoEnv) },
28
- type,
29
- };
30
- // prettier-ignore
31
- const copyCmd = `echo '${JSON.stringify(relevantParts)}' | kubectl apply -f -`;
32
- new CommandExecutor(copyCmd, { quiet: true }).exec();
33
- }
34
- export function patchServiceAccountImagePullSecret(monorepoEnv) {
35
- if (!isApplicable())
36
- return;
37
- const cmd = kubectlCommand(`patch serviceaccount default -p '{"imagePullSecrets": [{"name": "harbor-registry-secret"}]}'`, { monorepoEnv });
38
- new CommandExecutor(cmd, { quiet: true }).exec();
39
- }
@@ -1,41 +0,0 @@
1
- type MessageGeneratorFn = (targetExists: boolean, fileInfo: InitGeneratorFileInfo) => string | null | undefined;
2
- type CommonFileInfo = {
3
- targetRel: string;
4
- targetAbs: string;
5
- targetFolderAbs: string;
6
- targetExists: boolean;
7
- messageGenerator?: MessageGeneratorFn;
8
- };
9
- export type InitGeneratorCopiedFileInfo = CommonFileInfo & {
10
- type: "copied";
11
- sourceRel: string;
12
- sourceAbs: string;
13
- enableSubstitution?: boolean;
14
- };
15
- type InitGeneratorGeneratedFileInfo = CommonFileInfo & {
16
- type: "generated";
17
- content: string;
18
- };
19
- export type InitGeneratorFileInfo = InitGeneratorCopiedFileInfo | InitGeneratorGeneratedFileInfo;
20
- export declare class InitGenerator {
21
- projectName?: string;
22
- /** The key is targetRel */
23
- files: Record<string, InitGeneratorFileInfo>;
24
- constructor();
25
- _ensureFileExists(targetRel: string): void;
26
- enableSubtitution(targetRel: string): void;
27
- setMessageGenerator(targetRel: string, messageGen: MessageGeneratorFn): void;
28
- addGeneratedFile(targetRel: string, content: string): void;
29
- /**
30
- * @param source relative path under the templates folder. All files and folders under `source` are copied directly under `target`.
31
- * @param target relative path under the project root folder.
32
- * If the target file exists already in `files`, it will be overridden.
33
- */
34
- addCopiedFolder(source: string, target: string): void;
35
- run({ substitution, messages, }: {
36
- substitution?: Record<string, string | undefined>;
37
- messages?: string[];
38
- }): void;
39
- }
40
- export {};
41
- //# sourceMappingURL=init-generator.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"init-generator.d.ts","sourceRoot":"","sources":["../../src/libs/init-generator.ts"],"names":[],"mappings":"AAWA,KAAK,kBAAkB,GAAG,CAAC,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,qBAAqB,KAAK,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;AAEhH,KAAK,cAAc,GAAG;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,OAAO,CAAC;IACtB,gBAAgB,CAAC,EAAE,kBAAkB,CAAC;CACvC,CAAA;AAED,MAAM,MAAM,2BAA2B,GAAG,cAAc,GAAE;IACxD,IAAI,EAAE,QAAQ,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B,CAAA;AAED,KAAK,8BAA8B,GAAG,cAAc,GAAG;IACrD,IAAI,EAAE,WAAW,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB,CAAA;AAED,MAAM,MAAM,qBAAqB,GAAG,2BAA2B,GAAG,8BAA8B,CAAC;AAEjG,qBAAa,aAAa;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,2BAA2B;IAC3B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAM;;IASlD,iBAAiB,CAAC,SAAS,EAAE,MAAM;IAMnC,iBAAiB,CAAC,SAAS,EAAE,MAAM;IAQnC,mBAAmB,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,kBAAkB;IAKrE,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;IAcnD;;;;OAIG;IACH,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAsB9C,GAAG,CAAC,EACF,YAAiB,EACjB,QAAa,GACd,EAAG;QACF,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;QAClD,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;KACrB;CAkDF"}
@@ -1,123 +0,0 @@
1
- import url from "url";
2
- import path from "path";
3
- import fs from "fs-extra";
4
- import chalk from "chalk";
5
- import fg from 'fast-glob';
6
- const __file__ = url.fileURLToPath(import.meta.url);
7
- const __root__ = path.join(path.dirname(__file__), "../..");
8
- const templatesDir = path.join(__root__, "src/target-templates");
9
- const targetDir = process.cwd(); // User's current working directory
10
- export class InitGenerator {
11
- projectName;
12
- /** The key is targetRel */
13
- files = {};
14
- constructor() {
15
- if (fs.existsSync("package.json")) {
16
- const packageJson = fs.readJSONSync("package.json");
17
- this.projectName = packageJson.name;
18
- }
19
- }
20
- _ensureFileExists(targetRel) {
21
- if (!this.files[targetRel]) {
22
- throw new Error(`File for target "${targetRel}" not found.`);
23
- }
24
- }
25
- enableSubtitution(targetRel) {
26
- this._ensureFileExists(targetRel);
27
- if (this.files[targetRel].type !== "copied") {
28
- throw new Error(`File for target "${targetRel}" is not a copied file.`);
29
- }
30
- this.files[targetRel].enableSubstitution = true;
31
- }
32
- setMessageGenerator(targetRel, messageGen) {
33
- this._ensureFileExists(targetRel);
34
- this.files[targetRel].messageGenerator = messageGen;
35
- }
36
- addGeneratedFile(targetRel, content) {
37
- const targetAbs = path.join(targetDir, targetRel);
38
- const targetFolderAbs = path.dirname(targetAbs);
39
- const exists = fs.existsSync(targetAbs);
40
- this.files[targetRel] = {
41
- type: "generated",
42
- targetRel,
43
- targetAbs,
44
- targetFolderAbs,
45
- targetExists: exists,
46
- content,
47
- };
48
- }
49
- /**
50
- * @param source relative path under the templates folder. All files and folders under `source` are copied directly under `target`.
51
- * @param target relative path under the project root folder.
52
- * If the target file exists already in `files`, it will be overridden.
53
- */
54
- addCopiedFolder(source, target) {
55
- const pathPrefix = path.join(templatesDir, source);
56
- const glob = path.join(pathPrefix, '**/*');
57
- fg.globSync(glob, { dot: true }).forEach((sourceAbs) => {
58
- const sourceRel = path.relative(templatesDir, sourceAbs);
59
- const pathUnderSource = path.relative(pathPrefix, sourceAbs);
60
- const targetRel = path.join(target, pathUnderSource);
61
- const targetAbs = path.join(targetDir, targetRel);
62
- const targetFolderAbs = path.dirname(targetAbs);
63
- const exists = fs.existsSync(targetAbs);
64
- this.files[targetRel] = {
65
- type: "copied",
66
- sourceRel,
67
- targetRel,
68
- sourceAbs,
69
- targetAbs,
70
- targetFolderAbs,
71
- targetExists: exists,
72
- };
73
- });
74
- }
75
- run({ substitution = {}, messages = [], }) {
76
- const fileMessages = [];
77
- Object.values(this.files).forEach((fileInfo) => {
78
- if (fileInfo.messageGenerator) {
79
- const message = fileInfo.messageGenerator(fileInfo.targetExists, fileInfo);
80
- if (message) {
81
- fileMessages.push(message);
82
- }
83
- }
84
- if (fileInfo.targetExists) {
85
- console.log(`Skipped ${chalk.yellow(fileInfo.targetRel)} (exists)`);
86
- return;
87
- }
88
- // Create or copy
89
- if (!fs.existsSync(fileInfo.targetFolderAbs)) {
90
- fs.mkdirSync(fileInfo.targetFolderAbs, { recursive: true });
91
- }
92
- if (fileInfo.type === 'generated') {
93
- fs.writeFileSync(fileInfo.targetAbs, fileInfo.content, 'utf8');
94
- }
95
- else if (fileInfo.enableSubstitution) {
96
- const content = fs.readFileSync(fileInfo.sourceAbs, 'utf8');
97
- const substitutedContent = content.replace(/\$([A-Z_]+)/g, (_, varName) => {
98
- const value = substitution[varName];
99
- if (!value) {
100
- throw new Error(`${chalk.blue("TemplateCopier.run()")}: Variable ${chalk.yellow(varName)} is needed by ${chalk.yellow(fileInfo.targetRel)} but is undefined.`);
101
- }
102
- return value;
103
- });
104
- fs.writeFileSync(fileInfo.targetAbs, substitutedContent);
105
- }
106
- else {
107
- fs.copySync(fileInfo.sourceAbs, fileInfo.targetAbs, {
108
- overwrite: false,
109
- errorOnExist: false,
110
- dereference: false,
111
- });
112
- }
113
- console.log(`Created ${chalk.green(fileInfo.targetRel)}`);
114
- });
115
- const allMessages = [...messages, ...fileMessages];
116
- if (!allMessages.length)
117
- return;
118
- console.log(chalk.blue("\nNext steps:"));
119
- allMessages.forEach((msg, i) => {
120
- console.log(`${i + 1}. ${msg}\n`);
121
- });
122
- }
123
- }
@@ -1,13 +0,0 @@
1
- export declare const MISSING_DOMAIN_KEY_ERROR = "$$$MISSING_DOMAIN_KEY$$$";
2
- export declare function allSupportedEnvs(): string[];
3
- export declare function isLocalOrRemoteEnv(monorepoEnv: string): "local" | "remote";
4
- export declare function envToNamespace(monorepoEnv?: string): string;
5
- export declare function secretName(): string;
6
- export declare function imageDebugName(image: string): string;
7
- export declare function imageConfigMap(image: string): string;
8
- export declare function containerRegistryImageName(image: string, monorepoEnv: string): string;
9
- export declare function containerRegistryPath(): string;
10
- export declare function containerRegistryRepoPath(image: string, monorepoEnv: string, gitSha: string): string;
11
- export declare function domainNameForEnv(image: string, monorepoEnv: string): string;
12
- export declare function dbMigrateJobName(gitSha: string): string;
13
- //# sourceMappingURL=k8s-constants.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"k8s-constants.d.ts","sourceRoot":"","sources":["../../src/libs/k8s-constants.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,wBAAwB,6BAA6B,CAAA;AAoBlE,wBAAgB,gBAAgB,aAE/B;AAED,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,GAAG,QAAQ,CAI1E;AAqBD,wBAAgB,cAAc,CAAC,WAAW,CAAC,EAAE,MAAM,UAGlD;AAED,wBAAgB,UAAU,WAEzB;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,UAE3C;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,UAE3C;AAED,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,UAG5E;AAED,wBAAgB,qBAAqB,WAEpC;AAED,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,UAgBf;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,UAIlE;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,UAE9C"}
@@ -1,91 +0,0 @@
1
- import { getConst, getImageData } from "./config";
2
- export const MISSING_DOMAIN_KEY_ERROR = "$$$MISSING_DOMAIN_KEY$$$";
3
- const DEFAULT_REMOTE_ENVS = ["staging", "production"];
4
- const DEFAULT_LOCAL_ENVS = ["development", "test"];
5
- let _remoteSupportedEnvs;
6
- function remoteSupportedEnvs() {
7
- if (_remoteSupportedEnvs)
8
- return _remoteSupportedEnvs;
9
- const extra = getConst("extra-remote-environments", { ignoreIfInvalid: true }) ?? [];
10
- _remoteSupportedEnvs = [...DEFAULT_REMOTE_ENVS, ...extra];
11
- return _remoteSupportedEnvs;
12
- }
13
- let _localSupportedEnvs;
14
- function localSupportedEnvs() {
15
- if (_localSupportedEnvs)
16
- return _localSupportedEnvs;
17
- const extra = getConst("extra-local-environments", { ignoreIfInvalid: true }) ?? [];
18
- _localSupportedEnvs = [...DEFAULT_LOCAL_ENVS, ...extra];
19
- return _localSupportedEnvs;
20
- }
21
- export function allSupportedEnvs() {
22
- return [...remoteSupportedEnvs(), ...localSupportedEnvs()];
23
- }
24
- export function isLocalOrRemoteEnv(monorepoEnv) {
25
- if (remoteSupportedEnvs().includes(monorepoEnv))
26
- return "remote";
27
- if (localSupportedEnvs().includes(monorepoEnv))
28
- return "local";
29
- throw new Error(`Unsupported environment: ${monorepoEnv}`);
30
- }
31
- function validateEnv(monorepoEnv, { allowLocal = false } = {}) {
32
- if (!monorepoEnv)
33
- throw new Error("MONOREPO_ENV cannot be empty");
34
- if (allowLocal) {
35
- if (!allSupportedEnvs().includes(monorepoEnv)) {
36
- console.error(`MONOREPO_ENV must be one of: ${allSupportedEnvs().join(", ")}. Can be set using --env flag.`);
37
- process.exit(1);
38
- }
39
- }
40
- else {
41
- if (!remoteSupportedEnvs().includes(monorepoEnv)) {
42
- console.error(`MONOREPO_ENV must be one of: ${remoteSupportedEnvs().join(", ")}. Can be set using --env flag.`);
43
- process.exit(1);
44
- }
45
- }
46
- }
47
- export function envToNamespace(monorepoEnv) {
48
- validateEnv(monorepoEnv);
49
- return `${getConst("project-name")}-${monorepoEnv}`;
50
- }
51
- export function secretName() {
52
- return `${getConst("project-name")}-secret`;
53
- }
54
- export function imageDebugName(image) {
55
- return `${image}-debug`;
56
- }
57
- export function imageConfigMap(image) {
58
- return `image-config-${image}`;
59
- }
60
- export function containerRegistryImageName(image, monorepoEnv) {
61
- validateEnv(monorepoEnv, { allowLocal: true });
62
- return `${getConst("project-name")}-${monorepoEnv}-${image}`;
63
- }
64
- export function containerRegistryPath() {
65
- return [getConst("registry-base-url"), getConst("registry-image-path-prefix", { ignoreIfInvalid: true })].filter(Boolean).join("/");
66
- }
67
- export function containerRegistryRepoPath(image, monorepoEnv, gitSha) {
68
- const imageNameAndTag = [containerRegistryImageName(image, monorepoEnv), gitSha].join(":");
69
- const imageData = getImageData(image);
70
- if (imageData["cloudrun"]) {
71
- return [
72
- getConst("cloudrun-artifact-registry-repo-path"),
73
- imageNameAndTag,
74
- ].join("/");
75
- }
76
- else {
77
- return [
78
- getConst("registry-base-url"),
79
- getConst("registry-image-path-prefix", { ignoreIfInvalid: true }),
80
- imageNameAndTag,
81
- ].filter(Boolean).join("/");
82
- }
83
- }
84
- export function domainNameForEnv(image, monorepoEnv) {
85
- const imageData = getImageData(image);
86
- const value = imageData["domains"]?.[monorepoEnv] ?? MISSING_DOMAIN_KEY_ERROR;
87
- return value;
88
- }
89
- export function dbMigrateJobName(gitSha) {
90
- return `db-migrate-job-${gitSha.slice(0, 8)}`;
91
- }
@@ -1,18 +0,0 @@
1
- export declare function getDbList(): string | null;
2
- export declare function getDbBackups(): string | null;
3
- export declare function getDbAdminPassword(): {
4
- user: string;
5
- password: string;
6
- } | null;
7
- export declare function getDbPasswords(namespace: string): {
8
- superUser: string;
9
- superPassword: string;
10
- authenticatorUser: string;
11
- authenticatorPassword: string;
12
- replicationUser: string;
13
- replicationPassword: string;
14
- } | null;
15
- export declare function connectToPatroni(namespace: string): void;
16
- export declare function connectToPsql(namespace: string): void;
17
- export declare function establishTunnel(namespace: string, port: string): void;
18
- //# sourceMappingURL=k8s-db.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"k8s-db.d.ts","sourceRoot":"","sources":["../../src/libs/k8s-db.ts"],"names":[],"mappings":"AAGA,wBAAgB,SAAS,kBAKxB;AAED,wBAAgB,YAAY,kBAK3B;AAED,wBAAgB,kBAAkB;;;SAejC;AAED,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM;;;;;;;SAyB/C;AAED,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,QAMjD;AAED,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,QAM9C;AAED,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,QAK9D"}
@@ -1,73 +0,0 @@
1
- import { CommandExecutor } from "../cli/common";
2
- import { kubectlCommand } from "./k8s-helpers";
3
- export function getDbList() {
4
- const cmd = kubectlCommand(`get sgcluster -A`);
5
- const res = new CommandExecutor(cmd, { quiet: true }).exec();
6
- if (!res)
7
- return null;
8
- return res;
9
- }
10
- export function getDbBackups() {
11
- const cmd = kubectlCommand(`get sgbkp -A`);
12
- const res = new CommandExecutor(cmd, { quiet: true }).exec();
13
- if (!res)
14
- return null;
15
- return res;
16
- }
17
- export function getDbAdminPassword() {
18
- const cmd = kubectlCommand(`get secrets/stackgres-restapi-admin -o jsonpath="{.data}"`, { namespace: "stackgres" });
19
- const res = new CommandExecutor(cmd, { quiet: true }).exec();
20
- if (!res)
21
- return null;
22
- try {
23
- const resJson = JSON.parse(res);
24
- const password = atob(resJson["clearPassword"]);
25
- const user = atob(resJson["k8sUsername"]);
26
- return { user, password };
27
- }
28
- catch {
29
- return null;
30
- }
31
- }
32
- export function getDbPasswords(namespace) {
33
- const cmd = kubectlCommand(`get secrets/${namespace} -o jsonpath="{.data}"`, {
34
- namespace,
35
- });
36
- const res = new CommandExecutor(cmd, { quiet: true }).exec();
37
- if (!res)
38
- return null;
39
- try {
40
- const resJson = JSON.parse(res);
41
- const superUser = atob(resJson["superuser-username"]);
42
- const superPassword = atob(resJson["superuser-password"]);
43
- const authenticatorUser = atob(resJson["authenticator-username"]);
44
- const authenticatorPassword = atob(resJson["authenticator-password"]);
45
- const replicationUser = atob(resJson["replication-username"]);
46
- const replicationPassword = atob(resJson["replication-password"]);
47
- return {
48
- superUser,
49
- superPassword,
50
- authenticatorUser,
51
- authenticatorPassword,
52
- replicationUser,
53
- replicationPassword,
54
- };
55
- }
56
- catch {
57
- return null;
58
- }
59
- }
60
- export function connectToPatroni(namespace) {
61
- const cmd = kubectlCommand(`exec -it ${namespace}-0 -c patroni -- /bin/bash`, { namespace });
62
- new CommandExecutor(cmd).spawn();
63
- }
64
- export function connectToPsql(namespace) {
65
- const cmd = kubectlCommand(`exec -it ${namespace}-0 -c postgres-util -- psql`, { namespace });
66
- new CommandExecutor(cmd).spawn();
67
- }
68
- export function establishTunnel(namespace, port) {
69
- const cmd = kubectlCommand(`port-forward pod/${namespace}-0 ${port}:5432`, {
70
- namespace,
71
- });
72
- new CommandExecutor(cmd).spawn();
73
- }
@@ -1,17 +0,0 @@
1
- import type { PackageData, TemplateDbMigrateObject, TemplateDebugObject, TemplateDeploymentObject, TemplateSharedContext } from "../types";
2
- export declare function generateImageDeployments(monorepoEnv: string, image: string, gitSha: string): string;
3
- export declare function generateWorkspaceDeployment(packageData: PackageData, monorepoEnv: string, image: string, gitSha: string): string;
4
- export declare function generateDebugPod(monorepoEnv: string, image: string, gitSha: string): string | undefined;
5
- export declare function generateDbMigrateJob(monorepoEnv: string, image: string, gitSha: string): string;
6
- export declare class ImageContextGenerator {
7
- monorepoEnv: string;
8
- image: string;
9
- gitSha: string;
10
- replicaMap: Record<string, number>;
11
- imageContext: Omit<TemplateSharedContext, 'project_name'>;
12
- constructor(monorepoEnv: string, image: string, gitSha: string);
13
- getDeployment(pkgData: PackageData): TemplateDeploymentObject;
14
- getDbMigrate(): TemplateDbMigrateObject;
15
- getDebug(): TemplateDebugObject;
16
- }
17
- //# sourceMappingURL=k8s-generate.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"k8s-generate.d.ts","sourceRoot":"","sources":["../../src/libs/k8s-generate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,uBAAuB,EAAE,mBAAmB,EAAE,wBAAwB,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AA6B3I,wBAAgB,wBAAwB,CACtC,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,UAaf;AAED,wBAAgB,2BAA2B,CAAC,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,UAOvH;AAED,wBAAgB,gBAAgB,CAC9B,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,sBASf;AAED,wBAAgB,oBAAoB,CAClC,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,UAOf;AA+FD,qBAAa,qBAAqB;IAIb,WAAW,EAAE,MAAM;IAAS,KAAK,EAAE,MAAM;IAAS,MAAM,EAAE,MAAM;IAHnF,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,YAAY,EAAE,IAAI,CAAC,qBAAqB,EAAE,cAAc,CAAC,CAAC;gBAEvC,WAAW,EAAE,MAAM,EAAS,KAAK,EAAE,MAAM,EAAS,MAAM,EAAE,MAAM;IAYnF,aAAa,CAAC,OAAO,EAAE,WAAW,GAAG,wBAAwB;IAmB7D,YAAY,IAAI,uBAAuB;IAOvC,QAAQ,IAAI,mBAAmB;CAMhC"}
@@ -1,193 +0,0 @@
1
- import { BASE_SECRET_KEY } from "./k8s-namespace";
2
- import { containerRegistryRepoPath, dbMigrateJobName, domainNameForEnv, envToNamespace, imageDebugName, MISSING_DOMAIN_KEY_ERROR, secretName } from "./k8s-constants";
3
- import { getWorkspaceScale } from "./k8s-image-config";
4
- import path from "path";
5
- import yaml from "yaml";
6
- import fs from 'fs';
7
- import { globSync } from "glob";
8
- import _ from 'lodash';
9
- import Handlebars from "handlebars";
10
- import { getImageData } from "./config";
11
- import { getImageDescendentData } from "./discovery/images";
12
- const MANIFEST_FOLDER_PATH = path.join(process.cwd(), '.devops/manifests');
13
- const MANIFEST_INDEX_FILE_PATH = path.join(MANIFEST_FOLDER_PATH, '_index.yaml');
14
- const DB_MIGRATE_TEMPLATE_NAME = 'db-migrate';
15
- function verifyNotCloudrunImage(image) {
16
- const imageData = getImageData(image);
17
- if (imageData["cloudrun"]) {
18
- console.error(`Image ${image} is a cloudrun image. Cloudrun images are not supported for k8s generation`);
19
- process.exit(1);
20
- }
21
- }
22
- // = Interface
23
- export function generateImageDeployments(monorepoEnv, image, gitSha) {
24
- verifyNotCloudrunImage(image);
25
- const generator = new ImageContextGenerator(monorepoEnv, image, gitSha);
26
- const apps = getImageDescendentData(image)
27
- .filter((packageData) => packageData.deployment)
28
- .flatMap((projectData) => {
29
- const context = generator.getDeployment(projectData);
30
- const renderFn = (template) => Handlebars.compile(template)(context);
31
- return generateManifestForDeployment(projectData.rootPath, projectData.deployment.template, renderFn);
32
- });
33
- const manifest = apps.filter(Boolean).join("\n---\n");
34
- return ensureProperDomainsPresent(manifest, monorepoEnv, image);
35
- }
36
- export function generateWorkspaceDeployment(packageData, monorepoEnv, image, gitSha) {
37
- verifyNotCloudrunImage(image);
38
- const generator = new ImageContextGenerator(monorepoEnv, image, gitSha);
39
- const context = generator.getDeployment(packageData);
40
- const renderFn = (template) => Handlebars.compile(template)(context);
41
- const manifest = generateManifestForDeployment(packageData.rootPath, packageData.deployment.template, renderFn).join("\n---\n");
42
- return ensureProperDomainsPresent(manifest, monorepoEnv, image);
43
- }
44
- export function generateDebugPod(monorepoEnv, image, gitSha) {
45
- verifyNotCloudrunImage(image);
46
- const generator = new ImageContextGenerator(monorepoEnv, image, gitSha);
47
- const context = generator.getDebug();
48
- const renderFn = (template) => Handlebars.compile(template)(context);
49
- const debugTemplate = getImageData(image)["debug-template"];
50
- if (!debugTemplate)
51
- return;
52
- return generateManifestsFromTemplateName(debugTemplate, renderFn, { validate: false }).map(x => yaml.stringify(x)).join("\n---\n");
53
- }
54
- export function generateDbMigrateJob(monorepoEnv, image, gitSha) {
55
- verifyNotCloudrunImage(image);
56
- const generator = new ImageContextGenerator(monorepoEnv, image, gitSha);
57
- const context = generator.getDbMigrate();
58
- const renderFn = (template) => Handlebars.compile(template)(context);
59
- return generateManifestsFromTemplateName(DB_MIGRATE_TEMPLATE_NAME, renderFn).map(x => yaml.stringify(x)).join("\n---\n");
60
- }
61
- // = Verification
62
- function ensureProperDomainsPresent(manifest, monorepoEnv, image) {
63
- if (manifest.includes(MISSING_DOMAIN_KEY_ERROR)) {
64
- console.error(`The image ${image} does not have a domain defined for the environment ${monorepoEnv}. Please add it to the .devops/config/images.yaml.`);
65
- process.exit(1);
66
- }
67
- return manifest;
68
- }
69
- // = Generation logic
70
- // L1 generation: composite
71
- function generateManifestForDeployment(rootPath, templateName, renderFn) {
72
- const defaults = generateManifestsFromTemplateName(templateName, renderFn);
73
- const overrides = generateManifestFromFilesInFolder(rootPath, renderFn);
74
- const keyExtractor = (manifest) => `${manifest.kind}-${manifest.metadata.name}`;
75
- const defaultTemplateLookup = _.keyBy(defaults, keyExtractor);
76
- const overrideTemplateLookup = _.keyBy(overrides, keyExtractor);
77
- const mergedTemplates = _.merge(defaultTemplateLookup, overrideTemplateLookup);
78
- return Object.values(mergedTemplates).map(x => yaml.stringify(x));
79
- }
80
- // L2 generation
81
- function generateManifestsFromTemplateName(templateName, renderFn, options = { validate: true }) {
82
- const entries = manifestFilesForTemplate(templateName);
83
- if (!entries) {
84
- console.error(`No entries found for ${templateName} in ${MANIFEST_INDEX_FILE_PATH}`);
85
- process.exit(1);
86
- }
87
- return generateManifestsFromFileList(entries.map(entry => path.join(MANIFEST_FOLDER_PATH, entry)), renderFn, options);
88
- }
89
- // L2 generation
90
- function generateManifestFromFilesInFolder(folderPath, renderFn) {
91
- const manifestOverridePath = path.join(folderPath, 'manifests');
92
- if (!fs.existsSync(manifestOverridePath)) {
93
- return [];
94
- }
95
- const files = globSync(path.join(manifestOverridePath, '**/*')).filter(x => fs.lstatSync(x).isFile());
96
- return generateManifestsFromFileList(files, renderFn);
97
- }
98
- // L3 generation
99
- function generateManifestsFromFileList(filesList, renderFn, options = { validate: true }) {
100
- return filesList.flatMap((filePath) => {
101
- try {
102
- const manifestFileStr = fs.readFileSync(filePath, 'utf8');
103
- const renderedStr = renderFn(manifestFileStr);
104
- const res = yaml.parseAllDocuments(renderedStr);
105
- if (options.validate) {
106
- res.forEach((doc) => {
107
- if (!doc.get("kind") || !doc.getIn(["metadata", "name"])) {
108
- console.error(`Invalid manifest file ${filePath}: kind and metadata.name must be present`);
109
- console.error(doc.toString());
110
- process.exit(1);
111
- }
112
- });
113
- }
114
- return res.map(x => x.toJSON());
115
- }
116
- catch (e) {
117
- if (e instanceof Error) {
118
- console.error(`Could not parse ${filePath}: ${e.message}`);
119
- }
120
- else {
121
- console.error(`Could not parse ${filePath}`);
122
- }
123
- process.exit(1);
124
- }
125
- });
126
- }
127
- // Infra: the template index file
128
- let _manifestIndex;
129
- function manifestFilesForTemplate(template) {
130
- if (!_manifestIndex) {
131
- try {
132
- const indexFileStr = fs.readFileSync(MANIFEST_INDEX_FILE_PATH, 'utf8');
133
- _manifestIndex = yaml.parse(indexFileStr);
134
- }
135
- catch {
136
- console.error(`Unable to process ${MANIFEST_INDEX_FILE_PATH}`);
137
- process.exit(1);
138
- }
139
- }
140
- return _manifestIndex[template];
141
- }
142
- // Infra: the image context generator
143
- export class ImageContextGenerator {
144
- monorepoEnv;
145
- image;
146
- gitSha;
147
- replicaMap;
148
- imageContext;
149
- constructor(monorepoEnv, image, gitSha) {
150
- this.monorepoEnv = monorepoEnv;
151
- this.image = image;
152
- this.gitSha = gitSha;
153
- this.replicaMap = getWorkspaceScale(monorepoEnv, image);
154
- this.imageContext = {
155
- monorepo_env: monorepoEnv,
156
- namespace: envToNamespace(monorepoEnv),
157
- env_secret_name: secretName(),
158
- env_base_secret_key: BASE_SECRET_KEY,
159
- domain_name: domainNameForEnv(image, monorepoEnv),
160
- image_path: containerRegistryRepoPath(image, monorepoEnv, gitSha),
161
- };
162
- }
163
- getDeployment(pkgData) {
164
- if (!pkgData.deployment) {
165
- console.error(`The deployment key is missing for workspace ${pkgData.name}`);
166
- process.exit(1);
167
- }
168
- return {
169
- // Basic context
170
- project_name: pkgData.name,
171
- ...this.imageContext,
172
- // Defaults that can be overriden by pkgData.deployment
173
- app_name: pkgData.name,
174
- subdomain: pkgData.deployment.service_name,
175
- // This may override the defaults above
176
- ...pkgData.deployment,
177
- // Override from config map
178
- replicas: this.replicaMap[pkgData.name] ?? 1,
179
- };
180
- }
181
- getDbMigrate() {
182
- return {
183
- ...this.imageContext,
184
- db_migrate_job_name: dbMigrateJobName(this.gitSha),
185
- };
186
- }
187
- getDebug() {
188
- return {
189
- ...this.imageContext,
190
- debug_pod_name: imageDebugName(this.image)
191
- };
192
- }
193
- }
@@ -1,11 +0,0 @@
1
- export declare function kubectlCommand(cmd: string, opts?: {
2
- monorepoEnv?: string;
3
- namespace?: string;
4
- }): string;
5
- export declare function upsertConfigMapCommand(monorepoEnv: string, configMapName: string, data: Record<string, string>): string;
6
- export declare function patchSecretKeyCommand(monorepoEnv: string, secretName: string, secretKey: string, secretValue: string): {
7
- fullCommand: string;
8
- redactedCommand: string;
9
- };
10
- export declare function applyHandler(filePrefix: string, command: "apply" | "delete", manifest: string): void;
11
- //# sourceMappingURL=k8s-helpers.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"k8s-helpers.d.ts","sourceRoot":"","sources":["../../src/libs/k8s-helpers.ts"],"names":[],"mappings":"AAMA,wBAAgB,cAAc,CAC5B,GAAG,EAAE,MAAM,EACX,IAAI,GAAE;IAAE,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAO,UAQxD;AAED,wBAAgB,sBAAsB,CAAC,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,UAe9G;AAED,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM;;;EAUpH;AAED,wBAAgB,YAAY,CAC1B,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,OAAO,GAAG,QAAQ,EAC3B,QAAQ,EAAE,MAAM,QAQjB"}