Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 13 additions & 6 deletions MODULE.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -41,14 +41,21 @@ use_repo(go_deps, "com_github_vbauerster_mpb_v8")
# ── Python ────────────────────────────────────────────────────────────────────────────────────────
bazel_dep(name = "rules_python", version = "2.0.1")

python = use_extension("@rules_python//python/extensions:python.bzl", "python")
# TRANSIENT: pinned to the post-2.0.1 commit that adds cp314 to the bundled coverage
# wheel set (bazel-contrib/rules_python#3764). Without this, `configure_coverage_tool`
# is a silent no-op on Python 3.14 and `bazel coverage` emits no lcov for py_test.
# Remove this override and bump bazel_dep above as soon as the first rules_python
# release containing #3764 is available — Renovate's bazel-module manager will surface
# that release as a version-bump PR; that PR is the prompt to drop this override.
git_override(
module_name = "rules_python",
remote = "https://github.com/bazel-contrib/rules_python.git",
commit = "9dc505b95063c0774945ecc86c4b8ce51151edfa",
)

# 3.13 (not 3.14) because rules_python 2.0.0 only ships bundled `coverage` wheels
# for cp310–cp313 (see python/private/coverage_deps.bzl). Without a coverage_tool
# wheel that matches the interpreter ABI, `configure_coverage_tool = True` is a
# silent no-op and `bazel coverage` produces empty per-test lcov files.
python = use_extension("@rules_python//python/extensions:python.bzl", "python")
python.toolchain(
python_version = "3.13",
python_version = "3.14",
# Wires the bundled `coverage` library into py_test runfiles when
# `bazel coverage` runs, so Python tests emit lcov data alongside Go.
configure_coverage_tool = True,
Expand Down
25 changes: 4 additions & 21 deletions MODULE.bazel.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

30 changes: 0 additions & 30 deletions docs/future-considerations.md
Original file line number Diff line number Diff line change
Expand Up @@ -174,36 +174,6 @@ future-considerations."

---

## Restore Python 3.14 Pin (Blocked on rules_python cp314 Coverage Wheel)

The Python interpreter is pinned to 3.13 in `MODULE.bazel` solely so that
`configure_coverage_tool = True` actually emits coverage data. rules_python 2.0.0's
bundled `coverage` wheel set in `python/private/coverage_deps.bzl` covers cp310–cp313
only — on cp314 the flag is a silent no-op and `bazel coverage` produces empty
per-test lcov files for Python targets.

The gap is not documented upstream. PR
[bazel-contrib/rules_python#3592](https://github.com/bazel-contrib/rules_python/pull/3592)
("fix(coverage): bump coverage.py to 7.10.7 for Python 3.14 support") was opened by an
external contributor on 2026-02-13 and self-closed the same day with no maintainer
engagement. No replacement PR or tracking issue exists; `coverage_deps.bzl` has had no
substantive update since 2024-11.

### Action

1. Open an upstream PR against `bazel-contrib/rules_python` to add cp314 to the
bundled coverage wheels (regenerate via `bazel run
//tools/private/update_deps:update_coverage_deps -- 7.10.7`, ensure cp314 wheel
tags including freethreaded variants are picked up, retain cp39 compatibility).
#3592's branch (`slaptijack/cp314-coverage-tool`) is a useful reference but should
not be merged blind.
2. Once the fix lands and a rules_python release containing it is available, bump the
`bazel_dep(name = "rules_python", ...)` version in `MODULE.bazel` and flip
`python_version` back to `"3.14"`. Remove the cp314-explanation comment.
3. Re-verify Python coverage still appears in the merged lcov after the bump.

---

## Multi-Platform Fan-Out Build Target

### Problem
Expand Down
Loading