Skip to content

Commit faec6ad

Browse files
Merge pull request #6109 from bryceosterhaus/genSize
chore: update CI stats to use esbuild and remove common externals
2 parents 399f058 + c5a3de3 commit faec6ad

File tree

8 files changed

+385
-1585
lines changed

8 files changed

+385
-1585
lines changed

.github/workflows/main.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ jobs:
4747
- uses: actions/checkout@v2
4848
- uses: actions/setup-node@v2
4949
with:
50-
node-version: '18'
50+
node-version: '20.x'
5151
- name: Fetch and Diff
5252
id: diff
5353
run: |
@@ -79,7 +79,7 @@ jobs:
7979
clean: false
8080
- uses: actions/setup-node@v2
8181
with:
82-
node-version: '18'
82+
node-version: '20.x'
8383
- name: Generate Bundle Size Table
8484
if: ${{ steps.diff.outputs.packages }}
8585
run: |

.gitignore

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,7 @@ node_modules
77
package-lock.json
88
.env
99
.gradle
10-
.parcel-cache
11-
.parcel-ci-builds
12-
.parcel-ci-build.json
10+
.esbuild-ci-builds
11+
.esbuild-ci-build.json
1312
# Local Netlify folder
1413
.netlify

package.json

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,6 @@
11
{
22
"private": true,
33
"repository": "https://github.com/liferay/clay",
4-
"engines": {
5-
"node": "18.x"
6-
},
74
"size-limit": [
85
{
96
"path": "all.js",
@@ -25,8 +22,8 @@
2522
"format:all": "yarn lint:fix && yarn format",
2623
"format:changed": "git ls-files -mz \"*.js\" \"**/*.js\" \"**/*.ts\" \"**/*.tsx\" \"*.md\" \"**/*.md\" \"**/*.mdx\" \"*.json\" \"**/*.json\" \"**/*.scss\" | xargs -0 prettier --write --",
2724
"format:check": "prettier --list-different -- \"**/*.{js,ts,tsx,md,mdx,json,scss}\"",
28-
"genBuildSize:compare": "NODE_ENV=production node scripts/check-size/index.js --compare",
29-
"genBuildSize": "NODE_ENV=production node scripts/check-size/index.js",
25+
"genBuildSize:compare": "NODE_ENV=production node scripts/check-size/index.mjs --compare",
26+
"genBuildSize": "NODE_ENV=production node scripts/check-size/index.mjs",
3027
"genGlobalChangeLog": "node scripts/generate-global-changelog.js && prettier --write -- \"CHANGELOG.md\"",
3128
"lerna": "lerna bootstrap -- --no-optional --no-package-lock",
3229
"lerna:version": "lerna version --conventional-commits",
@@ -86,14 +83,14 @@
8683
"coveralls": "^3.1.1",
8784
"cross-env": "^7.0.3",
8885
"css-loader": "^2.1.1",
86+
"esbuild": "^0.25.6",
8987
"eslint": "^7.1.0",
9088
"eslint-plugin-react-compiler": "^19.0.0-beta-6fc168f-20241025",
9189
"fork-ts-checker-webpack-plugin": "^4.0.3",
9290
"jest": "27.5.1",
9391
"jest-fetch-mock": "^3.0.3",
9492
"lerna": "6.6.2",
9593
"ncp": "^2.0.0",
96-
"parcel-bundler": "^1.12.4",
9794
"prettier": "^2.4.1",
9895
"raf": "^3.4.1",
9996
"react": "^16.12.0",

scripts/check-size/convertBytes.js renamed to scripts/check-size/convertBytes.mjs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
const SIZES = ['B', 'KB', 'MB', 'GB', 'TB'];
77

8-
const convertBytes = function (bytes) {
8+
export const convertBytes = function (bytes) {
99
if (bytes === 0) {
1010
return '--';
1111
}
@@ -20,5 +20,3 @@ const convertBytes = function (bytes) {
2020

2121
return `${(bytes / Math.pow(1024, i)).toFixed(1)} ${SIZES[i]}`;
2222
};
23-
24-
module.exports = convertBytes;

scripts/check-size/generateTable.js renamed to scripts/check-size/generateTable.mjs

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,14 @@
1+
/**
2+
* SPDX-FileCopyrightText: © 2025 Liferay, Inc. <https://liferay.com>
3+
* SPDX-License-Identifier: BSD-3-Clause
4+
*/
5+
16
/**
27
* SPDX-FileCopyrightText: © 2020 Liferay, Inc. <https://liferay.com>
38
* SPDX-License-Identifier: BSD-3-Clause
49
*/
510

6-
const convertBytes = require('./convertBytes');
11+
import {convertBytes} from './convertBytes.mjs';
712

813
const sortDiffSize = (a, b) => {
914
if (a.diffSize === b.diffSize) {
@@ -62,7 +67,7 @@ const getStatsArray = (prevStats, newStats) => {
6267
];
6368
};
6469

65-
function generateTable(prevStats, newStats) {
70+
export function generateTable(prevStats, newStats) {
6671
const [statsArray, totalDiffPercent] = getStatsArray(prevStats, newStats);
6772

6873
const table = statsArray.sort(sortDiffSize).reduce((acc, item) => {
@@ -81,5 +86,3 @@ function generateTable(prevStats, newStats) {
8186
totalDiffPercent,
8287
];
8388
}
84-
85-
module.exports = generateTable;

scripts/check-size/index.js

Lines changed: 0 additions & 102 deletions
This file was deleted.

scripts/check-size/index.mjs

Lines changed: 120 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,120 @@
1+
/**
2+
* SPDX-FileCopyrightText: © 2020 Liferay, Inc. <https://liferay.com>
3+
* SPDX-License-Identifier: BSD-3-Clause
4+
*/
5+
6+
import esbuild from 'esbuild';
7+
import fs from 'fs';
8+
import os from 'os';
9+
import path from 'path';
10+
import zlib from 'zlib';
11+
12+
import {generateTable} from './generateTable.mjs';
13+
14+
const CLI_ARGS = process.argv.slice(2);
15+
16+
const TOTAL_THRESHHOLD_PERCENT = 5;
17+
18+
const WORKSPACE_PACKAGES_WHITELIST = [
19+
'browserslist-config-clay',
20+
'demos',
21+
'generator-clay-component',
22+
'clay-css',
23+
'tsconfig.json',
24+
];
25+
26+
const TEMP_DIR = os.tmpdir();
27+
28+
const getGzipSize = (relPath) =>
29+
zlib.gzipSync(fs.readFileSync(path.join(import.meta.dirname, relPath)))
30+
.length;
31+
32+
async function main() {
33+
const packages = fs.readdirSync('packages', {withFileTypes: true});
34+
35+
const entryFiles = packages
36+
.filter(({name}) => !WORKSPACE_PACKAGES_WHITELIST.includes(name))
37+
.map(({name}) => {
38+
return path.join(
39+
import.meta.dirname,
40+
'../../packages/',
41+
name,
42+
'lib/index.js'
43+
);
44+
});
45+
46+
const bundles = await esbuild.build({
47+
bundle: true,
48+
entryPoints: entryFiles,
49+
external: [
50+
'@clayui/*',
51+
'classnames',
52+
'domain',
53+
'prop-types',
54+
'react-dnd-html5-backend',
55+
'react-dnd',
56+
'react-dom',
57+
'react-transition-group',
58+
'react',
59+
'warning',
60+
],
61+
format: 'esm',
62+
metafile: true,
63+
minify: true,
64+
outdir: '.esbuild-ci-builds',
65+
});
66+
67+
const packageStats = Object.keys(bundles.metafile.outputs).reduce(
68+
(acc, key) => {
69+
const item = bundles.metafile.outputs[key];
70+
71+
const name = item.entryPoint
72+
.replace('packages/', '')
73+
.replace('/lib/index.js', '');
74+
75+
acc[name] = getGzipSize(
76+
`../../.esbuild-ci-builds/${name}/lib/index.js`
77+
);
78+
79+
return acc;
80+
},
81+
{
82+
'@clayui/css:atlas': getGzipSize(
83+
'../../packages/clay-css/lib/css/atlas.css'
84+
),
85+
'@clayui/css:base': getGzipSize(
86+
'../../packages/clay-css/lib/css/base.css'
87+
),
88+
}
89+
);
90+
91+
if (CLI_ARGS.includes('--compare')) {
92+
const prevStats = fs.readFileSync(
93+
path.join(TEMP_DIR, '/.esbuild-ci-build.json'),
94+
'utf8'
95+
);
96+
97+
const [table, totalDiff] = generateTable(
98+
JSON.parse(prevStats),
99+
packageStats
100+
);
101+
102+
// eslint-disable-next-line
103+
console.log(table);
104+
105+
if (Math.abs(totalDiff) > TOTAL_THRESHHOLD_PERCENT) {
106+
console.warn(
107+
`WARNING: Total size change was greater than +/- ${TOTAL_THRESHHOLD_PERCENT}%`
108+
);
109+
110+
process.exit(1);
111+
}
112+
} else {
113+
fs.writeFileSync(
114+
path.join(TEMP_DIR, '/.esbuild-ci-build.json'),
115+
JSON.stringify(packageStats)
116+
);
117+
}
118+
}
119+
120+
main();

0 commit comments

Comments
 (0)