1717from ci_tools .variables import discover_repo_root , set_envvar_defaults
1818from ci_tools .logging import logger
1919
20+ from .install_and_test import InstallAndTest
21+
2022REPO_ROOT = discover_repo_root ()
2123common_task_path = os .path .abspath (os .path .join (REPO_ROOT , "scripts" , "devops_tasks" ))
2224sys .path .append (common_task_path )
@@ -122,9 +124,9 @@ def install_dev_build_packages(executable: str, pkg_name_to_exclude: str, workin
122124 install_packages (executable , azure_pkgs , working_directory )
123125
124126
125- class devtest (Check ):
127+ class devtest (InstallAndTest ):
126128 def __init__ (self ) -> None :
127- super ().__init__ ()
129+ super ().__init__ (package_type = "sdist" , proxy_url = "http://localhost:5002" , display_name = "devtest" )
128130
129131 def register (
130132 self , subparsers : "argparse._SubParsersAction" , parent_parsers : Optional [List [argparse .ArgumentParser ]] = None
@@ -143,79 +145,7 @@ def register(
143145 help = "Additional arguments forwarded to pytest." ,
144146 )
145147
146- def run (self , args : argparse .Namespace ) -> int :
147- """Run the devtest check command."""
148- logger .info ("Running devtest check..." )
149-
150- set_envvar_defaults ({"PROXY_URL" : "http://localhost:5002" })
151- targeted = self .get_targeted_directories (args )
152-
153- results : List [int ] = []
154-
155- for parsed in targeted :
156- package_dir = parsed .folder
157- package_name = parsed .name
158- executable , staging_directory = self .get_executable (args .isolate , args .command , sys .executable , package_dir )
159- logger .info (f"Processing { package_name } for devtest check" )
160-
161- # install dependencies
162- try :
163- self .install_dev_reqs (executable , args , package_dir )
164- except CalledProcessError as e :
165- logger .error (f"Failed to install dev requirements: { e } " )
166- results .append (1 )
167- continue
168-
169- try :
170- create_package_and_install (
171- distribution_directory = staging_directory ,
172- target_setup = package_dir ,
173- skip_install = False ,
174- cache_dir = None ,
175- work_dir = staging_directory ,
176- force_create = False ,
177- package_type = "sdist" ,
178- pre_download_disabled = False ,
179- python_executable = executable ,
180- )
181- except CalledProcessError as e :
182- logger .error (f"Failed to create and install package { package_name } : { e } " )
183- results .append (1 )
184- continue
185-
186- if os .path .exists (TEST_TOOLS_REQUIREMENTS ):
187- try :
188- install_into_venv (executable , ["-r" , TEST_TOOLS_REQUIREMENTS ], package_dir )
189- except Exception as e :
190- logger .error (f"Failed to install test tools requirements: { e } " )
191- results .append (1 )
192- continue
193- else :
194- logger .warning (f"Test tools requirements file not found at { TEST_TOOLS_REQUIREMENTS } ." )
195-
196- try :
197- install_dev_build_packages (executable , package_name , package_dir )
198- except Exception as e :
199- logger .error (f"Failed to install dev build packages: { e } " )
200- results .append (1 )
201- continue
202-
203- pytest_args = self ._build_pytest_args (package_dir , args )
204-
205- pytest_result = self .run_venv_command (
206- executable , ["-m" , "pytest" , * pytest_args ], cwd = package_dir , immediately_dump = True
207- )
208-
209- if pytest_result .returncode != 0 :
210- if pytest_result .returncode == 5 and is_error_code_5_allowed (package_dir , package_name ):
211- logger .info (
212- "pytest exited with code 5 for %s, which is allowed for management or opt-out packages." ,
213- package_name ,
214- )
215- # Align with tox: skip coverage when tests are skipped entirely
216- continue
217-
218- logger .error (f"pytest failed for { package_name } with exit code { pytest_result .returncode } ." )
219- results .append (pytest_result .returncode )
220-
221- return max (results ) if results else 0
148+ def before_pytest (
149+ self , executable : str , package_dir : str , package_name : str , staging_directory : str , args : argparse .Namespace
150+ ) -> None :
151+ install_dev_build_packages (executable , package_name , package_dir )
0 commit comments