#!/usr/bin/python3
import sys
import os
import re
from subprocess import check_output, check_call


def bump(version):
    components = version.split(".")
    components[1] = str(int(components[1]) + 1)
    components[2] = "0"
    return ".".join(components)


def run():
    os.chdir(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))

    current_version = check_output(
        [sys.executable, "setup.py", "--version"], encoding="utf-8"
    ).strip()
    new_version = bump(current_version)

    check_call(
        [
            "sed",
            "-r",
            "-e",
            "s|%s|%s|g" % (re.escape(current_version), new_version),
            "-i",
            "setup.py",
        ]
    )

    check_call(["git", "add", "setup.py"])

    tag = "v" + new_version
    msg = "Release " + tag
    check_call(["git", "commit", "-m", msg])
    check_call(["git", "tag", "-a", "-m", msg, tag])

    print("Check `git log', then `git push --follow-tags'")


if __name__ == "__main__":
    run()
