Skip to content

Commit 5c13ff3

Browse files
committed
size presubmit check
1 parent ac25570 commit 5c13ff3

File tree

4 files changed

+99
-1
lines changed

4 files changed

+99
-1
lines changed

.github/workflows/test-all.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,8 @@ jobs:
4040
github-token: ${{ secrets.GITHUB_TOKEN }}
4141
path-to-lcov: ./lcov-all.info
4242
continue-on-error: true
43+
- name: Generate Size Report
44+
run: yarn size-report
4345
deploy:
4446
name: Canary Deploy
4547
runs-on: ubuntu-latest

.github/workflows/test-changed.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,3 +28,5 @@ jobs:
2828
run: yarn build
2929
- name: Run tests on changed packages
3030
run: xvfb-run yarn test:changed
31+
- name: Generate Size Report
32+
run: yarn size-report

package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,8 @@
3737
"docgen:node": "node scripts/docgen/generate-docs.js --api node",
3838
"docgen": "yarn docgen:js; yarn docgen:node",
3939
"prettier": "prettier --config .prettierrc --write '**/*.{ts,js}'",
40-
"lint": "lerna run --scope @firebase/* --scope rxfire lint"
40+
"lint": "lerna run --scope @firebase/* --scope rxfire lint",
41+
"size-report": "node scripts/report_binary_size.js"
4142
},
4243
"repository": {
4344
"type": "git",

scripts/report_binary_size.js

Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
const { resolve } = require('path');
2+
const fs = require('fs');
3+
const { execSync } = require('child_process');
4+
5+
const repoRoot = resolve(__dirname, '..');
6+
7+
const commitHash = process.env.GITHUB_SHA || execSync('git rev-parse HEAD').toString();
8+
const runId = process.env.GITHUB_RUN_ID || 'local-run-id';
9+
10+
// CDN scripts
11+
function generateReportForCDNScripts() {
12+
const reports = [];
13+
const firebaseRoot = resolve(__dirname, '../packages/firebase');
14+
const pkgJson = require(`${firebaseRoot}/package.json`);
15+
16+
const special_files = [
17+
'firebase-performance-standalone.es2017.js',
18+
'firebase-performance-standalone.js',
19+
'firebase.js'
20+
];
21+
22+
const files = [
23+
...special_files.map(file => `${firebaseRoot}/${file}`),
24+
...pkgJson.components.map(component => `${firebaseRoot}/firebase-${component}.js`)
25+
];
26+
27+
for (const file of files) {
28+
const { size } = fs.statSync(file);
29+
const fileName = file.split('/').slice(-1)[0]
30+
reports.push(makeReportObject('firebase', fileName, size))
31+
}
32+
33+
return reports;
34+
}
35+
36+
// @firebase/*
37+
function generateReportForNPMPacakges() {
38+
const reports = [];
39+
const fields = [
40+
'main',
41+
'module',
42+
'esm2017',
43+
'browser',
44+
'react-native',
45+
'lite',
46+
'lite-esm2017'
47+
];
48+
49+
const packageInfo = JSON.parse(
50+
execSync('npx lerna ls --json --scope @firebase/*', { cwd: repoRoot }).toString()
51+
);
52+
53+
for (const package of packageInfo) {
54+
const packageJson = require(`${package.location}/package.json`);
55+
56+
for (const field of fields) {
57+
if (packageJson[field]) {
58+
const filePath = `${package.location}/${packageJson[field]}`;
59+
const { size } = fs.statSync(filePath);
60+
reports.push(makeReportObject(packageJson.name, field, size));
61+
}
62+
}
63+
}
64+
65+
return reports;
66+
}
67+
68+
function makeReportObject(sdk, type, value) {
69+
return {
70+
sdk,
71+
type,
72+
value
73+
};
74+
}
75+
76+
function generateSizeReport() {
77+
const reports = [
78+
...generateReportForCDNScripts(),
79+
...generateReportForNPMPacakges()
80+
];
81+
82+
for (const r of reports) {
83+
console.log(r.sdk, r.type, r.value);
84+
}
85+
86+
return {
87+
log: "https://www.goog.com",
88+
metric: "BinarySize",
89+
results: reports
90+
};
91+
}
92+
93+
generateSizeReport();

0 commit comments

Comments
 (0)