/
cleanupS3Bucket.js
54 lines (45 loc) · 1.54 KB
/
cleanupS3Bucket.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
'use strict';
const BbPromise = require('bluebird');
const _ = require('lodash');
const findAndGroupDeployments = require('../../utils/findAndGroupDeployments');
const getS3ObjectsFromStacks = require('../../utils/getS3ObjectsFromStacks');
module.exports = {
getObjectsToRemove() {
const stacksToKeepCount = 5;
const service = this.serverless.service.service;
const stage = this.provider.getStage();
return this.provider.request('S3',
'listObjectsV2',
{
Bucket: this.bucketName,
Prefix: `serverless/${service}/${stage}`,
})
.then((response) => {
const stacks = findAndGroupDeployments(response, service, stage);
const stacksToKeep = _.takeRight(stacks, stacksToKeepCount);
const stacksToRemove = _.pullAllWith(stacks, stacksToKeep, _.isEqual);
const objectsToRemove = getS3ObjectsFromStacks(stacksToRemove, service, stage);
if (objectsToRemove.length) {
return BbPromise.resolve(objectsToRemove);
}
return BbPromise.resolve([]);
});
},
removeObjects(objectsToRemove) {
if (objectsToRemove && objectsToRemove.length) {
this.serverless.cli.log('Removing old service versions...');
return this.provider.request('S3',
'deleteObjects',
{
Bucket: this.bucketName,
Delete: { Objects: objectsToRemove },
});
}
return BbPromise.resolve();
},
cleanupS3Bucket() {
return BbPromise.bind(this)
.then(this.getObjectsToRemove)
.then(this.removeObjects);
},
};