Skip to content

Commit c0bb26b

Browse files
authored
Simplify and enhance discover_targeted_packages (#42740)
* simplfy discover_targeted_packages and add a test for it * we need this to work by default for unfiltered input, instead of forcing default of **
1 parent 8d10d58 commit c0bb26b

File tree

2 files changed

+25
-4
lines changed

2 files changed

+25
-4
lines changed

eng/tools/azure-sdk-tools/ci_tools/functions.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -163,20 +163,26 @@ def glob_packages(glob_string: str, target_root_dir: str) -> List[str]:
163163
collected_top_level_directories = []
164164

165165
for glob_string in individual_globs:
166-
globbed = glob.glob(os.path.join(target_root_dir, glob_string, "setup.py")) + glob.glob(
166+
globbed = glob.glob(os.path.join(target_root_dir, glob_string, "setup.py"), recursive=True) + glob.glob(
167167
os.path.join(target_root_dir, "sdk/*/", glob_string, "setup.py")
168168
)
169169
collected_top_level_directories.extend([os.path.dirname(p) for p in globbed])
170170

171171
# handle pyproject.toml separately, as we need to filter them by the presence of a `[project]` section
172172
for glob_string in individual_globs:
173-
globbed = glob.glob(os.path.join(target_root_dir, glob_string, "pyproject.toml")) + glob.glob(
173+
globbed = glob.glob(os.path.join(target_root_dir, glob_string, "pyproject.toml"), recursive=True) + glob.glob(
174174
os.path.join(target_root_dir, "sdk/*/", glob_string, "pyproject.toml")
175175
)
176176
for p in globbed:
177177
if get_pyproject(os.path.dirname(p)):
178178
collected_top_level_directories.append(os.path.dirname(p))
179179

180+
# drop any packages that exist within a tests or test directory
181+
collected_top_level_directories = [
182+
p for p in collected_top_level_directories
183+
if not any(part in ("test", "tests") for part in p.split(os.sep))
184+
]
185+
180186
# deduplicate, in case we have double coverage from the glob strings. Example: "azure-mgmt-keyvault,azure-mgmt-*"
181187
return list(set(collected_top_level_directories))
182188

eng/tools/azure-sdk-tools/tests/integration/test_package_discovery.py

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,9 @@
55

66

77
repo_root = os.path.abspath(os.path.join(os.path.dirname(__file__), "..", "..", "..", "..", ".."))
8-
core_service_root = os.path.join(repo_root, "sdk", "core")
9-
storage_service_root = os.path.join(repo_root, "sdk", "storage")
8+
sdk_root = os.path.join(repo_root, "sdk")
9+
core_service_root = os.path.join(sdk_root, "core")
10+
storage_service_root = os.path.join(sdk_root, "storage")
1011

1112

1213
def test_discovery():
@@ -19,6 +20,20 @@ def test_discovery():
1920
assert len(non_empty_results) == 1
2021

2122

23+
def test_discovery_against_sdk():
24+
package_directories = discover_targeted_packages("**", sdk_root)
25+
26+
# ensure we didn't accidentally pick up a couple known packages from within a tests directory
27+
28+
known_mgmt_test_setup = os.path.join(sdk_root, "netapp", "azure-mgmt-netapp", "tests", "setup.py")
29+
known_test_core_setup = os.path.join(repo_root, "sdk", "core", "azure-core", "tests", "testserver_tests", "coretestserver", "setup.py")
30+
31+
assert known_test_core_setup not in package_directories
32+
assert known_mgmt_test_setup not in package_directories
33+
34+
# this is effectively checking to ensure we don't crash on any of the packages
35+
assert len(package_directories) > 0
36+
2237
def test_discovery_omit_mgmt():
2338
results = discover_targeted_packages("azure*", storage_service_root, filter_type="Omit_management")
2439

0 commit comments

Comments
 (0)