summaryrefslogtreecommitdiff
path: root/.github/scripts/bundle-size.mjs
diff options
context:
space:
mode:
authorGravatar Emanuele Stoppa <my.burning@gmail.com> 2024-11-21 12:02:21 +0000
committerGravatar Emanuele Stoppa <my.burning@gmail.com> 2024-11-21 12:02:21 +0000
commit285c6e3598eac81632057a37ad74459cc65c357d (patch)
tree392acb06a54080f20422ac89c290b245ead7875f /.github/scripts/bundle-size.mjs
parent8309c61f0dfa5991d3f6c5c5fca4403794d6fda2 (diff)
parentb9c05f45b2c9780d7b5518adb4a545cf69f075a6 (diff)
downloadastro-285c6e3598eac81632057a37ad74459cc65c357d.tar.gz
astro-285c6e3598eac81632057a37ad74459cc65c357d.tar.zst
astro-285c6e3598eac81632057a37ad74459cc65c357d.zip
chore: merge fixes
Diffstat (limited to '.github/scripts/bundle-size.mjs')
-rw-r--r--.github/scripts/bundle-size.mjs54
1 files changed, 35 insertions, 19 deletions
diff --git a/.github/scripts/bundle-size.mjs b/.github/scripts/bundle-size.mjs
index 690d6e928..76d6b3f29 100644
--- a/.github/scripts/bundle-size.mjs
+++ b/.github/scripts/bundle-size.mjs
@@ -1,18 +1,18 @@
-import { build } from 'esbuild';
import { existsSync } from 'node:fs';
+import { build } from 'esbuild';
const CLIENT_RUNTIME_PATH = 'packages/astro/src/runtime/client/';
function formatBytes(bytes, decimals = 2) {
- if (bytes === 0) return '0 B';
+ if (bytes === 0) return '0 B';
- const k = 1024;
- const dm = decimals < 0 ? 0 : decimals;
- const sizes = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];
+ const k = 1024;
+ const dm = decimals < 0 ? 0 : decimals;
+ const sizes = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];
- const i = Math.floor(Math.log(bytes) / Math.log(k));
+ const i = Math.floor(Math.log(bytes) / Math.log(k));
- return parseFloat((bytes / Math.pow(k, i)).toFixed(dm)) + ' ' + sizes[i];
+ return parseFloat((bytes / Math.pow(k, i)).toFixed(dm)) + ' ' + sizes[i];
}
export default async function checkBundleSize({ github, context }) {
@@ -24,7 +24,7 @@ export default async function checkBundleSize({ github, context }) {
pull_number: PR_NUM,
});
const clientRuntimeFiles = files.filter((file) => {
- return file.filename.startsWith(CLIENT_RUNTIME_PATH) && file.status !== 'removed'
+ return file.filename.startsWith(CLIENT_RUNTIME_PATH) && file.status !== 'removed';
});
if (clientRuntimeFiles.length === 0) return;
@@ -35,17 +35,24 @@ export default async function checkBundleSize({ github, context }) {
const output = await bundle(clientRuntimeFiles);
for (let [filename, { oldSize, newSize, sourceFile }] of Object.entries(output)) {
- filename = ['idle', 'load', 'media', 'only', 'visible'].includes(filename) ? `client:${filename}` : filename;
- const prefix = (newSize - oldSize) === 0 ? '' : (newSize - oldSize) > 0 ? '+ ' : '- ';
+ filename = ['idle', 'load', 'media', 'only', 'visible'].includes(filename)
+ ? `client:${filename}`
+ : filename;
+ const prefix = newSize - oldSize === 0 ? '' : newSize - oldSize > 0 ? '+ ' : '- ';
const change = `${prefix}${formatBytes(newSize - oldSize)}`;
- table.push(`| [\`${filename}\`](https://github.com/${context.repo.owner}/${context.repo.repo}/tree/${context.payload.pull_request.head.ref}/${sourceFile}) | ${formatBytes(oldSize)} | ${formatBytes(newSize)} | ${change} |`);
+ table.push(
+ `| [\`${filename}\`](https://github.com/${context.repo.owner}/${context.repo.repo}/tree/${context.payload.pull_request.head.ref}/${sourceFile}) | ${formatBytes(oldSize)} | ${formatBytes(newSize)} | ${change} |`,
+ );
}
const { data: comments } = await github.rest.issues.listComments({
...context.repo,
- issue_number: PR_NUM
- })
- const comment = comments.find(comment => comment.user.login === 'github-actions[bot]' && comment.body.includes('Bundle Size Check'));
+ issue_number: PR_NUM,
+ });
+ const comment = comments.find(
+ (comment) =>
+ comment.user.login === 'github-actions[bot]' && comment.body.includes('Bundle Size Check'),
+ );
const method = comment ? 'updateComment' : 'createComment';
const payload = comment ? { comment_id: comment.id } : { issue_number: PR_NUM };
await github.rest.issues[method]({
@@ -60,9 +67,11 @@ ${table.join('\n')}`,
}
async function bundle(files) {
-
const { metafile } = await build({
- entryPoints: [...files.map(({ filename }) => filename), ...files.map(({ filename }) => `main/${filename}`).filter(f => existsSync(f))],
+ entryPoints: [
+ ...files.map(({ filename }) => filename),
+ ...files.map(({ filename }) => `main/${filename}`).filter((f) => existsSync(f)),
+ ],
bundle: true,
minify: true,
sourcemap: false,
@@ -70,17 +79,24 @@ async function bundle(files) {
outdir: 'out',
external: ['astro:*', 'aria-query', 'axobject-query'],
metafile: true,
- })
+ });
return Object.entries(metafile.outputs).reduce((acc, [filename, info]) => {
filename = filename.slice('out/'.length);
if (filename.startsWith('main/')) {
filename = filename.slice('main/'.length).replace(CLIENT_RUNTIME_PATH, '').replace('.js', '');
const oldSize = info.bytes;
- return Object.assign(acc, { [filename]: Object.assign(acc[filename] ?? { oldSize: 0, newSize: 0 }, { oldSize }) });
+ return Object.assign(acc, {
+ [filename]: Object.assign(acc[filename] ?? { oldSize: 0, newSize: 0 }, { oldSize }),
+ });
}
filename = filename.replace(CLIENT_RUNTIME_PATH, '').replace('.js', '');
const newSize = info.bytes;
- return Object.assign(acc, { [filename]: Object.assign(acc[filename] ?? { oldSize: 0, newSize: 0 }, { newSize, sourceFile: Object.keys(info.inputs).find(src => src.endsWith('.ts')) }) });
+ return Object.assign(acc, {
+ [filename]: Object.assign(acc[filename] ?? { oldSize: 0, newSize: 0 }, {
+ newSize,
+ sourceFile: Object.keys(info.inputs).find((src) => src.endsWith('.ts')),
+ }),
+ });
}, {});
}