Skip to content

Commit d985c3b

Browse files
committed
use InstallAndTest in devtest
1 parent bef35eb commit d985c3b

File tree

3 files changed

+12
-82
lines changed

3 files changed

+12
-82
lines changed

eng/tools/azure-sdk-tools/azpysdk/devtest.py

Lines changed: 8 additions & 78 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@
1717
from ci_tools.variables import discover_repo_root, set_envvar_defaults
1818
from ci_tools.logging import logger
1919

20+
from .install_and_test import InstallAndTest
21+
2022
REPO_ROOT = discover_repo_root()
2123
common_task_path = os.path.abspath(os.path.join(REPO_ROOT, "scripts", "devops_tasks"))
2224
sys.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)

eng/tools/azure-sdk-tools/azpysdk/install_and_test.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ def run(self, args: argparse.Namespace) -> int:
8787
continue
8888

8989
try:
90-
self.before_pytest(executable, package_dir, staging_directory, args)
90+
self.before_pytest(executable, package_dir, package_name, staging_directory, args)
9191
except CalledProcessError as exc:
9292
logger.error(f"Pre-pytest hook failed for {package_name}: {exc}")
9393
results.append(exc.returncode or 1)
@@ -151,9 +151,9 @@ def after_dependencies_installed(
151151
return None
152152

153153
def before_pytest(
154-
self, executable: str, package_dir: str, staging_directory: str, args: argparse.Namespace
154+
self, executable: str, package_dir: str, package_name: str, staging_directory: str, args: argparse.Namespace
155155
) -> None:
156-
del executable, package_dir, staging_directory, args
156+
del executable, package_dir, package_name, staging_directory, args
157157
return None
158158

159159
def _install_common_requirements(self, executable: str, package_dir: str) -> None:

eng/tools/azure-sdk-tools/azpysdk/whl_no_aio.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ def register(
2828
)
2929

3030
def before_pytest(
31-
self, executable: str, package_dir: str, staging_directory: str, args: argparse.Namespace
31+
self, executable: str, package_dir: str, package_name: str, staging_directory: str, args: argparse.Namespace
3232
) -> None:
3333
uninstall_cmd = ["-m", "pip", "uninstall", "aiohttp", "--yes"]
3434
result = self.run_venv_command(executable, uninstall_cmd, cwd=package_dir)

0 commit comments

Comments
 (0)