serverless-prune-versions
Version:
Serverless plugin to delete old versions of deployed functions from AWS
105 lines • 8.12 kB
JavaScript
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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
;