[No QA] Add eslint-report seatbelt dashboard script#89144
Conversation
- Download Chart.js UMD beside the HTML so local file URLs load the chart. - Fix undefined toggle id (eslint-seatbelt-ds-*). - Run report generation async; fail fast if Chart download fails. - Default to opening the report in the browser; use --no-open or CI to skip. Made-with: Cursor
Replace manual argv parsing with scripts/utils/CLI.ts. Use Git.show for seatbelt snapshots; keep execSync for git log/rev-parse. Chdir to App root during git reads so Git helpers resolve the correct repo. Made-with: Cursor
Align REPORT_THEME with theme/themes/dark.ts tokens; Expensify Neue/Mono stacks. Embed ChartUiPayload for Chart.js scales, legend, tooltips, and rule palettes. Add dark color-scheme meta, footer link styling, and accent checkboxes. Made-with: Cursor
Made-with: Cursor
Modern TS/JS style, inline SVG favicon, dedupe CLI parsers and chart helpers, simplify embedded Chart/table logic without behavior change. Made-with: Cursor
Rename abbreviated bindings (chartDataset, visibilityCheckbox, chartUi, chartCanvas, etc.) in generated HTML script only. Made-with: Cursor
Extract GitUtils.getHeadShort() for rev-parse; update HTML intro and summary labels to describe eslint.seatbelt.tsv as baseline source. Made-with: Cursor
|
npm has a |
Remove Chart.js/file:// and table-sort blurbs from generated HTML; trim unused theme keys and footer CSS. Made-with: Cursor
📲 Install BuildsAndroid
|
eslint-report uses Git.getHeadShort(); remove redundant scripts/utils/GitUtils.ts. Made-with: Cursor
Add Menlo and nums; ignore .gitignore in cspell so path-only entries are not spellchecked when the file appears in PR diffs. Made-with: Cursor
|
@chiragsalian Please copy/paste the Reviewer Checklist from here into a new comment on this PR and complete it. If you have the K2 extension, you can simply click: [this button] |
|
I'll admit this is largely vibe-coded, but as it's just a dev tool to help us keep track of different lint errors across the project, I didn't treat it with too much scrutiny |
Made-with: Cursor
chiragsalian
left a comment
There was a problem hiding this comment.
left a comment, rest LGTM
Reviewer Checklist
Screenshots/VideosAndroid: HybridAppAndroid: mWeb ChromeiOS: HybridAppiOS: mWeb SafariMacOS: Chrome / Safari |
|
@mountiny feel free to leave any suggestions if you'd like and I can create a follow-up PR |
|
✋ This PR was not deployed to staging yet because QA is ongoing. It will be automatically deployed to staging after the next production release. |
|
🚧 @roryabraham has triggered a test Expensify/App build. You can view the workflow run here. |
|
🧪🧪 Use the links below to test this adhoc build on Android, iOS, and Web. Happy testing! 🧪🧪
|
| # Generated eslint-report HTML (npm run eslint-report) | ||
| reports/ |
There was a problem hiding this comment.
| # Generated eslint-report HTML (npm run eslint-report) | |
| reports/ | |
| # Generated eslint-report HTML (npm run eslint-report) | |
| /reports/ |
@roryabraham This is ignoring all reports folder in the codebase. Can you please fix this.
There was a problem hiding this comment.
good catch, sorry about that! @marcochavezf fixed it for me
|
🚀 Deployed to staging by https://github.com/roryabraham in version: 9.3.65-0 🚀
Bundle Size Analysis (Sentry): |
|
🚀 Deployed to production by https://github.com/mountiny in version: 9.3.65-6 🚀
|
Explanation of Change
Adds an
eslint-reportdeveloper script (npm run eslint-report) that parsesconfig/eslint/eslint.seatbelt.tsvand writes an HTML dashboard (reports/eslint-report.htmlby default) with:package.json)scripts/utils/CLI.ts(--output,--git-limit,--top-rules,--no-open)This does not change the mobile app, web app bundles, or staging/production behavior — tooling only.
Fixed Issues
$
PROPOSAL:
Internal tooling only — no linked App issue.
Tests
npm run eslint-report.reports/eslint-report.htmlis created.Offline tests
None.
QA Steps
None.
PR Author Checklist
### Fixed Issuessection aboveTestssectionOffline stepssectionQA stepssectioncanBeMissingparam foruseOnyxtoggleReportand notonIconClick)src/languages/*files and using the translation methodSTYLE.md) were followedAvatar, I verified the components usingAvatarare working as expected)StyleUtils.getBackgroundAndBorderStyle(theme.componentBG))npm run compress-svg)Avataris modified, I verified thatAvataris working as expected in all cases)Designlabel and/or tagged@Expensify/designso the design team can review the changes.ScrollViewcomponent to make it scrollable when more elements are added to the page.mainbranch was merged into this PR after a review, I tested again and verified the outcome was still expected according to theTeststeps.Screenshots/Videos