From c084386ee3d217d038ee1bf794ada7c3cde56078 Mon Sep 17 00:00:00 2001 From: Scott Beddall Date: Wed, 27 Aug 2025 22:53:29 +0000 Subject: [PATCH 1/2] simplfy discover_targeted_packages and add a test for it --- .../azure-sdk-tools/ci_tools/functions.py | 14 ++++++++------ .../integration/test_package_discovery.py | 19 +++++++++++++++++-- 2 files changed, 25 insertions(+), 8 deletions(-) diff --git a/eng/tools/azure-sdk-tools/ci_tools/functions.py b/eng/tools/azure-sdk-tools/ci_tools/functions.py index 999bb919d3c5..00be61585d2a 100644 --- a/eng/tools/azure-sdk-tools/ci_tools/functions.py +++ b/eng/tools/azure-sdk-tools/ci_tools/functions.py @@ -163,20 +163,22 @@ def glob_packages(glob_string: str, target_root_dir: str) -> List[str]: collected_top_level_directories = [] for glob_string in individual_globs: - globbed = glob.glob(os.path.join(target_root_dir, glob_string, "setup.py")) + glob.glob( - os.path.join(target_root_dir, "sdk/*/", glob_string, "setup.py") - ) + globbed = glob.glob(os.path.join(target_root_dir, glob_string, "setup.py"), recursive=True) collected_top_level_directories.extend([os.path.dirname(p) for p in globbed]) # handle pyproject.toml separately, as we need to filter them by the presence of a `[project]` section for glob_string in individual_globs: - globbed = glob.glob(os.path.join(target_root_dir, glob_string, "pyproject.toml")) + glob.glob( - os.path.join(target_root_dir, "sdk/*/", glob_string, "pyproject.toml") - ) + globbed = glob.glob(os.path.join(target_root_dir, glob_string, "pyproject.toml"), recursive=True) for p in globbed: if get_pyproject(os.path.dirname(p)): collected_top_level_directories.append(os.path.dirname(p)) + # drop any packages that exist within a tests or test directory + collected_top_level_directories = [ + p for p in collected_top_level_directories + if not any(part in ("test", "tests") for part in p.split(os.sep)) + ] + # deduplicate, in case we have double coverage from the glob strings. Example: "azure-mgmt-keyvault,azure-mgmt-*" return list(set(collected_top_level_directories)) diff --git a/eng/tools/azure-sdk-tools/tests/integration/test_package_discovery.py b/eng/tools/azure-sdk-tools/tests/integration/test_package_discovery.py index cc65b59a2bd8..0d20ad4177dc 100644 --- a/eng/tools/azure-sdk-tools/tests/integration/test_package_discovery.py +++ b/eng/tools/azure-sdk-tools/tests/integration/test_package_discovery.py @@ -5,8 +5,9 @@ repo_root = os.path.abspath(os.path.join(os.path.dirname(__file__), "..", "..", "..", "..", "..")) -core_service_root = os.path.join(repo_root, "sdk", "core") -storage_service_root = os.path.join(repo_root, "sdk", "storage") +sdk_root = os.path.join(repo_root, "sdk") +core_service_root = os.path.join(sdk_root, "core") +storage_service_root = os.path.join(sdk_root, "storage") def test_discovery(): @@ -19,6 +20,20 @@ def test_discovery(): assert len(non_empty_results) == 1 +def test_discovery_against_sdk(): + package_directories = discover_targeted_packages("**", sdk_root) + + # ensure we didn't accidentally pick up a couple known packages from within a tests directory + + known_mgmt_test_setup = os.path.join(sdk_root, "netapp", "azure-mgmt-netapp", "tests", "setup.py") + known_test_core_setup = os.path.join(repo_root, "sdk", "core", "azure-core", "tests", "testserver_tests", "coretestserver", "setup.py") + + assert known_test_core_setup not in package_directories + assert known_mgmt_test_setup not in package_directories + + # this is effectively checking to ensure we don't crash on any of the packages + assert len(package_directories) > 0 + def test_discovery_omit_mgmt(): results = discover_targeted_packages("azure*", storage_service_root, filter_type="Omit_management") From 83d4472578cc0a293ceb3a051836d0b10ce60259 Mon Sep 17 00:00:00 2001 From: Scott Beddall Date: Wed, 27 Aug 2025 23:00:18 +0000 Subject: [PATCH 2/2] we need this to work by default for unfiltered input, instead of forcing default of ** --- eng/tools/azure-sdk-tools/ci_tools/functions.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/eng/tools/azure-sdk-tools/ci_tools/functions.py b/eng/tools/azure-sdk-tools/ci_tools/functions.py index 00be61585d2a..4667a6b2a6f0 100644 --- a/eng/tools/azure-sdk-tools/ci_tools/functions.py +++ b/eng/tools/azure-sdk-tools/ci_tools/functions.py @@ -163,12 +163,16 @@ def glob_packages(glob_string: str, target_root_dir: str) -> List[str]: collected_top_level_directories = [] for glob_string in individual_globs: - globbed = glob.glob(os.path.join(target_root_dir, glob_string, "setup.py"), recursive=True) + globbed = glob.glob(os.path.join(target_root_dir, glob_string, "setup.py"), recursive=True) + glob.glob( + os.path.join(target_root_dir, "sdk/*/", glob_string, "setup.py") + ) collected_top_level_directories.extend([os.path.dirname(p) for p in globbed]) # handle pyproject.toml separately, as we need to filter them by the presence of a `[project]` section for glob_string in individual_globs: - globbed = glob.glob(os.path.join(target_root_dir, glob_string, "pyproject.toml"), recursive=True) + globbed = glob.glob(os.path.join(target_root_dir, glob_string, "pyproject.toml"), recursive=True) + glob.glob( + os.path.join(target_root_dir, "sdk/*/", glob_string, "pyproject.toml") + ) for p in globbed: if get_pyproject(os.path.dirname(p)): collected_top_level_directories.append(os.path.dirname(p))