Skip to content

Only set py_runtime.coverage_tool for Bazel 6 and higher. #1061

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 3 commits into from
Feb 11, 2023
Merged
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
37 changes: 32 additions & 5 deletions python/repositories.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -243,6 +243,21 @@ def _python_repository_impl(rctx):
"share/**",
]

if rctx.attr.coverage_tool:
if "windows" in rctx.os.name:
coverage_tool = None
else:
coverage_tool = '"{}"'.format(rctx.attr.coverage_tool)

coverage_attr_text = """\
coverage_tool = select({{
":coverage_enabled": {coverage_tool},
"//conditions:default": None
}}),
""".format(coverage_tool = coverage_tool)
else:
coverage_attr_text = " # coverage_tool attribute not supported by this Bazel version"

build_content = """\
# Generated by python/repositories.bzl

Expand Down Expand Up @@ -308,10 +323,7 @@ config_setting(
py_runtime(
name = "py3_runtime",
files = [":files"],
coverage_tool = select({{
":coverage_enabled": {coverage_tool},
"//conditions:default": None,
}}),
{coverage_attr}
interpreter = "{python_path}",
python_version = "PY3",
)
Expand All @@ -327,7 +339,7 @@ py_runtime_pair(
python_path = python_bin,
python_version = python_short_version,
python_version_nodot = python_short_version.replace(".", ""),
coverage_tool = rctx.attr.coverage_tool if rctx.attr.coverage_tool == None or "windows" in rctx.os.name else "\"{}\"".format(rctx.attr.coverage_tool),
coverage_attr = coverage_attr_text,
)
rctx.delete("python")
rctx.symlink(python_bin, "python")
Expand Down Expand Up @@ -459,6 +471,8 @@ def python_register_toolchains(
distutils_content: see the distutils_content attribute in the python_repository repository rule.
register_toolchains: Whether or not to register the downloaded toolchains.
register_coverage_tool: Whether or not to register the downloaded coverage tool to the toolchains.
NOTE: Coverage support using the toolchain is only supported in Bazel 6 and higher.

set_python_version_constraint: When set to true, target_compatible_with for the toolchains will include a version constraint.
tool_versions: a dict containing a mapping of version with SHASUM and platform info. If not supplied, the defaults
in python/versions.bzl will be used.
Expand All @@ -472,6 +486,19 @@ def python_register_toolchains(

toolchain_repo_name = "{name}_toolchains".format(name = name)

bazel_major = int(native.bazel_version.split(".")[0])
Copy link
Contributor

Choose a reason for hiding this comment

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

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

Yes, that should be fixed by #1063 (let me know otherwise)

aspect utils.bzl

Oh, nice find. That would probably also work with a custom Bazel 5.x build, too.

if bazel_major < 6:
if register_coverage_tool:
# buildifier: disable=print
print((
"WARNING: ignoring register_coverage_tool=True when " +
"registering @{name}: Bazel 6+ required, got {version}"
).format(
name = name,
version = native.bazel_version,
))
register_coverage_tool = False

for platform in PLATFORMS.keys():
sha256 = tool_versions[python_version]["sha256"].get(platform, None)
if not sha256:
Expand Down