fabric
Version:
Object model for HTML5 canvas, and SVG-to-canvas parser. Backed by jsdom and node-canvas.
140 lines (124 loc) • 3.19 kB
JavaScript
const REQUESTED_COMMENTS_PER_PAGE = 20;
const COMMENT_MARKER = '<!-- BUILD STATS COMMENT -->';
const MAX_COMMENT_CHARS = 65536;
function printSize(a, b) {
const diff = b - a;
return `${b.toFixed(3)} (**${Math.sign(diff) > 0 ? '+' : ''}${diff.toFixed(
diff !== 0 ? 3 : 0,
)}**)`;
}
function printSizeKByte(a, b) {
return printSize(a / 1024, b / 1024);
}
export async function findCommentId(github, context) {
let page = 0;
let response;
do {
response = await github.rest.issues.listComments({
issue_number: context.issue.number,
owner: context.repo.owner,
repo: context.repo.repo,
per_page: REQUESTED_COMMENTS_PER_PAGE,
page: page,
sort: 'updated',
direction: 'desc',
});
const found = response.data.find(
(comment) => !!comment.user && comment.body.startsWith(COMMENT_MARKER),
)?.id;
if (found) {
return found;
}
page++;
} while (response.data.length === REQUESTED_COMMENTS_PER_PAGE);
}
export async function run({ github, context, a, b }) {
const {
repo: { owner, repo },
} = context;
const table = [
['file / KB (diff)', 'bundled', 'minified', 'gzipped'],
['---', '---', '---', '---'],
...Object.entries(b.size).map(([file, _b]) => {
const _a = {
bundled: 0,
minified: 0,
gzipped: 0,
...(a.size[file] || {}),
};
return [
file,
printSizeKByte(_a.bundled, _b.bundled),
printSizeKByte(_a.minified, _b.minified),
printSizeKByte(_a.gzipped, _b.gzipped),
];
}),
];
const body = [
COMMENT_MARKER,
'**Build Stats**',
'',
...table.map((row) => ['', ...row, ''].join(' | ')),
'',
]
.join('\n')
.slice(0, MAX_COMMENT_CHARS);
const commentId = await findCommentId(github, context);
await (commentId
? github.rest.issues.updateComment({
repo,
owner,
comment_id: commentId,
body,
})
: github.rest.issues.createComment({
repo,
owner,
issue_number: context.payload.pull_request.number,
body,
}));
}
export async function run_simple({ github, context, a, b }) {
const {
repo: { owner, repo },
} = context;
const table = [
['file / KB (diff)', 'bundled', 'minified'],
['---', '---', '---'],
...Object.entries(b.size).map(([file, _b]) => {
const _a = {
bundled: 0,
minified: 0,
...(a.size[file] || {}),
};
return [
file,
printSizeKByte(_a.bundled, _b.bundled),
printSizeKByte(_a.minified, _b.minified),
];
}),
];
const body = [
COMMENT_MARKER,
'**Build Stats**',
'',
...table.map((row) => ['', ...row, ''].join(' | ')),
'',
]
.join('\n')
.slice(0, MAX_COMMENT_CHARS);
const commentId = await findCommentId(github, context);
await (commentId
? github.rest.issues.updateComment({
repo,
owner,
comment_id: commentId,
body,
})
: github.rest.issues.createComment({
repo,
owner,
issue_number: context.payload.pull_request.number,
body,
}));
}