-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathactions.js
73 lines (55 loc) · 3.35 KB
/
actions.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
const fs = require('fs');
const { generateBadge } = require ('./badge');
const { compareDetailedCoverages, retrieveBaseCoverage, retrieveBaseDetailedCoverages, retrieveHistory, sumCoverages } = require('./coverage');
const { clone, push } = require('./git');
const { buildResultMessage, postMessageOnPullRequest } = require ('./message');
const check = async (coverages, coverageBranch, coverageFiles, reportMessageHeader, withAverage) => {
const baseOverallCoverages = {};
const newOverallCoverages = {};
const messages = [];
for (const summaryFile of Object.keys(coverages)) {
const baseOverallCoverageResult = await retrieveBaseCoverage(summaryFile, coverageBranch);
const baseDetailedCoverageResult = await retrieveBaseDetailedCoverages(summaryFile, coverageBranch);
const newOverallCoverage = coverages[summaryFile].overall;
if (baseOverallCoverageResult === null) {
console.log(`No base coverage ${summaryFile} found. Current coverage is ${newOverallCoverage.coverage}% (${newOverallCoverage.total} lines, ${newOverallCoverage.covered} covered)`);
continue;
}
newOverallCoverages[summaryFile] = newOverallCoverage;
baseOverallCoverages[summaryFile] = baseOverallCoverageResult;
const detailedDiff = (baseDetailedCoverageResult === null) ? null : compareDetailedCoverages(baseDetailedCoverageResult, coverages[summaryFile].detailed);
messages.push('*' + coverageFiles.find(e => e.summary === summaryFile).label + '* \n\n' + buildResultMessage(baseOverallCoverages[summaryFile], newOverallCoverage, detailedDiff));
}
if (withAverage && Object.keys(coverages).length > 1) {
const averageBaseCoverage = sumCoverages(baseOverallCoverages);
const averageCoverage = sumCoverages(newOverallCoverages);
messages.push('*Global* \n\n' + buildResultMessage(averageBaseCoverage, averageCoverage));
}
await postMessageOnPullRequest(messages.join('\n---\n'), reportMessageHeader);
};
const update = async (coverages, coverageBranch, repository, historyFilename, coverageFiles) => {
console.log('Updating base coverage...');
const workingDir = await clone(coverageBranch, repository);
const history = await retrieveHistory(coverageBranch, historyFilename);
for (const summaryFile of Object.keys(coverages)) {
const conf = coverageFiles.find(e => e.summary === summaryFile);
console.log(`Writing ${summaryFile} report (${workingDir}/${summaryFile})`);
fs.writeFileSync(`${workingDir}/${summaryFile}`, JSON.stringify(coverages[summaryFile].overall));
fs.writeFileSync(`${workingDir}/detailed-${summaryFile}`, JSON.stringify(coverages[summaryFile].detailed));
if (conf.badge) {
await generateBadge(coverages[summaryFile].overall.coverage, conf.label, conf.badge, workingDir);
}
if (typeof history[conf.label] === 'undefined') {
history[conf.label] = [];
}
history[conf.label].push({
time: (new Date()).toISOString(),
coverage: coverages[summaryFile].overall.coverage
});
}
fs.writeFileSync(`${workingDir}/${historyFilename}`, JSON.stringify(history));
console.log('Pushing to coverage branch');
await push(workingDir, repository);
console.log('Coverage successfully updated');
};
export { check, update };