mirror of
https://github.com/pkkid/python-plexapi
synced 2024-11-22 03:33:08 +00:00
105 lines
3.1 KiB
Python
Executable file
105 lines
3.1 KiB
Python
Executable file
#!/usr/bin/env python3
|
|
# -*- coding: utf-8 -*-
|
|
"""Helper script to bump the current version."""
|
|
import argparse
|
|
import re
|
|
import subprocess
|
|
|
|
from packaging.version import Version
|
|
|
|
from plexapi import const
|
|
|
|
SUPPORTED_BUMP_TYPES = ["patch", "minor", "major"]
|
|
|
|
|
|
def _bump_release(release, bump_type):
|
|
"""Return a bumped release tuple consisting of 3 numbers."""
|
|
major, minor, patch = release
|
|
|
|
if bump_type == "patch":
|
|
patch += 1
|
|
elif bump_type == "minor":
|
|
minor += 1
|
|
patch = 0
|
|
elif bump_type == "major":
|
|
major += 1
|
|
minor = 0
|
|
patch = 0
|
|
|
|
return major, minor, patch
|
|
|
|
|
|
def bump_version(version, bump_type):
|
|
"""Return a new version given a current version and action."""
|
|
new_release = _bump_release(version.release, bump_type)
|
|
temp = Version("0")
|
|
temp._version = version._version._replace(release=new_release)
|
|
return Version(str(temp))
|
|
|
|
|
|
def write_version(version):
|
|
"""Update plexapi constant file with new version."""
|
|
with open("plexapi/const.py") as f:
|
|
content = f.read()
|
|
|
|
version_names = ["MAJOR", "MINOR", "PATCH"]
|
|
version_values = str(version).split(".", 2)
|
|
|
|
for n, v in zip(version_names, version_values):
|
|
version_line = f"{n}_VERSION = "
|
|
content = re.sub(f"{version_line}.*\n", f"{version_line}{v}\n", content)
|
|
|
|
with open("plexapi/const.py", "wt") as f:
|
|
content = f.write(content)
|
|
|
|
|
|
def main():
|
|
"""Execute script."""
|
|
parser = argparse.ArgumentParser(description="Bump version of plexapi")
|
|
parser.add_argument(
|
|
"bump_type",
|
|
help="The type of version bump to perform",
|
|
choices=SUPPORTED_BUMP_TYPES,
|
|
)
|
|
parser.add_argument(
|
|
"--commit", action="store_true", help="Create a version bump commit"
|
|
)
|
|
parser.add_argument(
|
|
"--tag", action="store_true", help="Tag the commit with the release version"
|
|
)
|
|
arguments = parser.parse_args()
|
|
|
|
if arguments.tag and not arguments.commit:
|
|
parser.error("--tag requires use of --commit")
|
|
|
|
if arguments.commit and subprocess.run(["git", "diff", "--quiet"]).returncode == 1:
|
|
print("Cannot use --commit because git is dirty")
|
|
return
|
|
|
|
current = Version(const.__version__)
|
|
bumped = bump_version(current, arguments.bump_type)
|
|
assert bumped > current, "Bumped version is not newer than old version"
|
|
|
|
write_version(bumped)
|
|
|
|
if not arguments.commit:
|
|
return
|
|
|
|
subprocess.run(["git", "commit", "-nam", f"Release {bumped}"])
|
|
|
|
if arguments.tag:
|
|
subprocess.run(["git", "tag", str(bumped), "-m", f"Release {bumped}"])
|
|
|
|
|
|
def test_bump_version():
|
|
"""Make sure it all works."""
|
|
assert bump_version(Version("4.7.0"), "patch") == Version("4.7.1")
|
|
assert bump_version(Version("4.7.0"), "minor") == Version("4.8.0")
|
|
assert bump_version(Version("4.7.3"), "minor") == Version("4.8.0")
|
|
assert bump_version(Version("4.7.0"), "major") == Version("5.0.0")
|
|
assert bump_version(Version("4.7.3"), "major") == Version("5.0.0")
|
|
assert bump_version(Version("5.0.0"), "major") == Version("6.0.0")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|