1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
|
#! /usr/bin/env python
"""
Cross-platform bump of version with special CHANGELOG modification.
INTENDED TO BE CALLED FROM PROJECT ROOT, NOT FROM dev/!
"""
import subprocess
import sys
try:
bump_type = sys.argv[1]
except IndexError:
sys.exit("Must pass 'bump_type' argument!")
else:
if bump_type not in ("major", "minor", "patch"):
sys.exit('bump_type must be one of "major", "minor", or "patch"!')
def git(cmd, *args):
"""Wrapper for calling git"""
try:
subprocess.run(["git", cmd, *args], check=True, text=True)
except subprocess.CalledProcessError as e:
print("Call to git failed!", file=sys.stderr)
print("STDOUT:", e.stdout, file=sys.stderr)
print("STDERR:", e.stderr, file=sys.stderr)
sys.exit(e.returncode)
def bumpversion(severity, *args, catch=False):
"""Wrapper for calling bumpversion"""
cmd = ["bump2version", *args, severity]
try:
if catch:
return subprocess.run(
cmd, check=True, capture_output=True, text=True
).stdout
else:
subprocess.run(cmd, check=True, text=True)
except subprocess.CalledProcessError as e:
print("Call to bump2version failed!", file=sys.stderr)
print("STDOUT:", e.stdout, file=sys.stderr)
print("STDERR:", e.stderr, file=sys.stderr)
sys.exit(e.returncode)
# Do a dry run of the bump to find what the current version is and what it will become.
data = bumpversion(bump_type, "--dry-run", "--list", catch=True)
data = dict(x.split("=") for x in data.splitlines())
# Execute the bumpversion.
bumpversion(bump_type)
# Post-process the changelog with things that bumpversion is not good at updating.
with open("CHANGELOG.md") as fl:
changelog = fl.read().replace(
"<!---Comparison links-->",
"<!---Comparison links-->\n[{new}]: {url}/{current}...{new}".format(
new=data["new_version"],
current=data["current_version"],
url="https://github.com/SethMMorton/natsort/compare",
),
)
with open("CHANGELOG.md", "w") as fl:
fl.write(changelog)
# Finally, add the CHANGELOG.md changes to the previous commit.
git("add", "CHANGELOG.md")
git("commit", "--amend", "--no-edit")
git("tag", "--force", data["new_version"], "HEAD")
|