UNPKG

serverless-prune-versions

Version:

Serverless plugin to delete old versions of deployed functions from AWS

105 lines 8.12 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.LambdaLayer = void 0; const log_1 = require("./log"); class LambdaLayer { constructor(name, settings, serverless) { this.name = name; this.settings = settings; this.serverless = serverless; this.provider = serverless.getProvider('aws'); } deleteVersions() { return __awaiter(this, void 0, void 0, function* () { const versionsToDelete = yield this.getVersionsToDelete(); if (!this.settings.dryRun) { yield Promise.all(versionsToDelete.map(version => this.deleteVersion(version))); } return versionsToDelete.length > 0; }); } getVersionsToDelete() { return __awaiter(this, void 0, void 0, function* () { const versions = yield this.getVersions(); const versionsToDelete = versions .sort((version1, version2) => { const v1 = parseInt(version1); const v2 = parseInt(version2); return v1 === v2 ? 0 : v1 > v2 ? -1 : 1; }) .slice(this.settings.number + 1); const message = `The ${this.name} layer has ${versions.length - 1} versions: ${versionsToDelete.length} versions will be pruned`; if (this.settings.dryRun) { this.log(message); } else { this.debug(message); } return versionsToDelete; }); } deleteVersion(version) { return __awaiter(this, void 0, void 0, function* () { try { const params = { LayerName: this.name, VersionNumber: version }; yield this.provider.request('Lambda', 'deleteLayerVersion', params); } catch (err) { throw err; } }); } getVersions() { var _a; return __awaiter(this, void 0, void 0, function* () { let output; let versions = []; do { const params = { LayerName: this.name }; if (output === null || output === void 0 ? void 0 : output.NextMarker) { params['Marker'] = output.NextMarker; } try { output = yield this.provider.request('Lambda', 'listLayerVersions', params); if ((_a = output === null || output === void 0 ? void 0 : output.Versions) === null || _a === void 0 ? void 0 : _a.length) { versions = [...versions, ...output.Versions.map(version => version.Version)]; } } catch (err) { if (this.errorIsFromLayerNotDeployed(err)) { this.debug(`Couldn't get ${this.name} versions because the function isn't deployed`); } else { throw err; } } } while (output === null || output === void 0 ? void 0 : output.NextMarker); return versions; }); } errorIsFromLayerNotDeployed(err) { return (err === null || err === void 0 ? void 0 : err.statusCode) === 404; } 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.LambdaLayer = LambdaLayer; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF5ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvbGF5ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQUEsK0JBQW1DO0FBR25DLE1BQWEsV0FBVztJQUV0QixZQUFvQixJQUFZLEVBQVUsUUFBa0IsRUFBVSxVQUFzQjtRQUF4RSxTQUFJLEdBQUosSUFBSSxDQUFRO1FBQVUsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUFVLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDMUYsSUFBSSxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFFWSxjQUFjOztZQUN6QixNQUFNLGdCQUFnQixHQUFHLE1BQU0sSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7WUFDMUQsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFO2dCQUN6QixNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDakY7WUFDRCxPQUFPLGdCQUFnQixDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDckMsQ0FBQztLQUFBO0lBRWEsbUJBQW1COztZQUMvQixNQUFNLFFBQVEsR0FBRyxNQUFNLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUMxQyxNQUFNLGdCQUFnQixHQUFHLFFBQVE7aUJBQzlCLElBQUksQ0FBQyxDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsRUFBRTtnQkFDM0IsTUFBTSxFQUFFLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUM5QixNQUFNLEVBQUUsR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQzlCLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FB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