-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathindex.js
58 lines (48 loc) · 1.53 KB
/
index.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
const core = require("@actions/core");
const AWS = require("aws-sdk");
const ecs = new AWS.ECS();
const resourcegroupstaggingapi = new AWS.ResourceGroupsTaggingAPI();
const parseJsonFromMultiline = (value) => {
if (Array.isArray(value)) {
return JSON.parse(value[0]);
} else {
return JSON.parse(value);
}
}
const main = async () => {
const cluster = core.getInput("cluster", { required: true });
const tagFilters = parseJsonFromMultiline(core.getMultilineInput("tag_filters", { required: true }));
core.debug("Finding services with proper tags...");
const services = await resourcegroupstaggingapi.getResources({
TagFilters: Object.entries(tagFilters).map(([key, value]) => ({
Key: key,
Values: value,
})),
ResourceTypeFilters: ["ecs:service"],
}).promise();
core.debug("Forcing new deployments...");
const resourceArns = services.ResourceTagMappingList.map(x => x.ResourceARN);
try {
for (const resourceArn of resourceArns) {
const info = await ecs.describeServices({
services: [
resourceArn,
],
cluster,
}).promise();
if (info.services[0].status === "ACTIVE") {
console.log(`-> Forcing new deployment for ${resourceArn}`);
await ecs.updateService({
cluster: cluster,
service: resourceArn,
forceNewDeployment: true,
}).promise();
} else {
console.log(`-> Service ${resourceArn} is not active, skipping...`);
}
}
} catch (e) {
core.setFailed(e);
}
};
main();