diff --git a/noxfile.py b/noxfile.py index 1256746..e66d5a9 100644 --- a/noxfile.py +++ b/noxfile.py @@ -75,3 +75,58 @@ def doc(session): session.chdir("doc") session.run("make", "cleanall", external=True) session.run("make", external=True) + + +def _get_version_from_pyproject(path=Path.cwd()): + if isinstance(path, str): + path = Path(path) + + if not path.name == "pyproject.toml": + path /= "pyproject.toml" + + in_project = False + version = None + with open(path, encoding="utf-8") as file: + for line in file: + if line.startswith("[project]"): + in_project = True + if line.startswith("version =") and in_project: + version = line.split("=")[1].strip() + version = version[1:-1] + break + + assert version is not None + return version + + +@nox.session(name="add-tag-for-release", venv_backend="none") +def add_tag_for_release(session): + session.run("hg", "pull", external=True) + + result = session.run( + *"hg log -r default -G".split(), external=True, silent=True + ) + if result[0] != "@": + session.run("hg", "update", "default", external=True) + + version = _get_version_from_pyproject() + print(f"{version = }") + + result = session.run("hg", "tags", "-T", "{tag},", external=True, silent=True) + last_tag = result.split(",", 2)[1] + print(f"{last_tag = }") + + if last_tag == version: + session.error("last_tag == version") + + answer = input( + f'Do you really want to add and push the new tag "{version}"? (yes/[no]) ' + ) + + if answer != "yes": + print("Maybe next time then. Bye!") + return + + print("Let's go!") + session.run("hg", "tag", version, external=True) + session.run("hg", "push", external=True)