-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathmessage.js
112 lines (88 loc) · 3.7 KB
/
message.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
const core = require('@actions/core');
const github = require('@actions/github');
const process = require('process');
const buildDeltaMessage = (oldCoverage, newCoverage) => {
return [
'',
'| Measure | Main branch | ' + process.env.GITHUB_REF + ' |',
'| --- | --- | --- |',
'| Coverage | ' + oldCoverage.coverage + '% | ' + newCoverage.coverage + '% |',
'| Total lines | ' + oldCoverage.total + ' | ' + newCoverage.total + ' |',
'| Covered lines | ' + oldCoverage.covered + ' | ' + newCoverage.covered + ' |',
'',
'∆ ' + (newCoverage.coverage - oldCoverage.coverage).toFixed(3),
'',
''
].join('\n');
}
const buildDetailedDiffTable = (diff) => {
const out = [
'',
'| File | On main branch | ' + process.env.GITHUB_REF + ' |',
'| --- | --- | --- |'
];
for (const entry of diff) {
out.push('| ' + entry.filename + ' | ' + entry.old + ' | ' + entry.new + ' | ');
}
return out . join('\n');
};
const buildDetailedDiffMessage = (detailedDiff) => {
if (detailedDiff === null) {
return '';
}
let out = '';
if (detailedDiff.improved.length > 0) {
out += '<details>\n<summary> :green_circle: :arrow_upper_right: Improved files:</summary> \n' + buildDetailedDiffTable(detailedDiff.improved) + '\n</details>\n\n';
}
if (detailedDiff.degraded.length > 0) {
out += '<details>\n<summary> :red_circle: :arrow_lower_right: Degraded files:</summary> \n' + buildDetailedDiffTable(detailedDiff.degraded) + '\n</details>\n\n';
}
return out + '\n';
};
const buildFailureMessage = (oldCoverage, newCoverage, detailedDiff) => {
return ':x: Your code coverage has been degraded :sob:' + buildDeltaMessage(oldCoverage, newCoverage) + buildDetailedDiffMessage(detailedDiff);
};
const buildSuccessMessage = (oldCoverage, newCoverage, detailedDiff) => {
return ':white_check_mark: Your code coverage has not been degraded :tada:' + buildDeltaMessage(oldCoverage, newCoverage) + buildDetailedDiffMessage(detailedDiff);
};
const buildResultMessage = (oldCoverage, newCoverage, detailedDiff = null) => {
if (newCoverage.coverage < oldCoverage.coverage) {
core.setFailed('Code coverage has been degraded');
return buildFailureMessage(oldCoverage, newCoverage, detailedDiff);
}
return buildSuccessMessage(oldCoverage, newCoverage, detailedDiff);
}
const postMessageOnPullRequest = async (message, header) => {
const context = github.context;
console.log(message);
if (context.payload.pull_request == null) {
return;
}
const body = header + '\n\n' + message;
const pullRequestNumber = context.payload.pull_request.number;
const octokit = new github.getOctokit(core.getInput('token'));
const commentId = await retrieveCommentIdFromPullRequest(context, octokit, header);
if (commentId !== null) {
await octokit.issues.updateComment({
...context.repo,
body,
comment_id: commentId
});
} else {
await octokit.issues.createComment({
...context.repo,
body,
issue_number: pullRequestNumber
});
}
};
const retrieveCommentIdFromPullRequest = async (context, octokit, header) => {
const pullRequestNumber = context.payload.pull_request.number;
const { data: comments } = await octokit.issues.listComments({
...context.repo,
issue_number: pullRequestNumber
});
const comment = comments.find(comment => comment.user.login === 'github-actions[bot]' && comment.body.startsWith(header));
return comment ? comment.id : null;
};
export { buildResultMessage, postMessageOnPullRequest };