@catladder/cli 1.52.1 → 1.53.0
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/dist/apps/cli/commands/project/commandSecretsClearBackups.d.ts +5 -0
- package/dist/apps/cli/commands/project/commandSecretsClearBackups.js +90 -0
- package/dist/apps/cli/commands/project/commandSecretsClearBackups.js.map +1 -0
- package/dist/apps/cli/commands/project/index.js +2 -0
- package/dist/apps/cli/commands/project/index.js.map +1 -1
- package/dist/apps/cli/commands/project/setup/setupAccessTokens.js +2 -2
- package/dist/apps/cli/commands/project/setup/setupAccessTokens.js.map +1 -1
- package/dist/apps/cli/commands/project/setup/setupCloudRun.js +3 -1
- package/dist/apps/cli/commands/project/setup/setupCloudRun.js.map +1 -1
- package/dist/bundles/catenv/index.js +3 -3
- package/dist/bundles/cli/index.js +2 -2
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/utils/gitlab.d.ts +4 -2
- package/dist/utils/gitlab.js +75 -18
- package/dist/utils/gitlab.js.map +1 -1
- package/package.json +2 -2
- package/src/apps/cli/commands/project/commandSecretsClearBackups.ts +27 -0
- package/src/apps/cli/commands/project/index.ts +2 -0
- package/src/apps/cli/commands/project/setup/setupAccessTokens.ts +21 -10
- package/src/apps/cli/commands/project/setup/setupCloudRun.ts +3 -1
- package/src/utils/gitlab.ts +59 -17
package/dist/utils/gitlab.d.ts
CHANGED
|
@@ -3,7 +3,8 @@ import type { CommandInstance } from "vorpal";
|
|
|
3
3
|
export declare const hasGitlabToken: () => Promise<boolean>;
|
|
4
4
|
export declare const setupGitlabToken: (vorpal: CommandInstance) => Promise<void>;
|
|
5
5
|
export declare const getGitlabToken: (vorpal: CommandInstance) => Promise<string>;
|
|
6
|
-
|
|
6
|
+
declare type Method = "GET" | "PUT" | "POST" | "DELETE";
|
|
7
|
+
export declare const doGitlabRequest: <T = any>(vorpal: CommandInstance, path: string, data?: any, method?: Method) => Promise<T>;
|
|
7
8
|
export declare const getProjectInfo: (vorpal: CommandInstance) => Promise<{
|
|
8
9
|
id: string;
|
|
9
10
|
web_url: string;
|
|
@@ -18,5 +19,6 @@ declare type GitlabVariable = {
|
|
|
18
19
|
};
|
|
19
20
|
export declare const getAllVariables: ((vorpal: CommandInstance) => Promise<Array<GitlabVariable>>) & memoizee.Memoized<(vorpal: CommandInstance) => Promise<Array<GitlabVariable>>>;
|
|
20
21
|
export declare const getVariableValueByRawName: (vorpal: CommandInstance, rawName: string) => Promise<string>;
|
|
21
|
-
export declare const
|
|
22
|
+
export declare const clearBackups: (vorpal: CommandInstance, keep: number) => Promise<void>;
|
|
23
|
+
export declare const upsertAllVariables: (vorpal: CommandInstance, variables: Record<string, any>, env: string, componentName: string, backup?: boolean, masked?: boolean) => Promise<void>;
|
|
22
24
|
export {};
|
package/dist/utils/gitlab.js
CHANGED
|
@@ -59,7 +59,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
59
59
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
60
60
|
};
|
|
61
61
|
exports.__esModule = true;
|
|
62
|
-
exports.upsertAllVariables = exports.getVariableValueByRawName = exports.getAllVariables = exports.getProjectInfo = exports.doGitlabRequest = exports.getGitlabToken = exports.setupGitlabToken = exports.hasGitlabToken = void 0;
|
|
62
|
+
exports.upsertAllVariables = exports.clearBackups = exports.getVariableValueByRawName = exports.getAllVariables = exports.getProjectInfo = exports.doGitlabRequest = exports.getGitlabToken = exports.setupGitlabToken = exports.hasGitlabToken = void 0;
|
|
63
63
|
var pipeline_1 = require("@catladder/pipeline");
|
|
64
64
|
var child_process_promise_1 = require("child-process-promise");
|
|
65
65
|
var lodash_1 = require("lodash");
|
|
@@ -133,28 +133,31 @@ var getGitlabToken = function (vorpal) { return __awaiter(void 0, void 0, void 0
|
|
|
133
133
|
});
|
|
134
134
|
}); };
|
|
135
135
|
exports.getGitlabToken = getGitlabToken;
|
|
136
|
-
var doGitlabRequest = function (vorpal, path, data,
|
|
136
|
+
var doGitlabRequest = function (vorpal, path, data, method) {
|
|
137
137
|
if (data === void 0) { data = undefined; }
|
|
138
|
+
if (method === void 0) { method = "GET"; }
|
|
138
139
|
return __awaiter(void 0, void 0, void 0, function () {
|
|
139
|
-
var rootToken,
|
|
140
|
+
var rootToken, result, _a, _b, _c, _d, _e;
|
|
140
141
|
return __generator(this, function (_f) {
|
|
141
142
|
switch (_f.label) {
|
|
142
143
|
case 0: return [4 /*yield*/, (0, exports.getGitlabToken)(vorpal)];
|
|
143
144
|
case 1:
|
|
144
145
|
rootToken = _f.sent();
|
|
145
|
-
method = data ? (update ? "PUT" : "POST") : "GET";
|
|
146
146
|
return [4 /*yield*/, (0, node_fetch_1["default"])("https://git.panter.ch/api/v4/".concat(path), {
|
|
147
147
|
method: method,
|
|
148
148
|
headers: {
|
|
149
149
|
"Content-Type": "application/json",
|
|
150
150
|
"Private-Token": rootToken
|
|
151
151
|
},
|
|
152
|
-
body: JSON.stringify(data)
|
|
152
|
+
body: data ? JSON.stringify(data) : undefined
|
|
153
153
|
})];
|
|
154
154
|
case 2:
|
|
155
155
|
result = _f.sent();
|
|
156
156
|
if (result.status >= 200 && result.status < 400) {
|
|
157
|
-
|
|
157
|
+
if (result.headers.get("content-type") === "application/json") {
|
|
158
|
+
return [2 /*return*/, result.json()];
|
|
159
|
+
}
|
|
160
|
+
return [2 /*return*/, null];
|
|
158
161
|
}
|
|
159
162
|
if (result.status === 404) {
|
|
160
163
|
throw new Error("not found");
|
|
@@ -225,7 +228,8 @@ var getVariableValueByRawName = function (vorpal, rawName) { return __awaiter(vo
|
|
|
225
228
|
exports.getVariableValueByRawName = getVariableValueByRawName;
|
|
226
229
|
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
|
|
227
230
|
var isMaskable = function (value) { return maskableRegex.test(value); };
|
|
228
|
-
var createVariable = function (vorpal, projectId, key, value, environment_scope) {
|
|
231
|
+
var createVariable = function (vorpal, projectId, key, value, masked, environment_scope) {
|
|
232
|
+
if (masked === void 0) { masked = true; }
|
|
229
233
|
if (environment_scope === void 0) { environment_scope = "*"; }
|
|
230
234
|
return __awaiter(void 0, void 0, void 0, function () {
|
|
231
235
|
return __generator(this, function (_a) {
|
|
@@ -233,21 +237,32 @@ var createVariable = function (vorpal, projectId, key, value, environment_scope)
|
|
|
233
237
|
case 0: return [4 /*yield*/, (0, exports.doGitlabRequest)(vorpal, "projects/".concat(projectId, "/variables"), {
|
|
234
238
|
key: key,
|
|
235
239
|
value: value,
|
|
236
|
-
masked: isMaskable(value),
|
|
240
|
+
masked: masked && isMaskable(value),
|
|
237
241
|
environment_scope: environment_scope
|
|
238
|
-
})];
|
|
242
|
+
}, "POST")];
|
|
239
243
|
case 1: return [2 /*return*/, _a.sent()];
|
|
240
244
|
}
|
|
241
245
|
});
|
|
242
246
|
});
|
|
243
247
|
};
|
|
244
|
-
var updateVariable = function (vorpal, projectId, key, value
|
|
248
|
+
var updateVariable = function (vorpal, projectId, key, value, masked) {
|
|
249
|
+
if (masked === void 0) { masked = true; }
|
|
250
|
+
return __awaiter(void 0, void 0, void 0, function () {
|
|
251
|
+
return __generator(this, function (_a) {
|
|
252
|
+
switch (_a.label) {
|
|
253
|
+
case 0: return [4 /*yield*/, (0, exports.doGitlabRequest)(vorpal, "projects/".concat(projectId, "/variables/").concat(key), {
|
|
254
|
+
value: value,
|
|
255
|
+
masked: masked && isMaskable(value)
|
|
256
|
+
}, "PUT")];
|
|
257
|
+
case 1: return [2 /*return*/, _a.sent()];
|
|
258
|
+
}
|
|
259
|
+
});
|
|
260
|
+
});
|
|
261
|
+
};
|
|
262
|
+
var deleteVariable = function (vorpal, projectId, key) { return __awaiter(void 0, void 0, void 0, function () {
|
|
245
263
|
return __generator(this, function (_a) {
|
|
246
264
|
switch (_a.label) {
|
|
247
|
-
case 0: return [4 /*yield*/, (0, exports.doGitlabRequest)(vorpal, "projects/".concat(projectId, "/variables/").concat(key),
|
|
248
|
-
value: value,
|
|
249
|
-
masked: isMaskable(value)
|
|
250
|
-
}, true)];
|
|
265
|
+
case 0: return [4 /*yield*/, (0, exports.doGitlabRequest)(vorpal, "projects/".concat(projectId, "/variables/").concat(key), undefined, "DELETE")];
|
|
251
266
|
case 1: return [2 /*return*/, _a.sent()];
|
|
252
267
|
}
|
|
253
268
|
});
|
|
@@ -281,8 +296,50 @@ var getAllCatladderEnvVarsInGitlab = function (vorpal) { return __awaiter(void 0
|
|
|
281
296
|
}
|
|
282
297
|
});
|
|
283
298
|
}); };
|
|
284
|
-
var
|
|
299
|
+
var getBackupKey = function (fullKey, timestamp) {
|
|
300
|
+
return "".concat(fullKey, "_backup_").concat(timestamp);
|
|
301
|
+
};
|
|
302
|
+
var clearBackups = function (vorpal, keep) { return __awaiter(void 0, void 0, void 0, function () {
|
|
303
|
+
var existingVariables, id, _i, _a, _b, key, backups, backupsSorted, toDelete, _c, toDelete_1, timestamp;
|
|
304
|
+
return __generator(this, function (_d) {
|
|
305
|
+
switch (_d.label) {
|
|
306
|
+
case 0: return [4 /*yield*/, getAllCatladderEnvVarsInGitlab(vorpal)];
|
|
307
|
+
case 1:
|
|
308
|
+
existingVariables = _d.sent();
|
|
309
|
+
return [4 /*yield*/, (0, exports.getProjectInfo)(vorpal)];
|
|
310
|
+
case 2:
|
|
311
|
+
id = (_d.sent()).id;
|
|
312
|
+
_i = 0, _a = Object.entries(existingVariables);
|
|
313
|
+
_d.label = 3;
|
|
314
|
+
case 3:
|
|
315
|
+
if (!(_i < _a.length)) return [3 /*break*/, 8];
|
|
316
|
+
_b = _a[_i], key = _b[0], backups = _b[1].backups;
|
|
317
|
+
backupsSorted = backups.sort(function (a, b) { return b - a; });
|
|
318
|
+
toDelete = backupsSorted.slice(keep);
|
|
319
|
+
_c = 0, toDelete_1 = toDelete;
|
|
320
|
+
_d.label = 4;
|
|
321
|
+
case 4:
|
|
322
|
+
if (!(_c < toDelete_1.length)) return [3 /*break*/, 7];
|
|
323
|
+
timestamp = toDelete_1[_c];
|
|
324
|
+
return [4 /*yield*/, deleteVariable(vorpal, id, getBackupKey(key, timestamp))];
|
|
325
|
+
case 5:
|
|
326
|
+
_d.sent();
|
|
327
|
+
_d.label = 6;
|
|
328
|
+
case 6:
|
|
329
|
+
_c++;
|
|
330
|
+
return [3 /*break*/, 4];
|
|
331
|
+
case 7:
|
|
332
|
+
_i++;
|
|
333
|
+
return [3 /*break*/, 3];
|
|
334
|
+
case 8: return [2 /*return*/];
|
|
335
|
+
}
|
|
336
|
+
});
|
|
337
|
+
}); };
|
|
338
|
+
exports.clearBackups = clearBackups;
|
|
339
|
+
var upsertAllVariables = function (vorpal, variables, env, componentName, backup, masked // FIXME: would be better to have this per variable
|
|
340
|
+
) {
|
|
285
341
|
if (backup === void 0) { backup = true; }
|
|
342
|
+
if (masked === void 0) { masked = true; }
|
|
286
343
|
return __awaiter(void 0, void 0, void 0, function () {
|
|
287
344
|
var id, existingVariables, _i, _a, _b, key, value, fullKey, valueSanitized, exists, oldValue, changed;
|
|
288
345
|
var _c;
|
|
@@ -307,18 +364,18 @@ var upsertAllVariables = function (vorpal, variables, env, componentName, backup
|
|
|
307
364
|
if (!changed) return [3 /*break*/, 10];
|
|
308
365
|
if (!exists) return [3 /*break*/, 7];
|
|
309
366
|
vorpal.log("changed: ".concat(key));
|
|
310
|
-
return [4 /*yield*/, updateVariable(vorpal, id, fullKey, valueSanitized)];
|
|
367
|
+
return [4 /*yield*/, updateVariable(vorpal, id, fullKey, valueSanitized, masked)];
|
|
311
368
|
case 4:
|
|
312
369
|
_d.sent();
|
|
313
370
|
if (!backup) return [3 /*break*/, 6];
|
|
314
|
-
return [4 /*yield*/, createVariable(vorpal, id, fullKey
|
|
371
|
+
return [4 /*yield*/, createVariable(vorpal, id, getBackupKey(fullKey, new Date().getTime()), oldValue, masked, "_backup")];
|
|
315
372
|
case 5:
|
|
316
373
|
_d.sent();
|
|
317
374
|
_d.label = 6;
|
|
318
375
|
case 6: return [3 /*break*/, 9];
|
|
319
376
|
case 7:
|
|
320
377
|
vorpal.log("new : ".concat(key));
|
|
321
|
-
return [4 /*yield*/, createVariable(vorpal, id, fullKey, valueSanitized)];
|
|
378
|
+
return [4 /*yield*/, createVariable(vorpal, id, fullKey, valueSanitized, masked)];
|
|
322
379
|
case 8:
|
|
323
380
|
_d.sent();
|
|
324
381
|
_d.label = 9;
|
package/dist/utils/gitlab.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gitlab.js","sourceRoot":"","sources":["../../src/utils/gitlab.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,gDAAuD;AACvD,+DAA6C;AAC7C,iCAAuC;AACvC,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;
|
|
1
|
+
{"version":3,"file":"gitlab.js","sourceRoot":"","sources":["../../src/utils/gitlab.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
"node": ">=12.0.0"
|
|
25
25
|
},
|
|
26
26
|
"devDependencies": {
|
|
27
|
-
"@catladder/pipeline": "1.
|
|
27
|
+
"@catladder/pipeline": "1.53.0",
|
|
28
28
|
"@kubernetes/client-node": "^0.16.2",
|
|
29
29
|
"@tsconfig/node14": "^1.0.1",
|
|
30
30
|
"@types/common-tags": "^1.8.0",
|
|
@@ -57,5 +57,5 @@
|
|
|
57
57
|
"typescript": "^4.5.4",
|
|
58
58
|
"vorpal": "^1.12.0"
|
|
59
59
|
},
|
|
60
|
-
"version": "1.
|
|
60
|
+
"version": "1.53.0"
|
|
61
61
|
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/* eslint-disable no-constant-condition */
|
|
2
|
+
import type Vorpal from "vorpal";
|
|
3
|
+
import type { CommandInstance } from "vorpal";
|
|
4
|
+
import { clearBackups } from "../../../../utils/gitlab";
|
|
5
|
+
import { allEnvsAndAllComponents } from "./utils/autocompletions";
|
|
6
|
+
|
|
7
|
+
export const projectSecretsClearBackups = async (
|
|
8
|
+
vorpal: CommandInstance,
|
|
9
|
+
keep = 3
|
|
10
|
+
) => {
|
|
11
|
+
await clearBackups(vorpal, keep);
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
export default async (vorpal: Vorpal) => {
|
|
15
|
+
vorpal
|
|
16
|
+
.command("project-secrets-clear-backups", "clears all backups")
|
|
17
|
+
.autocomplete(await allEnvsAndAllComponents())
|
|
18
|
+
.action(async function () {
|
|
19
|
+
const { keep } = await this.prompt({
|
|
20
|
+
type: "number",
|
|
21
|
+
name: "keep",
|
|
22
|
+
default: 1,
|
|
23
|
+
message: "How many backups should we keep? 🤔",
|
|
24
|
+
});
|
|
25
|
+
return await projectSecretsClearBackups(this, keep);
|
|
26
|
+
});
|
|
27
|
+
};
|
|
@@ -24,6 +24,7 @@ import commandPortForward from "./commandPortForward";
|
|
|
24
24
|
import commandTriggerCronjob from "./commandTriggerCronjob";
|
|
25
25
|
|
|
26
26
|
import commandOpenGrafanaPod from "./commandOpenGrafanaPod";
|
|
27
|
+
import commandSecretsClearBackups from "./commandSecretsClearBackups";
|
|
27
28
|
|
|
28
29
|
export default async (vorpal: Vorpal) => {
|
|
29
30
|
commandSetup(vorpal);
|
|
@@ -48,6 +49,7 @@ export default async (vorpal: Vorpal) => {
|
|
|
48
49
|
commandOpenEnv(vorpal);
|
|
49
50
|
commandTriggerCronjob(vorpal);
|
|
50
51
|
commandConfigSecrets(vorpal);
|
|
52
|
+
commandSecretsClearBackups(vorpal);
|
|
51
53
|
commandDeletePods(vorpal);
|
|
52
54
|
commandCopyDB(vorpal);
|
|
53
55
|
|
|
@@ -43,11 +43,17 @@ export const setupAccessTokens = async (instance: CommandInstance) => {
|
|
|
43
43
|
name: "GL_TOKEN",
|
|
44
44
|
message: "Access Token: ",
|
|
45
45
|
});
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
46
|
+
|
|
47
|
+
await doGitlabRequest(
|
|
48
|
+
instance,
|
|
49
|
+
`projects/${projectId}/variables`,
|
|
50
|
+
{
|
|
51
|
+
key: "GL_TOKEN",
|
|
52
|
+
value: GL_TOKEN,
|
|
53
|
+
masked: true,
|
|
54
|
+
},
|
|
55
|
+
"POST"
|
|
56
|
+
);
|
|
51
57
|
}
|
|
52
58
|
|
|
53
59
|
const deploy_tokens = await doGitlabRequest(
|
|
@@ -64,10 +70,15 @@ export const setupAccessTokens = async (instance: CommandInstance) => {
|
|
|
64
70
|
"I will setup the 'GitLab Deploy Token', so Kubernetes can pull images from this project."
|
|
65
71
|
);
|
|
66
72
|
|
|
67
|
-
await doGitlabRequest(
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
73
|
+
await doGitlabRequest(
|
|
74
|
+
instance,
|
|
75
|
+
`projects/${projectId}/deploy_tokens`,
|
|
76
|
+
{
|
|
77
|
+
id: projectId,
|
|
78
|
+
name: "gitlab-deploy-token",
|
|
79
|
+
scopes: ["read_registry"],
|
|
80
|
+
},
|
|
81
|
+
"POST"
|
|
82
|
+
);
|
|
72
83
|
}
|
|
73
84
|
};
|
package/src/utils/gitlab.ts
CHANGED
|
@@ -51,15 +51,16 @@ export const getGitlabToken = async (vorpal: CommandInstance) => {
|
|
|
51
51
|
return getPreference(TOKEN_KEY);
|
|
52
52
|
};
|
|
53
53
|
|
|
54
|
+
type Method = "GET" | "PUT" | "POST" | "DELETE";
|
|
54
55
|
export const doGitlabRequest = async <T = any>(
|
|
55
56
|
vorpal: CommandInstance,
|
|
56
57
|
path: string,
|
|
57
58
|
data: any = undefined,
|
|
58
|
-
|
|
59
|
+
method: Method = "GET"
|
|
59
60
|
): Promise<T> => {
|
|
60
61
|
const rootToken = await getGitlabToken(vorpal);
|
|
61
62
|
|
|
62
|
-
const method = data ? (update ? "PUT" : "POST") : "GET";
|
|
63
|
+
//const method = data ? (update ? "PUT" : "POST") : "GET";
|
|
63
64
|
|
|
64
65
|
const result = await fetch(`https://git.panter.ch/api/v4/${path}`, {
|
|
65
66
|
method,
|
|
@@ -67,11 +68,14 @@ export const doGitlabRequest = async <T = any>(
|
|
|
67
68
|
"Content-Type": "application/json",
|
|
68
69
|
"Private-Token": rootToken,
|
|
69
70
|
},
|
|
70
|
-
body: JSON.stringify(data),
|
|
71
|
+
body: data ? JSON.stringify(data) : undefined,
|
|
71
72
|
});
|
|
72
73
|
|
|
73
74
|
if (result.status >= 200 && result.status < 400) {
|
|
74
|
-
|
|
75
|
+
if (result.headers.get("content-type") === "application/json") {
|
|
76
|
+
return result.json();
|
|
77
|
+
}
|
|
78
|
+
return null;
|
|
75
79
|
}
|
|
76
80
|
if (result.status === 404) {
|
|
77
81
|
throw new Error("not found");
|
|
@@ -145,30 +149,50 @@ const createVariable = async (
|
|
|
145
149
|
projectId: string,
|
|
146
150
|
key: string,
|
|
147
151
|
value: string,
|
|
152
|
+
masked = true,
|
|
148
153
|
environment_scope = "*"
|
|
149
154
|
) => {
|
|
150
|
-
return await doGitlabRequest(
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
155
|
+
return await doGitlabRequest(
|
|
156
|
+
vorpal,
|
|
157
|
+
`projects/${projectId}/variables`,
|
|
158
|
+
{
|
|
159
|
+
key,
|
|
160
|
+
value,
|
|
161
|
+
masked: masked && isMaskable(value),
|
|
162
|
+
environment_scope,
|
|
163
|
+
},
|
|
164
|
+
"POST"
|
|
165
|
+
);
|
|
156
166
|
};
|
|
157
167
|
|
|
158
168
|
const updateVariable = async (
|
|
159
169
|
vorpal: CommandInstance,
|
|
160
170
|
projectId: string,
|
|
161
171
|
key: string,
|
|
162
|
-
value: string
|
|
172
|
+
value: string,
|
|
173
|
+
masked = true
|
|
163
174
|
) => {
|
|
164
175
|
return await doGitlabRequest(
|
|
165
176
|
vorpal,
|
|
166
177
|
`projects/${projectId}/variables/${key}`,
|
|
167
178
|
{
|
|
168
179
|
value,
|
|
169
|
-
masked: isMaskable(value),
|
|
180
|
+
masked: masked && isMaskable(value),
|
|
170
181
|
},
|
|
171
|
-
|
|
182
|
+
"PUT"
|
|
183
|
+
);
|
|
184
|
+
};
|
|
185
|
+
|
|
186
|
+
const deleteVariable = async (
|
|
187
|
+
vorpal: CommandInstance,
|
|
188
|
+
projectId: string,
|
|
189
|
+
key: string
|
|
190
|
+
) => {
|
|
191
|
+
return await doGitlabRequest(
|
|
192
|
+
vorpal,
|
|
193
|
+
`projects/${projectId}/variables/${key}`,
|
|
194
|
+
undefined,
|
|
195
|
+
"DELETE"
|
|
172
196
|
);
|
|
173
197
|
};
|
|
174
198
|
|
|
@@ -214,12 +238,29 @@ const getAllCatladderEnvVarsInGitlab = async (vorpal: CommandInstance) => {
|
|
|
214
238
|
return allVariables;
|
|
215
239
|
};
|
|
216
240
|
|
|
241
|
+
const getBackupKey = (fullKey: string, timestamp: number) =>
|
|
242
|
+
`${fullKey}_backup_${timestamp}`;
|
|
243
|
+
export const clearBackups = async (vorpal: CommandInstance, keep: number) => {
|
|
244
|
+
const existingVariables = await getAllCatladderEnvVarsInGitlab(vorpal);
|
|
245
|
+
const { id } = await getProjectInfo(vorpal);
|
|
246
|
+
for (const [key, { backups }] of Object.entries(existingVariables)) {
|
|
247
|
+
const backupsSorted = backups.sort((a, b) => b - a);
|
|
248
|
+
//const toKeep = backupsSorted.slice(0, keep);
|
|
249
|
+
const toDelete = backupsSorted.slice(keep);
|
|
250
|
+
|
|
251
|
+
for (const timestamp of toDelete) {
|
|
252
|
+
await deleteVariable(vorpal, id, getBackupKey(key, timestamp));
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
};
|
|
256
|
+
|
|
217
257
|
export const upsertAllVariables = async (
|
|
218
258
|
vorpal: CommandInstance,
|
|
219
259
|
variables: Record<string, any>,
|
|
220
260
|
env: string,
|
|
221
261
|
componentName: string,
|
|
222
|
-
backup = true
|
|
262
|
+
backup = true,
|
|
263
|
+
masked = true // FIXME: would be better to have this per variable
|
|
223
264
|
): Promise<void> => {
|
|
224
265
|
const { id } = await getProjectInfo(vorpal);
|
|
225
266
|
|
|
@@ -236,20 +277,21 @@ export const upsertAllVariables = async (
|
|
|
236
277
|
if (exists) {
|
|
237
278
|
vorpal.log(`changed: ${key}`);
|
|
238
279
|
|
|
239
|
-
await updateVariable(vorpal, id, fullKey, valueSanitized);
|
|
280
|
+
await updateVariable(vorpal, id, fullKey, valueSanitized, masked);
|
|
240
281
|
// write backup
|
|
241
282
|
if (backup) {
|
|
242
283
|
await createVariable(
|
|
243
284
|
vorpal,
|
|
244
285
|
id,
|
|
245
|
-
fullKey
|
|
286
|
+
getBackupKey(fullKey, new Date().getTime()),
|
|
246
287
|
oldValue,
|
|
288
|
+
masked,
|
|
247
289
|
"_backup"
|
|
248
290
|
);
|
|
249
291
|
}
|
|
250
292
|
} else {
|
|
251
293
|
vorpal.log(`new : ${key}`);
|
|
252
|
-
await createVariable(vorpal, id, fullKey, valueSanitized);
|
|
294
|
+
await createVariable(vorpal, id, fullKey, valueSanitized, masked);
|
|
253
295
|
}
|
|
254
296
|
} else {
|
|
255
297
|
vorpal.log(`skip : ${key}`);
|