From 6d341d27f5165e0f537e02391b6044c274d07be7 Mon Sep 17 00:00:00 2001 From: scbedd <45376673+scbedd@users.noreply.github.com> Date: Thu, 12 Sep 2019 10:17:57 -0700 Subject: [PATCH 01/10] increase timeout for pypy, adjust error output --- eng/pipelines/templates/jobs/archetype-sdk-nightly.yml | 2 +- eng/tox/create_wheel_and_install.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/eng/pipelines/templates/jobs/archetype-sdk-nightly.yml b/eng/pipelines/templates/jobs/archetype-sdk-nightly.yml index f656e0114d94..59b5ca0a9072 100644 --- a/eng/pipelines/templates/jobs/archetype-sdk-nightly.yml +++ b/eng/pipelines/templates/jobs/archetype-sdk-nightly.yml @@ -39,7 +39,7 @@ jobs: dependsOn: - 'Build' - timeoutInMinutes: 240 + timeoutInMinutes: 270 strategy: matrix: diff --git a/eng/tox/create_wheel_and_install.py b/eng/tox/create_wheel_and_install.py index 50d4e87cc6de..91636b219eac 100644 --- a/eng/tox/create_wheel_and_install.py +++ b/eng/tox/create_wheel_and_install.py @@ -91,7 +91,7 @@ def cleanup_build_artifacts(build_folder): # it does't exist, so we need to error out else: logging.error( - "{w} not present in the prebuilt wheels directory. Exiting." + "{w} not present in the prebuilt wheels directory. Exiting.".format(w=wheel) ) exit(1) else: From 25842b50b0fcd1eed83c1c8117b9028e9bbc7bc4 Mon Sep 17 00:00:00 2001 From: scbedd <45376673+scbedd@users.noreply.github.com> Date: Thu, 12 Sep 2019 12:40:05 -0700 Subject: [PATCH 02/10] touching a cogservices file to trigger that ci --- .../azure-cognitiveservices-vision-face/dev_requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sdk/cognitiveservices/azure-cognitiveservices-vision-face/dev_requirements.txt b/sdk/cognitiveservices/azure-cognitiveservices-vision-face/dev_requirements.txt index f6457a93d5e8..6ccb7f031ddd 100644 --- a/sdk/cognitiveservices/azure-cognitiveservices-vision-face/dev_requirements.txt +++ b/sdk/cognitiveservices/azure-cognitiveservices-vision-face/dev_requirements.txt @@ -1 +1 @@ --e ../../../tools/azure-sdk-tools \ No newline at end of file +-e ../../../tools/azure-sdk-tools From ebaebf07bcdc713451b6ad0c7595a2330057d555 Mon Sep 17 00:00:00 2001 From: scbedd <45376673+scbedd@users.noreply.github.com> Date: Thu, 12 Sep 2019 13:43:18 -0700 Subject: [PATCH 03/10] updating build-artifacts to generate python2 nspkgs if any exist --- eng/pipelines/templates/steps/build-artifacts.yml | 15 +++++++++++++++ scripts/devops_tasks/build_packages.py | 10 +++++++++- scripts/devops_tasks/common_tasks.py | 6 +++--- 3 files changed, 27 insertions(+), 4 deletions(-) diff --git a/eng/pipelines/templates/steps/build-artifacts.yml b/eng/pipelines/templates/steps/build-artifacts.yml index 1d21d34003d9..2b944bb863db 100644 --- a/eng/pipelines/templates/steps/build-artifacts.yml +++ b/eng/pipelines/templates/steps/build-artifacts.yml @@ -9,6 +9,21 @@ steps: displayName: 'Tag scheduled builds' condition: and(eq(variables['Build.SourceBranchName'],'master'),eq(variables['Build.Reason'],'Schedule')) + - task: UsePythonVersion@0 + displayName: 'Use Python 2.7' + inputs: + versionSpec: '2.7' + + - script: | + pip install wheel setuptools packaging + displayName: 'Prep Environment' + + - task: PythonScript@0 + displayName: 'Generate Python2 Applicable Namespace Packages' + inputs: + scriptPath: 'scripts/devops_tasks/build_packages.py' + arguments: '-d "$(Build.ArtifactStagingDirectory)" "${{ parameters.BuildTargetingString }}" --service=${{parameters.ServiceDirectory}} --additionalfilterstring=nspkg' + - task: UsePythonVersion@0 displayName: 'Use Python $(PythonVersion)' inputs: diff --git a/scripts/devops_tasks/build_packages.py b/scripts/devops_tasks/build_packages.py index 4b3e8f825e10..f51c458ea9fb 100644 --- a/scripts/devops_tasks/build_packages.py +++ b/scripts/devops_tasks/build_packages.py @@ -65,6 +65,14 @@ def build_packages(targeted_packages, distribution_directory): ), ) + parser.add_argument( + "--additionalfilterstring", + help=( + "Additional filter on top of the glob_string already presented. Used in simple 'contains' match" + "Example: --additionalfilterstring=nspkg" + ), + ) + args = parser.parse_args() # We need to support both CI builds of everything and individual service @@ -75,5 +83,5 @@ def build_packages(targeted_packages, distribution_directory): else: target_dir = root_dir - targeted_packages = process_glob_string(args.glob_string, target_dir) + targeted_packages = process_glob_string(args.glob_string, target_dir, args.additionalfilterstring) build_packages(targeted_packages, args.distribution_directory) diff --git a/scripts/devops_tasks/common_tasks.py b/scripts/devops_tasks/common_tasks.py index bc6c5eefc178..082d25c74431 100644 --- a/scripts/devops_tasks/common_tasks.py +++ b/scripts/devops_tasks/common_tasks.py @@ -131,7 +131,7 @@ def filter_for_compatibility(package_set): # this function is where a glob string gets translated to a list of packages # It is called by both BUILD (package) and TEST. In the future, this function will be the central location # for handling targeting of release packages -def process_glob_string(glob_string, target_root_dir): +def process_glob_string(glob_string, target_root_dir, additional_filter_string=""): if glob_string: individual_globs = glob_string.split(",") else: @@ -145,8 +145,8 @@ def process_glob_string(glob_string, target_root_dir): collected_top_level_directories.extend([os.path.dirname(p) for p in globbed]) # dedup, in case we have double coverage from the glob strings. Example: "azure-mgmt-keyvault,azure-mgmt-*" - collected_directories = list(set(collected_top_level_directories)) - + collected_directories = [p for p in list(set(collected_top_level_directories)) if additional_filter_string in p] + # if we have individually queued this specific package, it's obvious that we want to build it specifically # in this case, do not honor the omission list if len(collected_directories) == 1: From e4f8f2392201ac7fb2102a3503c79ac8c9dc7610 Mon Sep 17 00:00:00 2001 From: scbedd <45376673+scbedd@users.noreply.github.com> Date: Thu, 12 Sep 2019 13:45:05 -0700 Subject: [PATCH 04/10] make certain that None doesn't get passed instead of emptystring --- scripts/devops_tasks/build_packages.py | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/devops_tasks/build_packages.py b/scripts/devops_tasks/build_packages.py index f51c458ea9fb..f06c36cdc3e5 100644 --- a/scripts/devops_tasks/build_packages.py +++ b/scripts/devops_tasks/build_packages.py @@ -67,6 +67,7 @@ def build_packages(targeted_packages, distribution_directory): parser.add_argument( "--additionalfilterstring", + default="", help=( "Additional filter on top of the glob_string already presented. Used in simple 'contains' match" "Example: --additionalfilterstring=nspkg" From 54dcf8387f8c4e3c5fef222221520fc8657894ea Mon Sep 17 00:00:00 2001 From: scbedd <45376673+scbedd@users.noreply.github.com> Date: Thu, 12 Sep 2019 13:50:05 -0700 Subject: [PATCH 05/10] no pathlib --- scripts/devops_tasks/build_packages.py | 1 - 1 file changed, 1 deletion(-) diff --git a/scripts/devops_tasks/build_packages.py b/scripts/devops_tasks/build_packages.py index f06c36cdc3e5..f15e9f744b13 100644 --- a/scripts/devops_tasks/build_packages.py +++ b/scripts/devops_tasks/build_packages.py @@ -10,7 +10,6 @@ import argparse import sys -from pathlib import Path import os from common_tasks import process_glob_string, run_check_call From 50ccabcbd9cfae9097f50114d2136bc057aa8d01 Mon Sep 17 00:00:00 2001 From: scbedd <45376673+scbedd@users.noreply.github.com> Date: Thu, 12 Sep 2019 15:02:56 -0700 Subject: [PATCH 06/10] attempt with simpler logic on targeting. does this work appropriately? --- eng/pipelines/templates/steps/build-artifacts.yml | 4 ++-- scripts/devops_tasks/build_packages.py | 11 +---------- scripts/devops_tasks/common_tasks.py | 4 ++-- 3 files changed, 5 insertions(+), 14 deletions(-) diff --git a/eng/pipelines/templates/steps/build-artifacts.yml b/eng/pipelines/templates/steps/build-artifacts.yml index 2b944bb863db..f542c12f0b54 100644 --- a/eng/pipelines/templates/steps/build-artifacts.yml +++ b/eng/pipelines/templates/steps/build-artifacts.yml @@ -16,13 +16,13 @@ steps: - script: | pip install wheel setuptools packaging - displayName: 'Prep Environment' + displayName: 'Prep Py2 Environment' - task: PythonScript@0 displayName: 'Generate Python2 Applicable Namespace Packages' inputs: scriptPath: 'scripts/devops_tasks/build_packages.py' - arguments: '-d "$(Build.ArtifactStagingDirectory)" "${{ parameters.BuildTargetingString }}" --service=${{parameters.ServiceDirectory}} --additionalfilterstring=nspkg' + arguments: '-d "$(Build.ArtifactStagingDirectory)" "*-nspkg" --service=${{parameters.ServiceDirectory}} --additionalfilterstring=nspkg' - task: UsePythonVersion@0 displayName: 'Use Python $(PythonVersion)' diff --git a/scripts/devops_tasks/build_packages.py b/scripts/devops_tasks/build_packages.py index f15e9f744b13..dc3a205336e2 100644 --- a/scripts/devops_tasks/build_packages.py +++ b/scripts/devops_tasks/build_packages.py @@ -64,15 +64,6 @@ def build_packages(targeted_packages, distribution_directory): ), ) - parser.add_argument( - "--additionalfilterstring", - default="", - help=( - "Additional filter on top of the glob_string already presented. Used in simple 'contains' match" - "Example: --additionalfilterstring=nspkg" - ), - ) - args = parser.parse_args() # We need to support both CI builds of everything and individual service @@ -83,5 +74,5 @@ def build_packages(targeted_packages, distribution_directory): else: target_dir = root_dir - targeted_packages = process_glob_string(args.glob_string, target_dir, args.additionalfilterstring) + targeted_packages = process_glob_string(args.glob_string, target_dir) build_packages(targeted_packages, args.distribution_directory) diff --git a/scripts/devops_tasks/common_tasks.py b/scripts/devops_tasks/common_tasks.py index 082d25c74431..fbe903704fcf 100644 --- a/scripts/devops_tasks/common_tasks.py +++ b/scripts/devops_tasks/common_tasks.py @@ -131,7 +131,7 @@ def filter_for_compatibility(package_set): # this function is where a glob string gets translated to a list of packages # It is called by both BUILD (package) and TEST. In the future, this function will be the central location # for handling targeting of release packages -def process_glob_string(glob_string, target_root_dir, additional_filter_string=""): +def process_glob_string(glob_string, target_root_dir): if glob_string: individual_globs = glob_string.split(",") else: @@ -145,7 +145,7 @@ def process_glob_string(glob_string, target_root_dir, additional_filter_string=" collected_top_level_directories.extend([os.path.dirname(p) for p in globbed]) # dedup, in case we have double coverage from the glob strings. Example: "azure-mgmt-keyvault,azure-mgmt-*" - collected_directories = [p for p in list(set(collected_top_level_directories)) if additional_filter_string in p] + collected_directories = list(set(collected_top_level_directories)) # if we have individually queued this specific package, it's obvious that we want to build it specifically # in this case, do not honor the omission list From 433cb66a8ae2a585ef466a71d40dd1281c50b7ba Mon Sep 17 00:00:00 2001 From: scbedd <45376673+scbedd@users.noreply.github.com> Date: Thu, 12 Sep 2019 15:13:46 -0700 Subject: [PATCH 07/10] remove extraneous arg --- eng/pipelines/templates/steps/build-artifacts.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eng/pipelines/templates/steps/build-artifacts.yml b/eng/pipelines/templates/steps/build-artifacts.yml index f542c12f0b54..26028e320d9e 100644 --- a/eng/pipelines/templates/steps/build-artifacts.yml +++ b/eng/pipelines/templates/steps/build-artifacts.yml @@ -22,7 +22,7 @@ steps: displayName: 'Generate Python2 Applicable Namespace Packages' inputs: scriptPath: 'scripts/devops_tasks/build_packages.py' - arguments: '-d "$(Build.ArtifactStagingDirectory)" "*-nspkg" --service=${{parameters.ServiceDirectory}} --additionalfilterstring=nspkg' + arguments: '-d "$(Build.ArtifactStagingDirectory)" "*-nspkg" --service=${{parameters.ServiceDirectory}}' - task: UsePythonVersion@0 displayName: 'Use Python $(PythonVersion)' From 9f0561b77c510e285518d799fccdce11ea7fcb44 Mon Sep 17 00:00:00 2001 From: scbedd <45376673+scbedd@users.noreply.github.com> Date: Thu, 12 Sep 2019 17:23:24 -0700 Subject: [PATCH 08/10] pulling from package name, not folder --- scripts/analyze_deps.py | 13 ++++++++----- shared_requirements.txt | 4 ++-- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/scripts/analyze_deps.py b/scripts/analyze_deps.py index 6efbded72f14..3ffac9ef5a97 100755 --- a/scripts/analyze_deps.py +++ b/scripts/analyze_deps.py @@ -51,12 +51,12 @@ def get_lib_deps(base_dir): dependencies = {} for lib_dir in locate_libs(base_dir): try: - lib_name = os.path.basename(lib_dir) + setup_path = os.path.join(lib_dir, 'setup.py') + lib_name, version, requires = parse_setup(setup_path) + if should_skip_lib(lib_name): continue - setup_path = os.path.join(lib_dir, 'setup.py') - version, requires = parse_setup(setup_path) - + packages[lib_name] = { 'version': version, 'source': lib_dir @@ -127,13 +127,14 @@ def setup(*args, **kwargs): _, kwargs = global_vars['__setup_calls__'][0] version = kwargs['version'] + name = kwargs['name'] requires = [] if 'install_requires' in kwargs: requires += kwargs['install_requires'] if 'extras_require' in kwargs: for extra in kwargs['extras_require'].values(): requires += extra - return version, requires + return name, version, requires def dict_compare(d1, d2): d1_keys = set(d1.keys()) @@ -259,9 +260,11 @@ def render_report(output_path, report_context): missing_reqs, new_reqs, changed_reqs = {}, {}, {} non_overridden_reqs_count = 0 exitcode = 0 + if frozen: flat_deps = {req: sorted(dependencies[req].keys()) for req in dependencies} missing_reqs, new_reqs, changed_reqs = dict_compare(frozen, flat_deps) + if args.verbose and len(overrides) > 0: print('\nThe following requirement overrides are in place:') for overridden_req in overrides: diff --git a/shared_requirements.txt b/shared_requirements.txt index a5161a922b10..637c149e999d 100644 --- a/shared_requirements.txt +++ b/shared_requirements.txt @@ -107,5 +107,5 @@ six>=1.6 #override azure-storage-queue azure-core<2.0.0,>=1.0.0b3 #override azure-storage-file azure-core<2.0.0,>=1.0.0b3 #override azure-cosmos azure-core<2.0.0,>=1.0.0b3 -#override azure-eventhubs-checkpointstoreblob-aio azure-storage-blob<12.0.0b4,>=12.0.0b2 -#override azure-eventhubs-checkpointstoreblob-aio aiohttp<4.0,>=3.0 +#override azure-eventhub-checkpointstoreblob-aio azure-storage-blob<12.0.0b4,>=12.0.0b2 +#override azure-eventhub-checkpointstoreblob-aio aiohttp<4.0,>=3.0 From 9d6dce5282c91f9c0e147ca0cf04d86de29feeeb Mon Sep 17 00:00:00 2001 From: scbedd <45376673+scbedd@users.noreply.github.com> Date: Thu, 12 Sep 2019 17:28:54 -0700 Subject: [PATCH 09/10] touch a dev_requirements in eventhub to confirm that the overrides still check out --- sdk/eventhub/azure-mgmt-eventhub/dev_requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sdk/eventhub/azure-mgmt-eventhub/dev_requirements.txt b/sdk/eventhub/azure-mgmt-eventhub/dev_requirements.txt index 6ccb7f031ddd..f6457a93d5e8 100644 --- a/sdk/eventhub/azure-mgmt-eventhub/dev_requirements.txt +++ b/sdk/eventhub/azure-mgmt-eventhub/dev_requirements.txt @@ -1 +1 @@ --e ../../../tools/azure-sdk-tools +-e ../../../tools/azure-sdk-tools \ No newline at end of file From f1319fed498728964561b947e3cb58fe121a0f08 Mon Sep 17 00:00:00 2001 From: scbedd <45376673+scbedd@users.noreply.github.com> Date: Thu, 12 Sep 2019 17:30:03 -0700 Subject: [PATCH 10/10] removing whitespace that was unintentionally added --- scripts/analyze_deps.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/scripts/analyze_deps.py b/scripts/analyze_deps.py index 3ffac9ef5a97..783220fe6f55 100755 --- a/scripts/analyze_deps.py +++ b/scripts/analyze_deps.py @@ -260,11 +260,9 @@ def render_report(output_path, report_context): missing_reqs, new_reqs, changed_reqs = {}, {}, {} non_overridden_reqs_count = 0 exitcode = 0 - if frozen: flat_deps = {req: sorted(dependencies[req].keys()) for req in dependencies} missing_reqs, new_reqs, changed_reqs = dict_compare(frozen, flat_deps) - if args.verbose and len(overrides) > 0: print('\nThe following requirement overrides are in place:') for overridden_req in overrides: