|
4 | 4 | import traceback
|
5 | 5 | import sys
|
6 | 6 | import shutil
|
| 7 | +import tempfile |
7 | 8 |
|
8 | 9 | from typing import Sequence, Optional, List, Any, Tuple
|
9 |
| -from subprocess import check_call |
10 |
| - |
| 10 | +from subprocess import CalledProcessError, check_call |
11 | 11 |
|
12 | 12 | from ci_tools.parsing import ParsedSetup
|
13 | 13 | from ci_tools.functions import discover_targeted_packages, get_venv_call, install_into_venv, get_venv_python
|
@@ -111,3 +111,40 @@ def get_targeted_directories(self, args: argparse.Namespace) -> List[ParsedSetup
|
111 | 111 | logger.error(traceback.format_exc())
|
112 | 112 |
|
113 | 113 | return targeted
|
| 114 | + |
| 115 | + def install_dev_reqs(self, executable: str, args: argparse.Namespace, package_dir: str) -> None: |
| 116 | + """Install dev requirements for the given package.""" |
| 117 | + dev_requirements = os.path.join(package_dir, "dev_requirements.txt") |
| 118 | + |
| 119 | + requirements = [] |
| 120 | + if os.path.exists(dev_requirements): |
| 121 | + requirements += ["-r", dev_requirements] |
| 122 | + else: |
| 123 | + logger.warning(f"No dev_requirements.txt found for {package_dir}, skipping installation of dev requirements.") |
| 124 | + return |
| 125 | + |
| 126 | + temp_req_file = None |
| 127 | + if not getattr(args, "isolate", False): |
| 128 | + # don't install azure-sdk-tools when not isolated |
| 129 | + with open(dev_requirements, "r") as f: |
| 130 | + filtered_req_lines = [ |
| 131 | + line.strip() |
| 132 | + for line in f |
| 133 | + if "eng/tools/azure-sdk-tools" not in line |
| 134 | + ] |
| 135 | + with tempfile.NamedTemporaryFile(mode="w", delete=False) as temp_req_file: |
| 136 | + temp_req_file.write("\n".join(filtered_req_lines)) |
| 137 | + if temp_req_file.name: |
| 138 | + requirements = ["-r", temp_req_file.name] |
| 139 | + try: |
| 140 | + logger.info(f"Installing dev requirements for {package_dir}") |
| 141 | + install_into_venv(executable, requirements, package_dir) |
| 142 | + except CalledProcessError as e: |
| 143 | + logger.error("Failed to install dev requirements:", e) |
| 144 | + raise e |
| 145 | + finally: |
| 146 | + if temp_req_file and temp_req_file.name: |
| 147 | + try: |
| 148 | + os.remove(temp_req_file.name) |
| 149 | + except Exception as cleanup_error: |
| 150 | + logger.warning(f"Failed to remove temporary requirements file: {cleanup_error}") |
0 commit comments