@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.
@@ -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
- export declare const doGitlabRequest: <T = any>(vorpal: CommandInstance, path: string, data?: any, update?: boolean) => Promise<T>;
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 upsertAllVariables: (vorpal: CommandInstance, variables: Record<string, any>, env: string, componentName: string, backup?: boolean) => Promise<void>;
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 {};
@@ -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, update) {
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, method, result, _a, _b, _c, _d, _e;
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
- return [2 /*return*/, result.json()];
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) { return __awaiter(void 0, void 0, void 0, function () {
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 upsertAllVariables = function (vorpal, variables, env, componentName, backup) {
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 + "_backup_" + new Date().getTime(), oldValue, "_backup")];
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;
@@ -1 +1 @@
1
- {"version":3,"file":"gitlab.js","sourceRoot":"","sources":["../../src/utils/gitlab.ts"],"names":[],"mappings":"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"}
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.52.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.52.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
- await doGitlabRequest(instance, `projects/${projectId}/variables`, {
47
- key: "GL_TOKEN",
48
- value: GL_TOKEN,
49
- masked: true,
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(instance, `projects/${projectId}/deploy_tokens`, {
68
- id: projectId,
69
- name: "gitlab-deploy-token",
70
- scopes: ["read_registry"],
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
  };
@@ -67,6 +67,8 @@ export const setupCloudRun = async (
67
67
  [GCLOUD_RUN_CANONICAL_HOST_SUFFIX]: suffix,
68
68
  },
69
69
  context.environment.shortName,
70
- context.componentName
70
+ context.componentName,
71
+ false, // backup
72
+ false // masked
71
73
  );
72
74
  };
@@ -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
- update?: boolean
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
- return result.json();
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(vorpal, `projects/${projectId}/variables`, {
151
- key,
152
- value,
153
- masked: isMaskable(value),
154
- environment_scope,
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
- true
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 + "_backup_" + new Date().getTime(),
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}`);