Commit Graph

10 Commits

Author SHA1 Message Date
Boshen d174661221 ci(benchmark): add CodSpeed memory measurement for pipeline benchmarks (#24559)
Adds CodSpeed's [Memory Instrument](https://codspeed.io/docs/instruments/memory) for the `pipeline` benchmarks: peak memory, total allocated bytes, allocation count, and a memory timeline per benchmark case, tracked with baseline comparison on PRs alongside the existing CPU simulation runs.

## Changes

- `generate-benchmark-matrix.js`: entry construction is factored into a `buildMatrixEntries()` helper used by all five construction sites. All entries now carry an explicit `mode`: `simulation` for every component, `simulation,memory` for `pipeline` — so the pipeline job runs both instruments and inherits the existing changed-file affection logic.
- `benchmark.yml`: the action's `mode:` input comes from the matrix. Job names and count are unchanged.

No build-step changes needed: `cargo-codspeed` maps memory mode to the same `analysis` build the workflow already stages (`MeasurementMode::Memory` → `BuildMode::Analysis`), and the pinned action v4.18.5 supports memory mode (added in v4.17.0) including comma-separated multi-mode runs.

Notes:

- The first memory numbers on this PR will have no baseline; comparisons start after the post-merge main run.
- Memory metrics reflect the bench crate's deliberate `NeverGrowInPlaceAllocator` worst-case realloc behavior — consistent run-to-run, which is what matters for regression tracking.

AI Disclosure: This was generated with Claude Code, Fable 5. It has been tested and reviewed by me for correctness.
2026-07-15 16:12:52 +00:00
Boshen b846ab2d9a feat(react_compiler): integrate the Rust port of the React Compiler (#22942)
Closes https://github.com/oxc-project/oxc/issues/10048

Integrates the Rust port of the React Compiler ([facebook/react#36173](https://github.com/facebook/react/pull/36173)) into oxc.

## Notes (resolved)

- Published crates can't reference Git URLs, so using this from Rolldown needs the React Compiler crates on crates.io. ✅ Published as a fork at https://crates.io/crates/forked_react_compiler; this PR depends on those `forked_react_compiler*` crates so people can get earlier access.
- The React Compiler crates had no license field. ✅ The published fork carries `license = "MIT"` (per the React repo's MIT license), so Cargo Deny and Security Analysis pass.

## Benchmark

**Wall-clock overhead vs plain transform** (release `transformSync`, same `jsx: automatic`, toggling only `reactCompiler`):

| fixture | without | with | overhead |
| --- | --- | --- | --- |
| RadixUIAdoptionSection.jsx (2.5 KiB) | 0.03 ms | 1.81 ms | +1.8 ms |
| excalidraw `App.tsx` (406 KiB) | 4.09 ms | 14.49 ms | +10.4 ms (3.5×) |

So roughly a fixed ~1.8 ms floor per file plus a per-size cost — about **3.5× the transform time** on a large real-world component.

## Binary size

Linking the React Compiler pulls the whole compiler pipeline (HIR, lowering, inference, SSA, optimization, reactive scopes, validation) plus the oxc⇄Babel AST conversion into the binding. Release build of the napi transform addon (`transform.darwin-arm64.node`, `--release`, stripped), darwin-arm64:

| build | size |
| --- | --- |
| baseline (`main`) | 3.51 MiB |
| with React Compiler | 8.66 MiB |
| **delta** | **+5.14 MiB (+146%, 2.46×)** |
2026-06-08 13:32:56 +00:00
Boshen 29f9fb3dae ci: more CI low-hanging fruit optimizations (#20560) 2026-03-20 22:46:28 +08:00
Boshen dcc4be8259 feat(benchmark): add pipeline benchmark for full compilation flow (#18484) 2026-01-24 22:13:14 +08:00
Boshen 523a30a016 style(all): apply oxfmt default options (#16091)
Embrace the defaults!

---------

Co-authored-by: Yuji Sugiura <y.sugiura.0316@gmail.com>
2025-11-25 15:56:24 +09:00
overlookmotel 5877752586 ci(lint): enable no-console rule (#16053)
Enable `no-console` rule in our linting setup. Add `oxlint-disable` comments where we do want to log (in scripts).
2025-11-24 12:06:00 +00:00
leaysgur a8e5181ab7 chore(infra): dogfooding oxfmt (#14979)
Fixes #14803

- Added `oxfmt` and `oxfmtrc.jsonc`
- Remove `dprint` plugin and useless ignore paths
- Apply `dprint` again
- Apply `oxfmt`
2025-10-28 01:16:46 +00:00
Boshen 632652d18f refactor(ci): use cargo tree for conformance job detection (#14269)
## Summary

- Replace `dorny/paths-filter` with `cargo tree`-based detection for more accurate dependency tracking in the conformance CI job
- Extract common file detection and utility functions into reusable modules
- Eliminate code duplication across CI scripts

## Changes

### New Files
- **`.github/scripts/get-changed-files.js`** - Reusable module for detecting changed files from GitHub events (PR/push)
- **`.github/scripts/check-conformance-changes.js`** - Conformance detection using `cargo tree -p oxc_coverage -p oxc_transform_conformance -p oxc_prettier_conformance`
- **`.github/scripts/utils.js`** - Shared utilities:
  - `exec()` - Shell command execution with error handling
  - `getCrateDependencies()` - Generic cargo tree wrapper
  - `checkFilesAffectCrates()` - File-to-crate impact checking

### Modified Files
- **`.github/scripts/generate-benchmark-matrix.js`** - Refactored to use shared modules
- **`.github/workflows/ci.yml`** - Conformance job now uses `check-conformance-changes.js` instead of `dorny/paths-filter`

## Benefits

- **More accurate**: Uses actual crate dependencies from `cargo tree` instead of static path patterns
- **Maintainable**: Shared utilities eliminate code duplication
- **Extensible**: Easy to add new scripts that need similar functionality
- **Consistent**: Same file detection logic across all CI scripts

## Test Plan

- [x] Verify CI workflow syntax is valid
- [ ] Monitor first PR run to ensure conformance detection works correctly
- [ ] Check that conformance is skipped when appropriate (e.g., linter-only changes)

🤖 Generated with [Claude Code](https://claude.com/claude-code)
2025-09-30 17:01:40 +00:00
Boshen 2c3d144b12 refactor(benchmark): consolidate features into compiler and linter (#14108)
closes https://github.com/oxc-project/oxc/issues/14007

- Replace 8 individual benchmark features with 2: compiler and linter
- Update matrix script to return objects with component and feature
fields
- Simplify workflow to use cargo codspeed build/run with feature mapping

🤖 Generated with [Claude Code](https://claude.ai/code)

This balances build speed and cache size, it was saving 7 separate
caches of 280MB each component + 400MB for the linter, it's now
200-300MB for the "compiler".

Co-authored-by: Claude <noreply@anthropic.com>
2025-09-25 17:10:52 +08:00
Boshen 07a0c86821 chore(ci): skip benchmarks for unaffected components (#14088) 2025-09-25 13:56:21 +08:00