@catladder/cli 0.0.0-test7 → 0.0.0-waitfor-deploy-e64a33ba
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.
- package/.nvmrc +1 -1
- package/README.md +6 -3
- package/bin/catenv +3 -0
- package/bin/catladder +1 -1
- package/dist/apps/catenv/catenv.d.ts +5 -0
- package/dist/apps/catenv/catenv.js +143 -0
- package/dist/apps/catenv/catenv.js.map +1 -0
- package/dist/apps/cli/cli.d.ts +2 -0
- package/dist/apps/cli/cli.js +81 -0
- package/dist/apps/cli/cli.js.map +1 -0
- package/dist/apps/cli/commands/general/index.d.ts +4 -0
- package/dist/apps/cli/commands/general/index.js +216 -0
- package/dist/apps/cli/commands/general/index.js.map +1 -0
- package/dist/apps/cli/commands/general/namespaceAutoCompletion.d.ts +3 -0
- package/dist/apps/cli/commands/general/namespaceAutoCompletion.js +56 -0
- package/dist/apps/cli/commands/general/namespaceAutoCompletion.js.map +1 -0
- package/dist/apps/cli/commands/general/portForward.d.ts +3 -0
- package/dist/apps/cli/commands/general/portForward.js +97 -0
- package/dist/apps/cli/commands/general/portForward.js.map +1 -0
- package/dist/apps/cli/commands/mongodb/index.d.ts +3 -0
- package/dist/apps/cli/commands/mongodb/index.js +53 -0
- package/dist/apps/cli/commands/mongodb/index.js.map +1 -0
- package/dist/apps/cli/commands/mongodb/projectMongoDestroyMember.d.ts +3 -0
- package/dist/apps/cli/commands/mongodb/projectMongoDestroyMember.js +190 -0
- package/dist/apps/cli/commands/mongodb/projectMongoDestroyMember.js.map +1 -0
- package/dist/apps/cli/commands/mongodb/projectMongoGetShell.d.ts +3 -0
- package/dist/apps/cli/commands/mongodb/projectMongoGetShell.js +96 -0
- package/dist/apps/cli/commands/mongodb/projectMongoGetShell.js.map +1 -0
- package/dist/apps/cli/commands/mongodb/projectMongoPortForward.d.ts +3 -0
- package/dist/apps/cli/commands/mongodb/projectMongoPortForward.js +105 -0
- package/dist/apps/cli/commands/mongodb/projectMongoPortForward.js.map +1 -0
- package/dist/apps/cli/commands/mongodb/utils/index.d.ts +13 -0
- package/dist/apps/cli/commands/mongodb/utils/index.js +167 -0
- package/dist/apps/cli/commands/mongodb/utils/index.js.map +1 -0
- package/dist/apps/cli/commands/project/commandCloudSqlProxy.d.ts +3 -0
- package/dist/apps/cli/commands/project/commandCloudSqlProxy.js +137 -0
- package/dist/apps/cli/commands/project/commandCloudSqlProxy.js.map +1 -0
- package/dist/apps/cli/commands/project/commandConfigSecrets.d.ts +4 -0
- package/dist/apps/cli/commands/project/commandConfigSecrets.js +320 -0
- package/dist/apps/cli/commands/project/commandConfigSecrets.js.map +1 -0
- package/dist/apps/cli/commands/project/commandCopyDB.d.ts +3 -0
- package/dist/apps/cli/commands/project/commandCopyDB.js +102 -0
- package/dist/apps/cli/commands/project/commandCopyDB.js.map +1 -0
- package/dist/apps/cli/commands/project/commandDeletePods.d.ts +3 -0
- package/dist/apps/cli/commands/project/commandDeletePods.js +120 -0
- package/dist/apps/cli/commands/project/commandDeletePods.js.map +1 -0
- package/dist/apps/cli/commands/project/commandDeleteProject.d.ts +3 -0
- package/dist/apps/cli/commands/project/commandDeleteProject.js +97 -0
- package/dist/apps/cli/commands/project/commandDeleteProject.js.map +1 -0
- package/dist/apps/cli/commands/project/commandEnvVars.d.ts +3 -0
- package/dist/apps/cli/commands/project/commandEnvVars.js +74 -0
- package/dist/apps/cli/commands/project/commandEnvVars.js.map +1 -0
- package/dist/apps/cli/commands/project/commandGetMyTotalWorktime.d.ts +3 -0
- package/dist/apps/cli/commands/project/commandGetMyTotalWorktime.js +58 -0
- package/dist/apps/cli/commands/project/commandGetMyTotalWorktime.js.map +1 -0
- package/dist/apps/cli/commands/project/commandGetShell.d.ts +3 -0
- package/dist/apps/cli/commands/project/commandGetShell.js +92 -0
- package/dist/apps/cli/commands/project/commandGetShell.js.map +1 -0
- package/dist/apps/cli/commands/project/commandGitlabCi.d.ts +3 -0
- package/dist/apps/cli/commands/project/commandGitlabCi.js +185 -0
- package/dist/apps/cli/commands/project/commandGitlabCi.js.map +1 -0
- package/dist/apps/cli/commands/project/commandInitProject.old.d.ts +3 -0
- package/dist/apps/cli/commands/project/commandInitProject.old.js +345 -0
- package/dist/apps/cli/commands/project/commandInitProject.old.js.map +1 -0
- package/dist/apps/cli/commands/project/commandListPods.d.ts +3 -0
- package/dist/apps/cli/commands/project/commandListPods.js +78 -0
- package/dist/apps/cli/commands/project/commandListPods.js.map +1 -0
- package/dist/apps/cli/commands/project/commandMigrateHelm3.d.ts +7 -0
- package/dist/apps/cli/commands/project/commandMigrateHelm3.js +113 -0
- package/dist/apps/cli/commands/project/commandMigrateHelm3.js.map +1 -0
- package/dist/apps/cli/commands/project/commandNamespace.d.ts +3 -0
- package/dist/apps/cli/commands/project/commandNamespace.js +70 -0
- package/dist/apps/cli/commands/project/commandNamespace.js.map +1 -0
- package/dist/apps/cli/commands/project/commandOpenCostDashboard.d.ts +3 -0
- package/dist/apps/cli/commands/project/commandOpenCostDashboard.js +83 -0
- package/dist/apps/cli/commands/project/commandOpenCostDashboard.js.map +1 -0
- package/dist/apps/cli/commands/project/commandOpenDashboard.d.ts +3 -0
- package/dist/apps/cli/commands/project/commandOpenDashboard.js +85 -0
- package/dist/apps/cli/commands/project/commandOpenDashboard.js.map +1 -0
- package/dist/apps/cli/commands/project/commandOpenEnv.d.ts +3 -0
- package/dist/apps/cli/commands/project/commandOpenEnv.js +80 -0
- package/dist/apps/cli/commands/project/commandOpenEnv.js.map +1 -0
- package/dist/apps/cli/commands/project/commandOpenGit.d.ts +3 -0
- package/dist/apps/cli/commands/project/commandOpenGit.js +61 -0
- package/dist/apps/cli/commands/project/commandOpenGit.js.map +1 -0
- package/dist/apps/cli/commands/project/commandOpenGrafana.d.ts +3 -0
- package/dist/apps/cli/commands/project/commandOpenGrafana.js +83 -0
- package/dist/apps/cli/commands/project/commandOpenGrafana.js.map +1 -0
- package/dist/apps/cli/commands/project/commandOpenGrafanaPod.d.ts +3 -0
- package/dist/apps/cli/commands/project/commandOpenGrafanaPod.js +99 -0
- package/dist/apps/cli/commands/project/commandOpenGrafanaPod.js.map +1 -0
- package/dist/apps/cli/commands/project/commandOpenLogs.d.ts +3 -0
- package/dist/apps/cli/commands/project/commandOpenLogs.js +87 -0
- package/dist/apps/cli/commands/project/commandOpenLogs.js.map +1 -0
- package/dist/apps/cli/commands/project/commandPauseProject.d.ts +3 -0
- package/dist/apps/cli/commands/project/commandPauseProject.js +97 -0
- package/dist/apps/cli/commands/project/commandPauseProject.js.map +1 -0
- package/dist/apps/cli/commands/project/commandPortForward.d.ts +3 -0
- package/dist/apps/cli/commands/project/commandPortForward.js +106 -0
- package/dist/apps/cli/commands/project/commandPortForward.js.map +1 -0
- package/dist/apps/cli/commands/project/commandSetup.d.ts +3 -0
- package/dist/apps/cli/commands/project/commandSetup.js +58 -0
- package/dist/apps/cli/commands/project/commandSetup.js.map +1 -0
- package/dist/apps/cli/commands/project/commandTriggerCronjob.d.ts +3 -0
- package/dist/apps/cli/commands/project/commandTriggerCronjob.js +144 -0
- package/dist/apps/cli/commands/project/commandTriggerCronjob.js.map +1 -0
- package/dist/apps/cli/commands/project/index.d.ts +3 -0
- package/dist/apps/cli/commands/project/index.js +94 -0
- package/dist/apps/cli/commands/project/index.js.map +1 -0
- package/dist/apps/cli/commands/project/setup/index.d.ts +2 -0
- package/dist/apps/cli/commands/project/setup/index.js +103 -0
- package/dist/apps/cli/commands/project/setup/index.js.map +1 -0
- package/dist/apps/cli/commands/project/setup/setupAccessTokens.d.ts +2 -0
- package/dist/apps/cli/commands/project/setup/setupAccessTokens.js +115 -0
- package/dist/apps/cli/commands/project/setup/setupAccessTokens.js.map +1 -0
- package/dist/apps/cli/commands/project/setup/setupContext.d.ts +3 -0
- package/dist/apps/cli/commands/project/setup/setupContext.js +74 -0
- package/dist/apps/cli/commands/project/setup/setupContext.js.map +1 -0
- package/dist/apps/cli/commands/project/setup/setupKubernetes.d.ts +3 -0
- package/dist/apps/cli/commands/project/setup/setupKubernetes.js +132 -0
- package/dist/apps/cli/commands/project/setup/setupKubernetes.js.map +1 -0
- package/dist/apps/cli/commands/project/utils/autocompletions.d.ts +3 -0
- package/dist/apps/cli/commands/project/utils/autocompletions.js +96 -0
- package/dist/apps/cli/commands/project/utils/autocompletions.js.map +1 -0
- package/dist/apps/cli/commands/project/utils/ensureCluster.d.ts +1 -0
- package/dist/apps/cli/commands/project/utils/ensureCluster.js +84 -0
- package/dist/apps/cli/commands/project/utils/ensureCluster.js.map +1 -0
- package/dist/apps/cli/commands/project/utils/ensureNamespace.d.ts +2 -0
- package/dist/apps/cli/commands/project/utils/ensureNamespace.js +104 -0
- package/dist/apps/cli/commands/project/utils/ensureNamespace.js.map +1 -0
- package/dist/apps/cli/commands/project/utils/showProjectBanner.d.ts +2 -0
- package/dist/apps/cli/commands/project/utils/showProjectBanner.js +58 -0
- package/dist/apps/cli/commands/project/utils/showProjectBanner.js.map +1 -0
- package/dist/apps/cli/commands/shared/index.d.ts +3 -0
- package/dist/apps/cli/commands/shared/index.js +70 -0
- package/dist/apps/cli/commands/shared/index.js.map +1 -0
- package/dist/apps/cli/commands/theStuffThatReallyMatters/index.d.ts +3 -0
- package/dist/apps/cli/commands/theStuffThatReallyMatters/index.js +101 -0
- package/dist/apps/cli/commands/theStuffThatReallyMatters/index.js.map +1 -0
- package/dist/apps/cli/config/writeConfig.d.ts +5 -0
- package/dist/apps/cli/config/writeConfig.js +106 -0
- package/dist/apps/cli/config/writeConfig.js.map +1 -0
- package/dist/apps/cli/utils/getGoogleAuthUserNumber.d.ts +1 -0
- package/dist/apps/cli/utils/getGoogleAuthUserNumber.js +69 -0
- package/dist/apps/cli/utils/getGoogleAuthUserNumber.js.map +1 -0
- package/dist/apps/cli/verify/index.d.ts +2 -0
- package/dist/apps/cli/verify/index.js +94 -0
- package/dist/apps/cli/verify/index.js.map +1 -0
- package/dist/apps/cli/verify/migration/fromv2.d.ts +4 -0
- package/dist/apps/cli/verify/migration/fromv2.js +347 -0
- package/dist/apps/cli/verify/migration/fromv2.js.map +1 -0
- package/dist/apps/cli/verify/migration/migrateSecrets.d.ts +4 -0
- package/dist/apps/cli/verify/migration/migrateSecrets.js +88 -0
- package/dist/apps/cli/verify/migration/migrateSecrets.js.map +1 -0
- package/dist/apps/cli/verify/migration/oldGitlabCi.d.ts +18 -0
- package/dist/apps/cli/verify/migration/oldGitlabCi.js +30 -0
- package/dist/apps/cli/verify/migration/oldGitlabCi.js.map +1 -0
- package/dist/catenv.d.ts +1 -0
- package/dist/catenv.js +15 -0
- package/dist/catenv.js.map +1 -0
- package/dist/cli.d.ts +1 -0
- package/dist/cli.js +15 -0
- package/dist/cli.js.map +1 -0
- package/dist/config/constants.d.ts +3 -0
- package/dist/config/constants.js +7 -0
- package/dist/config/constants.js.map +1 -0
- package/dist/config/getProjectConfig.d.ts +24 -0
- package/dist/config/getProjectConfig.js +259 -0
- package/dist/config/getProjectConfig.js.map +1 -0
- package/dist/k8sApi/index.d.ts +8 -0
- package/dist/k8sApi/index.js +29 -0
- package/dist/k8sApi/index.js.map +1 -0
- package/dist/packageInfos.d.ts +2 -0
- package/dist/packageInfos.js +6 -0
- package/dist/packageInfos.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/dist/types/types.d.ts +18 -0
- package/dist/types/types.js +3 -0
- package/dist/types/types.js.map +1 -0
- package/dist/utils/cluster.d.ts +3 -0
- package/dist/utils/cluster.js +73 -0
- package/dist/utils/cluster.js.map +1 -0
- package/dist/utils/editAsFile.d.ts +1 -0
- package/dist/utils/editAsFile.js +85 -0
- package/dist/utils/editAsFile.js.map +1 -0
- package/dist/utils/files.d.ts +2 -0
- package/dist/utils/files.js +83 -0
- package/dist/utils/files.js.map +1 -0
- package/dist/utils/getEditor.d.ts +4 -0
- package/dist/utils/getEditor.js +70 -0
- package/dist/utils/getEditor.js.map +1 -0
- package/dist/utils/gitlab.d.ts +22 -0
- package/dist/utils/gitlab.js +278 -0
- package/dist/utils/gitlab.js.map +1 -0
- package/dist/utils/log.d.ts +1 -0
- package/dist/utils/log.js +14 -0
- package/dist/utils/log.js.map +1 -0
- package/dist/utils/passwordstore/index.d.ts +8 -0
- package/dist/utils/passwordstore/index.js +378 -0
- package/dist/utils/passwordstore/index.js.map +1 -0
- package/dist/utils/portForward.d.ts +4 -0
- package/dist/utils/portForward.js +116 -0
- package/dist/utils/portForward.js.map +1 -0
- package/dist/utils/preferences/index.d.ts +3 -0
- package/dist/utils/preferences/index.js +119 -0
- package/dist/utils/preferences/index.js.map +1 -0
- package/dist/utils/projects/index.d.ts +8 -0
- package/dist/utils/projects/index.js +153 -0
- package/dist/utils/projects/index.js.map +1 -0
- package/dist/utils/promise.d.ts +2 -0
- package/dist/utils/promise.js +62 -0
- package/dist/utils/promise.js.map +1 -0
- package/dist/utils/shell.d.ts +1 -0
- package/dist/utils/shell.js +81 -0
- package/dist/utils/shell.js.map +1 -0
- package/package.json +16 -21
- package/src/apps/catenv/catenv.ts +55 -27
- package/src/apps/{shell/shell.ts → cli/cli.ts} +10 -2
- package/src/apps/{shell → cli}/commands/general/index.ts +7 -46
- package/src/apps/{shell → cli}/commands/general/namespaceAutoCompletion.ts +0 -0
- package/src/apps/{shell → cli}/commands/general/portForward.ts +3 -2
- package/src/apps/{shell → cli}/commands/mongodb/index.ts +1 -1
- package/src/apps/{shell → cli}/commands/mongodb/projectMongoDestroyMember.ts +18 -18
- package/src/apps/{shell → cli}/commands/mongodb/projectMongoGetShell.ts +12 -10
- package/src/apps/{shell → cli}/commands/mongodb/projectMongoPortForward.ts +13 -8
- package/src/apps/{shell → cli}/commands/mongodb/utils/index.ts +9 -8
- package/src/apps/cli/commands/project/commandCloudSqlProxy.ts +88 -0
- package/src/apps/cli/commands/project/commandConfigSecrets.ts +220 -0
- package/src/apps/{shell → cli}/commands/project/commandCopyDB.ts +24 -26
- package/src/apps/{shell → cli}/commands/project/commandDeletePods.ts +10 -10
- package/src/apps/{shell → cli}/commands/project/commandDeleteProject.ts +7 -8
- package/src/apps/cli/commands/project/commandEnvVars.ts +15 -0
- package/src/apps/{shell → cli}/commands/project/commandGetMyTotalWorktime.ts +2 -2
- package/src/apps/{shell → cli}/commands/project/commandGetShell.ts +10 -10
- package/src/apps/{shell → cli}/commands/project/commandGitlabCi.ts +1 -1
- package/src/apps/{shell/commands/project/commandInitProject.ts → cli/commands/project/commandInitProject.old.ts} +14 -6
- package/src/apps/cli/commands/project/commandListPods.ts +18 -0
- package/src/apps/{shell → cli}/commands/project/commandMigrateHelm3.ts +16 -7
- package/src/apps/cli/commands/project/commandNamespace.ts +14 -0
- package/src/apps/{shell → cli}/commands/project/commandOpenCostDashboard.ts +10 -7
- package/src/apps/cli/commands/project/commandOpenDashboard.ts +48 -0
- package/src/apps/cli/commands/project/commandOpenEnv.ts +22 -0
- package/src/apps/{shell → cli}/commands/project/commandOpenGit.ts +3 -3
- package/src/apps/{shell → cli}/commands/project/commandOpenGrafana.ts +7 -7
- package/src/apps/{shell → cli}/commands/project/commandOpenGrafanaPod.ts +9 -10
- package/src/apps/cli/commands/project/commandOpenLogs.ts +52 -0
- package/src/apps/{shell → cli}/commands/project/commandPauseProject.ts +9 -7
- package/src/apps/{shell → cli}/commands/project/commandPortForward.ts +8 -8
- package/src/apps/cli/commands/project/commandSetup.ts +12 -0
- package/src/apps/{shell → cli}/commands/project/commandTriggerCronjob.ts +10 -10
- package/src/apps/{shell → cli}/commands/project/index.ts +6 -7
- package/src/apps/cli/commands/project/setup/index.ts +42 -0
- package/src/apps/cli/commands/project/setup/setupAccessTokens.ts +72 -0
- package/src/apps/cli/commands/project/setup/setupContext.ts +37 -0
- package/src/apps/cli/commands/project/setup/setupKubernetes.ts +112 -0
- package/src/apps/cli/commands/project/utils/autocompletions.ts +26 -0
- package/src/apps/cli/commands/project/utils/ensureCluster.ts +42 -0
- package/src/apps/cli/commands/project/utils/ensureNamespace.ts +56 -0
- package/src/apps/cli/commands/project/utils/showProjectBanner.ts +11 -0
- package/src/apps/cli/commands/shared/index.ts +36 -0
- package/src/apps/{shell → cli}/commands/theStuffThatReallyMatters/index.ts +7 -26
- package/src/apps/cli/config/writeConfig.ts +71 -0
- package/src/apps/{shell → cli}/utils/getGoogleAuthUserNumber.ts +0 -0
- package/src/apps/cli/verify/index.ts +30 -0
- package/src/apps/cli/verify/migration/fromv2.ts +264 -0
- package/src/apps/cli/verify/migration/migrateSecrets.ts +37 -0
- package/src/apps/cli/verify/migration/oldGitlabCi.ts +48 -0
- package/src/catenv.ts +11 -0
- package/src/cli.ts +9 -0
- package/src/config/constants.ts +0 -1
- package/src/config/getProjectConfig.ts +160 -0
- package/src/k8sApi/index.ts +22 -6
- package/src/types/types.ts +0 -2
- package/src/utils/cluster.ts +6 -15
- package/src/utils/editAsFile.ts +31 -0
- package/src/utils/files.ts +6 -2
- package/src/utils/gitlab.ts +144 -34
- package/src/utils/passwordstore/index.ts +19 -21
- package/src/utils/preferences/index.ts +6 -3
- package/src/utils/projects/index.ts +18 -137
- package/tsconfig.json +3 -7
- package/bin/catenv.sh +0 -1
- package/src/apps/shell/commands/project/commandCloudSqlProxy.ts +0 -65
- package/src/apps/shell/commands/project/commandConfigSecrets.ts +0 -245
- package/src/apps/shell/commands/project/commandEnvVars.ts +0 -17
- package/src/apps/shell/commands/project/commandInitGitlab.ts +0 -157
- package/src/apps/shell/commands/project/commandListPods.ts +0 -21
- package/src/apps/shell/commands/project/commandNamespace.ts +0 -12
- package/src/apps/shell/commands/project/commandOpenDashboard.ts +0 -27
- package/src/apps/shell/commands/project/commandOpenEnv.ts +0 -18
- package/src/apps/shell/commands/project/commandOpenLogs.ts +0 -23
- package/src/apps/shell/commands/project/commandVariables.ts +0 -13
- package/src/apps/shell/commands/project/utils/autocompletions.ts +0 -7
- package/src/apps/shell/commands/project/utils/ensureCluster.ts +0 -31
- package/src/apps/shell/commands/project/utils/ensureNamespace.ts +0 -32
- package/src/apps/shell/commands/project/utils/monorepo.ts +0 -45
- package/src/apps/shell/commands/shared/index.ts +0 -31
- package/src/config/clusters.ts +0 -45
- package/src/index.ts +0 -17
- package/src/types/git-repo-name.d.ts +0 -1
- package/src/types/yawn-yaml.d.ts +0 -1
- package/src/utils/dashboardToken.ts +0 -20
- package/src/utils/formatEnvVars.ts +0 -7
package/src/utils/cluster.ts
CHANGED
|
@@ -1,21 +1,12 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
import clusters from "../config/clusters";
|
|
1
|
+
import { $ } from "zx";
|
|
2
|
+
|
|
4
3
|
export const getCurrentContext = async () =>
|
|
5
|
-
(await
|
|
4
|
+
(await $`kubectl config current-context`).stdout.trim();
|
|
6
5
|
|
|
7
6
|
export const getCurrentConnectedClusterName = async () => {
|
|
8
|
-
|
|
9
|
-
return findKey(clusters, { fullName: currentContext });
|
|
10
|
-
};
|
|
11
|
-
|
|
12
|
-
export const getClusterByName = (name: string) => {
|
|
13
|
-
return clusters[name];
|
|
7
|
+
return await getCurrentContext();
|
|
14
8
|
};
|
|
15
9
|
|
|
16
|
-
export const
|
|
17
|
-
|
|
18
|
-
export const connectToCluster = async (clusterName: string) => {
|
|
19
|
-
const { connect } = getClusterByName(clusterName);
|
|
20
|
-
await connect();
|
|
10
|
+
export const connectToCluster = async (fullname: string) => {
|
|
11
|
+
await $`kubectl config use-context ${fullname}`;
|
|
21
12
|
};
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { withFile } from "tmp-promise";
|
|
2
|
+
import { dump, load } from "js-yaml";
|
|
3
|
+
|
|
4
|
+
import { readFile, writeFile } from "fs-extra";
|
|
5
|
+
import getEditor from "./getEditor";
|
|
6
|
+
|
|
7
|
+
export const editAsFile = async <T>(
|
|
8
|
+
inObject: T,
|
|
9
|
+
preamble?: string
|
|
10
|
+
): Promise<T> => {
|
|
11
|
+
const fullPreamble = preamble
|
|
12
|
+
? `#
|
|
13
|
+
# ${preamble.split("\n").join("\n# ")}
|
|
14
|
+
#
|
|
15
|
+
|
|
16
|
+
`
|
|
17
|
+
: "\n";
|
|
18
|
+
const asString = fullPreamble + dump(inObject, { noRefs: true });
|
|
19
|
+
let newContent: T;
|
|
20
|
+
|
|
21
|
+
await withFile(
|
|
22
|
+
async ({ path: tmpFilePath }) => {
|
|
23
|
+
await writeFile(tmpFilePath, asString);
|
|
24
|
+
await (await getEditor()).open(tmpFilePath);
|
|
25
|
+
newContent = load((await readFile(tmpFilePath)).toString("utf-8")) as T;
|
|
26
|
+
},
|
|
27
|
+
{ postfix: ".yml" }
|
|
28
|
+
);
|
|
29
|
+
|
|
30
|
+
return newContent;
|
|
31
|
+
};
|
package/src/utils/files.ts
CHANGED
|
@@ -13,6 +13,10 @@ export const readFileOrError = async (filePath: string) => {
|
|
|
13
13
|
}
|
|
14
14
|
};
|
|
15
15
|
|
|
16
|
-
export const readYaml = async (filename: string) => {
|
|
17
|
-
|
|
16
|
+
export const readYaml = async <T = Record<string, any>>(filename: string) => {
|
|
17
|
+
try {
|
|
18
|
+
return yaml.load(await readFile(filename)) as T;
|
|
19
|
+
} catch (e) {
|
|
20
|
+
return null;
|
|
21
|
+
}
|
|
18
22
|
};
|
package/src/utils/gitlab.ts
CHANGED
|
@@ -1,52 +1,68 @@
|
|
|
1
1
|
import { exec } from "child-process-promise";
|
|
2
|
+
import { getSecretVarName } from "@catladder/pipeline";
|
|
3
|
+
import { isObject } 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
|
|
10
|
-
vorpal
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
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
|
|
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
|
|
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 (
|
|
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,92 @@ 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
|
+
) => {
|
|
148
|
+
return await doGitlabRequest(vorpal, `projects/${projectId}/variables`, {
|
|
149
|
+
key,
|
|
150
|
+
value,
|
|
151
|
+
masked: isMaskable(value),
|
|
152
|
+
});
|
|
153
|
+
};
|
|
154
|
+
|
|
155
|
+
const updateVariable = async (
|
|
156
|
+
vorpal: CommandInstance,
|
|
157
|
+
projectId: string,
|
|
158
|
+
key: string,
|
|
159
|
+
value: string
|
|
160
|
+
) => {
|
|
161
|
+
return await doGitlabRequest(
|
|
162
|
+
vorpal,
|
|
163
|
+
`projects/${projectId}/variables/${key}`,
|
|
164
|
+
{
|
|
165
|
+
value,
|
|
166
|
+
masked: isMaskable(value),
|
|
167
|
+
},
|
|
168
|
+
true
|
|
169
|
+
);
|
|
170
|
+
};
|
|
171
|
+
export const upsertAllVariables = async (
|
|
172
|
+
vorpal: CommandInstance,
|
|
173
|
+
variables: Record<string, any>,
|
|
174
|
+
env: string,
|
|
175
|
+
componentName: string
|
|
176
|
+
): Promise<void> => {
|
|
177
|
+
const { id } = await getProjectInfo(vorpal);
|
|
178
|
+
|
|
179
|
+
for (const [key, value] of Object.entries(variables ?? {})) {
|
|
180
|
+
const fullKey = getSecretVarName(env, componentName, key);
|
|
181
|
+
const valueSanitized = isObject(value) ? JSON.stringify(value) : `${value}`;
|
|
182
|
+
try {
|
|
183
|
+
await updateVariable(vorpal, id, fullKey, valueSanitized);
|
|
184
|
+
} catch (e) {
|
|
185
|
+
await createVariable(vorpal, id, fullKey, valueSanitized);
|
|
186
|
+
} finally {
|
|
187
|
+
getAllVariables.clear();
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
};
|
|
@@ -1,11 +1,8 @@
|
|
|
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
4
|
import { readFile, writeFile } from "fs-extra";
|
|
6
|
-
import yaml from "js-yaml";
|
|
7
5
|
import { withFile } from "tmp-promise";
|
|
8
|
-
import formatEnvVars from "../formatEnvVars";
|
|
9
6
|
import getEditor from "../getEditor";
|
|
10
7
|
import { getPreference, hasPreference, setPreference } from "../preferences";
|
|
11
8
|
|
|
@@ -78,9 +75,7 @@ const execBitwardenCommand = async (command: string): Promise<any> => {
|
|
|
78
75
|
await loginBitwarden();
|
|
79
76
|
return execBitwardenCommand(command);
|
|
80
77
|
} else {
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
console.log("wooops", e.message);
|
|
78
|
+
throw e;
|
|
84
79
|
}
|
|
85
80
|
}
|
|
86
81
|
};
|
|
@@ -169,24 +164,27 @@ const share = async (itemId: string) =>
|
|
|
169
164
|
])}`
|
|
170
165
|
);
|
|
171
166
|
|
|
172
|
-
export const
|
|
167
|
+
export const trashItem = async (path: string) => {
|
|
173
168
|
const item = await getItem(path);
|
|
174
169
|
|
|
175
|
-
await
|
|
176
|
-
await writeFile(tmpFilePath, item.notes);
|
|
177
|
-
await (await getEditor()).open(tmpFilePath);
|
|
178
|
-
const newContent = (await readFile(tmpFilePath)).toString("utf-8");
|
|
170
|
+
const result = await execBitwardenCommand(`delete item ${item.id}`);
|
|
179
171
|
|
|
180
|
-
|
|
181
|
-
...item,
|
|
182
|
-
notes: newContent,
|
|
183
|
-
});
|
|
184
|
-
}, { postfix: ".yml" });
|
|
172
|
+
return result;
|
|
185
173
|
};
|
|
174
|
+
export const editPass = async (path: string) => {
|
|
175
|
+
const item = await getItem(path);
|
|
186
176
|
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
177
|
+
await withFile(
|
|
178
|
+
async ({ path: tmpFilePath }) => {
|
|
179
|
+
await writeFile(tmpFilePath, item.notes);
|
|
180
|
+
await (await getEditor()).open(tmpFilePath);
|
|
181
|
+
const newContent = (await readFile(tmpFilePath)).toString("utf-8");
|
|
182
|
+
|
|
183
|
+
await update("item", item.id, {
|
|
184
|
+
...item,
|
|
185
|
+
notes: newContent,
|
|
186
|
+
});
|
|
187
|
+
},
|
|
188
|
+
{ postfix: ".yml" }
|
|
189
|
+
);
|
|
192
190
|
};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import fs from "fs-extra";
|
|
2
2
|
import { homedir } from "os";
|
|
3
3
|
|
|
4
|
-
import
|
|
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
|
|
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,
|
|
35
|
+
await fs.writeFile(file, dump(newPreferences));
|
|
33
36
|
};
|
|
@@ -1,19 +1,11 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { $ } from "zx";
|
|
2
2
|
import { join } from "path";
|
|
3
|
-
import
|
|
4
|
-
import {
|
|
5
|
-
import { readFileOrError
|
|
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
|
-
|
|
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,30 @@ 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 (
|
|
55
|
-
const {
|
|
56
|
-
|
|
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
|
|
60
|
-
|
|
61
|
-
|
|
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
38
|
return res.body.items;
|
|
76
39
|
};
|
|
77
40
|
|
|
78
|
-
export const getProjectPvcs = async (
|
|
79
|
-
const namespace = await getProjectNamespace(
|
|
41
|
+
export const getProjectPvcs = async (envComponent: string) => {
|
|
42
|
+
const namespace = await getProjectNamespace(envComponent);
|
|
43
|
+
const k8sApi = getk8sApi();
|
|
80
44
|
const res = await k8sApi.listNamespacedPersistentVolumeClaim(namespace);
|
|
81
45
|
|
|
82
46
|
return res.body.items;
|
|
83
47
|
};
|
|
84
48
|
|
|
85
|
-
export const getProjectPodNames = async (
|
|
86
|
-
const pods = await getProjectPods(
|
|
49
|
+
export const getProjectPodNames = async (envComponent: string) => {
|
|
50
|
+
const pods = await getProjectPods(envComponent);
|
|
87
51
|
return pods.map((n) => n.metadata.name);
|
|
88
52
|
};
|
|
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,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
|
-
});
|