GSI - Employe Self Service 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.
 
 
 
 
 

95 lines
4.1 KiB

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.command = void 0;
const clc = require("colorette");
const functionsConfig = require("../functionsConfig");
const command_1 = require("../command");
const error_1 = require("../error");
const projectUtils_1 = require("../projectUtils");
const prompt_1 = require("../prompt");
const functional_1 = require("../functional");
const requirePermissions_1 = require("../requirePermissions");
const helper = require("../deploy/functions/functionsDeployHelper");
const utils = require("../utils");
const backend = require("../deploy/functions/backend");
const planner = require("../deploy/functions/release/planner");
const fabricator = require("../deploy/functions/release/fabricator");
const executor = require("../deploy/functions/release/executor");
const reporter = require("../deploy/functions/release/reporter");
const containerCleaner = require("../deploy/functions/containerCleaner");
const getProjectNumber_1 = require("../getProjectNumber");
exports.command = new command_1.Command("functions:delete [filters...]")
.description("delete one or more Cloud Functions by name or group name.")
.option("--region <region>", "Specify region of the function to be deleted. " +
"If omitted, functions from all regions whose names match the filters will be deleted. ")
.withForce()
.before(requirePermissions_1.requirePermissions, ["cloudfunctions.functions.list", "cloudfunctions.functions.delete"])
.action(async (filters, options) => {
if (!filters.length) {
return utils.reject("Must supply at least function or group name.");
}
const context = {
projectId: (0, projectUtils_1.needProjectId)(options),
filters: filters.map((f) => ({ idChunks: f.split(/[-.]/) })),
};
const [config, existingBackend] = await Promise.all([
functionsConfig.getFirebaseConfig(options),
backend.existingBackend(context),
]);
await backend.checkAvailability(context, backend.empty());
const appEngineLocation = functionsConfig.getAppEngineLocation(config);
if (options.region) {
existingBackend.endpoints = { [options.region]: existingBackend.endpoints[options.region] };
}
const plan = planner.createDeploymentPlan({
wantBackend: backend.empty(),
haveBackend: existingBackend,
codebase: "",
filters: context.filters,
deleteAll: true,
});
const allEpToDelete = Object.values(plan)
.map((changes) => changes.endpointsToDelete)
.reduce(functional_1.reduceFlat, [])
.sort(backend.compareFunctions);
if (allEpToDelete.length === 0) {
throw new error_1.FirebaseError(`The specified filters do not match any existing functions in project ${clc.bold(context.projectId)}.`);
}
const deleteList = allEpToDelete.map((func) => `\t${helper.getFunctionLabel(func)}`).join("\n");
const confirmDeletion = await (0, prompt_1.promptOnce)({
type: "confirm",
name: "force",
default: false,
message: "You are about to delete the following Cloud Functions:\n" +
deleteList +
"\n Are you sure?",
}, options);
if (!confirmDeletion) {
throw new error_1.FirebaseError("Command aborted.");
}
const functionExecutor = new executor.QueueExecutor({
retries: 30,
backoff: 20000,
concurrency: 40,
maxBackoff: 40000,
});
try {
const fab = new fabricator.Fabricator({
functionExecutor,
appEngineLocation,
executor: new executor.QueueExecutor({}),
sources: {},
projectNumber: options.projectNumber || (await (0, getProjectNumber_1.getProjectNumber)({ projectId: context.projectId })),
});
const summary = await fab.applyPlan(plan);
await reporter.logAndTrackDeployStats(summary);
reporter.printErrors(summary);
}
catch (err) {
throw new error_1.FirebaseError("Failed to delete functions", {
original: err,
exit: 1,
});
}
await containerCleaner.cleanupBuildImages([], allEpToDelete);
});