6060load (
6161 ":toolchain_types.bzl" ,
6262 "EXEC_TOOLS_TOOLCHAIN_TYPE" ,
63+ "PY_TEST_TOOLCHAIN_TYPE" ,
6364 TOOLCHAIN_TYPE = "TARGET_TOOLCHAIN_TYPE" ,
6465)
6566
@@ -254,6 +255,7 @@ def py_executable_base_impl(ctx, *, semantics, is_test, inherited_environment =
254255 inherited_environment = inherited_environment ,
255256 semantics = semantics ,
256257 output_groups = exec_result .output_groups ,
258+ is_test = is_test ,
257259 )
258260
259261def _get_build_info (ctx , cc_toolchain ):
@@ -819,7 +821,8 @@ def _create_providers(
819821 inherited_environment ,
820822 runtime_details ,
821823 output_groups ,
822- semantics ):
824+ semantics ,
825+ is_test ):
823826 """Creates the providers an executable should return.
824827
825828 Args:
@@ -851,21 +854,32 @@ def _create_providers(
851854 Returns:
852855 A list of modern providers.
853856 """
857+
858+ default_runfiles = runfiles_details .default_runfiles
859+ extra_test_env = {}
860+
861+ if is_test :
862+ py_test_toolchain = ctx .exec_groups ["test" ].toolchains [PY_TEST_TOOLCHAIN_TYPE ]
863+ if py_test_toolchain :
864+ coverage_rc = py_test_toolchain .py_test_info .coverage_rc
865+ extra_test_env = {"COVERAGE_RC" : coverage_rc .files .to_list ()[0 ].path }
866+ default_runfiles = default_runfiles .merge (ctx .runfiles (files = coverage_rc .files .to_list ()))
867+
854868 providers = [
855869 DefaultInfo (
856870 executable = executable ,
857871 files = default_outputs ,
858872 default_runfiles = _py_builtins .make_runfiles_respect_legacy_external_runfiles (
859873 ctx ,
860- runfiles_details . default_runfiles ,
874+ default_runfiles ,
861875 ),
862876 data_runfiles = _py_builtins .make_runfiles_respect_legacy_external_runfiles (
863877 ctx ,
864878 runfiles_details .data_runfiles ,
865879 ),
866880 ),
867881 create_instrumented_files_info (ctx ),
868- _create_run_environment_info (ctx , inherited_environment ),
882+ _create_run_environment_info (ctx , inherited_environment , extra_test_env ),
869883 PyExecutableInfo (
870884 main = main_py ,
871885 runfiles_without_exe = runfiles_details .runfiles_without_exe ,
@@ -937,7 +951,7 @@ def _create_providers(
937951 providers .extend (extra_providers )
938952 return providers
939953
940- def _create_run_environment_info (ctx , inherited_environment ):
954+ def _create_run_environment_info (ctx , inherited_environment , extra_test_env ):
941955 expanded_env = {}
942956 for key , value in ctx .attr .env .items ():
943957 expanded_env [key ] = _py_builtins .expand_location_and_make_variables (
@@ -946,6 +960,7 @@ def _create_run_environment_info(ctx, inherited_environment):
946960 expression = value ,
947961 targets = ctx .attr .data ,
948962 )
963+ expanded_env .update (extra_test_env )
949964 return RunEnvironmentInfo (
950965 environment = expanded_env ,
951966 inherited_environment = inherited_environment ,
0 commit comments