@catladder/cli 0.0.0-fix-migrate-string-cmd-508a469f → 0.0.0-fix-values-as-files-73f39da5
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/README.md +2 -1
- package/dist/apps/cli/commands/general/index.js +17 -9
- package/dist/apps/cli/commands/general/index.js.map +1 -1
- package/dist/apps/cli/commands/general/portForward.js +5 -6
- package/dist/apps/cli/commands/general/portForward.js.map +1 -1
- package/dist/apps/cli/commands/project/commandCloudSqlProxy.js +27 -19
- package/dist/apps/cli/commands/project/commandCloudSqlProxy.js.map +1 -1
- package/dist/apps/cli/commands/project/commandConfigSecrets.d.ts +2 -1
- package/dist/apps/cli/commands/project/commandConfigSecrets.js +175 -110
- package/dist/apps/cli/commands/project/commandConfigSecrets.js.map +1 -1
- package/dist/apps/cli/commands/project/commandDeletePods.js +4 -3
- package/dist/apps/cli/commands/project/commandDeletePods.js.map +1 -1
- package/dist/apps/cli/commands/project/{commandInitGitlab.d.ts → commandInitProject.old.d.ts} +0 -0
- package/dist/apps/cli/commands/project/{commandInitProject.js → commandInitProject.old.js} +1 -1
- package/dist/apps/cli/commands/project/commandInitProject.old.js.map +1 -0
- package/dist/apps/cli/commands/project/{commandInitProject.d.ts → commandSetup.d.ts} +0 -0
- package/dist/apps/cli/commands/project/{commandReloadConfig.js → commandSetup.js} +4 -8
- package/dist/apps/cli/commands/project/commandSetup.js.map +1 -0
- package/dist/apps/cli/commands/project/commandTriggerCronjob.js +2 -2
- package/dist/apps/cli/commands/project/commandTriggerCronjob.js.map +1 -1
- package/dist/apps/cli/commands/project/index.js +3 -6
- package/dist/apps/cli/commands/project/index.js.map +1 -1
- 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.js +1 -1
- package/dist/apps/cli/commands/project/utils/autocompletions.js.map +1 -1
- package/dist/apps/cli/commands/project/utils/ensureNamespace.js +6 -8
- package/dist/apps/cli/commands/project/utils/ensureNamespace.js.map +1 -1
- package/dist/apps/cli/config/writeConfig.js +1 -1
- package/dist/apps/cli/config/writeConfig.js.map +1 -1
- package/dist/apps/cli/verify/migration/fromv2.js +8 -6
- package/dist/apps/cli/verify/migration/fromv2.js.map +1 -1
- package/dist/config/getProjectConfig.d.ts +8 -5
- package/dist/config/getProjectConfig.js +81 -36
- package/dist/config/getProjectConfig.js.map +1 -1
- package/dist/k8sApi/index.d.ts +7 -5
- package/dist/k8sApi/index.js +23 -9
- package/dist/k8sApi/index.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/utils/cluster.js +0 -2
- package/dist/utils/cluster.js.map +1 -1
- package/dist/utils/gitlab.d.ts +1 -0
- package/dist/utils/gitlab.js +17 -1
- package/dist/utils/gitlab.js.map +1 -1
- package/dist/utils/projects/index.js +7 -8
- package/dist/utils/projects/index.js.map +1 -1
- package/package.json +3 -3
- package/src/apps/cli/commands/general/index.ts +6 -7
- package/src/apps/cli/commands/general/portForward.ts +2 -1
- package/src/apps/cli/commands/project/commandCloudSqlProxy.ts +24 -6
- package/src/apps/cli/commands/project/commandConfigSecrets.ts +139 -128
- package/src/apps/cli/commands/project/commandDeletePods.ts +2 -1
- package/src/apps/cli/commands/project/{commandInitProject.ts → commandInitProject.old.ts} +0 -0
- package/src/apps/cli/commands/project/commandSetup.ts +12 -0
- package/src/apps/cli/commands/project/commandTriggerCronjob.ts +3 -3
- package/src/apps/cli/commands/project/index.ts +4 -6
- 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 +2 -2
- package/src/apps/cli/commands/project/utils/ensureNamespace.ts +2 -1
- package/src/apps/cli/config/writeConfig.ts +1 -1
- package/src/apps/cli/verify/migration/fromv2.ts +4 -2
- package/src/config/getProjectConfig.ts +74 -34
- package/src/k8sApi/index.ts +20 -8
- package/src/utils/cluster.ts +0 -2
- package/src/utils/gitlab.ts +11 -0
- package/src/utils/projects/index.ts +3 -1
- package/dist/apps/cli/commands/project/commandInitGitlab.js +0 -136
- package/dist/apps/cli/commands/project/commandInitGitlab.js.map +0 -1
- package/dist/apps/cli/commands/project/commandInitProject.js.map +0 -1
- package/dist/apps/cli/commands/project/commandReloadConfig.d.ts +0 -3
- package/dist/apps/cli/commands/project/commandReloadConfig.js.map +0 -1
- package/dist/utils/formatEnvVars.d.ts +0 -2
- package/dist/utils/formatEnvVars.js +0 -10
- package/dist/utils/formatEnvVars.js.map +0 -1
- package/src/apps/cli/commands/project/commandInitGitlab.ts +0 -248
- package/src/apps/cli/commands/project/commandReloadConfig.ts +0 -12
- package/src/utils/formatEnvVars.ts +0 -7
package/dist/utils/cluster.js
CHANGED
|
@@ -42,7 +42,6 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
|
42
42
|
exports.__esModule = true;
|
|
43
43
|
exports.connectToCluster = exports.getCurrentConnectedClusterName = exports.getCurrentContext = void 0;
|
|
44
44
|
var zx_1 = require("zx");
|
|
45
|
-
var k8sApi_1 = require("../k8sApi");
|
|
46
45
|
var getCurrentContext = function () { return __awaiter(void 0, void 0, void 0, function () { return __generator(this, function (_a) {
|
|
47
46
|
switch (_a.label) {
|
|
48
47
|
case 0: return [4 /*yield*/, (0, zx_1.$)(templateObject_1 || (templateObject_1 = __makeTemplateObject(["kubectl config current-context"], ["kubectl config current-context"])))];
|
|
@@ -65,7 +64,6 @@ var connectToCluster = function (fullname) { return __awaiter(void 0, void 0, vo
|
|
|
65
64
|
case 0: return [4 /*yield*/, (0, zx_1.$)(templateObject_2 || (templateObject_2 = __makeTemplateObject(["kubectl config use-context ", ""], ["kubectl config use-context ", ""])), fullname)];
|
|
66
65
|
case 1:
|
|
67
66
|
_a.sent();
|
|
68
|
-
(0, k8sApi_1.reload)();
|
|
69
67
|
return [2 /*return*/];
|
|
70
68
|
}
|
|
71
69
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cluster.js","sourceRoot":"","sources":["../../src/utils/cluster.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,yBAAuB;
|
|
1
|
+
{"version":3,"file":"cluster.js","sourceRoot":"","sources":["../../src/utils/cluster.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,yBAAuB;AAEhB,IAAM,iBAAiB,GAAG;;gBAC9B,yBAAM,MAAC,oGAAA,gCAAgC,MAAA;gBAAxC,sBAAA,CAAC,SAAuC,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,EAAA;;SAAA,CAAC;AAD7C,QAAA,iBAAiB,qBAC4B;AAEnD,IAAM,8BAA8B,GAAG;;;oBACrC,qBAAM,IAAA,yBAAiB,GAAE,EAAA;oBAAhC,sBAAO,SAAyB,EAAC;;;KAClC,CAAC;AAFW,QAAA,8BAA8B,kCAEzC;AAEK,IAAM,gBAAgB,GAAG,UAAO,QAAgB;;;oBACrD,yBAAM,MAAC,qGAAA,6BAA8B,EAAQ,EAAE,KAAV,QAAQ,GAAE;;gBAA/C,SAA+C,CAAC;;;;KACjD,CAAC;AAFW,QAAA,gBAAgB,oBAE3B"}
|
package/dist/utils/gitlab.d.ts
CHANGED
|
@@ -17,5 +17,6 @@ declare type GitlabVariable = {
|
|
|
17
17
|
environment_scope: string;
|
|
18
18
|
};
|
|
19
19
|
export declare const getAllVariables: ((vorpal: CommandInstance) => Promise<Array<GitlabVariable>>) & memoizee.Memoized<(vorpal: CommandInstance) => Promise<Array<GitlabVariable>>>;
|
|
20
|
+
export declare const getVariableValueByRawName: (vorpal: CommandInstance, rawName: string) => Promise<string>;
|
|
20
21
|
export declare const upsertAllVariables: (vorpal: CommandInstance, variables: Record<string, any>, env: string, componentName: string) => Promise<void>;
|
|
21
22
|
export {};
|
package/dist/utils/gitlab.js
CHANGED
|
@@ -48,7 +48,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
48
48
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
49
49
|
};
|
|
50
50
|
exports.__esModule = true;
|
|
51
|
-
exports.upsertAllVariables = exports.getAllVariables = exports.getProjectInfo = exports.doGitlabRequest = exports.getGitlabToken = exports.setupGitlabToken = exports.hasGitlabToken = void 0;
|
|
51
|
+
exports.upsertAllVariables = exports.getVariableValueByRawName = exports.getAllVariables = exports.getProjectInfo = exports.doGitlabRequest = exports.getGitlabToken = exports.setupGitlabToken = exports.hasGitlabToken = void 0;
|
|
52
52
|
var child_process_promise_1 = require("child-process-promise");
|
|
53
53
|
var pipeline_1 = require("@catladder/pipeline");
|
|
54
54
|
var lodash_1 = require("lodash");
|
|
@@ -145,6 +145,9 @@ var doGitlabRequest = function (vorpal, path, data, update) {
|
|
|
145
145
|
if (result.status >= 200 && result.status < 400) {
|
|
146
146
|
return [2 /*return*/, result.json()];
|
|
147
147
|
}
|
|
148
|
+
if (result.status === 404) {
|
|
149
|
+
throw new Error("not found");
|
|
150
|
+
}
|
|
148
151
|
_a = Error.bind;
|
|
149
152
|
_c = (_b = "Could not send request to gitlab api ".concat(path, ": ").concat(result.status, " \"").concat(result.statusText, "\".\nResponse: ")).concat;
|
|
150
153
|
_e = (_d = JSON).stringify;
|
|
@@ -196,6 +199,19 @@ exports.getAllVariables = (0, memoizee_1["default"])(function (vorpal) { return
|
|
|
196
199
|
}
|
|
197
200
|
});
|
|
198
201
|
}); }, { promise: true });
|
|
202
|
+
var getVariableValueByRawName = function (vorpal, rawName) { return __awaiter(void 0, void 0, void 0, function () {
|
|
203
|
+
var allVariables;
|
|
204
|
+
var _a;
|
|
205
|
+
return __generator(this, function (_b) {
|
|
206
|
+
switch (_b.label) {
|
|
207
|
+
case 0: return [4 /*yield*/, (0, exports.getAllVariables)(vorpal)];
|
|
208
|
+
case 1:
|
|
209
|
+
allVariables = _b.sent();
|
|
210
|
+
return [2 /*return*/, (_a = allVariables.find(function (v) { return v.key === rawName; })) === null || _a === void 0 ? void 0 : _a.value];
|
|
211
|
+
}
|
|
212
|
+
});
|
|
213
|
+
}); };
|
|
214
|
+
exports.getVariableValueByRawName = getVariableValueByRawName;
|
|
199
215
|
var 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
|
|
200
216
|
var isMaskable = function (value) { return maskableRegex.test(value); };
|
|
201
217
|
var createVariable = function (vorpal, projectId, key, value) { return __awaiter(void 0, void 0, void 0, function () {
|
package/dist/utils/gitlab.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gitlab.js","sourceRoot":"","sources":["../../src/utils/gitlab.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+DAA6C;AAC7C,gDAAuD;AACvD,iCAAkC;AAClC,sDAAgC;AAChC,0DAA+B;AAC/B,8CAAwB;AAExB,6CAA4E;AAE5E,IAAM,SAAS,GAAG,8BAA8B,CAAC;AAE1C,IAAM,cAAc,GAAG;;gBAAY,qBAAM,IAAA,2BAAa,EAAC,SAAS,CAAC,EAAA;gBAA9B,sBAAA,SAA8B,EAAA;;SAAA,CAAC;AAA5D,QAAA,cAAc,kBAA8C;AAClE,IAAM,gBAAgB,GAAG,UAAO,MAAuB;;;;;gBAC5D,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBACf,MAAM,CAAC,GAAG,CAAC,+DAA+D,CAAC,CAAC;gBAC5E,MAAM,CAAC,GAAG,CAAC,mDAAmD,CAAC,CAAC;gBAChE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBACf,MAAM,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAC;gBACtD,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBACY,qBAAM,MAAM,CAAC,MAAM,CAAC;wBAC7C,SAAO,EAAE,IAAI;wBACb,OAAO,EAAE,IAAI;wBACb,IAAI,EAAE,gBAAgB;wBACtB,IAAI,EAAE,QAAQ;qBACf,CAAC,EAAA;;gBALM,cAAc,GAAK,CAAA,SAKzB,CAAA,eALoB;gBAOtB,IAAA,iBAAI,EAAC,wDAAwD,CAAC,CAAC;gBAE/D,MAAM,CAAC,GAAG,CAAC,+CAA+C,CAAC,CAAC;gBAElC,qBAAM,MAAM,CAAC,MAAM,CAAC;wBAC5C,IAAI,EAAE,QAAQ;wBACd,IAAI,EAAE,eAAe;wBACrB,SAAO,EAAE,EAAE;wBACX,OAAO,EAAE,6BAA6B;qBACvC,CAAC,EAAA;;gBALM,aAAa,GAAK,CAAA,SAKxB,CAAA,cALmB;qBAMjB,aAAa,EAAb,wBAAa;gBACf,qBAAM,IAAA,2BAAa,EAAC,SAAS,EAAE,aAAa,CAAC,EAAA;;gBAA7C,SAA6C,CAAC;;;;;KAEjD,CAAC;AA3BW,QAAA,gBAAgB,oBA2B3B;AACK,IAAM,cAAc,GAAG,UAAO,MAAuB;;;oBACpD,qBAAM,IAAA,sBAAc,GAAE,EAAA;;qBAAxB,CAAC,CAAC,SAAsB,CAAC,EAAzB,wBAAyB;gBAC3B,IAAI,CAAC,MAAM,EAAE;oBACX,OAAO,CAAC,KAAK,CACX,4DAA4D,CAC7D,CAAC;oBACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;iBACjB;gBACD,qBAAM,IAAA,wBAAgB,EAAC,MAAM,CAAC,EAAA;;gBAA9B,SAA8B,CAAC;;oBAEjC,sBAAO,IAAA,2BAAa,EAAC,SAAS,CAAC,EAAC;;;KACjC,CAAC;AAXW,QAAA,cAAc,kBAWzB;AAEK,IAAM,eAAe,GAAG,UAC7B,MAAuB,EACvB,IAAY,EACZ,IAAqB,EACrB,MAAgB;IADhB,qBAAA,EAAA,gBAAqB;;;;;wBAGH,qBAAM,IAAA,sBAAc,EAAC,MAAM,CAAC,EAAA;;oBAAxC,SAAS,GAAG,SAA4B;oBAExC,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;oBAEzC,qBAAM,IAAA,uBAAK,EAAC,uCAAgC,IAAI,CAAE,EAAE;4BACjE,MAAM,QAAA;4BACN,OAAO,EAAE;gCACP,cAAc,EAAE,kBAAkB;gCAClC,eAAe,EAAE,SAAS;6BAC3B;4BACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;yBAC3B,CAAC,EAAA;;oBAPI,MAAM,GAAG,SAOb;oBAEF,IAAI,MAAM,CAAC,MAAM,IAAI,GAAG,IAAI,MAAM,CAAC,MAAM,GAAG,GAAG,EAAE;wBAC/C,sBAAO,MAAM,CAAC,IAAI,EAAE,EAAC;qBACtB;yBAES,KAAK;8EAC2B,IAAI,eAAK,MAAM,CAAC,MAAM,gBAC5D,MAAM,CAAC,UAAU;oBACF,KAAA,CAAA,KAAA,IAAI,CAAA,CAAC,SAAS,CAAA;oBAAC,qBAAM,MAAM,CAAC,IAAI,EAAE,EAAA;wBAHrD,MAAM,cAAI,KAAK,WACb,cAEiB,cAAe,SAAmB,EAAE,IAAI,EAAE,CAAC,EAAC,EAAE,KAChE,CAAC;;;;CACH,CAAC;
|
|
1
|
+
{"version":3,"file":"gitlab.js","sourceRoot":"","sources":["../../src/utils/gitlab.ts"],"names":[],"mappings":"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"}
|
|
@@ -39,15 +39,12 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
|
39
39
|
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
40
40
|
}
|
|
41
41
|
};
|
|
42
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
43
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
44
|
-
};
|
|
45
42
|
exports.__esModule = true;
|
|
46
43
|
exports.getProjectPodNames = exports.getProjectPvcs = exports.getProjectPods = exports.getProjectNamespace = exports.hasGitlabCiFile = exports.readRootGitlabCiFile = exports.getRootGitlabCiFile = exports.getGitRoot = void 0;
|
|
47
44
|
var zx_1 = require("zx");
|
|
48
45
|
var path_1 = require("path");
|
|
49
46
|
var getProjectConfig_1 = require("../../config/getProjectConfig");
|
|
50
|
-
var k8sApi_1 =
|
|
47
|
+
var k8sApi_1 = require("../../k8sApi");
|
|
51
48
|
var files_1 = require("../files");
|
|
52
49
|
var getGitRoot = function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
53
50
|
return __generator(this, function (_a) {
|
|
@@ -109,13 +106,14 @@ var getProjectNamespace = function (envComponent) { return __awaiter(void 0, voi
|
|
|
109
106
|
}); };
|
|
110
107
|
exports.getProjectNamespace = getProjectNamespace;
|
|
111
108
|
var getProjectPods = function (envComponent) { return __awaiter(void 0, void 0, void 0, function () {
|
|
112
|
-
var namespace, res;
|
|
109
|
+
var namespace, k8sApi, res;
|
|
113
110
|
return __generator(this, function (_a) {
|
|
114
111
|
switch (_a.label) {
|
|
115
112
|
case 0: return [4 /*yield*/, (0, exports.getProjectNamespace)(envComponent)];
|
|
116
113
|
case 1:
|
|
117
114
|
namespace = _a.sent();
|
|
118
|
-
|
|
115
|
+
k8sApi = (0, k8sApi_1.getk8sApi)();
|
|
116
|
+
return [4 /*yield*/, k8sApi.listNamespacedPod(namespace)];
|
|
119
117
|
case 2:
|
|
120
118
|
res = _a.sent();
|
|
121
119
|
return [2 /*return*/, res.body.items];
|
|
@@ -124,13 +122,14 @@ var getProjectPods = function (envComponent) { return __awaiter(void 0, void 0,
|
|
|
124
122
|
}); };
|
|
125
123
|
exports.getProjectPods = getProjectPods;
|
|
126
124
|
var getProjectPvcs = function (envComponent) { return __awaiter(void 0, void 0, void 0, function () {
|
|
127
|
-
var namespace, res;
|
|
125
|
+
var namespace, k8sApi, res;
|
|
128
126
|
return __generator(this, function (_a) {
|
|
129
127
|
switch (_a.label) {
|
|
130
128
|
case 0: return [4 /*yield*/, (0, exports.getProjectNamespace)(envComponent)];
|
|
131
129
|
case 1:
|
|
132
130
|
namespace = _a.sent();
|
|
133
|
-
|
|
131
|
+
k8sApi = (0, k8sApi_1.getk8sApi)();
|
|
132
|
+
return [4 /*yield*/, k8sApi.listNamespacedPersistentVolumeClaim(namespace)];
|
|
134
133
|
case 2:
|
|
135
134
|
res = _a.sent();
|
|
136
135
|
return [2 /*return*/, res.body.items];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utils/projects/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utils/projects/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,yBAAuB;AACvB,6BAA4B;AAC5B,kEAA8E;AAC9E,uCAAyC;AACzC,kCAA2C;AAEpC,IAAM,UAAU,GAAG;;;oBAChB,yBAAM,MAAC,mGAAA,+BAA+B,MAAA;oBAA9C,sBAAO,CAAC,SAAsC,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,EAAC;;;KAC/D,CAAC;AAFW,QAAA,UAAU,cAErB;AAEK,IAAM,mBAAmB,GAAG;;;;oBACjB,qBAAM,IAAA,kBAAU,GAAE,EAAA;;gBAA5B,OAAO,GAAG,SAAkB;gBAClC,sBAAO,IAAA,WAAI,EAAC,OAAO,EAAE,gBAAgB,CAAC,EAAC;;;KACxC,CAAC;AAHW,QAAA,mBAAmB,uBAG9B;AAEK,IAAM,oBAAoB,GAAG;;;YAClC,KAAA,uBAAe,CAAA;YAAC,qBAAM,IAAA,2BAAmB,GAAE,EAAA;gBAA3C,sBAAA,kBAAgB,SAA2B,EAAC,EAAA;;SAAA,CAAC;AADlC,QAAA,oBAAoB,wBACc;AAExC,IAAM,eAAe,GAAG;;;;oBACP,qBAAM,IAAA,4BAAoB,GAAE,EAAA;;gBAA5C,KAAgB,SAA4B,EAA3C,KAAK,QAAA,EAAE,IAAI,QAAA;gBAClB,IAAI,KAAK,EAAE;oBACT,sBAAO,KAAK,EAAC;iBACd;gBACD,sBAAO,IAAI,EAAC;;;KACb,CAAC;AANW,QAAA,eAAe,mBAM1B;AAEK,IAAM,mBAAmB,GAAG,UAAO,YAAoB;;;;;gBACpD,GAAG,GAAK,IAAA,8BAAW,EAAC,YAAY,CAAC,IAA9B,CAA+B;gBAC3B,qBAAM,IAAA,mCAAgB,GAAE,EAAA;;gBAAjC,MAAM,GAAG,SAAwB;gBACvC,sBAAO,UAAG,MAAM,CAAC,YAAY,cAAI,MAAM,CAAC,OAAO,cAAI,GAAG,CAAE,EAAC;;;KAC1D,CAAC;AAJW,QAAA,mBAAmB,uBAI9B;AAEK,IAAM,cAAc,GAAG,UAAO,YAAoB;;;;oBACrC,qBAAM,IAAA,2BAAmB,EAAC,YAAY,CAAC,EAAA;;gBAAnD,SAAS,GAAG,SAAuC;gBACnD,MAAM,GAAG,IAAA,kBAAS,GAAE,CAAC;gBACf,qBAAM,MAAM,CAAC,iBAAiB,CAAC,SAAS,CAAC,EAAA;;gBAA/C,GAAG,GAAG,SAAyC;gBAErD,sBAAO,GAAG,CAAC,IAAI,CAAC,KAAK,EAAC;;;KACvB,CAAC;AANW,QAAA,cAAc,kBAMzB;AAEK,IAAM,cAAc,GAAG,UAAO,YAAoB;;;;oBACrC,qBAAM,IAAA,2BAAmB,EAAC,YAAY,CAAC,EAAA;;gBAAnD,SAAS,GAAG,SAAuC;gBACnD,MAAM,GAAG,IAAA,kBAAS,GAAE,CAAC;gBACf,qBAAM,MAAM,CAAC,mCAAmC,CAAC,SAAS,CAAC,EAAA;;gBAAjE,GAAG,GAAG,SAA2D;gBAEvE,sBAAO,GAAG,CAAC,IAAI,CAAC,KAAK,EAAC;;;KACvB,CAAC;AANW,QAAA,cAAc,kBAMzB;AAEK,IAAM,kBAAkB,GAAG,UAAO,YAAoB;;;;oBAC9C,qBAAM,IAAA,sBAAc,EAAC,YAAY,CAAC,EAAA;;gBAAzC,IAAI,GAAG,SAAkC;gBAC/C,sBAAO,IAAI,CAAC,GAAG,CAAC,UAAC,CAAC,IAAK,OAAA,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAf,CAAe,CAAC,EAAC;;;KACzC,CAAC;AAHW,QAAA,kBAAkB,sBAG7B"}
|
package/package.json
CHANGED
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
"catladder": "./bin/catladder"
|
|
17
17
|
},
|
|
18
18
|
"dependencies": {
|
|
19
|
-
"@catladder/pipeline": "0.0.0-fix-
|
|
19
|
+
"@catladder/pipeline": "0.0.0-fix-values-as-files-73f39da5",
|
|
20
20
|
"@kubernetes/client-node": "^0.16.2",
|
|
21
21
|
"child-process-promise": "^2.2.1",
|
|
22
22
|
"command-exists-promise": "^2.0.2",
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
"dayjs": "^1.10.4",
|
|
25
25
|
"fs-extra": "^7.0.1",
|
|
26
26
|
"gitlab": "^4.4.1",
|
|
27
|
-
"js-yaml": "^
|
|
27
|
+
"js-yaml": "^4.1.0",
|
|
28
28
|
"lodash": "^4.17.21",
|
|
29
29
|
"memoizee": "^0.4.14",
|
|
30
30
|
"node-fetch": "^2.3.0",
|
|
@@ -55,6 +55,6 @@
|
|
|
55
55
|
"eslint": "^8.7.0",
|
|
56
56
|
"typescript": "^4.5.4"
|
|
57
57
|
},
|
|
58
|
-
"version": "0.0.0-fix-
|
|
58
|
+
"version": "0.0.0-fix-values-as-files-73f39da5",
|
|
59
59
|
"stableVersion": "0.0.0"
|
|
60
60
|
}
|
|
@@ -1,10 +1,7 @@
|
|
|
1
1
|
import memoizee from "memoizee";
|
|
2
2
|
import Vorpal from "vorpal";
|
|
3
|
-
import
|
|
4
|
-
import {
|
|
5
|
-
getCurrentConnectedClusterName,
|
|
6
|
-
getCurrentContext,
|
|
7
|
-
} from "../../../../utils/cluster";
|
|
3
|
+
import { getk8sApi } from "../../../../k8sApi";
|
|
4
|
+
import { getCurrentContext } from "../../../../utils/cluster";
|
|
8
5
|
import { logError } from "../../../../utils/log";
|
|
9
6
|
import { syncBitwarden } from "../../../../utils/passwordstore";
|
|
10
7
|
import {
|
|
@@ -12,13 +9,12 @@ import {
|
|
|
12
9
|
stopPortForward,
|
|
13
10
|
} from "../../../../utils/portForward";
|
|
14
11
|
import { getShell } from "../../../../utils/shell";
|
|
15
|
-
import { getGoogleAuthUserNumber } from "../../utils/getGoogleAuthUserNumber";
|
|
16
|
-
import { openGoogleCloudLogs } from "../shared";
|
|
17
12
|
import { namespaceAutoCompletion } from "./namespaceAutoCompletion";
|
|
18
13
|
import portForward from "./portForward";
|
|
19
14
|
|
|
20
15
|
const getAllNamespaces = memoizee(
|
|
21
16
|
async () => {
|
|
17
|
+
const k8sApi = getk8sApi();
|
|
22
18
|
const res = await k8sApi.listNamespace();
|
|
23
19
|
return res.body.items;
|
|
24
20
|
},
|
|
@@ -45,6 +41,7 @@ export default async (vorpal: Vorpal) => {
|
|
|
45
41
|
.command("list-secrets <namespace>", "show secrets")
|
|
46
42
|
.autocomplete(namespaceAutoCompletion)
|
|
47
43
|
.action(async function ({ namespace }) {
|
|
44
|
+
const k8sApi = getk8sApi();
|
|
48
45
|
const res = await k8sApi.listNamespacedSecret(namespace);
|
|
49
46
|
|
|
50
47
|
this.log(res.body.items.map((n) => n.metadata.name).join("\n"));
|
|
@@ -59,6 +56,7 @@ export default async (vorpal: Vorpal) => {
|
|
|
59
56
|
.command("list-pods <namespace>", "list all pods of namespace")
|
|
60
57
|
.autocomplete(namespaceAutoCompletion)
|
|
61
58
|
.action(async function ({ namespace }) {
|
|
59
|
+
const k8sApi = getk8sApi();
|
|
62
60
|
const res = await k8sApi.listNamespacedPod(namespace);
|
|
63
61
|
this.log(res.body.items.map((n) => n.metadata.name).join("\n"));
|
|
64
62
|
});
|
|
@@ -74,6 +72,7 @@ export default async (vorpal: Vorpal) => {
|
|
|
74
72
|
.command("get-shell <namespace>", "get a shell to a pod in the environment")
|
|
75
73
|
.autocomplete(namespaceAutoCompletion)
|
|
76
74
|
.action(async function ({ namespace }) {
|
|
75
|
+
const k8sApi = getk8sApi();
|
|
77
76
|
const res = await k8sApi.listNamespacedPod(namespace);
|
|
78
77
|
if (res.body.items.length === 0) {
|
|
79
78
|
logError(this, "sorry, no pods found");
|
|
@@ -3,7 +3,7 @@ import { logError } from "../../../../utils/log";
|
|
|
3
3
|
|
|
4
4
|
import { startPortForward } from "../../../../utils/portForward";
|
|
5
5
|
|
|
6
|
-
import
|
|
6
|
+
import { getk8sApi } from "../../../../k8sApi";
|
|
7
7
|
import { namespaceAutoCompletion } from "./namespaceAutoCompletion";
|
|
8
8
|
|
|
9
9
|
export default async (vorpal: Vorpal) =>
|
|
@@ -11,6 +11,7 @@ export default async (vorpal: Vorpal) =>
|
|
|
11
11
|
.command("port-forward <namespace>", "start port-forwarding")
|
|
12
12
|
.autocomplete(namespaceAutoCompletion)
|
|
13
13
|
.action(async function ({ namespace }) {
|
|
14
|
+
const k8sApi = getk8sApi();
|
|
14
15
|
const res = await k8sApi.listNamespacedPod(namespace);
|
|
15
16
|
if (res.body.items.length === 0) {
|
|
16
17
|
logError(this, "sorry, no pods found");
|
|
@@ -3,14 +3,13 @@ import { spawn } from "child-process-promise";
|
|
|
3
3
|
import { writeFile } from "fs-extra";
|
|
4
4
|
import { withFile } from "tmp-promise";
|
|
5
5
|
import Vorpal from "vorpal";
|
|
6
|
-
import { GOOGLE_CLOUD_SQL_PASS_PATH } from "../../../../config/constants";
|
|
7
6
|
import {
|
|
8
7
|
getEnvVars,
|
|
8
|
+
getGitlabVar,
|
|
9
9
|
getPipelineContextByChoice,
|
|
10
10
|
getProjectConfig,
|
|
11
11
|
parseChoice,
|
|
12
12
|
} from "../../../../config/getProjectConfig";
|
|
13
|
-
import { readPass } from "../../../../utils/passwordstore";
|
|
14
13
|
import { envAndComponents } from "./utils/autocompletions";
|
|
15
14
|
|
|
16
15
|
export default async (vorpal: Vorpal) =>
|
|
@@ -30,15 +29,20 @@ export default async (vorpal: Vorpal) =>
|
|
|
30
29
|
message: "Local port: ",
|
|
31
30
|
});
|
|
32
31
|
|
|
33
|
-
const
|
|
34
|
-
|
|
32
|
+
const envVars = await getEnvVars(this, env, componentName);
|
|
33
|
+
const POSTGRESQL_PASSWORD = envVars?.POSTGRESQL_PASSWORD;
|
|
35
34
|
|
|
36
35
|
const context = await getPipelineContextByChoice(env, componentName);
|
|
37
36
|
if (!isOfDeployType(context.componentConfig.deploy, "kubernetes")) {
|
|
38
37
|
throw new Error("currently only supported for kubernetes deployment");
|
|
39
38
|
}
|
|
39
|
+
this.log("");
|
|
40
40
|
this.log(`postgres-PW: ${POSTGRESQL_PASSWORD}`);
|
|
41
41
|
this.log("");
|
|
42
|
+
this.log(
|
|
43
|
+
`POSTGRESQL_URL=postgresql://postgres:${POSTGRESQL_PASSWORD}@localhost:${localPort}/${context.environment.envVars.KUBE_APP_NAME}?schema=public`
|
|
44
|
+
);
|
|
45
|
+
this.log("");
|
|
42
46
|
|
|
43
47
|
const values = context.componentConfig.deploy.values;
|
|
44
48
|
|
|
@@ -54,9 +58,23 @@ export default async (vorpal: Vorpal) =>
|
|
|
54
58
|
|
|
55
59
|
const instanceName = `${projectId}:${region}:${instanceId}=tcp:${localPort}`;
|
|
56
60
|
|
|
57
|
-
const
|
|
61
|
+
const cloudsqlProxyCredentials = await getGitlabVar(
|
|
62
|
+
this,
|
|
63
|
+
env,
|
|
64
|
+
componentName,
|
|
65
|
+
"cloudsqlProxyCredentials"
|
|
66
|
+
);
|
|
67
|
+
|
|
68
|
+
if (!cloudsqlProxyCredentials) {
|
|
69
|
+
// we store cloudsqlProxyCredentials on gitlab, but its currently get pushed via bitwarden due to legacy reasons
|
|
70
|
+
// this will be fixed with when https://git.panter.ch/catladder/catladder/-/merge_requests/32/ is merged
|
|
71
|
+
this.log(
|
|
72
|
+
"cloudsqlProxyCredentials env var missing in gitlab. Please contact gilde-ci-cd about that."
|
|
73
|
+
);
|
|
74
|
+
throw new Error("cloudsqlProxyCredentials missing in secrets");
|
|
75
|
+
}
|
|
58
76
|
await withFile(async ({ path: tmpFilePath }) => {
|
|
59
|
-
await writeFile(tmpFilePath,
|
|
77
|
+
await writeFile(tmpFilePath, cloudsqlProxyCredentials);
|
|
60
78
|
|
|
61
79
|
await spawn(
|
|
62
80
|
"cloud_sql_proxy",
|
|
@@ -4,6 +4,7 @@ import { difference } from "lodash";
|
|
|
4
4
|
import Vorpal, { CommandInstance } from "vorpal";
|
|
5
5
|
import { GOOGLE_CLOUD_SQL_PASS_PATH } from "../../../../config/constants";
|
|
6
6
|
import {
|
|
7
|
+
getAllComponentsWithAllEnvsHierarchical,
|
|
7
8
|
getEnvironment,
|
|
8
9
|
getEnvVars,
|
|
9
10
|
getPipelineContextByChoice,
|
|
@@ -16,20 +17,30 @@ import { hasBitwarden, readPass } from "../../../../utils/passwordstore";
|
|
|
16
17
|
import { delay } from "../../../../utils/promise";
|
|
17
18
|
import { allEnvsAndAllComponents } from "./utils/autocompletions";
|
|
18
19
|
|
|
20
|
+
type Vars = {
|
|
21
|
+
[env: string]: {
|
|
22
|
+
[componentName: string]: Record<string, string>;
|
|
23
|
+
};
|
|
24
|
+
};
|
|
19
25
|
/* for convenience, parse json objects. that makes it easier to edit secrets that are object */
|
|
20
|
-
const resolveJson = (v:
|
|
26
|
+
const resolveJson = (v: Vars) =>
|
|
21
27
|
Object.fromEntries(
|
|
22
|
-
Object.entries(v).map(([
|
|
28
|
+
Object.entries(v).map(([componentName, envs]) => {
|
|
23
29
|
return [
|
|
24
|
-
|
|
30
|
+
componentName,
|
|
25
31
|
Object.fromEntries(
|
|
26
|
-
Object.entries(
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
32
|
+
Object.entries(envs).map(([env, secrets]) => [
|
|
33
|
+
env,
|
|
34
|
+
Object.fromEntries(
|
|
35
|
+
Object.entries(secrets).map(([key, value]) => {
|
|
36
|
+
try {
|
|
37
|
+
return [key, JSON.parse(value)];
|
|
38
|
+
} catch (e) {
|
|
39
|
+
return [key, value];
|
|
40
|
+
}
|
|
41
|
+
})
|
|
42
|
+
),
|
|
43
|
+
])
|
|
33
44
|
),
|
|
34
45
|
];
|
|
35
46
|
})
|
|
@@ -48,14 +59,22 @@ const getEnvVarsToEdit = async (
|
|
|
48
59
|
};
|
|
49
60
|
const doItFor = async (
|
|
50
61
|
instance: CommandInstance,
|
|
51
|
-
|
|
52
|
-
|
|
62
|
+
envAndComponents: {
|
|
63
|
+
[componentName: string]: string[];
|
|
64
|
+
}
|
|
53
65
|
) => {
|
|
54
|
-
let valuesToEdit:
|
|
66
|
+
let valuesToEdit: Vars = Object.fromEntries(
|
|
55
67
|
await Promise.all(
|
|
56
|
-
|
|
68
|
+
Object.entries(envAndComponents).map(async ([componentName, envs]) => [
|
|
57
69
|
componentName,
|
|
58
|
-
|
|
70
|
+
Object.fromEntries(
|
|
71
|
+
await Promise.all(
|
|
72
|
+
envs.map(async (env) => [
|
|
73
|
+
env,
|
|
74
|
+
await getEnvVarsToEdit(instance, env, componentName),
|
|
75
|
+
])
|
|
76
|
+
)
|
|
77
|
+
),
|
|
59
78
|
])
|
|
60
79
|
)
|
|
61
80
|
);
|
|
@@ -64,82 +83,125 @@ const doItFor = async (
|
|
|
64
83
|
valuesToEdit = await editAsFile(
|
|
65
84
|
resolveJson(valuesToEdit),
|
|
66
85
|
stripIndents`
|
|
67
|
-
Please fill in all secrets for:
|
|
86
|
+
Please fill in all secrets for:
|
|
87
|
+
|
|
88
|
+
${Object.entries(envAndComponents)
|
|
89
|
+
.map(
|
|
90
|
+
([componentName, envs]) => `- ${componentName}: ${envs.join(", ")}`
|
|
91
|
+
)
|
|
92
|
+
.join("\n")}
|
|
68
93
|
|
|
69
94
|
`
|
|
70
95
|
);
|
|
71
96
|
// check for errors
|
|
72
97
|
hasErrors = false;
|
|
73
|
-
for (const componentName of
|
|
74
|
-
const
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
98
|
+
for (const [componentName, envs] of Object.entries(envAndComponents)) {
|
|
99
|
+
for (const env of envs) {
|
|
100
|
+
const usedKeys = valuesToEdit[componentName][env]
|
|
101
|
+
? Object.keys(valuesToEdit[componentName][env])
|
|
102
|
+
: [];
|
|
103
|
+
// check whether newValues have the exact number of keys
|
|
104
|
+
const { secretEnvVarKeys } = await getEnvironment(env, componentName);
|
|
105
|
+
const extranous = difference(usedKeys, secretEnvVarKeys);
|
|
106
|
+
const missing = difference(secretEnvVarKeys, usedKeys);
|
|
81
107
|
|
|
82
|
-
|
|
83
|
-
instance.log("");
|
|
84
|
-
instance.log(
|
|
85
|
-
`😿 Oh no! There is something wrong with "${componentName}"`
|
|
86
|
-
);
|
|
87
|
-
instance.log("");
|
|
88
|
-
if (extranous.length > 0) {
|
|
89
|
-
instance.log("these secrets are not declared in the config");
|
|
90
|
-
extranous.forEach((key) => instance.log(key));
|
|
108
|
+
if (extranous.length > 0 || missing.length > 0) {
|
|
91
109
|
instance.log("");
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
missing.forEach((key) => instance.log(key));
|
|
110
|
+
instance.log(
|
|
111
|
+
`😿 Oh no! There is something wrong with "${componentName}"`
|
|
112
|
+
);
|
|
96
113
|
instance.log("");
|
|
97
|
-
|
|
114
|
+
if (extranous.length > 0) {
|
|
115
|
+
instance.log("these secrets are not declared in the config");
|
|
116
|
+
extranous.forEach((key) => instance.log(key));
|
|
117
|
+
instance.log("");
|
|
118
|
+
}
|
|
119
|
+
if (missing.length > 0) {
|
|
120
|
+
instance.log("these secrets have not been provided:");
|
|
121
|
+
missing.forEach((key) => instance.log(key));
|
|
122
|
+
instance.log("");
|
|
123
|
+
}
|
|
98
124
|
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
125
|
+
await delay(1000);
|
|
126
|
+
const { shouldContinue } = await instance.prompt({
|
|
127
|
+
default: true,
|
|
128
|
+
message: "Try again? 🤔",
|
|
129
|
+
name: "shouldContinue",
|
|
130
|
+
type: "confirm",
|
|
131
|
+
});
|
|
106
132
|
|
|
107
|
-
|
|
108
|
-
|
|
133
|
+
if (!shouldContinue) {
|
|
134
|
+
throw new Error("abort");
|
|
135
|
+
}
|
|
136
|
+
hasErrors = true;
|
|
109
137
|
}
|
|
110
|
-
hasErrors = true;
|
|
111
138
|
}
|
|
112
139
|
}
|
|
113
140
|
}
|
|
141
|
+
instance.log("upserting all variables, please wait...");
|
|
142
|
+
instance.log("");
|
|
143
|
+
for (const [componentName, envs] of Object.entries(envAndComponents)) {
|
|
144
|
+
for (const env of envs) {
|
|
145
|
+
await upsertAllVariables(
|
|
146
|
+
instance,
|
|
147
|
+
valuesToEdit[componentName][env],
|
|
148
|
+
env,
|
|
149
|
+
componentName
|
|
150
|
+
);
|
|
114
151
|
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
152
|
+
if (hasBitwarden()) {
|
|
153
|
+
// add cloud sql secret if needed.
|
|
154
|
+
// TODO: this is legacy, in the future we want to have one service account per app
|
|
155
|
+
try {
|
|
156
|
+
const context = await getPipelineContextByChoice(env, componentName);
|
|
157
|
+
if (
|
|
158
|
+
context.componentConfig.deploy &&
|
|
159
|
+
context.componentConfig.deploy.values?.cloudsql?.enabled
|
|
160
|
+
) {
|
|
161
|
+
await upsertAllVariables(
|
|
162
|
+
instance,
|
|
163
|
+
{
|
|
164
|
+
cloudsqlProxyCredentials: await readPass(
|
|
165
|
+
GOOGLE_CLOUD_SQL_PASS_PATH
|
|
166
|
+
),
|
|
167
|
+
},
|
|
168
|
+
env,
|
|
169
|
+
componentName
|
|
170
|
+
);
|
|
171
|
+
}
|
|
172
|
+
} catch (e) {
|
|
173
|
+
// ignore atm
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
instance.log("✅ " + env + ":" + componentName);
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
instance.log("done! 😻");
|
|
180
|
+
instance.log("");
|
|
181
|
+
};
|
|
122
182
|
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
183
|
+
export const projectConfigSecrets = async (
|
|
184
|
+
vorpal: CommandInstance,
|
|
185
|
+
envComponent?: string
|
|
186
|
+
) => {
|
|
187
|
+
if (!envComponent) {
|
|
188
|
+
const allEnvAndcomponents = await getAllComponentsWithAllEnvsHierarchical();
|
|
189
|
+
await doItFor(vorpal, allEnvAndcomponents);
|
|
190
|
+
} else {
|
|
191
|
+
const { env, componentName } = parseChoice(envComponent);
|
|
126
192
|
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
env,
|
|
140
|
-
componentName
|
|
141
|
-
);
|
|
142
|
-
}
|
|
193
|
+
// componentName can be null. in this case, iterate over all components
|
|
194
|
+
if (!componentName) {
|
|
195
|
+
const components = await getProjectComponents();
|
|
196
|
+
await doItFor(
|
|
197
|
+
vorpal,
|
|
198
|
+
Object.fromEntries(components.map((c) => [c, [env]]))
|
|
199
|
+
);
|
|
200
|
+
}
|
|
201
|
+
if (componentName) {
|
|
202
|
+
await doItFor(vorpal, {
|
|
203
|
+
[componentName]: [env],
|
|
204
|
+
});
|
|
143
205
|
}
|
|
144
206
|
}
|
|
145
207
|
};
|
|
@@ -147,62 +209,11 @@ const doItFor = async (
|
|
|
147
209
|
export default async (vorpal: Vorpal) => {
|
|
148
210
|
vorpal
|
|
149
211
|
.command(
|
|
150
|
-
"project-config-secrets
|
|
212
|
+
"project-config-secrets [envComponent]",
|
|
151
213
|
"setup/update secrets stored in pass"
|
|
152
214
|
)
|
|
153
215
|
.autocomplete(await allEnvsAndAllComponents())
|
|
154
216
|
.action(async function ({ envComponent }) {
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
// componentName can be null. in this case, iterate over all components
|
|
158
|
-
if (!componentName) {
|
|
159
|
-
const components = await getProjectComponents();
|
|
160
|
-
await doItFor(this, env, components);
|
|
161
|
-
}
|
|
162
|
-
if (componentName) {
|
|
163
|
-
await doItFor(this, env, [componentName]);
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
/*
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
// adding gcloud sql proxy secret
|
|
170
|
-
const cloudsqlCredentials = await readPass(GOOGLE_CLOUD_SQL_PASS_PATH);
|
|
171
|
-
await createKubernetesSecret.call(
|
|
172
|
-
this,
|
|
173
|
-
namespace,
|
|
174
|
-
"cloudsql-instance-credentials",
|
|
175
|
-
{
|
|
176
|
-
"credentials.json": cloudsqlCredentials,
|
|
177
|
-
}
|
|
178
|
-
);
|
|
179
|
-
this.log("");
|
|
180
|
-
this.log(
|
|
181
|
-
"⚠️ You need to delete/restart pods in order to make them pick up the new config"
|
|
182
|
-
);
|
|
183
|
-
this.log(`you can use project-delete-pods ${env} to do that`);
|
|
184
|
-
this.log("");
|
|
185
|
-
this.log("");
|
|
186
|
-
await delay(1000);
|
|
187
|
-
}
|
|
188
|
-
this.log("");
|
|
189
|
-
this.log("😻 success!!!!!");
|
|
190
|
-
this.log("");
|
|
191
|
-
*/
|
|
217
|
+
return await projectConfigSecrets(this, envComponent);
|
|
192
218
|
});
|
|
193
|
-
};
|
|
194
|
-
async function createNewEnvInPass(env: any, secretEnvVarsMapping: ISecrets) {
|
|
195
|
-
// const passPath = await getPassPath(env);
|
|
196
|
-
this.log(
|
|
197
|
-
"Your selected env is not yet in pass. Do you want to copy it from another env? "
|
|
198
|
-
);
|
|
199
|
-
const noAnswer = "No, I will create a new one from scratch.";
|
|
200
|
-
const { sourceEnv } = await this.prompt({
|
|
201
|
-
type: "list",
|
|
202
|
-
name: "sourceEnv",
|
|
203
|
-
choices: [...(await envAndComponents()).filter((e) => e !== env), noAnswer],
|
|
204
|
-
message: "Do you want to copy an env?",
|
|
205
|
-
});
|
|
206
|
-
// TODO: reimplenent
|
|
207
|
-
}
|
|
208
|
-
*/
|
|
219
|
+
};
|