Skip to content

bootstrap: Allow path-based skipping of the coverage test suite#159131

Merged
rust-bors[bot] merged 3 commits into
rust-lang:mainfrom
Zalathar:skip-coverage
Jul 13, 2026
Merged

bootstrap: Allow path-based skipping of the coverage test suite#159131
rust-bors[bot] merged 3 commits into
rust-lang:mainfrom
Zalathar:skip-coverage

Conversation

@Zalathar

@Zalathar Zalathar commented Jul 11, 2026

Copy link
Copy Markdown
Member

When bootstrap runs a step by default, without explicit paths, it will normally act as though the user had explicitly requested all of the paths and aliases that the step registered through ShouldRun.

For the coverage test suite, that gives the wrong outcome. Running a command like ./x test --skip=tests or ./x test --skip=coverage should skip the coverage tests, but instead the coverage tests would run anyway, due to the coverage-map and coverage-run aliases being treated as implied command-line arguments.

This PR fixes that problem by adding a special flag to ShouldRun. When creating pathsets for a step that is being run by default, if the step has set the default_to_suites_only flag, all non-suite pathsets are discarded. That gives the desired behaviour for skipping coverage tests, without affecting other steps, since other steps don't set the flag.

The end result is that ./x test --skip=tests should now skip the coverage tests, as intended. This lets us remove some --skip arguments from CI scripts, which were only required by the previous incorrect behaviour.


The default_to_suites_only flag is a bit of a hack, but to me it seems like the cleanest way to resolve this problem without having to completely overhaul how CLI paths work, which is a much bigger task. And I think being able to remove the weird extra --skip arguments from CI scripts makes this a net positive.

r? jieyouxu

@rustbot rustbot added A-CI Area: Our Github Actions CI A-testsuite Area: The testsuite used to check the correctness of rustc S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. T-bootstrap Relevant to the bootstrap subteam: Rust's build system (x.py and src/bootstrap) T-infra Relevant to the infrastructure team, which will review and decide on the PR/issue. labels Jul 11, 2026
@Zalathar

Copy link
Copy Markdown
Member Author

Running a few try jobs to double-check that coverage jobs are still skipped in the appropriate CI jobs:

@bors try jobs=x86_64-msvc-2,x86_64-gnu-llvm-22-1

@rust-bors

This comment has been minimized.

rust-bors Bot pushed a commit that referenced this pull request Jul 11, 2026
bootstrap: Allow path-based skipping of the coverage test suite


try-job: x86_64-msvc-2
try-job: x86_64-gnu-llvm-22-1
@rust-bors

rust-bors Bot commented Jul 11, 2026

Copy link
Copy Markdown
Contributor

☀️ Try build successful (CI)
Build commit: 6bcad16 (6bcad167e4ed6a807b18096e765a3d0ac0979ccd)
Base parent: 3b58636 (3b58636b30eb364ac72aeaf03d46347084ed87d1)

@rustbot

rustbot commented Jul 12, 2026

Copy link
Copy Markdown
Collaborator

This PR was rebased onto a different main commit. Here's a range-diff highlighting what actually changed.

Rebasing is a normal part of keeping PRs up to date, so no action is needed—this note is just to help reviewers.

Zalathar added 3 commits July 12, 2026 11:07
When bootstrap runs a step by default, without explicit paths, it will normally
act as though the user had explicitly requested all of the paths and aliases
that the step registered through `ShouldRun`.

For the coverage test suite, that gives the wrong outcome. Running a command
like `./x test --skip=tests` or `./x test --skip=coverage` should skip the
coverage tests, but instead the coverage tests would run anyway, due to the
`coverage-map` and `coverage-run` aliases being treated as implied command-line
arguments.

This commit fixes that problem by adding a special flag to `ShouldRun`. When
creating pathsets for a step that is being run by default, if the step has set
the `default_to_suites_only` flag, all non-suite pathsets are discarded. That
gives the desired behavior for skipping coverage tests, without affecting other
steps, since other steps don't set the flag.
@Zalathar

Copy link
Copy Markdown
Member Author

I think there's some conceptual overlap with #154571, which was another case where we want to skip a step if any of its paths are skipped.

The approach used by this PR doesn't help in that case (since suites aren't involved), but it's worth keeping both in mind when we do make deeper changes to how skipping works.

@jieyouxu jieyouxu left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I can't say I'm a huge fan of adding more hacks to ShouldRun, but I do still feel this is better than having to skip coverage-{run,map} specifically in CI and elsewhere. (And also the path/filter handling is a larger topic not for this PR.)

Thanks
@bors r+

View changes since this review

@rust-bors

rust-bors Bot commented Jul 12, 2026

Copy link
Copy Markdown
Contributor

📌 Commit a4d03c4 has been approved by jieyouxu

It is now in the queue for this repository.

@rust-bors rust-bors Bot 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 Jul 12, 2026
jhpratt added a commit to jhpratt/rust that referenced this pull request Jul 12, 2026
bootstrap: Allow path-based skipping of the coverage test suite

- Alternative to rust-lang#159079
---

When bootstrap runs a step by default, without explicit paths, it will normally act as though the user had explicitly requested all of the paths and aliases that the step registered through `ShouldRun`.

For the coverage test suite, that gives the wrong outcome. Running a command like `./x test --skip=tests` or `./x test --skip=coverage` should skip the coverage tests, but instead the coverage tests would run anyway, due to the `coverage-map` and `coverage-run` aliases being treated as implied command-line arguments.

This PR fixes that problem by adding a special flag to `ShouldRun`. When creating pathsets for a step that is being run by default, if the step has set the `default_to_suites_only` flag, all non-suite pathsets are discarded. That gives the desired behaviour for skipping coverage tests, without affecting other steps, since other steps don't set the flag.

The end result is that `./x test --skip=tests` should now skip the coverage tests, as intended. This lets us remove some `--skip` arguments from CI scripts, which were only required by the previous incorrect behaviour.

---

The `default_to_suites_only` flag is a bit of a hack, but to me it seems like the cleanest way to resolve this problem without having to completely overhaul how CLI paths work, which is a much bigger task. And I think being able to remove the weird extra `--skip` arguments from CI scripts makes this a net positive.

r? jieyouxu
JonathanBrouwer added a commit to JonathanBrouwer/rust that referenced this pull request Jul 12, 2026
bootstrap: Allow path-based skipping of the coverage test suite

- Alternative to rust-lang#159079
---

When bootstrap runs a step by default, without explicit paths, it will normally act as though the user had explicitly requested all of the paths and aliases that the step registered through `ShouldRun`.

For the coverage test suite, that gives the wrong outcome. Running a command like `./x test --skip=tests` or `./x test --skip=coverage` should skip the coverage tests, but instead the coverage tests would run anyway, due to the `coverage-map` and `coverage-run` aliases being treated as implied command-line arguments.

This PR fixes that problem by adding a special flag to `ShouldRun`. When creating pathsets for a step that is being run by default, if the step has set the `default_to_suites_only` flag, all non-suite pathsets are discarded. That gives the desired behaviour for skipping coverage tests, without affecting other steps, since other steps don't set the flag.

The end result is that `./x test --skip=tests` should now skip the coverage tests, as intended. This lets us remove some `--skip` arguments from CI scripts, which were only required by the previous incorrect behaviour.

---

The `default_to_suites_only` flag is a bit of a hack, but to me it seems like the cleanest way to resolve this problem without having to completely overhaul how CLI paths work, which is a much bigger task. And I think being able to remove the weird extra `--skip` arguments from CI scripts makes this a net positive.

r? jieyouxu
rust-bors Bot pushed a commit that referenced this pull request Jul 12, 2026
…uwer

Rollup of 7 pull requests

Successful merges:

 - #158732 (Apply MCP 1003 and move diagnostics.rs into its own module)
 - #159010 (Simplify the unwind crate)
 - #159131 (bootstrap: Allow path-based skipping of the coverage test suite)
 - #159134 (std: fix panic in Windows Stdin::read_vectored with pending surrogate)
 - #159178 (Print duration of BOLT instrumentation and optimization steps)
 - #159112 (Fix segfault in env access in statically linked FreeBSD binaries)
 - #159124 (compiletest: use VecDeque::pop_front_if)
rust-bors Bot pushed a commit that referenced this pull request Jul 12, 2026
…uwer

Rollup of 6 pull requests

Successful merges:

 - #158732 (Apply MCP 1003 and move diagnostics.rs into its own module)
 - #159131 (bootstrap: Allow path-based skipping of the coverage test suite)
 - #159134 (std: fix panic in Windows Stdin::read_vectored with pending surrogate)
 - #159178 (Print duration of BOLT instrumentation and optimization steps)
 - #159112 (Fix segfault in env access in statically linked FreeBSD binaries)
 - #159124 (compiletest: use VecDeque::pop_front_if)
@rust-bors
rust-bors Bot merged commit 1e38462 into rust-lang:main Jul 13, 2026
13 checks passed
@rustbot rustbot added this to the 1.99.0 milestone Jul 13, 2026
rust-timer added a commit that referenced this pull request Jul 13, 2026
Rollup merge of #159131 - Zalathar:skip-coverage, r=jieyouxu

bootstrap: Allow path-based skipping of the coverage test suite

- Alternative to #159079
---

When bootstrap runs a step by default, without explicit paths, it will normally act as though the user had explicitly requested all of the paths and aliases that the step registered through `ShouldRun`.

For the coverage test suite, that gives the wrong outcome. Running a command like `./x test --skip=tests` or `./x test --skip=coverage` should skip the coverage tests, but instead the coverage tests would run anyway, due to the `coverage-map` and `coverage-run` aliases being treated as implied command-line arguments.

This PR fixes that problem by adding a special flag to `ShouldRun`. When creating pathsets for a step that is being run by default, if the step has set the `default_to_suites_only` flag, all non-suite pathsets are discarded. That gives the desired behaviour for skipping coverage tests, without affecting other steps, since other steps don't set the flag.

The end result is that `./x test --skip=tests` should now skip the coverage tests, as intended. This lets us remove some `--skip` arguments from CI scripts, which were only required by the previous incorrect behaviour.

---

The `default_to_suites_only` flag is a bit of a hack, but to me it seems like the cleanest way to resolve this problem without having to completely overhaul how CLI paths work, which is a much bigger task. And I think being able to remove the weird extra `--skip` arguments from CI scripts makes this a net positive.

r? jieyouxu
@Zalathar
Zalathar deleted the skip-coverage branch July 13, 2026 02:48
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-testsuite Area: The testsuite used to check the correctness of rustc 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-infra Relevant to the infrastructure team, which will review and decide on the PR/issue.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants