-
Notifications
You must be signed in to change notification settings - Fork 17
/
Copy paths3delete.js
67 lines (51 loc) · 1.86 KB
/
s3delete.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
55
56
57
58
59
60
61
62
63
64
65
66
67
var _ = require('lodash');
require('colors');
module.exports = {
name:'s3delete',
description:'Deletes a published asset set from S3 - must be one you have published previously',
example:'bosco -e <environmment> s3delete <build>',
cmd:cmd
}
var tag = "", noprompt = false;
function cmd(bosco, args) {
if(!bosco.knox) bosco.error("You don't appear to have any S3 config for this environment?");
var pushed = bosco.config.get('S3:published') || [];
var toDelete = args[0] || "Not specified"
if(!toDelete || !_.contains(pushed, toDelete)) {
return bosco.error("Unable to delete:" + toDelete.blue + " as it is not in your push list.")
}
bosco.knox.list({ prefix: bosco.options.environment + '/' + toDelete }, function(err, data) {
var files = _.pluck(data.Contents, 'Key');
if(files.length == 0) return bosco.error("There doesn't appear to be any files matching that push.")
confirm("Are you sure you want to delete ".white + (files.length+"").green + " files in push " + toDelete.green + "?", function(err, confirmed) {
if(err || !confirmed) return;
bosco.knox.deleteMultiple(files, function(err, res) {
if(err) return bosco.error(err.message);
if(res.statusCode == '200') {
bosco.log("Completed deleting " + toDelete.blue);
pushed = _.without(pushed, toDelete);
var envConfig = bosco.config.stores.environment;
envConfig.store.S3 = {published: pushed};
bosco.config.save();
};
});
});
});
var confirm = function(message, next) {
bosco.prompt.start();
bosco.prompt.get({
properties: {
confirm: {
description: message
}
}
}, function (err, result) {
if(!result) return next({message:'Did not confirm'});
if(result.confirm == 'Y' || result.confirm == 'y') {
next(null, true);
} else {
next(null, false);
}
});
}
}