This is an automated email from the ASF dual-hosted git repository. github-merge-queue[bot] pushed a commit to branch gh-readonly-queue/main/pr-12037-e2c48ef0dd83fa464d643e25f8e9f9177ca7316e in repository https://gitbox.apache.org/repos/asf/arrow-rs.git
commit 6014b2dce20f1dc3fac660641cf5041ad1b933c7 Author: Kosta Tarasov <[email protected]> AuthorDate: Mon Nov 2 19:34:57 2026 +0000 ci: Skip Windows checks in forks (#12037) # Which issue does this PR close? - Part of #11469 # Rationale for this change #11991 stopped running macOS tests in forks. @Jefffrey [suggested](https://github.com/apache/arrow-rs/pull/11991#issuecomment-6554125572) moving the Windows job to the merge queue as well, because few changes affect Windows and every fork push currently spends about 9 minutes on it. # What changes are included in this PR? The Windows job now uses the same guard as the macOS job, so it no longer runs on fork pushes, fork manual runs, or PRs inside a fork. The CI validator and contributor docs are updated to match. This is not strictly merge queue only. Windows still runs on same-repository PRs, release-branch PRs, and upstream manual runs. The merge queue only covers the default branch, so a `merge_group` guard would leave release-branch PRs with no Windows testing. Contributors working from forks do get merge queue only behavior, since upstream runs of fork PRs already skip Windows. Of the last 200 PRs merged to `main`, the only same-repository ones were 20 from dependabot. Two tradeoffs: - Upstream runner use does not change. The savings are all on contributors' forks. - Contributors first see a Windows failure when their PR is in the queue, and cannot run Windows manually from their fork. # Are these changes tested? The CI validator now pins the Windows guard, and a new regression case checks that restoring the old guard on the Windows job fails validation. The guard itself only runs on GitHub, so this PR's fork run should skip Windows and its queue run should execute it. AI assistance was used for the workflow, validator, regression test, and documentation changes. # Are there any significant user-facing changes? No 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-authored-by: Claude Opus 5.5 <[email protected]> --- .github/ci/scripts/check-ci-config.py | 5 +++-- .github/workflows/README.md | 7 ++++--- .github/workflows/rust.yml | 6 +++--- CONTRIBUTING.md | 11 ++++++----- 4 files changed, 16 insertions(+), 13 deletions(-) diff --git a/.github/ci/scripts/check-ci-config.py b/.github/ci/scripts/check-ci-config.py index fbfc6df1ef..c68c36eb7c 100644 --- a/.github/ci/scripts/check-ci-config.py +++ b/.github/ci/scripts/check-ci-config.py @@ -70,8 +70,8 @@ def validate_fork_ci(workflows, ci): for name, job in rust["jobs"].items(): if name in {"lint", "unused-dependencies"}: assert "if" not in job, f"rust/{name}: lightweight check must run upstream" - elif name == "macos": - assert job.get("if") == "${{ !inputs.lint-only && github.repository == 'apache/arrow-rs' }}", "rust/macos: must only run upstream outside lint-only mode" + elif name in {"macos", "windows"}: + assert job.get("if") == "${{ !inputs.lint-only && github.repository == 'apache/arrow-rs' }}", f"rust/{name}: must only run upstream outside lint-only mode" else: assert job.get("if") == "${{ !inputs.lint-only }}", f"rust/{name}: runs during lint-only mode" docs = load_yaml(workflows / "docs.yml") @@ -312,6 +312,7 @@ class ConfigurationTests(unittest.TestCase): (".github/workflows/rust.yml", " if: ${{ !inputs.lint-only && github.repository == 'apache/arrow-rs' }}\n", ""), (".github/workflows/rust.yml", " && github.repository == 'apache/arrow-rs'", ""), (".github/workflows/rust.yml", "!inputs.lint-only && ", ""), + (".github/workflows/rust.yml", " if: ${{ !inputs.lint-only && github.repository == 'apache/arrow-rs' }}\n name: Test on Windows\n", " if: ${{ !inputs.lint-only }}\n name: Test on Windows\n"), (".github/workflows/ci.yml", " lint-only: ${{ needs.changes.outputs.fork-pr == 'true' }}\n", ""), (".github/workflows/docs.yml", "github.repository == 'apache/arrow-rs' && ", ""), (".asf.yaml", '"Required Checks"', '"Missing Check"'), diff --git a/.github/workflows/README.md b/.github/workflows/README.md index 8bdb61e610..152353d6da 100644 --- a/.github/workflows/README.md +++ b/.github/workflows/README.md @@ -19,9 +19,10 @@ CI selects checks for pull requests according to their source and changed files. See the [contributor guide](../../CONTRIBUTING.md#pull-requests-from-forks) for fork CI setup. -Fork pushes and manual runs execute the regular suites except macOS tests and Miri. -macOS tests run only upstream to avoid frequent timeouts on fork runners; they remain -enabled for same-repository and release-branch PRs, upstream manual runs, and the merge queue. +Fork pushes and manual runs execute the regular suites except macOS tests, Windows tests, and Miri. +macOS tests run only upstream to avoid frequent timeouts on fork runners, and Windows tests +to reduce compute in forks. Both remain enabled for same-repository and release-branch PRs, +upstream manual runs, and the merge queue. The merge queue runs the full test suite, except Miri, against the proposed merge result. Pushes to upstream `main` populate caches and publish documentation without repeating tests. A single required status check combines the results and blocks merging on failure. diff --git a/.github/workflows/rust.yml b/.github/workflows/rust.yml index 720f91dfc2..4a0a7e416f 100644 --- a/.github/workflows/rust.yml +++ b/.github/workflows/rust.yml @@ -55,10 +55,10 @@ jobs: # PyArrow tests happen in integration.yml. cargo test --workspace - # Check workspace wide compile and test with default features for - # windows + # Check workspace wide compile and test with default features for Windows. + # Keep this testing upstream to reduce compute in forks. windows: - if: ${{ !inputs.lint-only }} + if: ${{ !inputs.lint-only && github.repository == 'apache/arrow-rs' }} name: Test on Windows runs-on: windows-latest steps: diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index ddbabcf8ba..c47dc7ad38 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -86,12 +86,13 @@ lightweight checks upstream. To enable Actions in your fork: View results and rerun failed jobs there; the PR's `CI (fork)` check may lag. Fork branch pushes and manual runs execute all regular suites, excluding macOS -tests and Miri. macOS tests are skipped in forks to avoid frequent runner timeouts. +tests, Windows tests, and Miri. macOS tests are skipped in forks to avoid frequent +runner timeouts, and Windows tests to reduce compute. The `CI (fork)` check links to the fork run and is informational. When your PR is -approved and added to the merge queue, the final CI checks, including macOS tests, -run using ASF's runners against the proposed merge with `main`. Same-repository -and release-branch PRs retain upstream testing. Miri runs separately on a daily -schedule and on demand. +approved and added to the merge queue, the final CI checks, including macOS and +Windows tests, run using ASF's runners against the proposed merge with `main`. +Same-repository and release-branch PRs retain upstream testing. Miri runs +separately on a daily schedule and on demand. ## Developer's guide to Arrow Rust
