forked from dienianindya/gsi_ess_mobile
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
54 lines
2.5 KiB
54 lines
2.5 KiB
"use strict";
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.command = void 0;
|
|
const backend = require("../deploy/functions/backend");
|
|
const command_1 = require("../command");
|
|
const projectUtils_1 = require("../projectUtils");
|
|
const secrets_1 = require("../functions/secrets");
|
|
const requirePermissions_1 = require("../requirePermissions");
|
|
const deploymentTool_1 = require("../deploymentTool");
|
|
const utils_1 = require("../utils");
|
|
const prompt_1 = require("../prompt");
|
|
const secretManager_1 = require("../gcp/secretManager");
|
|
exports.command = new command_1.Command("functions:secrets:prune")
|
|
.withForce("Destroys unused secrets without prompt")
|
|
.description("Destroys unused secrets")
|
|
.before(requirePermissions_1.requirePermissions, [
|
|
"cloudfunctions.functions.list",
|
|
"secretmanager.secrets.list",
|
|
"secretmanager.versions.list",
|
|
"secretmanager.versions.destroy",
|
|
])
|
|
.action(async (options) => {
|
|
const projectNumber = await (0, projectUtils_1.needProjectNumber)(options);
|
|
const projectId = (0, projectUtils_1.needProjectId)(options);
|
|
(0, utils_1.logBullet)("Loading secrets...");
|
|
const haveBackend = await backend.existingBackend({ projectId });
|
|
const haveEndpoints = backend
|
|
.allEndpoints(haveBackend)
|
|
.filter((e) => (0, deploymentTool_1.isFirebaseManaged)(e.labels || []));
|
|
const pruned = await (0, secrets_1.pruneSecrets)({ projectNumber, projectId }, haveEndpoints);
|
|
if (pruned.length === 0) {
|
|
(0, utils_1.logBullet)("All secrets are in use. Nothing to prune today.");
|
|
return;
|
|
}
|
|
(0, utils_1.logBullet)(`Found ${pruned.length} unused active secret versions:\n\t` +
|
|
pruned.map((sv) => `${sv.secret}@${sv.version}`).join("\n\t"));
|
|
if (!options.force) {
|
|
const confirm = await (0, prompt_1.promptOnce)({
|
|
name: "destroy",
|
|
type: "confirm",
|
|
default: true,
|
|
message: `Do you want to destroy unused secret versions?`,
|
|
}, options);
|
|
if (!confirm) {
|
|
(0, utils_1.logBullet)("Run the following commands to destroy each unused secret version:\n\t" +
|
|
pruned
|
|
.map((sv) => `firebase functions:secrets:destroy ${sv.secret}@${sv.version}`)
|
|
.join("\n\t"));
|
|
return;
|
|
}
|
|
}
|
|
await Promise.all(pruned.map((sv) => (0, secretManager_1.destroySecretVersion)(projectId, sv.secret, sv.version)));
|
|
(0, utils_1.logSuccess)("Destroyed all unused secrets!");
|
|
});
|