perf: merge 4 integration test binaries into 1#8610
Merged
Conversation
Consolidates integration_esbuild, integration_rolldown, integration_rollup, and integration_test262 into a single `integration` test binary. This eliminates 3 redundant ~80MB link steps on every incremental build. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
✅ Deploy Preview for rolldown-rs canceled.
|
Contributor
There was a problem hiding this comment.
Pull request overview
Consolidates multiple Rust integration test binaries for rolldown into a single integration test target to reduce redundant link steps and keep test filtering working.
Changes:
- Introduces a unified integration test crate entrypoint under
crates/rolldown/tests/integration/main.rsthat pulls in esbuild/rollup/rolldown/test262 suites as modules. - Updates test262-related docs, in-code command hints, and an insta snapshot
source:path to reflect the new test layout. - Moves/adjusts integration test module files under
crates/rolldown/tests/integration/.
Reviewed changes
Copilot reviewed 6 out of 7 changed files in this pull request and generated 2 comments.
Show a summary per file
| File | Description |
|---|---|
| docs/development-guide/testing.md | Updates the documented test262 command to use the unified integration test binary name. |
| crates/rolldown/tests/snapshots/test262__test262_module_code.snap | Updates snapshot metadata to point at the new test262 source file location. |
| crates/rolldown/tests/integration/test262.rs | Updates the example command comment to reference the unified integration test binary. |
| crates/rolldown/tests/integration/rollup.rs | Adds rollup fixture-based tests as a module for the unified integration test crate. |
| crates/rolldown/tests/integration/rolldown_fixture.rs | Adjusts module wiring now that tests are intended to be included from a shared entrypoint. |
| crates/rolldown/tests/integration/main.rs | Adds the new unified integration test entrypoint that aggregates all suites. |
| crates/rolldown/tests/integration/esbuild.rs | Removes per-module lint allowance in favor of the new shared entrypoint. |
The insta snapshot name includes the binary name prefix, so it should be integration__test262__. Also canonicalize test folder paths to resolve `..` segments from #[path] attributes, fixing HMR watch file assertions. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Renames the `mod rolldown` to `mod rolldown_tests` to avoid shadowing the external `rolldown` crate name in the integration test binary. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Contributor
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 7 out of 8 changed files in this pull request and generated 3 comments.
Comments suppressed due to low confidence (1)
crates/rolldown/tests/integration/test262.rs:563
- This example command will run all tests in the consolidated
integrationbinary. Consider adding a test-name filter (e.g.test262_module_codeortest262) so the example actually only runs the test262 suite in addition toTEST262_FILTER.
Contributor
Benchmarks Rust |
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Signed-off-by: Boshen <boshenc@gmail.com>
Contributor
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 7 out of 8 changed files in this pull request and generated 1 comment.
Comments suppressed due to low confidence (1)
crates/rolldown/tests/integration/test262.rs:563
- The example command in this comment no longer targets just this test.
cargo test --test integration -- --no-capturewill run all integration suites (esbuild/rollup/rolldown/test262), which is misleading when explainingTEST262_FILTER. Update the example to include a test filter (e.g.... --test integration test262_module_code ...) so it runs only this test function.
Insta looks for snapshots relative to the source file, so moving test262.rs into tests/integration/ means the snapshot must be in tests/integration/snapshots/. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
hyf0
approved these changes
Mar 10, 2026
Closed
This was referenced Mar 11, 2026
Closed
Merged
shulaoda
added a commit
that referenced
this pull request
Mar 11, 2026
## [1.0.0-rc.9] - 2026-03-11 ### 💥 BREAKING CHANGES - rename exported BindingMagicString to RolldownMagicString (#8626) by @IWANABETHATGUY ### 🚀 Features - rolldown: add isRolldownMagicString property for reliable native detection (#8614) by @IWANABETHATGUY - cli: align object type with rollup (#8598) by @h-a-n-a ### 🐛 Bug Fixes - rust: circular inter-chunk imports when external dynamic imports exist (#8596) by @Dunqing - update minify default docs from `false` to `'dce-only'` (#8620) by @shulaoda ### 💼 Other - fix early exit in script build-node (#8617) by @h-a-n-a ### 🚜 Refactor - binding: remove outdated TODO comment in MagicString to_string() (#8613) by @IWANABETHATGUY ### 📚 Documentation - add viteplus alpha announcement banner (#8615) by @mdong1909 - update VitePress theme to 4.8.2 for narrow-screen layout regression (#8612) by @Copilot ### ⚡ Performance - merge 4 integration test binaries into 1 (#8610) by @Boshen ### 🧪 Testing - replace heavy filename_with_hash test with targeted hash fixtures (#8597) by @Boshen ### ⚙️ Miscellaneous Tasks - ci: remove redundant `--no-run` build step from cargo-test (#8623) by @Boshen - rust: use `cargo-shear` to toggle Cargo.toml [lib] test = bool (#8622) by @Boshen - deps: update test262 submodule for tests (#8611) by @sapphi-red - skip macOS CI jobs on pull requests (#8608) by @Copilot - add rust cache to repo validation job (#8607) by @Boshen - skip running empty bin test targets (#8605) by @Boshen - skip building examples in cargo-test to reduce build time (#8603) by @Boshen - switch plain workflow checkouts to taiki-e action (#8601) by @Boshen - skip Windows CI jobs on PRs (#8600) by @Boshen - remove unused asset module (#8594) by @shulaoda ###◀️ Revert - "docs: add viteplus alpha announcement banner (#8615)" (#8616) by @shulaoda Co-authored-by: shulaoda <165626830+shulaoda@users.noreply.github.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
integration_esbuild,integration_rolldown,integration_rollup, andintegration_test262into a singleintegrationtest binary viatests/integration/main.rscargo test --test integration -- esbuild)Details
The
tests/rolldown/directory stays in place (it contains both Rust modules and fixture data with intentionally broken syntax). The integration binary references it via#[path = "../rolldown/mod.rs"] mod rolldown_tests;to avoid both moving thousands of fixture files and shadowing the externalrolldowncrate name.A
dunce::canonicalizecall was added toIntegrationTestBuilder::new()to resolve..path segments thatfile!()produces when modules are loaded via#[path]attributes — this fixes HMR watch file path matching.Measurements
Local incremental build (touch
lib.rs, rebuild tests)CI (ubuntu-latest)
CI savings are modest since the build step is cached. The main win is local incremental builds — 48% less CPU work and 215MB less disk per build cycle.
🤖 Generated with Claude Code