From ca12ce16c94ca1cdedb10f6101abfe172d6e9a1d Mon Sep 17 00:00:00 2001 From: Cserna Zsolt Date: Sat, 14 Feb 2026 13:02:26 +0100 Subject: [PATCH] Make release.py more robust 1. run test_release.py before making the release 2. check if git repository is not dirty --- scripts/release.py | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/scripts/release.py b/scripts/release.py index 25af2760..399915e2 100755 --- a/scripts/release.py +++ b/scripts/release.py @@ -52,6 +52,37 @@ def check_environment(): raise UsageError("No such binary: {}".format(binary)) +def run_test_release(): + return subprocess.check_call(["pytest", "tests/test_release.py", "--release"]) + + +def check_git_repository_dirty(): + result = subprocess.run( + [ + "git", + "status", + "--porcelain", + "--ignored=matching", + ], + capture_output=True, + encoding="utf-8", + check=False, + ) + if result.returncode != 0: + raise UsageError("Failed to check git repository status") + + accepted = [ + "!! .venv/", + ] + + for line in result.stdout.splitlines(): + if line not in accepted: + raise UsageError( + "Git repository is dirty. Please commit or stash changes before releasing, " + "or run git clean -fdx to remove ignored files." + ) + + def main() -> None: parser = argparse.ArgumentParser() parser.add_argument("new_version", help="Version to release") @@ -69,6 +100,8 @@ def main() -> None: raise UsageError("Current version is the same as new version") check_changelog() + check_git_repository_dirty() + run_test_release() bump_version(Path("doc/conf.py"), ["version"], current_version, new_version) subprocess.check_call(["poetry", "version", new_version])