Skip to content
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Next Next commit
properly update the dev versioning requirements for packages
  • Loading branch information
scbedd committed Oct 4, 2020
commit 334fc413b9e3690f1b414eb80d32cf25524836e9
15 changes: 11 additions & 4 deletions eng/tox/sanitize_setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,16 +13,18 @@
import logging
import glob
from packaging.specifiers import SpecifierSet
from packaging.version import Version
from pkg_resources import Requirement
from pypi_tools.pypi import PyPIClient
import re

root_dir = os.path.abspath(os.path.join(os.path.abspath(__file__), "..", "..", ".."))
setup_parser_path = os.path.abspath(os.path.join(root_dir, "eng", "versioning"))

sys.path.append(setup_parser_path)
from setup_parser import get_install_requires, parse_setup

DEV_BUILD_IDENTIFIER = ".dev"
DEV_BUILD_IDENTIFIER = "a"

def update_requires(setup_py_path, requires_dict):
# This method changes package requirement by overriding the specifier
Expand Down Expand Up @@ -62,12 +64,16 @@ def get_version(pkg_name):
# When building package with dev build version, version for packages in same service is updated to dev build
# and other packages will not have dev build number
# strip dev build number so we can check if package exists in PyPI and replace
if DEV_BUILD_IDENTIFIER in version:
version = version[:version.find(DEV_BUILD_IDENTIFIER)]

version_obj = Version(version)
if version_obj.pre[0] == DEV_BUILD_IDENTIFIER:
version = version_obj.base_version

return version
else:
logging.error("setyp.py is not found for package {} to identify current version".format(pkg_name))
exit(1)


def process_requires(setup_py_path):
# This method process package requirement to verify if all required packages are available on PyPI
Expand All @@ -82,11 +88,12 @@ def process_requires(setup_py_path):
for req in requires:
pkg_name = req.key
spec = SpecifierSet(str(req).replace(pkg_name, ""))

if not is_required_version_on_pypi(pkg_name, spec):
old_req = str(req)
version = get_version(pkg_name)
logging.info("Updating version {0} in requirement {1} to dev build version".format(version, old_req))
new_req = old_req.replace(version, "{}.dev".format(version))
new_req = re.sub('{}[a]*'.format(version), "{}{}".format(version, DEV_BUILD_IDENTIFIER), old_req)
logging.info("New requirement for package {0}: {1}".format(pkg_name, new_req))
requirement_to_update[old_req] = new_req

Expand Down