@catladder/cli 1.52.2 → 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/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 +3 -1
- package/dist/utils/gitlab.js +60 -9
- 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/utils/gitlab.ts +50 -12
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>;
|
|
22
|
+
export declare const clearBackups: (vorpal: CommandInstance, keep: number) => Promise<void>;
|
|
21
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");
|
|
@@ -236,7 +239,7 @@ var createVariable = function (vorpal, projectId, key, value, masked, environmen
|
|
|
236
239
|
value: value,
|
|
237
240
|
masked: masked && isMaskable(value),
|
|
238
241
|
environment_scope: environment_scope
|
|
239
|
-
})];
|
|
242
|
+
}, "POST")];
|
|
240
243
|
case 1: return [2 /*return*/, _a.sent()];
|
|
241
244
|
}
|
|
242
245
|
});
|
|
@@ -250,12 +253,20 @@ var updateVariable = function (vorpal, projectId, key, value, masked) {
|
|
|
250
253
|
case 0: return [4 /*yield*/, (0, exports.doGitlabRequest)(vorpal, "projects/".concat(projectId, "/variables/").concat(key), {
|
|
251
254
|
value: value,
|
|
252
255
|
masked: masked && isMaskable(value)
|
|
253
|
-
},
|
|
256
|
+
}, "PUT")];
|
|
254
257
|
case 1: return [2 /*return*/, _a.sent()];
|
|
255
258
|
}
|
|
256
259
|
});
|
|
257
260
|
});
|
|
258
261
|
};
|
|
262
|
+
var deleteVariable = function (vorpal, projectId, key) { return __awaiter(void 0, void 0, void 0, function () {
|
|
263
|
+
return __generator(this, function (_a) {
|
|
264
|
+
switch (_a.label) {
|
|
265
|
+
case 0: return [4 /*yield*/, (0, exports.doGitlabRequest)(vorpal, "projects/".concat(projectId, "/variables/").concat(key), undefined, "DELETE")];
|
|
266
|
+
case 1: return [2 /*return*/, _a.sent()];
|
|
267
|
+
}
|
|
268
|
+
});
|
|
269
|
+
}); };
|
|
259
270
|
var getAllCatladderEnvVarsInGitlab = function (vorpal) { return __awaiter(void 0, void 0, void 0, function () {
|
|
260
271
|
var allVariables;
|
|
261
272
|
return __generator(this, function (_a) {
|
|
@@ -285,6 +296,46 @@ var getAllCatladderEnvVarsInGitlab = function (vorpal) { return __awaiter(void 0
|
|
|
285
296
|
}
|
|
286
297
|
});
|
|
287
298
|
}); };
|
|
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;
|
|
288
339
|
var upsertAllVariables = function (vorpal, variables, env, componentName, backup, masked // FIXME: would be better to have this per variable
|
|
289
340
|
) {
|
|
290
341
|
if (backup === void 0) { backup = true; }
|
|
@@ -317,7 +368,7 @@ var upsertAllVariables = function (vorpal, variables, env, componentName, backup
|
|
|
317
368
|
case 4:
|
|
318
369
|
_d.sent();
|
|
319
370
|
if (!backup) return [3 /*break*/, 6];
|
|
320
|
-
return [4 /*yield*/, createVariable(vorpal, id, fullKey
|
|
371
|
+
return [4 /*yield*/, createVariable(vorpal, id, getBackupKey(fullKey, new Date().getTime()), oldValue, masked, "_backup")];
|
|
321
372
|
case 5:
|
|
322
373
|
_d.sent();
|
|
323
374
|
_d.label = 6;
|
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");
|
|
@@ -148,12 +152,17 @@ const createVariable = async (
|
|
|
148
152
|
masked = true,
|
|
149
153
|
environment_scope = "*"
|
|
150
154
|
) => {
|
|
151
|
-
return await doGitlabRequest(
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
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
|
+
);
|
|
157
166
|
};
|
|
158
167
|
|
|
159
168
|
const updateVariable = async (
|
|
@@ -170,7 +179,20 @@ const updateVariable = async (
|
|
|
170
179
|
value,
|
|
171
180
|
masked: masked && isMaskable(value),
|
|
172
181
|
},
|
|
173
|
-
|
|
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"
|
|
174
196
|
);
|
|
175
197
|
};
|
|
176
198
|
|
|
@@ -216,6 +238,22 @@ const getAllCatladderEnvVarsInGitlab = async (vorpal: CommandInstance) => {
|
|
|
216
238
|
return allVariables;
|
|
217
239
|
};
|
|
218
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
|
+
|
|
219
257
|
export const upsertAllVariables = async (
|
|
220
258
|
vorpal: CommandInstance,
|
|
221
259
|
variables: Record<string, any>,
|
|
@@ -245,7 +283,7 @@ export const upsertAllVariables = async (
|
|
|
245
283
|
await createVariable(
|
|
246
284
|
vorpal,
|
|
247
285
|
id,
|
|
248
|
-
fullKey
|
|
286
|
+
getBackupKey(fullKey, new Date().getTime()),
|
|
249
287
|
oldValue,
|
|
250
288
|
masked,
|
|
251
289
|
"_backup"
|