-
Notifications
You must be signed in to change notification settings - Fork 112
/
Copy pathrepository.js
113 lines (105 loc) · 2.99 KB
/
repository.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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
//
// AWS CodeCommit: Repository change event
//
const AWS = require("aws-sdk");
exports.matches = event =>
event.getSource() === "codecommit"
&& _.get(event.message, "detail-type") === "CodeCommit Repository State Change";
exports.parse = async (event) => {
const callerArn = event.get("detail.callerUserArn");
const refName = event.get("detail.referenceName");
const refType = event.get("detail.referenceType");
const repoName = event.get("detail.repositoryName");
const repoEvent = event.get("detail.event");
const repoUrl = event.consoleUrl(`/codecommit/home#/repository/${repoName}`);
const fields = [];
const color = event.COLORS.neutral;
let title = repoName;
if (repoEvent === "referenceCreated" && refType === "branch") {
title = `New branch created in repository ${repoName}`;
}
else if (repoEvent === "referenceUpdated" && refType === "branch") {
title = `New commit pushed to repository ${repoName}`;
}
else if (repoEvent === "referenceDeleted" && refType === "branch") {
title = `Deleted branch in repository ${repoName}`;
}
else if (repoEvent === "referenceCreated" && refType === "tag") {
title = `New tag created in repository ${repoName}`;
}
else if (repoEvent === "referenceUpdated" && refType === "tag") {
title = `Tag reference modified in repository ${repoName}`;
}
else if (repoEvent === "referenceDeleted" && refType === "tag") {
title = `Deleted tag in repository ${repoName}`;
}
if (repoName) {
fields.push({
title: "Repository",
value: repoName,
short: true,
});
}
if (refType) {
fields.push({
title: _.toUpper(refType.charAt(0)) + refType.slice(1),
value: refName,
short: true,
});
}
if (callerArn) {
fields.push({
title: "Caller ARN",
value: callerArn,
});
}
const client = new AWS.CodeCommit({
region: event.getRegion(),
httpOptions: { timeout: 5, connectTimeout: 1 }
});
let commitId = _.get(event, "detail.commitId");
if (!commitId && refType === "branch" && repoEvent === "referenceUpdated") {
try {
const res = await client.getBranch({
repositoryName: repoName,
branchName: refName
}).promise();
commitId = res.branch.commitId;
}
catch (err) {
console.error("repository.js: Failed to inspect branch:", err);
fields.push({
title: "Commit Message",
value: "Could not inspect repository. Check logs for stack trace.",
});
}
}
if (commitId) {
try {
const res = await client.getCommit({
repositoryName: repoName,
commitId: commitId,
}).promise();
fields.push({
title: "Commit Message",
value: res.commit.message,
});
}
catch (err) {
console.error("repository.js: Failed to retrieve CodeCommit message:", err);
fields.push({
title: "Commit Message",
value: "Could not get message. Check logs for stack trace.",
});
}
}
return event.attachmentWithDefaults({
author_name: "AWS CodeCommit",
fallback: `${repoName}: ${title}`,
color: color,
title: title,
title_link: repoUrl,
fields: fields,
mrkdwn_in: ["title", "text"],
});
};