Skip to content

Conversation

jieyouxu
Copy link
Member

@jieyouxu jieyouxu commented Sep 5, 2025

Summary

Split tests/run-make into two test suites, to make it faster and more convenient for contributors to run run-make tests that do not need in-tree cargo.

New test suites Explanation
tests/run-make The "fast path" test suite intended for run-make tests that do not need in-tree cargo. These tests may not use cargo.
tests/run-make-cargo The "slow path" test suite that requires checking out cargo submodule and building in-tree cargo, and thus will have access to in-tree cargo. In practice, these constitute a very small portion of the original run-make tests.

This PR carries out MCP 847: Split run-make test suite into slower-building test suite with suitably-staged cargo and faster-building test suite without cargo.
Fixes #135573 (for the tests that do not need in-tree cargo).
Fixes #134109.

Remarks


try-job: aarch64-msvc-1
try-job: test-various
try-job: x86_64-gnu-debug
try-job: aarch64-gnu-debug
try-job: aarch64-apple
try-job: dist-various-1

@rustbot rustbot added A-CI Area: Our Github Actions CI A-compiletest Area: The compiletest test runner A-meta Area: Issues & PRs about the rust-lang/rust repository itself A-run-make Area: port run-make Makefiles to rmake.rs A-rustc-dev-guide Area: rustc-dev-guide A-testsuite Area: The testsuite used to check the correctness of rustc A-tidy Area: The tidy tool S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. T-bootstrap Relevant to the bootstrap subteam: Rust's build system (x.py and src/bootstrap) T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. T-infra Relevant to the infrastructure team, which will review and decide on the PR/issue. labels Sep 5, 2025
@jieyouxu

This comment was marked as resolved.

rust-bors bot added a commit that referenced this pull request Sep 5, 2025
[EXPERIMENTAL] `run-make` fission

try-job: aarch64-msvc-1
try-job: test-various
try-job: x86_64-debug
try-job: aarch64-gnu-debug
try-job: aarch64-apple
try-job: dist-various-1
@rust-bors

This comment has been minimized.

@jieyouxu

This comment was marked as off-topic.

@rust-bors

This comment was marked as off-topic.

@jieyouxu

This comment was marked as resolved.

@rust-bors

This comment has been minimized.

rust-bors bot added a commit that referenced this pull request Sep 5, 2025
[EXPERIMENTAL] `run-make` fission

try-job: aarch64-msvc-1
try-job: test-various
try-job: x86_64-gnu-debug
try-job: aarch64-gnu-debug
try-job: aarch64-apple
try-job: dist-various-1
@rust-log-analyzer

This comment has been minimized.

@rust-log-analyzer

This comment has been minimized.

@rust-bors

This comment was marked as resolved.

…uites

So that contributors who don't need to run `run-make` tests that require
in-tree `cargo` can run the non-cargo `run-make` tests without having to
wait for `cargo` (which would require rebuilding as the build cache
would be invalidated by compiler modifications without some kind of
`--keep-stage-cargo`).
- `run-make` test suite will now no longer receive a `cargo`.
    - NOTE: the user could technically still write
      `Command::new("cargo")` which might find *a* cargo from the
      environment, but that is not a supported case.
- `run-make-cargo` will receive a built in-tree `cargo`.
@jieyouxu jieyouxu force-pushed the run-make-fission branch 2 times, most recently from 223d926 to 10771b2 Compare September 5, 2025 13:25
@jieyouxu
Copy link
Member Author

jieyouxu commented Sep 5, 2025

@bors try

@rust-bors

This comment has been minimized.

rust-bors bot added a commit that referenced this pull request Sep 5, 2025
[EXPERIMENTAL] `run-make` fission

try-job: aarch64-msvc-1
try-job: test-various
try-job: x86_64-gnu-debug
try-job: aarch64-gnu-debug
try-job: aarch64-apple
try-job: dist-various-1
@rust-bors
Copy link

rust-bors bot commented Sep 5, 2025

☀️ Try build successful (CI)
Build commit: b43b192 (b43b192498ca9cfa3943ee77e9fa89da4b69de72, parent: c559c4a741836c4ffa8e4f60cb9fe7e92af5298e)

@jieyouxu jieyouxu changed the title [EXPERIMENTAL] run-make fission Split run-make into two {run-make,run-make-cargo} test suites Sep 6, 2025
@@ -1083,27 +1083,36 @@ where

fn test_rustc(env: &Env, args: &TestArg) -> Result<(), String> {
test_rustc_inner(env, args, |_| Ok(false), false, "run-make")?;
test_rustc_inner(env, args, |_| Ok(false), false, "run-make-cargo")?;
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

cc @antoyo @GuillaumeGomez: could you check if these changes look right?

let run_make_cargo_result = test_rustc_inner(
env,
args,
retain_files_callback("tests/failing-run-make-tests.txt", "run-make-cargo"),
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Remark: I thought about splitting out failing-run-make-cargo-tests.txt but that seem like a lot of ceremony, and the ones that were moved into run-make-cargo weren't previously in the list anyway.

@@ -1773,7 +1779,7 @@ NOTE: if you're sure you want to do this, please open an issue as to why. In the
target,
});
}
if suite == "run-make" {
if mode == "run-make" {
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Remark: I almost missed this until I noticed that the snapshot tests for ./x test run-make-cargo didn't have a step for building run-make-support, and I was like "huh, how strange".

test::RunMake,
test::RunMakeCargo,
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Remark: make comment above was outdated.

ENV WASM_WASIP_SCRIPT python3 /checkout/x.py --stage 2 test --host='' --target $WASM_WASIP_TARGET \
tests/run-make \
tests/run-make-cargo \
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Remark: these CI changes should not cause CI time to regress, because we should be doing approximately the same amount of work as before (i.e. still building in-tree cargo).

@jieyouxu
Copy link
Member Author

jieyouxu commented Sep 6, 2025

r? @Kobzol

@jieyouxu jieyouxu marked this pull request as ready for review September 6, 2025 05:42
@rustbot rustbot added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. and removed S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. labels Sep 6, 2025
@rustbot
Copy link
Collaborator

rustbot commented Sep 6, 2025

triagebot.toml has been modified, there may have been changes to the review queue.

cc @davidtwco, @wesleywiser

Some changes occurred in compiler/rustc_codegen_gcc

cc @antoyo, @GuillaumeGomez

Some changes occurred in compiler/rustc_codegen_cranelift

cc @bjorn3

The list of allowed third-party dependencies may have been modified! You must ensure that any new dependencies have compatible licenses before merging.

cc @davidtwco, @wesleywiser

The rustc-dev-guide subtree was changed. If this PR only touches the dev guide consider submitting a PR directly to rust-lang/rustc-dev-guide otherwise thank you for updating the dev guide with your changes.

cc @BoxyUwU, @jieyouxu, @Kobzol, @tshepang

@Kobzol
Copy link
Member

Kobzol commented Sep 6, 2025

Looks great, thank you!

@bors r+ rollup=never

@bors
Copy link
Collaborator

bors commented Sep 6, 2025

📌 Commit f755e64 has been approved by Kobzol

It is now in the queue for this repository.

@bors bors added S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Sep 6, 2025
@bors
Copy link
Collaborator

bors commented Sep 6, 2025

⌛ Testing commit f755e64 with merge 1ed3cd7...

@bors
Copy link
Collaborator

bors commented Sep 6, 2025

☀️ Test successful - checks-actions
Approved by: Kobzol
Pushing 1ed3cd7 to master...

@bors bors added the merged-by-bors This PR was explicitly merged by bors. label Sep 6, 2025
@bors bors merged commit 1ed3cd7 into rust-lang:master Sep 6, 2025
12 checks passed
@rustbot rustbot added this to the 1.91.0 milestone Sep 6, 2025
Copy link
Contributor

github-actions bot commented Sep 6, 2025

What is this? This is an experimental post-merge analysis report that shows differences in test outcomes between the merged PR and its parent PR.

Comparing bea625f (parent) -> 1ed3cd7 (this PR)

Test differences

Show 44 test diffs

Stage 0

  • core::builder::tests::snapshot::test_run_make_cargo_builds_cargo: [missing] -> pass (J8)
  • core::builder::tests::snapshot::test_run_make_no_cargo: [missing] -> pass (J8)

Stage 1

  • [run-make] tests/run-make-cargo/apple-slow-tls: [missing] -> ignore (only executed when the target vendor is Apple) (J0)
  • [run-make] tests/run-make-cargo/compiler-builtins: [missing] -> pass (J0)
  • [run-make] tests/run-make-cargo/rustc-crates-on-stable: [missing] -> pass (J0)
  • [run-make] tests/run-make-cargo/rustdoc-scrape-examples-paths: [missing] -> pass (J0)
  • [run-make] tests/run-make-cargo/thumb-none-cortex-m: [missing] -> ignore (only executed when the architecture is part of the Thumb family) (J0)
  • [run-make] tests/run-make-cargo/thumb-none-qemu: [missing] -> ignore (only executed when the architecture is part of the Thumb family) (J0)
  • [run-make] tests/run-make-cargo/uefi-qemu: [missing] -> ignore (only executed when the operating system is uefi) (J0)
  • [run-make] tests/run-make-cargo/x86_64-fortanix-unknown-sgx-lvi: [missing] -> ignore (only executed when the target is x86_64-fortanix-unknown-sgx) (J0)
  • [run-make] tests/run-make/apple-slow-tls: ignore (only executed when the target vendor is Apple) -> [missing] (J0)
  • [run-make] tests/run-make/compiler-builtins: pass -> [missing] (J0)
  • [run-make] tests/run-make/rustc-crates-on-stable: pass -> [missing] (J0)
  • [run-make] tests/run-make/rustdoc-scrape-examples-paths: pass -> [missing] (J0)
  • [run-make] tests/run-make/thumb-none-cortex-m: ignore (only executed when the architecture is part of the Thumb family) -> [missing] (J0)
  • [run-make] tests/run-make/thumb-none-qemu: ignore (only executed when the architecture is part of the Thumb family) -> [missing] (J0)
  • [run-make] tests/run-make/uefi-qemu: ignore (only executed when the operating system is uefi) -> [missing] (J0)
  • [run-make] tests/run-make/x86_64-fortanix-unknown-sgx-lvi: ignore (only executed when the target is x86_64-fortanix-unknown-sgx) -> [missing] (J0)

Stage 2

  • [run-make] tests/run-make-cargo/uefi-qemu: [missing] -> ignore (only executed when the operating system is uefi) (J1)
  • [run-make] tests/run-make/uefi-qemu: ignore (only executed when the operating system is uefi) -> [missing] (J1)
  • [run-make] tests/run-make-cargo/thumb-none-cortex-m: [missing] -> ignore (only executed when the architecture is part of the Thumb family) (J2)
  • [run-make] tests/run-make-cargo/thumb-none-qemu: [missing] -> ignore (only executed when the architecture is part of the Thumb family) (J2)
  • [run-make] tests/run-make/thumb-none-cortex-m: ignore (only executed when the architecture is part of the Thumb family) -> [missing] (J2)
  • [run-make] tests/run-make/thumb-none-qemu: ignore (only executed when the architecture is part of the Thumb family) -> [missing] (J2)
  • [run-make] tests/run-make-cargo/uefi-qemu: [missing] -> pass (J3)
  • [run-make] tests/run-make/uefi-qemu: pass -> [missing] (J3)
  • [run-make] tests/run-make-cargo/thumb-none-cortex-m: [missing] -> pass (J4)
  • [run-make] tests/run-make-cargo/thumb-none-qemu: [missing] -> pass (J4)
  • [run-make] tests/run-make/thumb-none-cortex-m: pass -> [missing] (J4)
  • [run-make] tests/run-make/thumb-none-qemu: pass -> [missing] (J4)
  • [run-make] tests/run-make-cargo/apple-slow-tls: [missing] -> ignore (only executed when the target vendor is Apple) (J5)
  • [run-make] tests/run-make/apple-slow-tls: ignore (only executed when the target vendor is Apple) -> [missing] (J5)
  • [run-make] tests/run-make-cargo/compiler-builtins: [missing] -> pass (J6)
  • [run-make] tests/run-make/compiler-builtins: pass -> [missing] (J6)
  • [run-make] tests/run-make-cargo/apple-slow-tls: [missing] -> pass (J7)
  • [run-make] tests/run-make/apple-slow-tls: pass -> [missing] (J7)
  • [run-make] tests/run-make-cargo/rustc-crates-on-stable: [missing] -> pass (J9)
  • [run-make] tests/run-make-cargo/rustdoc-scrape-examples-paths: [missing] -> pass (J9)
  • [run-make] tests/run-make-cargo/x86_64-fortanix-unknown-sgx-lvi: [missing] -> ignore (only executed when the target is x86_64-fortanix-unknown-sgx) (J9)
  • [run-make] tests/run-make/rustc-crates-on-stable: pass -> [missing] (J9)
  • [run-make] tests/run-make/rustdoc-scrape-examples-paths: pass -> [missing] (J9)
  • [run-make] tests/run-make/x86_64-fortanix-unknown-sgx-lvi: ignore (only executed when the target is x86_64-fortanix-unknown-sgx) -> [missing] (J9)

Additionally, 2 doctest diffs were found. These are ignored, as they are noisy.

Job group index

Test dashboard

Run

cargo run --manifest-path src/ci/citool/Cargo.toml -- \
    test-dashboard 1ed3cd7030718935a5c5e5c8f6581f36d8be179f --output-dir test-dashboard

And then open test-dashboard/index.html in your browser to see an overview of all executed tests.

Job duration changes

  1. x86_64-gnu-llvm-19-3: 7257.5s -> 6299.9s (-13.2%)
  2. dist-aarch64-windows-gnullvm: 4512.5s -> 4991.4s (10.6%)
  3. dist-apple-various: 3687.9s -> 3321.7s (-9.9%)
  4. dist-aarch64-apple: 6361.9s -> 6928.3s (8.9%)
  5. dist-aarch64-msvc: 5651.3s -> 6097.9s (7.9%)
  6. aarch64-msvc-1: 6395.0s -> 6825.5s (6.7%)
  7. dist-x86_64-windows-gnullvm: 4671.5s -> 4968.7s (6.4%)
  8. dist-powerpc64le-linux-gnu: 5333.8s -> 5662.9s (6.2%)
  9. dist-powerpc64-linux: 5354.9s -> 5062.7s (-5.5%)
  10. i686-msvc-1: 10325.6s -> 9782.3s (-5.3%)
How to interpret the job duration changes?

Job durations can vary a lot, based on the actual runner instance
that executed the job, system noise, invalidated caches, etc. The table above is provided
mostly for t-infra members, for simpler debugging of potential CI slow-downs.

@rust-timer
Copy link
Collaborator

Finished benchmarking commit (1ed3cd7): comparison URL.

Overall result: ❌ regressions - no action needed

@rustbot label: -perf-regression

Instruction count

Our most reliable metric. Used to determine the overall result above. However, even this metric can be noisy.

mean range count
Regressions ❌
(primary)
- - 0
Regressions ❌
(secondary)
0.5% [0.5%, 0.5%] 2
Improvements ✅
(primary)
- - 0
Improvements ✅
(secondary)
- - 0
All ❌✅ (primary) - - 0

Max RSS (memory usage)

Results (primary 2.2%, secondary 3.9%)

A less reliable metric. May be of interest, but not used to determine the overall result above.

mean range count
Regressions ❌
(primary)
2.2% [2.2%, 2.2%] 1
Regressions ❌
(secondary)
3.9% [3.9%, 3.9%] 1
Improvements ✅
(primary)
- - 0
Improvements ✅
(secondary)
- - 0
All ❌✅ (primary) 2.2% [2.2%, 2.2%] 1

Cycles

Results (secondary -2.2%)

A less reliable metric. May be of interest, but not used to determine the overall result above.

mean range count
Regressions ❌
(primary)
- - 0
Regressions ❌
(secondary)
- - 0
Improvements ✅
(primary)
- - 0
Improvements ✅
(secondary)
-2.2% [-2.2%, -2.2%] 1
All ❌✅ (primary) - - 0

Binary size

This benchmark run did not return any relevant results for this metric.

Bootstrap: 468.001s -> 465.747s (-0.48%)
Artifact size: 387.44 MiB -> 387.43 MiB (-0.00%)

@jieyouxu jieyouxu deleted the run-make-fission branch September 7, 2025 03:44
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
A-CI Area: Our Github Actions CI A-compiletest Area: The compiletest test runner A-meta Area: Issues & PRs about the rust-lang/rust repository itself A-run-make Area: port run-make Makefiles to rmake.rs A-rustc-dev-guide Area: rustc-dev-guide A-testsuite Area: The testsuite used to check the correctness of rustc A-tidy Area: The tidy tool merged-by-bors This PR was explicitly merged by bors. S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. T-bootstrap Relevant to the bootstrap subteam: Rust's build system (x.py and src/bootstrap) T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. T-infra Relevant to the infrastructure team, which will review and decide on the PR/issue.
Projects
None yet
7 participants