5959load (
6060 ":toolchain_types.bzl" ,
6161 "EXEC_TOOLS_TOOLCHAIN_TYPE" ,
62+ "PY_TEST_TOOLCHAIN_TYPE" ,
6263 TOOLCHAIN_TYPE = "TARGET_TOOLCHAIN_TYPE" ,
6364)
6465
@@ -253,6 +254,7 @@ def py_executable_base_impl(ctx, *, semantics, is_test, inherited_environment =
253254 inherited_environment = inherited_environment ,
254255 semantics = semantics ,
255256 output_groups = exec_result .output_groups ,
257+ is_test = is_test ,
256258 )
257259
258260def _get_build_info (ctx , cc_toolchain ):
@@ -817,7 +819,8 @@ def _create_providers(
817819 inherited_environment ,
818820 runtime_details ,
819821 output_groups ,
820- semantics ):
822+ semantics ,
823+ is_test ):
821824 """Creates the providers an executable should return.
822825
823826 Args:
@@ -849,21 +852,32 @@ def _create_providers(
849852 Returns:
850853 A list of modern providers.
851854 """
855+
856+ default_runfiles = runfiles_details .default_runfiles
857+ extra_test_env = {}
858+
859+ if is_test :
860+ py_test_toolchain = ctx .exec_groups ["test" ].toolchains [PY_TEST_TOOLCHAIN_TYPE ]
861+ if py_test_toolchain :
862+ coverage_rc = py_test_toolchain .py_test_info .coverage_rc
863+ extra_test_env = {"COVERAGE_RC" : coverage_rc .files .to_list ()[0 ].path }
864+ default_runfiles = default_runfiles .merge (ctx .runfiles (files = coverage_rc .files .to_list ()))
865+
852866 providers = [
853867 DefaultInfo (
854868 executable = executable ,
855869 files = default_outputs ,
856870 default_runfiles = _py_builtins .make_runfiles_respect_legacy_external_runfiles (
857871 ctx ,
858- runfiles_details . default_runfiles ,
872+ default_runfiles ,
859873 ),
860874 data_runfiles = _py_builtins .make_runfiles_respect_legacy_external_runfiles (
861875 ctx ,
862876 runfiles_details .data_runfiles ,
863877 ),
864878 ),
865879 create_instrumented_files_info (ctx ),
866- _create_run_environment_info (ctx , inherited_environment ),
880+ _create_run_environment_info (ctx , inherited_environment , extra_test_env ),
867881 PyExecutableInfo (
868882 main = main_py ,
869883 runfiles_without_exe = runfiles_details .runfiles_without_exe ,
@@ -935,7 +949,7 @@ def _create_providers(
935949 providers .extend (extra_providers )
936950 return providers
937951
938- def _create_run_environment_info (ctx , inherited_environment ):
952+ def _create_run_environment_info (ctx , inherited_environment , extra_test_env ):
939953 expanded_env = {}
940954 for key , value in ctx .attr .env .items ():
941955 expanded_env [key ] = _py_builtins .expand_location_and_make_variables (
@@ -944,6 +958,7 @@ def _create_run_environment_info(ctx, inherited_environment):
944958 expression = value ,
945959 targets = ctx .attr .data ,
946960 )
961+ expanded_env .update (extra_test_env )
947962 return RunEnvironmentInfo (
948963 environment = expanded_env ,
949964 inherited_environment = inherited_environment ,
0 commit comments