diff options
author | Jason R. Coombs <jaraco@jaraco.com> | 2020-09-04 10:22:54 -0400 |
---|---|---|
committer | Jason R. Coombs <jaraco@jaraco.com> | 2020-09-04 10:22:54 -0400 |
commit | fc4d9828768ceebd2f9337481450c88376c013e9 (patch) | |
tree | 6dff622c50739ca19fdfbecf1008a42589d37b57 /tools | |
parent | 7bb73a477de24069002516eb6eb1d755bed9d65b (diff) | |
parent | 03d36b9edb53e266a0b4b836e1e3178f989a0781 (diff) | |
download | python-setuptools-git-feature/implicit-bootstrap.tar.gz |
Merge branch 'master' into feature/implicit-bootstrapfeature/implicit-bootstrap
Diffstat (limited to 'tools')
-rw-r--r-- | tools/finalize.py | 81 | ||||
-rw-r--r-- | tools/tox_pip.py | 14 |
2 files changed, 82 insertions, 13 deletions
diff --git a/tools/finalize.py b/tools/finalize.py new file mode 100644 index 00000000..98b06c07 --- /dev/null +++ b/tools/finalize.py @@ -0,0 +1,81 @@ +""" +Finalize the repo for a release. Invokes towncrier and bumpversion. +""" + +__requires__ = ['bump2version', 'towncrier'] + + +import subprocess +import pathlib +import re +import sys + + +def release_kind(): + """ + Determine which release to make based on the files in the + changelog. + """ + # use min here as 'major' < 'minor' < 'patch' + return min( + 'major' if 'breaking' in file.name else + 'minor' if 'change' in file.name else + 'patch' + for file in pathlib.Path('changelog.d').iterdir() + ) + + +bump_version_command = [ + sys.executable, + '-m', 'bumpversion', + release_kind(), +] + + +def get_version(): + cmd = bump_version_command + ['--dry-run', '--verbose'] + out = subprocess.check_output(cmd, text=True) + return re.search('^new_version=(.*)', out, re.MULTILINE).group(1) + + +def update_changelog(): + cmd = [ + sys.executable, '-m', + 'towncrier', + '--version', get_version(), + '--yes', + ] + subprocess.check_call(cmd) + + +def bump_version(): + cmd = bump_version_command + ['--allow-dirty'] + subprocess.check_call(cmd) + + +def ensure_config(): + """ + Double-check that Git has an e-mail configured. + """ + subprocess.check_output(['git', 'config', 'user.email']) + + +def check_changes(): + """ + Verify that all of the files in changelog.d have the appropriate + names. + """ + allowed = 'deprecation', 'breaking', 'change', 'doc', 'misc' + assert all( + any(key in file.name for key in allowed) + for file in pathlib.Path('changelog.d').iterdir() + if file.name != '.gitignore' + ) + + +if __name__ == '__main__': + print("Cutting release at", get_version()) + ensure_config() + check_changes() + update_changelog() + bump_version() diff --git a/tools/tox_pip.py b/tools/tox_pip.py index 3a66b05d..9abba603 100644 --- a/tools/tox_pip.py +++ b/tools/tox_pip.py @@ -12,7 +12,7 @@ def remove_setuptools(): cmd = [sys.executable, '-m', 'pip', 'uninstall', '-y', 'setuptools'] # set cwd to something other than '.' to avoid detecting # '.' as the installed package. - subprocess.check_call(cmd, cwd='.tox') + subprocess.check_call(cmd, cwd=os.environ['TOX_WORK_DIR']) def is_install_self(args): @@ -50,23 +50,11 @@ def test_dependencies(): return filter(None, map(clean, raw)) -def disable_python_requires(): - """ - On Python 2, install the dependencies that are selective - on Python version while honoring REQUIRES_PYTHON, then - disable REQUIRES_PYTHON so that pip can install this - checkout of setuptools. - """ - pip('install', *test_dependencies()) - os.environ['PIP_IGNORE_REQUIRES_PYTHON'] = 'true' - - def run(args): os.environ['PIP_USE_PEP517'] = 'true' if is_install_self(args): remove_setuptools() - sys.version_info > (3,) or disable_python_requires() pip(*args) |