mirror of
https://github.com/serverless/serverless.git
synced 2026-01-18 14:58:43 +00:00
fix cleaning up s3 buckets
This commit is contained in:
parent
3f3a265554
commit
ecf3a45cd1
@ -2,55 +2,31 @@
|
||||
|
||||
const BbPromise = require('bluebird');
|
||||
const _ = require('lodash');
|
||||
const findAndGroupStacks = require('../utils/findAndGroupStacks');
|
||||
const s3ObjectsFromStacks = require('../utils/s3ObjectsFromStacks');
|
||||
|
||||
module.exports = {
|
||||
getObjectsToRemove() {
|
||||
// 4 old ones + the one which will be uploaded after the cleanup = 5
|
||||
const directoriesToKeepCount = 4;
|
||||
const serviceStage = `${this.serverless.service.service}/${this.options.stage}`;
|
||||
const stacksToKeepCount = 4;
|
||||
const service = this.serverless.service.service;
|
||||
const stage = this.options.stage;
|
||||
|
||||
return this.sdk.request('S3',
|
||||
'listObjectsV2',
|
||||
{
|
||||
Bucket: this.bucketName,
|
||||
Prefix: `serverless/${serviceStage}`,
|
||||
Prefix: `serverless/${service}/${stage}`,
|
||||
},
|
||||
this.options.stage,
|
||||
this.options.region)
|
||||
.then((result) => {
|
||||
if (result.Contents.length) {
|
||||
let directories = [];
|
||||
const regex = new RegExp(
|
||||
`serverless/${serviceStage}/(.+-.+-.+-.+)`
|
||||
);
|
||||
|
||||
// get the unique directory names
|
||||
result.Contents.forEach((obj) => {
|
||||
const match = obj.Key.match(regex);
|
||||
|
||||
if (match) {
|
||||
const directoryName = match[1];
|
||||
directories = _.union(directories, [directoryName]);
|
||||
}
|
||||
});
|
||||
|
||||
// sort the directory names
|
||||
directories = directories.sort();
|
||||
|
||||
const directoriesToKeep = _.takeRight(directories, directoriesToKeepCount);
|
||||
const directoriesToRemove = _.pullAllWith(directories, directoriesToKeep, _.isEqual);
|
||||
|
||||
const objectsToRemove = [];
|
||||
|
||||
// get all the objects in the directories which should be removed
|
||||
result.Contents.forEach((obj) => {
|
||||
directoriesToRemove.some((element) => {
|
||||
const match = obj.Key.match(element);
|
||||
if (match) objectsToRemove.push({ Key: obj.Key });
|
||||
return obj;
|
||||
});
|
||||
});
|
||||
.then((response) => {
|
||||
const stacks = findAndGroupStacks(response, service, stage);
|
||||
const stacksToKeep = _.takeRight(stacks, stacksToKeepCount);
|
||||
const stacksToRemove = _.pullAllWith(stacks, stacksToKeep, _.isEqual);
|
||||
const objectsToRemove = s3ObjectsFromStacks(stacksToRemove, service, stage);
|
||||
|
||||
if (objectsToRemove.length) {
|
||||
return BbPromise.resolve(objectsToRemove);
|
||||
}
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user