1010from util import create_release_branch
1111from util import get_bumped_package_version
1212from util import get_package_version
13+ from util import require_clean_and_up_to_date_repo
1314
1415
1516def main () -> None :
@@ -20,9 +21,9 @@ def main() -> None:
2021
2122
2223def get_parser () -> argparse .ArgumentParser :
23- """Creates the argument parser for prepare -release."""
24+ """Creates the argument parser for setup -release."""
2425 parser : argparse .ArgumentParser = argparse .ArgumentParser (
25- prog = "prepare -release" , usage = "python ./scripts/prepare -release.py patch"
26+ prog = "setup -release" , usage = "python ./scripts/setup -release.py patch"
2627 )
2728 parser .add_argument (
2829 "increment" ,
@@ -38,13 +39,26 @@ def get_parser() -> argparse.ArgumentParser:
3839def setup_release (increment : Optional [str ] = None ) -> None :
3940 """Prepares a release of the robust-python-demo package.
4041
41- Sets up a release branch from the branch develop, bumps the version, and creates a release commit. Does not tag the
42- release or push any changes.
42+ Will try to create the release and push, however will return to pre-existing state on error.
4343 """
4444 check_dependencies (path = REPO_FOLDER , dependencies = ["git" ])
45+ require_clean_and_up_to_date_repo ()
4546
4647 current_version : str = get_package_version ()
4748 new_version : str = get_bumped_package_version (increment = increment )
49+ try :
50+ _setup_release (increment = increment , current_version = current_version , new_version = new_version )
51+ except Exception as error :
52+ _rollback_release (version = new_version )
53+ raise error
54+
55+
56+ def _setup_release (increment : str , current_version : str , new_version : str ) -> None :
57+ """Prepares a release of the robust-python-demo package.
58+
59+ Sets up a release branch from the branch develop, bumps the version, and creates a release commit. Does not tag the
60+ release or push any changes.
61+ """
4862 create_release_branch (new_version = new_version )
4963 bump_version (increment = increment )
5064
@@ -58,5 +72,17 @@ def setup_release(increment: Optional[str] = None) -> None:
5872 subprocess .run (command , cwd = REPO_FOLDER , capture_output = True , check = True )
5973
6074
75+ def _rollback_release (version : str ) -> None :
76+ """Rolls back to the pre-existing state on error."""
77+ commands : list [list [str ]] = [
78+ ["git" , "checkout" , "develop" ],
79+ ["git" , "checkout" , "." ],
80+ ["git" , "branch" , "-D" , f"release/{ version } " ],
81+ ]
82+
83+ for command in commands :
84+ subprocess .run (command , cwd = REPO_FOLDER , check = False )
85+
86+
6187if __name__ == "__main__" :
6288 main ()
0 commit comments