@catladder/cli 0.0.0-test7 → 0.0.0-updatemongo6-140b516e

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 (304) hide show
  1. package/.nvmrc +1 -1
  2. package/README.md +6 -3
  3. package/bin/catenv +3 -0
  4. package/bin/catladder +1 -1
  5. package/dist/apps/catenv/catenv.d.ts +5 -0
  6. package/dist/apps/catenv/catenv.js +143 -0
  7. package/dist/apps/catenv/catenv.js.map +1 -0
  8. package/dist/apps/cli/cli.d.ts +2 -0
  9. package/dist/apps/cli/cli.js +81 -0
  10. package/dist/apps/cli/cli.js.map +1 -0
  11. package/dist/apps/cli/commands/general/index.d.ts +4 -0
  12. package/dist/apps/cli/commands/general/index.js +216 -0
  13. package/dist/apps/cli/commands/general/index.js.map +1 -0
  14. package/dist/apps/cli/commands/general/namespaceAutoCompletion.d.ts +3 -0
  15. package/dist/apps/cli/commands/general/namespaceAutoCompletion.js +56 -0
  16. package/dist/apps/cli/commands/general/namespaceAutoCompletion.js.map +1 -0
  17. package/dist/apps/cli/commands/general/portForward.d.ts +3 -0
  18. package/dist/apps/cli/commands/general/portForward.js +97 -0
  19. package/dist/apps/cli/commands/general/portForward.js.map +1 -0
  20. package/dist/apps/cli/commands/mongodb/index.d.ts +3 -0
  21. package/dist/apps/cli/commands/mongodb/index.js +53 -0
  22. package/dist/apps/cli/commands/mongodb/index.js.map +1 -0
  23. package/dist/apps/cli/commands/mongodb/projectMongoDestroyMember.d.ts +3 -0
  24. package/dist/apps/cli/commands/mongodb/projectMongoDestroyMember.js +190 -0
  25. package/dist/apps/cli/commands/mongodb/projectMongoDestroyMember.js.map +1 -0
  26. package/dist/apps/cli/commands/mongodb/projectMongoGetShell.d.ts +3 -0
  27. package/dist/apps/cli/commands/mongodb/projectMongoGetShell.js +96 -0
  28. package/dist/apps/cli/commands/mongodb/projectMongoGetShell.js.map +1 -0
  29. package/dist/apps/cli/commands/mongodb/projectMongoPortForward.d.ts +3 -0
  30. package/dist/apps/cli/commands/mongodb/projectMongoPortForward.js +121 -0
  31. package/dist/apps/cli/commands/mongodb/projectMongoPortForward.js.map +1 -0
  32. package/dist/apps/cli/commands/mongodb/utils/index.d.ts +13 -0
  33. package/dist/apps/cli/commands/mongodb/utils/index.js +178 -0
  34. package/dist/apps/cli/commands/mongodb/utils/index.js.map +1 -0
  35. package/dist/apps/cli/commands/project/commandCloudSqlProxy.d.ts +3 -0
  36. package/dist/apps/cli/commands/project/commandCloudSqlProxy.js +137 -0
  37. package/dist/apps/cli/commands/project/commandCloudSqlProxy.js.map +1 -0
  38. package/dist/apps/cli/commands/project/commandConfigSecrets.d.ts +4 -0
  39. package/dist/apps/cli/commands/project/commandConfigSecrets.js +298 -0
  40. package/dist/apps/cli/commands/project/commandConfigSecrets.js.map +1 -0
  41. package/dist/apps/cli/commands/project/commandCopyDB.d.ts +3 -0
  42. package/dist/apps/cli/commands/project/commandCopyDB.js +80 -0
  43. package/dist/apps/cli/commands/project/commandCopyDB.js.map +1 -0
  44. package/dist/apps/cli/commands/project/commandDeletePods.d.ts +3 -0
  45. package/dist/apps/cli/commands/project/commandDeletePods.js +120 -0
  46. package/dist/apps/cli/commands/project/commandDeletePods.js.map +1 -0
  47. package/dist/apps/cli/commands/project/commandDeleteProject.d.ts +3 -0
  48. package/dist/apps/cli/commands/project/commandDeleteProject.js +97 -0
  49. package/dist/apps/cli/commands/project/commandDeleteProject.js.map +1 -0
  50. package/dist/apps/cli/commands/project/commandEnvVars.d.ts +3 -0
  51. package/dist/apps/cli/commands/project/commandEnvVars.js +74 -0
  52. package/dist/apps/cli/commands/project/commandEnvVars.js.map +1 -0
  53. package/dist/apps/cli/commands/project/commandGetMyTotalWorktime.d.ts +3 -0
  54. package/dist/apps/cli/commands/project/commandGetMyTotalWorktime.js +58 -0
  55. package/dist/apps/cli/commands/project/commandGetMyTotalWorktime.js.map +1 -0
  56. package/dist/apps/cli/commands/project/commandGetShell.d.ts +3 -0
  57. package/dist/apps/cli/commands/project/commandGetShell.js +92 -0
  58. package/dist/apps/cli/commands/project/commandGetShell.js.map +1 -0
  59. package/dist/apps/cli/commands/project/commandGitlabCi.d.ts +3 -0
  60. package/dist/apps/cli/commands/project/commandGitlabCi.js +185 -0
  61. package/dist/apps/cli/commands/project/commandGitlabCi.js.map +1 -0
  62. package/dist/apps/cli/commands/project/commandInitProject.old.d.ts +3 -0
  63. package/dist/apps/cli/commands/project/commandInitProject.old.js +345 -0
  64. package/dist/apps/cli/commands/project/commandInitProject.old.js.map +1 -0
  65. package/dist/apps/cli/commands/project/commandListPods.d.ts +3 -0
  66. package/dist/apps/cli/commands/project/commandListPods.js +78 -0
  67. package/dist/apps/cli/commands/project/commandListPods.js.map +1 -0
  68. package/dist/apps/cli/commands/project/commandMigrateHelm3.d.ts +7 -0
  69. package/dist/apps/cli/commands/project/commandMigrateHelm3.js +113 -0
  70. package/dist/apps/cli/commands/project/commandMigrateHelm3.js.map +1 -0
  71. package/dist/apps/cli/commands/project/commandNamespace.d.ts +3 -0
  72. package/dist/apps/cli/commands/project/commandNamespace.js +70 -0
  73. package/dist/apps/cli/commands/project/commandNamespace.js.map +1 -0
  74. package/dist/apps/cli/commands/project/commandOpenCostDashboard.d.ts +3 -0
  75. package/dist/apps/cli/commands/project/commandOpenCostDashboard.js +83 -0
  76. package/dist/apps/cli/commands/project/commandOpenCostDashboard.js.map +1 -0
  77. package/dist/apps/cli/commands/project/commandOpenDashboard.d.ts +3 -0
  78. package/dist/apps/cli/commands/project/commandOpenDashboard.js +85 -0
  79. package/dist/apps/cli/commands/project/commandOpenDashboard.js.map +1 -0
  80. package/dist/apps/cli/commands/project/commandOpenEnv.d.ts +3 -0
  81. package/dist/apps/cli/commands/project/commandOpenEnv.js +80 -0
  82. package/dist/apps/cli/commands/project/commandOpenEnv.js.map +1 -0
  83. package/dist/apps/cli/commands/project/commandOpenGit.d.ts +3 -0
  84. package/dist/apps/cli/commands/project/commandOpenGit.js +61 -0
  85. package/dist/apps/cli/commands/project/commandOpenGit.js.map +1 -0
  86. package/dist/apps/cli/commands/project/commandOpenGrafana.d.ts +3 -0
  87. package/dist/apps/cli/commands/project/commandOpenGrafana.js +83 -0
  88. package/dist/apps/cli/commands/project/commandOpenGrafana.js.map +1 -0
  89. package/dist/apps/cli/commands/project/commandOpenGrafanaPod.d.ts +3 -0
  90. package/dist/apps/cli/commands/project/commandOpenGrafanaPod.js +99 -0
  91. package/dist/apps/cli/commands/project/commandOpenGrafanaPod.js.map +1 -0
  92. package/dist/apps/cli/commands/project/commandOpenLogs.d.ts +3 -0
  93. package/dist/apps/cli/commands/project/commandOpenLogs.js +87 -0
  94. package/dist/apps/cli/commands/project/commandOpenLogs.js.map +1 -0
  95. package/dist/apps/cli/commands/project/commandPauseProject.d.ts +3 -0
  96. package/dist/apps/cli/commands/project/commandPauseProject.js +97 -0
  97. package/dist/apps/cli/commands/project/commandPauseProject.js.map +1 -0
  98. package/dist/apps/cli/commands/project/commandPortForward.d.ts +3 -0
  99. package/dist/apps/cli/commands/project/commandPortForward.js +106 -0
  100. package/dist/apps/cli/commands/project/commandPortForward.js.map +1 -0
  101. package/dist/apps/cli/commands/project/commandSetup.d.ts +3 -0
  102. package/dist/apps/cli/commands/project/commandSetup.js +58 -0
  103. package/dist/apps/cli/commands/project/commandSetup.js.map +1 -0
  104. package/dist/apps/cli/commands/project/commandTriggerCronjob.d.ts +3 -0
  105. package/dist/apps/cli/commands/project/commandTriggerCronjob.js +144 -0
  106. package/dist/apps/cli/commands/project/commandTriggerCronjob.js.map +1 -0
  107. package/dist/apps/cli/commands/project/index.d.ts +3 -0
  108. package/dist/apps/cli/commands/project/index.js +94 -0
  109. package/dist/apps/cli/commands/project/index.js.map +1 -0
  110. package/dist/apps/cli/commands/project/setup/index.d.ts +2 -0
  111. package/dist/apps/cli/commands/project/setup/index.js +103 -0
  112. package/dist/apps/cli/commands/project/setup/index.js.map +1 -0
  113. package/dist/apps/cli/commands/project/setup/setupAccessTokens.d.ts +2 -0
  114. package/dist/apps/cli/commands/project/setup/setupAccessTokens.js +116 -0
  115. package/dist/apps/cli/commands/project/setup/setupAccessTokens.js.map +1 -0
  116. package/dist/apps/cli/commands/project/setup/setupContext.d.ts +3 -0
  117. package/dist/apps/cli/commands/project/setup/setupContext.js +74 -0
  118. package/dist/apps/cli/commands/project/setup/setupContext.js.map +1 -0
  119. package/dist/apps/cli/commands/project/setup/setupKubernetes.d.ts +3 -0
  120. package/dist/apps/cli/commands/project/setup/setupKubernetes.js +133 -0
  121. package/dist/apps/cli/commands/project/setup/setupKubernetes.js.map +1 -0
  122. package/dist/apps/cli/commands/project/utils/autocompletions.d.ts +3 -0
  123. package/dist/apps/cli/commands/project/utils/autocompletions.js +96 -0
  124. package/dist/apps/cli/commands/project/utils/autocompletions.js.map +1 -0
  125. package/dist/apps/cli/commands/project/utils/ensureCluster.d.ts +1 -0
  126. package/dist/apps/cli/commands/project/utils/ensureCluster.js +84 -0
  127. package/dist/apps/cli/commands/project/utils/ensureCluster.js.map +1 -0
  128. package/dist/apps/cli/commands/project/utils/ensureNamespace.d.ts +2 -0
  129. package/dist/apps/cli/commands/project/utils/ensureNamespace.js +104 -0
  130. package/dist/apps/cli/commands/project/utils/ensureNamespace.js.map +1 -0
  131. package/dist/apps/cli/commands/project/utils/showProjectBanner.d.ts +2 -0
  132. package/dist/apps/cli/commands/project/utils/showProjectBanner.js +58 -0
  133. package/dist/apps/cli/commands/project/utils/showProjectBanner.js.map +1 -0
  134. package/dist/apps/cli/commands/shared/index.d.ts +3 -0
  135. package/dist/apps/cli/commands/shared/index.js +70 -0
  136. package/dist/apps/cli/commands/shared/index.js.map +1 -0
  137. package/dist/apps/cli/commands/theStuffThatReallyMatters/index.d.ts +3 -0
  138. package/dist/apps/cli/commands/theStuffThatReallyMatters/index.js +101 -0
  139. package/dist/apps/cli/commands/theStuffThatReallyMatters/index.js.map +1 -0
  140. package/dist/apps/cli/config/writeConfig.d.ts +5 -0
  141. package/dist/apps/cli/config/writeConfig.js +106 -0
  142. package/dist/apps/cli/config/writeConfig.js.map +1 -0
  143. package/dist/apps/cli/utils/getGoogleAuthUserNumber.d.ts +1 -0
  144. package/dist/apps/cli/utils/getGoogleAuthUserNumber.js +69 -0
  145. package/dist/apps/cli/utils/getGoogleAuthUserNumber.js.map +1 -0
  146. package/dist/apps/cli/verify/index.d.ts +2 -0
  147. package/dist/apps/cli/verify/index.js +94 -0
  148. package/dist/apps/cli/verify/index.js.map +1 -0
  149. package/dist/apps/cli/verify/migration/fromv2.d.ts +4 -0
  150. package/dist/apps/cli/verify/migration/fromv2.js +347 -0
  151. package/dist/apps/cli/verify/migration/fromv2.js.map +1 -0
  152. package/dist/apps/cli/verify/migration/migrateSecrets.d.ts +4 -0
  153. package/dist/apps/cli/verify/migration/migrateSecrets.js +88 -0
  154. package/dist/apps/cli/verify/migration/migrateSecrets.js.map +1 -0
  155. package/dist/apps/cli/verify/migration/oldGitlabCi.d.ts +18 -0
  156. package/dist/apps/cli/verify/migration/oldGitlabCi.js +30 -0
  157. package/dist/apps/cli/verify/migration/oldGitlabCi.js.map +1 -0
  158. package/dist/catenv.d.ts +1 -0
  159. package/dist/catenv.js +15 -0
  160. package/dist/catenv.js.map +1 -0
  161. package/dist/cli.d.ts +1 -0
  162. package/dist/cli.js +15 -0
  163. package/dist/cli.js.map +1 -0
  164. package/dist/config/constants.d.ts +2 -0
  165. package/dist/config/constants.js +6 -0
  166. package/dist/config/constants.js.map +1 -0
  167. package/dist/config/getProjectConfig.d.ts +24 -0
  168. package/dist/config/getProjectConfig.js +259 -0
  169. package/dist/config/getProjectConfig.js.map +1 -0
  170. package/dist/k8sApi/index.d.ts +8 -0
  171. package/dist/k8sApi/index.js +29 -0
  172. package/dist/k8sApi/index.js.map +1 -0
  173. package/dist/packageInfos.d.ts +2 -0
  174. package/dist/packageInfos.js +6 -0
  175. package/dist/packageInfos.js.map +1 -0
  176. package/dist/tsconfig.tsbuildinfo +1 -0
  177. package/dist/types/types.d.ts +18 -0
  178. package/dist/types/types.js +3 -0
  179. package/dist/types/types.js.map +1 -0
  180. package/dist/utils/cluster.d.ts +3 -0
  181. package/dist/utils/cluster.js +73 -0
  182. package/dist/utils/cluster.js.map +1 -0
  183. package/dist/utils/editAsFile.d.ts +1 -0
  184. package/dist/utils/editAsFile.js +85 -0
  185. package/dist/utils/editAsFile.js.map +1 -0
  186. package/dist/utils/files.d.ts +2 -0
  187. package/dist/utils/files.js +83 -0
  188. package/dist/utils/files.js.map +1 -0
  189. package/dist/utils/getEditor.d.ts +4 -0
  190. package/dist/utils/getEditor.js +70 -0
  191. package/dist/utils/getEditor.js.map +1 -0
  192. package/dist/utils/gitlab.d.ts +22 -0
  193. package/dist/utils/gitlab.js +340 -0
  194. package/dist/utils/gitlab.js.map +1 -0
  195. package/dist/utils/log.d.ts +1 -0
  196. package/dist/utils/log.js +14 -0
  197. package/dist/utils/log.js.map +1 -0
  198. package/dist/utils/passwordstore/index.d.ts +7 -0
  199. package/dist/utils/passwordstore/index.js +315 -0
  200. package/dist/utils/passwordstore/index.js.map +1 -0
  201. package/dist/utils/portForward.d.ts +4 -0
  202. package/dist/utils/portForward.js +116 -0
  203. package/dist/utils/portForward.js.map +1 -0
  204. package/dist/utils/preferences/index.d.ts +3 -0
  205. package/dist/utils/preferences/index.js +119 -0
  206. package/dist/utils/preferences/index.js.map +1 -0
  207. package/dist/utils/projects/index.d.ts +8 -0
  208. package/dist/utils/projects/index.js +154 -0
  209. package/dist/utils/projects/index.js.map +1 -0
  210. package/dist/utils/promise.d.ts +2 -0
  211. package/dist/utils/promise.js +62 -0
  212. package/dist/utils/promise.js.map +1 -0
  213. package/dist/utils/shell.d.ts +1 -0
  214. package/dist/utils/shell.js +81 -0
  215. package/dist/utils/shell.js.map +1 -0
  216. package/package.json +17 -21
  217. package/src/apps/catenv/catenv.ts +55 -27
  218. package/src/apps/{shell/shell.ts → cli/cli.ts} +10 -2
  219. package/src/apps/{shell → cli}/commands/general/index.ts +7 -46
  220. package/src/apps/{shell → cli}/commands/general/namespaceAutoCompletion.ts +0 -0
  221. package/src/apps/{shell → cli}/commands/general/portForward.ts +3 -2
  222. package/src/apps/{shell → cli}/commands/mongodb/index.ts +1 -1
  223. package/src/apps/{shell → cli}/commands/mongodb/projectMongoDestroyMember.ts +18 -18
  224. package/src/apps/{shell → cli}/commands/mongodb/projectMongoGetShell.ts +12 -10
  225. package/src/apps/cli/commands/mongodb/projectMongoPortForward.ts +62 -0
  226. package/src/apps/{shell → cli}/commands/mongodb/utils/index.ts +26 -15
  227. package/src/apps/cli/commands/project/commandCloudSqlProxy.ts +88 -0
  228. package/src/apps/cli/commands/project/commandConfigSecrets.ts +200 -0
  229. package/src/apps/{shell → cli}/commands/project/commandCopyDB.ts +25 -26
  230. package/src/apps/{shell → cli}/commands/project/commandDeletePods.ts +10 -10
  231. package/src/apps/{shell → cli}/commands/project/commandDeleteProject.ts +7 -8
  232. package/src/apps/cli/commands/project/commandEnvVars.ts +15 -0
  233. package/src/apps/{shell → cli}/commands/project/commandGetMyTotalWorktime.ts +2 -2
  234. package/src/apps/{shell → cli}/commands/project/commandGetShell.ts +10 -10
  235. package/src/apps/{shell → cli}/commands/project/commandGitlabCi.ts +1 -1
  236. package/src/apps/{shell/commands/project/commandInitProject.ts → cli/commands/project/commandInitProject.old.ts} +14 -6
  237. package/src/apps/cli/commands/project/commandListPods.ts +18 -0
  238. package/src/apps/{shell → cli}/commands/project/commandMigrateHelm3.ts +16 -7
  239. package/src/apps/cli/commands/project/commandNamespace.ts +14 -0
  240. package/src/apps/{shell → cli}/commands/project/commandOpenCostDashboard.ts +10 -7
  241. package/src/apps/cli/commands/project/commandOpenDashboard.ts +48 -0
  242. package/src/apps/cli/commands/project/commandOpenEnv.ts +22 -0
  243. package/src/apps/{shell → cli}/commands/project/commandOpenGit.ts +3 -3
  244. package/src/apps/{shell → cli}/commands/project/commandOpenGrafana.ts +7 -7
  245. package/src/apps/{shell → cli}/commands/project/commandOpenGrafanaPod.ts +9 -10
  246. package/src/apps/cli/commands/project/commandOpenLogs.ts +52 -0
  247. package/src/apps/{shell → cli}/commands/project/commandPauseProject.ts +9 -7
  248. package/src/apps/{shell → cli}/commands/project/commandPortForward.ts +8 -8
  249. package/src/apps/cli/commands/project/commandSetup.ts +12 -0
  250. package/src/apps/{shell → cli}/commands/project/commandTriggerCronjob.ts +10 -10
  251. package/src/apps/{shell → cli}/commands/project/index.ts +6 -7
  252. package/src/apps/cli/commands/project/setup/index.ts +42 -0
  253. package/src/apps/cli/commands/project/setup/setupAccessTokens.ts +73 -0
  254. package/src/apps/cli/commands/project/setup/setupContext.ts +37 -0
  255. package/src/apps/cli/commands/project/setup/setupKubernetes.ts +113 -0
  256. package/src/apps/cli/commands/project/utils/autocompletions.ts +26 -0
  257. package/src/apps/cli/commands/project/utils/ensureCluster.ts +42 -0
  258. package/src/apps/cli/commands/project/utils/ensureNamespace.ts +56 -0
  259. package/src/apps/cli/commands/project/utils/showProjectBanner.ts +11 -0
  260. package/src/apps/cli/commands/shared/index.ts +36 -0
  261. package/src/apps/{shell → cli}/commands/theStuffThatReallyMatters/index.ts +7 -26
  262. package/src/apps/cli/config/writeConfig.ts +71 -0
  263. package/src/apps/{shell → cli}/utils/getGoogleAuthUserNumber.ts +0 -0
  264. package/src/apps/cli/verify/index.ts +30 -0
  265. package/src/apps/cli/verify/migration/fromv2.ts +264 -0
  266. package/src/apps/cli/verify/migration/migrateSecrets.ts +37 -0
  267. package/src/apps/cli/verify/migration/oldGitlabCi.ts +48 -0
  268. package/src/catenv.ts +11 -0
  269. package/src/cli.ts +9 -0
  270. package/src/config/constants.ts +0 -3
  271. package/src/config/getProjectConfig.ts +160 -0
  272. package/src/k8sApi/index.ts +22 -6
  273. package/src/types/types.ts +0 -2
  274. package/src/utils/cluster.ts +6 -15
  275. package/src/utils/editAsFile.ts +31 -0
  276. package/src/utils/files.ts +6 -2
  277. package/src/utils/gitlab.ts +212 -34
  278. package/src/utils/passwordstore/index.ts +4 -34
  279. package/src/utils/preferences/index.ts +6 -3
  280. package/src/utils/projects/index.ts +22 -138
  281. package/tsconfig.json +3 -7
  282. package/bin/catenv.sh +0 -1
  283. package/src/apps/shell/commands/mongodb/projectMongoPortForward.ts +0 -42
  284. package/src/apps/shell/commands/project/commandCloudSqlProxy.ts +0 -65
  285. package/src/apps/shell/commands/project/commandConfigSecrets.ts +0 -245
  286. package/src/apps/shell/commands/project/commandEnvVars.ts +0 -17
  287. package/src/apps/shell/commands/project/commandInitGitlab.ts +0 -157
  288. package/src/apps/shell/commands/project/commandListPods.ts +0 -21
  289. package/src/apps/shell/commands/project/commandNamespace.ts +0 -12
  290. package/src/apps/shell/commands/project/commandOpenDashboard.ts +0 -27
  291. package/src/apps/shell/commands/project/commandOpenEnv.ts +0 -18
  292. package/src/apps/shell/commands/project/commandOpenLogs.ts +0 -23
  293. package/src/apps/shell/commands/project/commandVariables.ts +0 -13
  294. package/src/apps/shell/commands/project/utils/autocompletions.ts +0 -7
  295. package/src/apps/shell/commands/project/utils/ensureCluster.ts +0 -31
  296. package/src/apps/shell/commands/project/utils/ensureNamespace.ts +0 -32
  297. package/src/apps/shell/commands/project/utils/monorepo.ts +0 -45
  298. package/src/apps/shell/commands/shared/index.ts +0 -31
  299. package/src/config/clusters.ts +0 -45
  300. package/src/index.ts +0 -17
  301. package/src/types/git-repo-name.d.ts +0 -1
  302. package/src/types/yawn-yaml.d.ts +0 -1
  303. package/src/utils/dashboardToken.ts +0 -20
  304. package/src/utils/formatEnvVars.ts +0 -7
@@ -1,52 +1,68 @@
1
1
  import { exec } from "child-process-promise";
2
+ import { getSecretVarName } from "@catladder/pipeline";
3
+ import { has, isObject, times } from "lodash";
4
+ import memoizee from "memoizee";
2
5
  import fetch from "node-fetch";
3
6
  import open from "open";
4
7
  import { CommandInstance } from "vorpal";
5
8
  import { getPreference, hasPreference, setPreference } from "./preferences";
6
9
 
7
10
  const TOKEN_KEY = "gitlab-personal-access-token";
11
+
12
+ export const hasGitlabToken = async () => await hasPreference(TOKEN_KEY);
13
+ export const setupGitlabToken = async (vorpal: CommandInstance) => {
14
+ vorpal.log("");
15
+ vorpal.log("☝ in order to access the api, we need a personal access token");
16
+ vorpal.log("Its best to create one specifically for catladder");
17
+ vorpal.log("");
18
+ vorpal.log("☝ we open up the settings page for you!");
19
+ vorpal.log("");
20
+ const { shouldContinue } = await vorpal.prompt({
21
+ default: true,
22
+ message: "Ok",
23
+ name: "shouldContinue",
24
+ type: "prompt",
25
+ });
26
+
27
+ open("https://git.panter.ch/-/profile/personal_access_tokens");
28
+
29
+ vorpal.log("Please type in gitlab's personal access token");
30
+
31
+ const { personalToken } = await vorpal.prompt({
32
+ type: "string",
33
+ name: "personalToken",
34
+ default: "",
35
+ message: "Your personal access token ",
36
+ });
37
+ if (personalToken) {
38
+ await setPreference(TOKEN_KEY, personalToken);
39
+ }
40
+ };
8
41
  export const getGitlabToken = async (vorpal: CommandInstance) => {
9
- if (!(await hasPreference(TOKEN_KEY))) {
10
- vorpal.log("");
11
- vorpal.log(
12
- "☝ in order to access the api, we need a personal access token"
13
- );
14
- vorpal.log("Its best to create one specifically for catladder");
15
- vorpal.log("");
16
- vorpal.log("☝ we open up the settings page for you!");
17
- vorpal.log("");
18
- const { shouldContinue } = await vorpal.prompt({
19
- default: true,
20
- message: "Ok",
21
- name: "shouldContinue",
22
- type: "prompt",
23
- });
24
-
25
- open("https://git.panter.ch/-/profile/personal_access_tokens");
26
-
27
- vorpal.log("Please type in gitlab's personal access token");
28
-
29
- const { personalToken } = await vorpal.prompt({
30
- type: "string",
31
- name: "personalToken",
32
- default: "",
33
- message: "Your personal access token ",
34
- });
35
- if (personalToken) {
36
- await setPreference(TOKEN_KEY, personalToken);
42
+ if (!(await hasGitlabToken())) {
43
+ if (!vorpal) {
44
+ console.error(
45
+ "⚠️ gitlab token missing, please run catladder to set it up"
46
+ );
47
+ process.exit(1);
37
48
  }
49
+ await setupGitlabToken(vorpal);
38
50
  }
39
51
  return getPreference(TOKEN_KEY);
40
52
  };
41
53
 
42
- export const doGitlabRequest = async (
54
+ export const doGitlabRequest = async <T = any>(
43
55
  vorpal: CommandInstance,
44
56
  path: string,
45
- data?: any
46
- ) => {
57
+ data: any = undefined,
58
+ update?: boolean
59
+ ): Promise<T> => {
47
60
  const rootToken = await getGitlabToken(vorpal);
61
+
62
+ const method = data ? (update ? "PUT" : "POST") : "GET";
63
+
48
64
  const result = await fetch(`https://git.panter.ch/api/v4/${path}`, {
49
- method: data ? "POST" : "GET",
65
+ method,
50
66
  headers: {
51
67
  "Content-Type": "application/json",
52
68
  "Private-Token": rootToken,
@@ -57,15 +73,20 @@ export const doGitlabRequest = async (
57
73
  if (result.status >= 200 && result.status < 400) {
58
74
  return result.json();
59
75
  }
76
+ if (result.status === 404) {
77
+ throw new Error("not found");
78
+ }
60
79
 
61
80
  throw new Error(
62
- `Could not send request to gitlab api: ${result.status} "${
81
+ `Could not send request to gitlab api ${path}: ${result.status} "${
63
82
  result.statusText
64
83
  }".\nResponse: ${JSON.stringify(await result.json(), null, 2)}`
65
84
  );
66
85
  };
67
86
 
68
- export const getProjectInfo = async (vorpal: CommandInstance): Promise<any> => {
87
+ export const getProjectInfo = async (
88
+ vorpal: CommandInstance
89
+ ): Promise<{ id: string; web_url: string }> => {
69
90
  const gitRemoteOriginUrl = (
70
91
  await exec("git config --get remote.origin.url")
71
92
  ).stdout.trim();
@@ -78,3 +99,160 @@ export const getProjectInfo = async (vorpal: CommandInstance): Promise<any> => {
78
99
  );
79
100
  return project;
80
101
  };
102
+
103
+ type GitlabVariable = {
104
+ variable_type: string;
105
+ key: string;
106
+ value: string;
107
+ protected: boolean;
108
+ masked: boolean;
109
+ environment_scope: string;
110
+ };
111
+ export const getAllVariables = memoizee(
112
+ async (vorpal: CommandInstance): Promise<Array<GitlabVariable>> => {
113
+ const { id } = await getProjectInfo(vorpal);
114
+ let all: Array<GitlabVariable> = [];
115
+ let result: Array<GitlabVariable>;
116
+ let page = 1;
117
+ do {
118
+ result = await doGitlabRequest(
119
+ vorpal,
120
+ // 100 is max page size
121
+ `projects/${id}/variables?per_page=100&page=${page}`
122
+ );
123
+ page++;
124
+ all = [...all, ...result];
125
+ } while (result?.length > 0);
126
+ return all;
127
+ },
128
+ { promise: true }
129
+ );
130
+
131
+ export const getVariableValueByRawName = async (
132
+ vorpal: CommandInstance,
133
+ rawName: string
134
+ ) => {
135
+ const allVariables = await getAllVariables(vorpal);
136
+ return allVariables.find((v) => v.key === rawName)?.value;
137
+ };
138
+
139
+ const maskableRegex = new RegExp("^[a-zA-Z0-9_+=/@:.~-]{8,}$"); // SEE https://gitlab.com/gitlab-org/gitlab-foss/-/blob/master/spec/frontend/ci_variable_list/components/ci_variable_modal_spec.js#L20
140
+ const isMaskable = (value: string): boolean => maskableRegex.test(value);
141
+
142
+ const createVariable = async (
143
+ vorpal: CommandInstance,
144
+ projectId: string,
145
+ key: string,
146
+ value: string,
147
+ environment_scope = "*"
148
+ ) => {
149
+ return await doGitlabRequest(vorpal, `projects/${projectId}/variables`, {
150
+ key,
151
+ value,
152
+ masked: isMaskable(value),
153
+ environment_scope,
154
+ });
155
+ };
156
+
157
+ const updateVariable = async (
158
+ vorpal: CommandInstance,
159
+ projectId: string,
160
+ key: string,
161
+ value: string
162
+ ) => {
163
+ return await doGitlabRequest(
164
+ vorpal,
165
+ `projects/${projectId}/variables/${key}`,
166
+ {
167
+ value,
168
+ masked: isMaskable(value),
169
+ },
170
+ true
171
+ );
172
+ };
173
+
174
+ const getAllCatladderEnvVarsInGitlab = async (vorpal: CommandInstance) => {
175
+ const allVariables = await getAllVariables(vorpal).then((v) =>
176
+ v.reduce<{
177
+ [key: string]: {
178
+ value?: string;
179
+ backups: number[];
180
+ };
181
+ }>((acc, variable) => {
182
+ const { key } = variable;
183
+
184
+ if (key.startsWith("CL_")) {
185
+ const matchBackup = key.match(/(CL_.*)_backup_([0-9]+)/);
186
+
187
+ if (matchBackup) {
188
+ const key = matchBackup[1];
189
+ const timestamp = Number(matchBackup[2]);
190
+ const backups = [...(acc[key]?.backups ?? []), timestamp];
191
+ return {
192
+ ...acc,
193
+ [key]: {
194
+ ...(acc[key] ?? {}), // add value
195
+ backups,
196
+ },
197
+ };
198
+ }
199
+
200
+ return {
201
+ ...acc,
202
+ [key]: {
203
+ backups: [],
204
+ ...(acc[key] ?? {}), // may add backups
205
+ value: variable.value,
206
+ },
207
+ };
208
+ }
209
+
210
+ return acc;
211
+ }, {})
212
+ );
213
+ return allVariables;
214
+ };
215
+
216
+ export const upsertAllVariables = async (
217
+ vorpal: CommandInstance,
218
+ variables: Record<string, any>,
219
+ env: string,
220
+ componentName: string,
221
+ backup = true
222
+ ): Promise<void> => {
223
+ const { id } = await getProjectInfo(vorpal);
224
+
225
+ // we list all existing variables. We also gather backup versions, but its currently unused
226
+ const existingVariables = await getAllCatladderEnvVarsInGitlab(vorpal);
227
+ for (const [key, value] of Object.entries(variables ?? {})) {
228
+ const fullKey = getSecretVarName(env, componentName, key);
229
+ const valueSanitized = isObject(value) ? JSON.stringify(value) : `${value}`;
230
+
231
+ const exists = has(existingVariables, fullKey);
232
+ const oldValue = existingVariables[fullKey]?.value;
233
+ const changed = oldValue !== valueSanitized;
234
+ if (changed) {
235
+ if (exists) {
236
+ vorpal.log(`changed: ${key}`);
237
+
238
+ await updateVariable(vorpal, id, fullKey, valueSanitized);
239
+ // write backup
240
+ if (backup) {
241
+ await createVariable(
242
+ vorpal,
243
+ id,
244
+ fullKey + "_backup_" + new Date().getTime(),
245
+ oldValue,
246
+ "_backup"
247
+ );
248
+ }
249
+ } else {
250
+ vorpal.log(`new : ${key}`);
251
+ await createVariable(vorpal, id, fullKey, valueSanitized);
252
+ }
253
+ } else {
254
+ vorpal.log(`skip : ${key}`);
255
+ }
256
+ }
257
+ getAllVariables.clear();
258
+ };
@@ -1,12 +1,6 @@
1
1
  import { exec, spawn } from "child-process-promise";
2
2
  import commandExists from "command-exists-promise";
3
3
  import dayjs from "dayjs";
4
-
5
- import { readFile, writeFile } from "fs-extra";
6
- import yaml from "js-yaml";
7
- import { withFile } from "tmp-promise";
8
- import formatEnvVars from "../formatEnvVars";
9
- import getEditor from "../getEditor";
10
4
  import { getPreference, hasPreference, setPreference } from "../preferences";
11
5
 
12
6
  const DEBUG = false;
@@ -78,9 +72,7 @@ const execBitwardenCommand = async (command: string): Promise<any> => {
78
72
  await loginBitwarden();
79
73
  return execBitwardenCommand(command);
80
74
  } else {
81
- console.error(e);
82
-
83
- console.log("wooops", e.message);
75
+ throw e;
84
76
  }
85
77
  }
86
78
  };
@@ -125,14 +117,6 @@ export const readPass = async (path: string) => {
125
117
  return result.notes || result.login?.password;
126
118
  };
127
119
 
128
- const update = async (type: string, itemId: string, value: any) => {
129
- const result = await execBitwardenCommand(
130
- `edit ${type} ${itemId} ${encode(value)}`
131
- );
132
-
133
- return result;
134
- };
135
-
136
120
  const MAX_SYNC_AGE_IN_MINUTES = 30;
137
121
  export const syncBitwarden = async (force = true) => {
138
122
  const lastSync = (await hasPreference("bwLastSync"))
@@ -169,24 +153,10 @@ const share = async (itemId: string) =>
169
153
  ])}`
170
154
  );
171
155
 
172
- export const editPass = async (path: string) => {
156
+ export const trashItem = async (path: string) => {
173
157
  const item = await getItem(path);
174
158
 
175
- await withFile(async ({ path: tmpFilePath }) => {
176
- await writeFile(tmpFilePath, item.notes);
177
- await (await getEditor()).open(tmpFilePath);
178
- const newContent = (await readFile(tmpFilePath)).toString("utf-8");
159
+ const result = await execBitwardenCommand(`delete item ${item.id}`);
179
160
 
180
- await update("item", item.id, {
181
- ...item,
182
- notes: newContent,
183
- });
184
- }, { postfix: ".yml" });
185
- };
186
-
187
- export const readPassEnvVars = async (path: string) => {
188
- // make sure that you have pulled pass beforehand
189
- const yamlstring = await readPass(path);
190
- // if a value is an object, we convert it to strings
191
- return formatEnvVars(yaml.load(yamlstring));
161
+ return result;
192
162
  };
@@ -1,7 +1,7 @@
1
1
  import fs from "fs-extra";
2
2
  import { homedir } from "os";
3
3
 
4
- import yaml from "js-yaml";
4
+ import { load, dump } from "js-yaml";
5
5
  const directory = `${homedir()}/.catladder`;
6
6
  const file = `${directory}/preferences.yml`;
7
7
 
@@ -9,7 +9,10 @@ const getPreferences = async () => {
9
9
  if (!(await fs.pathExists(file))) {
10
10
  await fs.createFile(file);
11
11
  }
12
- return yaml.load(await fs.readFile(file, { encoding: "utf-8" })) ?? {};
12
+ return (load(await fs.readFile(file, { encoding: "utf-8" })) ?? {}) as Record<
13
+ string,
14
+ string
15
+ >;
13
16
  };
14
17
 
15
18
  export const hasPreference = async (key: string) => {
@@ -29,5 +32,5 @@ export const setPreference = async (key: string, value: string | number) => {
29
32
  [key]: value,
30
33
  };
31
34
 
32
- await fs.writeFile(file, yaml.safeDump(newPreferences));
35
+ await fs.writeFile(file, dump(newPreferences));
33
36
  };
@@ -1,19 +1,11 @@
1
- import { exec } from "child-process-promise";
1
+ import { $ } from "zx";
2
2
  import { join } from "path";
3
- import k8sApi from "../../k8sApi";
4
- import { Env, ISecrets, IValueFile } from "../../types/types";
5
- import { readFileOrError, readYaml } from "../files";
6
- import formatEnvVars from "../formatEnvVars";
7
- import { hasBitwarden, readPassEnvVars, syncBitwarden } from "../passwordstore";
8
- import { filter } from "../promise";
3
+ import { getProjectConfig, parseChoice } from "../../config/getProjectConfig";
4
+ import { getk8sApi } from "../../k8sApi";
5
+ import { readFileOrError } from "../files";
9
6
 
10
- import { merge } from "lodash";
11
-
12
- // eslint-disable-next-line @typescript-eslint/no-var-requires
13
- const YAWN = require("yawn-yaml/cjs");
14
-
15
- export const getGitRoot = async () => {
16
- return (await exec("git rev-parse --show-toplevel")).stdout?.trim();
7
+ export const getGitRoot = async (): Promise<string> => {
8
+ return (await $`git rev-parse --show-toplevel`).stdout.trim();
17
9
  };
18
10
 
19
11
  export const getRootGitlabCiFile = async () => {
@@ -31,141 +23,33 @@ export const hasGitlabCiFile = async () => {
31
23
  }
32
24
  return true;
33
25
  };
34
- export const getLocalProjectVariables = async () => {
35
- const [error, file] = await readRootGitlabCiFile();
36
- if (error) {
37
- throw new Error("there is no '.gitlab-ci.yml' in the current project");
38
- }
39
- // yawn allows to modify yaml while keeping comments!
40
- const yawn = new YAWN(file);
41
- const { variables } = yawn.json;
42
- if (!variables) {
43
- throw new Error("your '.gitlab-ci.yml' does not define `variables`");
44
- }
45
- const defaults = {
46
- CLUSTER_NAME: "production",
47
- };
48
- return {
49
- ...defaults,
50
- ...variables,
51
- };
52
- };
53
26
 
54
- export const getProjectNamespace = async (env: Env) => {
55
- const { CUSTOMER_NAME, APP_NAME } = await getLocalProjectVariables();
56
- return `${CUSTOMER_NAME}-${APP_NAME}-${env}`;
27
+ export const getProjectNamespace = async (envComponent: string) => {
28
+ const { env } = parseChoice(envComponent);
29
+ const config = await getProjectConfig();
30
+ return `${config.customerName}-${config.appName}-${env}`;
57
31
  };
58
32
 
59
- export const getProjectHelmReleaseName = async (env: Env) => {
60
- // can't properly get the release name for review as it contains an additional branch slug
61
- if (env === "review" || env === "dev-local") {
62
- throw new Error(`can't get helm release name for ${env}`);
63
- }
64
- const {
65
- CUSTOMER_NAME,
66
- APP_NAME,
67
- COMPONENT_NAME = "web",
68
- } = await getLocalProjectVariables();
69
- return `${CUSTOMER_NAME}-${APP_NAME}-${env}-${COMPONENT_NAME}`;
70
- };
71
- export const getProjectPods = async (env: Env) => {
72
- const namespace = await getProjectNamespace(env);
33
+ export const getProjectPods = async (envComponent: string) => {
34
+ const namespace = await getProjectNamespace(envComponent);
35
+ const k8sApi = getk8sApi();
73
36
  const res = await k8sApi.listNamespacedPod(namespace);
74
37
 
75
- return res.body.items;
38
+ const { componentName } = parseChoice(envComponent);
39
+ return res.body.items.filter((item) =>
40
+ componentName ? item.metadata?.name?.includes(componentName + "-") : true
41
+ );
76
42
  };
77
43
 
78
- export const getProjectPvcs = async (env: Env) => {
79
- const namespace = await getProjectNamespace(env);
44
+ export const getProjectPvcs = async (envComponent: string) => {
45
+ const namespace = await getProjectNamespace(envComponent);
46
+ const k8sApi = getk8sApi();
80
47
  const res = await k8sApi.listNamespacedPersistentVolumeClaim(namespace);
81
48
 
82
49
  return res.body.items;
83
50
  };
84
51
 
85
- export const getProjectPodNames = async (env: Env) => {
86
- const pods = await getProjectPods(env);
52
+ export const getProjectPodNames = async (envComponent: string) => {
53
+ const pods = await getProjectPods(envComponent);
87
54
  return pods.map((n) => n.metadata.name);
88
55
  };
89
-
90
- export const getPassPath = async (env: Env) => {
91
- const { CUSTOMER_NAME, APP_NAME } = await getLocalProjectVariables();
92
- return `${CUSTOMER_NAME}/${APP_NAME}/${env}/secrets.yml`;
93
- };
94
-
95
- export const getProjectValuesFiles = async (env: Env, subApp?: string) => {
96
- const gitRoot = await getGitRoot();
97
- const possibleFiles = ["values.yml", `values-${env}.yml`].map((file) =>
98
- subApp ? join(gitRoot, subApp, file) : join(gitRoot, file)
99
- );
100
- return filter(possibleFiles, async (file) => {
101
- const [error] = await readFileOrError(file);
102
- return !error;
103
- });
104
- };
105
-
106
- export const getAllValues = async (env: Env, subApp?: string) => {
107
- const valuesFilePaths = await getProjectValuesFiles(env, subApp);
108
- return Promise.all(
109
- valuesFilePaths.map(async (file) => (await readYaml(file)) as IValueFile)
110
- );
111
- };
112
-
113
- export const getProjectValues = async (env: Env, subApp?: string) => {
114
- const values = await getAllValues(env, subApp);
115
- return merge({}, ...values) as IValueFile;
116
- };
117
-
118
- export const getAllPublicEnvVars = async (env: Env, subApp?: string) => {
119
- return formatEnvVars(
120
- (await getAllValues(env, subApp)).reduce<ISecrets>((acc, value) => {
121
- if (value.env && value.env.public) {
122
- return {
123
- ...acc,
124
- ...value.env.public,
125
- };
126
- }
127
- return acc;
128
- }, {})
129
- );
130
- };
131
- export const getAllSecretsEnvVarsMapping = async (
132
- env: Env,
133
- subApp?: string
134
- ) => {
135
- return (await getAllValues(env, subApp)).reduce<ISecrets>((acc, value) => {
136
- if (value.env && value.env.secret) {
137
- return {
138
- ...acc,
139
- ...value.env.secret,
140
- };
141
- }
142
- return acc;
143
- }, {});
144
- };
145
-
146
- export const hasSecrets = async (env: Env, subApp?: string) => {
147
- return Object.keys(await getAllSecretsEnvVarsMapping(env, subApp)).length > 0;
148
- };
149
-
150
- export const getAllEnvVars = async (
151
- env: Env,
152
- subApp?: string
153
- ): Promise<Record<string, string>> => {
154
- return {
155
- ...(await getAllPublicEnvVars(env, subApp)),
156
- ...(await getAllSecretEnvVars(env, subApp)),
157
- };
158
- };
159
-
160
- export const getAllSecretEnvVars = async (env: Env, subApp?: string) => {
161
- if (!(await hasSecrets(env, subApp))) {
162
- return {};
163
- }
164
- if (await hasBitwarden()) {
165
- await syncBitwarden(false /* do not force sync */);
166
- const passPath = await getPassPath(env);
167
- return readPassEnvVars(passPath);
168
- } else {
169
- return {};
170
- }
171
- };
package/tsconfig.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
- "extends": "@tsconfig/node14/tsconfig.json",
3
2
  "compilerOptions": {
3
+ "lib": ["es2020", "DOM"],
4
4
  "module": "CommonJS",
5
5
  "declaration": true,
6
6
  "noImplicitAny": true,
@@ -9,12 +9,8 @@
9
9
  "sourceMap": true,
10
10
  "outDir": "dist",
11
11
  "strict": false,
12
- "baseUrl": ".",
13
12
  "incremental": true,
14
- "resolveJsonModule": true,
15
- "paths": {
16
- "*": ["node_modules/*", "src/types/*"]
17
- }
13
+ "resolveJsonModule": true
18
14
  },
19
- "include": ["src/**/*"]
15
+ "include": ["./src/**/*"]
20
16
  }
package/bin/catenv.sh DELETED
@@ -1 +0,0 @@
1
- eval $(catladder --catenv )
@@ -1,42 +0,0 @@
1
- import Vorpal from "vorpal";
2
- import { logError } from "../../../../utils/log";
3
- import { startPortForward } from "../../../../utils/portForward";
4
- import { getProjectNamespace } from "../../../../utils/projects";
5
- import { envAutocompletion } from "../project/utils/autocompletions";
6
- import ensureCluster from "../project/utils/ensureCluster";
7
- import { getProjectMongodbAllPodsSortedWithLabel } from "./utils";
8
-
9
- export default (vorpal: Vorpal) =>
10
- vorpal
11
- .command("project-mongo-port-forward <env>", "port foward to a mongodb")
12
- .autocomplete(envAutocompletion)
13
- .action(async function ({ env }) {
14
- await ensureCluster.call(this);
15
- const namespace = await getProjectNamespace(env);
16
- const podNames = await getProjectMongodbAllPodsSortedWithLabel(env);
17
- if (podNames.length === 0) {
18
- logError(this, "sorry, no pods found");
19
- return;
20
- }
21
- let podName;
22
- if (podNames.length === 1) {
23
- podName = podNames[0].value;
24
- } else {
25
- podName = (
26
- await this.prompt({
27
- type: "list",
28
- name: "podName",
29
- choices: podNames,
30
- message: "Which pod? 🤔",
31
- })
32
- ).podName;
33
- }
34
-
35
- const { localPort } = await this.prompt({
36
- type: "number",
37
- name: "localPort",
38
- default: "30000",
39
- message: "Local port: ",
40
- });
41
- return startPortForward(podName, localPort, 27017, namespace);
42
- });
@@ -1,65 +0,0 @@
1
- import { spawn } from "child-process-promise";
2
- import { writeFile } from "fs-extra";
3
- import { withFile } from "tmp-promise";
4
- import Vorpal from "vorpal";
5
- import {
6
- GOOGLE_CLOUD_SQL_PASS_PATH,
7
- GOOGLE_PROJECT,
8
- } from "../../../../config/constants";
9
- import { readPass } from "../../../../utils/passwordstore";
10
- import {
11
- getAllEnvVars,
12
- getLocalProjectVariables,
13
- getProjectValues,
14
- } from "../../../../utils/projects";
15
- import { envAutocompletion } from "./utils/autocompletions";
16
- import { promptForSubAppIfAny } from "./utils/monorepo";
17
-
18
- export default (vorpal: Vorpal) =>
19
- vorpal
20
- .command("project-cloud-sql-proxy <env>", "proxy to cloud sql db")
21
- .autocomplete(envAutocompletion)
22
- .action(async function ({ env }) {
23
- const { CUSTOMER_NAME, APP_NAME } = await getLocalProjectVariables();
24
- // skynet-164509:europe-west6:pvl-cyclomania-review=tcp:5432
25
-
26
- const { localPort } = await this.prompt({
27
- type: "number",
28
- name: "localPort",
29
- default: "54320",
30
- message: "Local port: ",
31
- });
32
-
33
- const subapp = await promptForSubAppIfAny(this);
34
- const POSTGRESQL_PASSWORD = (await getAllEnvVars(env, subapp))
35
- ?.POSTGRESQL_PASSWORD;
36
-
37
- const values = await getProjectValues(env, subapp);
38
- this.log("");
39
- this.log(`postgres-PW: ${POSTGRESQL_PASSWORD}`);
40
- this.log("");
41
-
42
- const projectId = values?.cloudsql?.projectId || GOOGLE_PROJECT;
43
-
44
- const defaultInstanceId = `${CUSTOMER_NAME}-${APP_NAME}-${env}`;
45
- const instanceId = values?.cloudsql?.instanceId || defaultInstanceId;
46
-
47
- const defaultRegion = "europe-west6"; // currently hardcoded
48
- const region = values?.cloudsql?.region || defaultRegion;
49
-
50
- const instanceName = `${projectId}:${region}:${instanceId}=tcp:${localPort}`;
51
-
52
- const cloudsqlCredentials = await readPass(GOOGLE_CLOUD_SQL_PASS_PATH);
53
- await withFile(async ({ path: tmpFilePath }) => {
54
- await writeFile(tmpFilePath, cloudsqlCredentials);
55
-
56
- await spawn(
57
- "cloud_sql_proxy",
58
- ["-instances", instanceName, "-credential_file", tmpFilePath],
59
- {
60
- stdio: "inherit",
61
- shell: true,
62
- }
63
- );
64
- });
65
- });