File size: 4,264 Bytes
bf48b89 | 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 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 | import jsBeautify from 'js-beautify';
const routeTestFailed = 'auto: not ready to review';
const readyToReview = 'auto: ready to review';
export default async function test({ github, context, core }, baseUrl, routes, number) {
if (routes[0] === 'NOROUTE') {
return;
}
const links = routes.map((e) => {
const l = e.startsWith('/') ? e : `/${e}`;
return `${baseUrl}${l}`;
});
let commentList = [];
let successCount = 0;
let failCount = 0;
let comment = `Successfully [generated](${process.env.GITHUB_SERVER_URL}/${context.repo.owner}/${context.repo.repo}/actions/runs/${context.runId}) as following:\n`;
for await (const lks of links) {
core.info(`testing route: ${lks}`);
// Intended, one at a time
let success = false;
let detail;
const res = await fetch(lks);
const body = await res.text();
if (res.ok) {
success = true;
successCount++;
detail = jsBeautify.html(body.replaceAll(/\s+(\n|$)/g, '\n'), { indent_size: 2 });
} else {
if (body && !body.includes('ConfigNotFoundError')) {
failCount++;
}
detail = `HTTPError: Response code ${res.status} (${res.statusText})`;
const errInfoList = body && body.match(/(?<=<p class="message">)(.+?)(?=<\/p>)/gs);
if (errInfoList) {
detail += '\n\n';
detail += errInfoList
.slice(0, 5)
.map((e) => {
e = e.replaceAll(/<code class="[^"]+">|<\/code>/g, '').trim();
return e.length > 1000 ? e.slice(0, 1000) + '...' : e;
})
.join('\n');
}
}
let routeFeedback = `
<details>
<summary><a href="${lks}">${lks.replaceAll('&', '&')}</a> - ${success ? 'Success ✔️' : '<b>Failed ❌</b>'}</summary>
\`\`\`${success ? 'rss' : ''}`;
routeFeedback += `
${detail.slice(0, 65300 - routeFeedback.length)}
\`\`\`
</details>
`;
if (comment.length + routeFeedback.length >= 65500) {
comment += '\n\n...';
commentList.push(comment);
comment = routeFeedback;
} else {
comment += routeFeedback;
}
}
if (comment.length > 0) {
commentList.push(comment);
}
if (commentList.length >= 5) {
commentList = commentList.slice(0, 5);
}
if (process.env.PULL_REQUEST) {
const resultLabel = failCount === links.length || successCount <= failCount ? routeTestFailed : readyToReview;
if (resultLabel === routeTestFailed) {
const { data: issue } = await github.rest.issues
.get({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: number,
})
.catch((error) => {
core.warning(error);
});
if (issue.labels.some((l) => l.name === readyToReview)) {
await github.rest.issues
.removeLabel({
issue_number: number,
owner: context.repo.owner,
repo: context.repo.repo,
name: readyToReview,
})
.catch((error) => {
core.warning(error);
});
}
}
await github.rest.issues
.addLabels({
issue_number: number,
owner: context.repo.owner,
repo: context.repo.repo,
labels: [resultLabel],
})
.catch((error) => {
core.warning(error);
});
}
for await (const comment of commentList) {
// Intended, one at a time
await github.rest.issues
.createComment({
issue_number: number,
owner: context.repo.owner,
repo: context.repo.repo,
body: comment,
})
.catch((error) => {
core.warning(error);
});
}
}
|