UNPKG

serverless-prune-versions

Version:

Serverless plugin to delete old versions of deployed functions from AWS

119 lines 11.4 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.PrunePlugin = void 0; const assert_1 = require("assert"); const commands_1 = require("./commands"); const function_1 = require("./function"); const layer_1 = require("./layer"); const log_1 = require("./log"); const settings_1 = require("./settings"); class PrunePlugin { constructor(serverless, rawOptions) { var _a, _b; this.serverless = serverless; this.hooks = { 'prune:prune': this.standalonePrune.bind(this), 'after:deploy:deploy': this.postDeployPrune.bind(this) }; this.commands = commands_1.commands; this.settings = new settings_1.Settings((_b = (_a = serverless.service) === null || _a === void 0 ? void 0 : _a.custom) === null || _b === void 0 ? void 0 : _b.prune, rawOptions); this.validateServerlessYml(); } postDeployPrune() { return this.shouldPostDeployPrune() && this.prune(); } standalonePrune() { return this.prune(); } prune() { if (this.settings.includeLayers) { this.log('Pruning Lambda function versions and layers...'); return Promise.all([this.pruneVersions(), this.pruneLayers()]); } else { this.log('Pruning Lambda function versions...'); return this.pruneVersions(); } } validateServerlessYml() { var _a, _b, _c, _d, _e, _f; assert_1.ok(this.serverless, `Invalid serverless.yml file`); assert_1.ok((_a = this.serverless) === null || _a === void 0 ? void 0 : _a.service, `Missing required service section in serverless.yml`); assert_1.ok((_c = (_b = this.serverless) === null || _b === void 0 ? void 0 : _b.service) === null || _c === void 0 ? void 0 : _c.provider, `Missing required provider section in serverless.yml`); const providerName = (_f = (_e = (_d = this.serverless) === null || _d === void 0 ? void 0 : _d.service) === null || _e === void 0 ? void 0 : _e.provider) === null || _f === void 0 ? void 0 : _f.name; assert_1.ok(providerName, `Missing required name property of provider section in serverless.yml`); assert_1.deepStrictEqual(providerName, 'aws', `This plugin only supports AWS as a provider`); } shouldPostDeployPrune() { const noDeploy = this.settings.noDeploy === true; if (noDeploy) { this.log("Skipping pruning because 'noDeploy' was set to true"); } const automaticPruning = this.settings.automatic === true; if (!automaticPruning) { this.log("Skipping pruning because 'automatic' wasn't set to true"); } return !noDeploy && automaticPruning; } pruneVersions() { return __awaiter(this, void 0, void 0, function* () { const functions = this.settings.function ? [this.settings.function] : this.serverless.service.getAllFunctions(); const functionsToPrune = functions.map(f => { const name = this.serverless.service.getFunction(f).name; return new function_1.LambdaFunction(name, this.settings, this.serverless); }); const prunedVersions = yield Promise.all(functionsToPrune.map(f => f.deleteVersions())); const didPrune = prunedVersions.filter(pruned => pruned); if (this.settings.dryRun) { this.log('Dry run complete, no function versions have been removed'); } else if (didPrune.length > 0) { this.log(`Function version pruning complete, pruned versions from ${didPrune.length} of ${functionsToPrune.length} functions`); } else if (didPrune.length === 0) { this.log(`Function version pruning complete, no versions to prune in ${functionsToPrune.length} functions`); } return; }); } pruneLayers() { return __awaiter(this, void 0, void 0, function* () { const layers = this.settings.layer ? [this.settings.layer] : this.serverless.service.getAllLayers(); const layersToPrune = layers.map(l => { const name = this.serverless.service.getLayer(l).name; return new layer_1.LambdaLayer(name, this.settings, this.serverless); }); const prunedLayers = yield Promise.all(layersToPrune.map(l => l.deleteVersions())); const didPrune = prunedLayers.filter(pruned => pruned); if (this.settings.dryRun) { this.log('Dry run complete, no layer versions have been removed'); } else if (didPrune.length > 0) { this.log(`Layer version pruning complete, pruned versions from ${didPrune.length} of ${layersToPrune.length} layers`); } else if (didPrune.length === 0) { this.log(`Layer version pruning complete, no versions to prune in ${layersToPrune.length} layers`); } return; }); } log(message) { this.serverless.cli.log(`${log_1.LOG_PREFIX} ${message}`); } debug(message) { if (process.env.SLS_DEBUG) { this.serverless.cli.log(`${log_1.LOG_PREFIX} ${message}`); } } } exports.PrunePlugin = PrunePlugin; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3BsdWdpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFBQSxtQ0FBNkM7QUFDN0MseUNBQXNDO0FBQ3RDLHlDQUE0QztBQUM1QyxtQ0FBc0M7QUFDdEMsK0JBQW1DO0FBQ25DLHlDQUFzQztBQUV0QyxNQUFhLFdBQVc7SUFRdEIsWUFBb0IsVUFBc0IsRUFBRSxVQUErQjs7UUFBdkQsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQU5sQyxVQUFLLEdBQUc7WUFDZCxhQUFhLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO1lBQzlDLHFCQUFxQixFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztTQUN2RCxDQUFDO1FBQ00sYUFBUSxHQUFHLG1CQUFRLENBQUM7UUFHMUIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLG1CQUFRLENBQUMsTUFBQSxNQUFBLFVBQVUsQ0FBQyxPQUFPLDBDQUFFLE1BQU0sMENBQUUsS0FBSyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQzVFLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO0lBQy9CLENBQUM7SUFFRCxlQUFlO1FBQ2IsT0FBTyxJQUFJLENBQUMscUJBQXFCLEVBQUUsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDdEQsQ0FBQztJQUVELGVBQWU7UUFDYixPQUFPLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRU8sS0FBSztRQUNYLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLEVBQUU7WUFDL0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxnREFBZ0QsQ0FBQyxDQUFDO1lBQzNELE9BQU8sT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMs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