From a1fe2ff8eb194ea07da7cf9ffa6ee60329f9db9e Mon Sep 17 00:00:00 2001 From: Fabian Meumertzheim Date: Sun, 4 May 2025 11:49:27 +0200 Subject: [PATCH] Configure coverage helpers for test exec group They are run on the test action's execution platform, which is resolved for the `test` exec group, not the default one. Since this adds a reference to the `test` exec group, which is only defined for test rules, `py_executable` attrs must not merge in coverage attributes if the rule to be created is not a test rule. --- python/private/attributes.bzl | 4 ++-- python/private/py_executable.bzl | 3 +-- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/python/private/attributes.bzl b/python/private/attributes.bzl index 8543caba7b..98aba4eb23 100644 --- a/python/private/attributes.bzl +++ b/python/private/attributes.bzl @@ -397,14 +397,14 @@ COVERAGE_ATTRS = { "_collect_cc_coverage": lambda: attrb.Label( default = "@bazel_tools//tools/test:collect_cc_coverage", executable = True, - cfg = "exec", + cfg = config.exec(exec_group = "test"), ), # Magic attribute to make coverage work. There's no # docs about this; see TestActionBuilder.java "_lcov_merger": lambda: attrb.Label( default = configuration_field(fragment = "coverage", name = "output_generator"), executable = True, - cfg = "exec", + cfg = config.exec(exec_group = "test"), ), } diff --git a/python/private/py_executable.bzl b/python/private/py_executable.bzl index a8c669afd9..24be8dd2ad 100644 --- a/python/private/py_executable.bzl +++ b/python/private/py_executable.bzl @@ -78,7 +78,6 @@ EXECUTABLE_ATTRS = dicts.add( AGNOSTIC_EXECUTABLE_ATTRS, PY_SRCS_ATTRS, IMPORTS_ATTRS, - COVERAGE_ATTRS, { "interpreter_args": lambda: attrb.StringList( doc = """ @@ -1903,7 +1902,7 @@ def create_executable_rule_builder(implementation, **kwargs): """ builder = ruleb.Rule( implementation = implementation, - attrs = EXECUTABLE_ATTRS, + attrs = EXECUTABLE_ATTRS | (COVERAGE_ATTRS if kwargs.get("test") else {}), exec_groups = dict(REQUIRED_EXEC_GROUP_BUILDERS), # Mutable copy fragments = ["py", "bazel_py"], provides = [PyExecutableInfo, PyInfo] + _MaybeBuiltinPyInfo,