diff --git a/commitizen/cli.py b/commitizen/cli.py index 79988fb5c..a67b789f3 100644 --- a/commitizen/cli.py +++ b/commitizen/cli.py @@ -263,6 +263,12 @@ def __call__( "help": "Specify non-negative integer for dev release.", "type": int, }, + { + "name": ["--postrelease"], + "action": "store_true", + "default": False, + "help": "Mark as a post release", + }, { "name": ["--increment"], "help": "Specify the desired increment.", diff --git a/commitizen/commands/bump.py b/commitizen/commands/bump.py index 6084c8c15..7192f8f21 100644 --- a/commitizen/commands/bump.py +++ b/commitizen/commands/bump.py @@ -46,6 +46,7 @@ class BumpArgs(Settings, total=False): changelog: bool check_consistency: bool devrelease: int | None + postrelease: bool dry_run: bool file_name: str files_only: bool | None @@ -167,6 +168,7 @@ def _validate_arguments(self, current_version: VersionProtocol) -> None: (self.arguments["increment"], "--increment"), (self.arguments["prerelease"], "--prerelease"), (self.arguments["devrelease"] is not None, "--devrelease"), + (self.arguments["postrelease"], "--postrelease"), (self.arguments["local_version"], "--local-version"), (self.arguments["build_metadata"], "--build-metadata"), (self.arguments["major_version_zero"], "--major-version-zero"), @@ -228,11 +230,15 @@ def _resolve_increment_and_new_version( if increment is None and self.arguments["allow_no_commit"]: increment = "PATCH" + if self.arguments["postrelease"]: + increment = None + return increment, current_version.bump( increment, prerelease=self.arguments["prerelease"], prerelease_offset=self.bump_settings["prerelease_offset"], devrelease=self.arguments["devrelease"], + postrelease=self.arguments["postrelease"], is_local_version=self.arguments["local_version"], build_metadata=self.arguments["build_metadata"], exact_increment=self.arguments["increment_mode"] == "exact", diff --git a/commitizen/defaults.py b/commitizen/defaults.py index 4865ccc18..300cfa70d 100644 --- a/commitizen/defaults.py +++ b/commitizen/defaults.py @@ -158,6 +158,7 @@ def get_tag_regexes( "patch": r"(?P\d+)", "prerelease": r"(?P\w+\d+)?", "devrelease": r"(?P\.dev\d+)?", + "postrelease": r"(?P\.post\d+)?", } return { **{f"${k}": v for k, v in regexes.items()}, diff --git a/commitizen/version_schemes.py b/commitizen/version_schemes.py index c03d908aa..a740bb77d 100644 --- a/commitizen/version_schemes.py +++ b/commitizen/version_schemes.py @@ -75,6 +75,16 @@ def prerelease(self) -> str | None: """The prerelease potion of the version is this is a prerelease.""" raise NotImplementedError("must be implemented") + @property + def is_postrelease(self) -> bool: + """Whether this version is a post-release.""" + raise NotImplementedError("must be implemented") + + @property + def postrelease(self) -> str | None: + """The postrelease potion of the version is this is a postrelease.""" + raise NotImplementedError("must be implemented") + @property def public(self) -> str: """The public portion of the version.""" @@ -124,6 +134,7 @@ def bump( prerelease: Prerelease | None = None, prerelease_offset: int = 0, devrelease: int | None = None, + postrelease: bool = False, is_local_version: bool = False, build_metadata: str | None = None, exact_increment: bool = False, @@ -164,6 +175,13 @@ def prerelease(self) -> str | None: return f"{self.pre[0]}{self.pre[1]}" return None + @property + def postrelease(self) -> str | None: + # version.post is needed for mypy check + if self.is_postrelease and self.post is not None: + return f"post{self.post}" + return None + def generate_prerelease( self, prerelease: str | None = None, offset: int = 0 ) -> str: @@ -206,6 +224,19 @@ def generate_devrelease(self, devrelease: int | None) -> str: return f"dev{devrelease}" + def generate_postrelease(self, postrelease: bool = False) -> str: + """Generate postrelease""" + if not postrelease: + return "" + + # version.post is needed for mypy check + if self.is_postrelease and self.post is not None: + new_postrelease_number = self.post + 1 + else: + new_postrelease_number = 0 + + return f"post{new_postrelease_number}" + def generate_build_metadata(self, build_metadata: str | None) -> str: """Generate build-metadata @@ -240,6 +271,7 @@ def bump( prerelease: Prerelease | None = None, prerelease_offset: int = 0, devrelease: int | None = None, + postrelease: bool = False, is_local_version: bool = False, build_metadata: str | None = None, exact_increment: bool = False, @@ -272,9 +304,10 @@ def bump( self if base == current_base else cast("BaseVersion", self.scheme(base)) ).generate_prerelease(prerelease, offset=prerelease_offset) - # TODO: post version + post_version = self.generate_postrelease(postrelease) + return self.scheme( - f"{base}{pre_version}{dev_version}{self.generate_build_metadata(build_metadata)}" + f"{base}{pre_version}{post_version}{dev_version}{self.generate_build_metadata(build_metadata)}" ) # type: ignore[return-value] def _get_increment_base( diff --git a/docs/commands/bump.md b/docs/commands/bump.md index cbd6d5452..e9c386e17 100644 --- a/docs/commands/bump.md +++ b/docs/commands/bump.md @@ -116,7 +116,29 @@ Commitizen supports the [PEP 440][pep440] version format, which includes several 1.0.0b2.dev1 # Development release 1 of beta 2 ``` -> **Note**: `post` releases (e.g., `1.0.0.post1`) are not currently supported. +#### Post-releases +```text +1.0.0.post0 # Post-release 0 +1.0.0.post1 # Post-release 1 +``` + +#### Combined Pre-release and Post-release +```text +1.0.0a1.post0 # Alpha release 1 with a post-release +1.0.0rc1.post1 # Release candidate 1 with a post-release +``` + +#### Combined Post-release and Development +```text +1.0.0.post0.dev0 # Post-release 0 with development release 0 +1.0.0.post1.dev1 # Post-release 1 with development release 1 +``` + +#### Combined Post-release, Pre-release and Development +```text +1.0.0a1.post0.dev0 # Alpha release 1 Post-release 0 with development release 0 +1.0.0rc1.post1.dev1 # Release candidate 1 Post-release 1 with development release 1 +``` ## Command line options @@ -162,6 +184,21 @@ by their precedence and showcase how a release might flow through a development - `1.1.0rc0` after bumping the release candidate - `1.1.0` next feature release +### `--devrelease` + +The bump is a development-release bump. A development release appends a `.devN` segment to the +current version where `N` is a non-negative integer. Use `--devrelease ` to explicitly set the +development release number. When combined with prereleases or post-releases the `.devN` segment is +placed after those segments (for example `1.0.0a1.dev0` or `1.0.0.post0.dev0`). + +### `--postrelease` + +A post-release preserves the current base version and appends a `.postN` segment. Use the +`--postrelease` boolean flag to create or increment a post-release. Post-releases start at +`.post0` and increment the post number on subsequent `--postrelease` bumps (new commits required +for subsequent increments). To promote a post-release to the next final version, run a normal bump +without `--postrelease`. + ### `--increment-mode` #### `--increment-mode=linear` (default) diff --git a/docs/images/cli_help/cz_bump___help.svg b/docs/images/cli_help/cz_bump___help.svg index ec6b4816f..2d17b45de 100644 --- a/docs/images/cli_help/cz_bump___help.svg +++ b/docs/images/cli_help/cz_bump___help.svg @@ -1,4 +1,4 @@ - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + + + + - + - + - - $ cz bump --help -usage: cz bump [-h][--dry-run][--files-only][--version-files-only] -[--local-version][--changelog][--no-verify][--yes] -[--tag-format TAG_FORMAT][--bump-message BUMP_MESSAGE] -[--prerelease {alpha,beta,rc}][--devrelease DEVRELEASE] -[--increment {MAJOR,MINOR,PATCH}] -[--increment-mode {linear,exact}][--check-consistency] -[--annotated-tag] -[--annotated-tag-message ANNOTATED_TAG_MESSAGE][--gpg-sign] -[--changelog-to-stdout][--git-output-to-stderr][--retry] -[--major-version-zero][--template TEMPLATE][--extra EXTRA] -[--file-name FILE_NAME][--prerelease-offset PRERELEASE_OFFSET] -[--version-scheme {pep440,semver,semver2}] -[--version-type {pep440,semver,semver2}] -[--build-metadata BUILD_METADATA][--get-next] -[--allow-no-commit] -[MANUAL_VERSION] - -Bump semantic version based on the git log - -positional arguments: -  MANUAL_VERSION        Bump to the given version (e.g., 1.5.3). - -options: -  -h, --help            show this help message and exit -  --dry-run             Perform a dry run, without committing or modifying -                        files. -  --files-only          Bump version in the `version_files` specified in the -                        configuration file only(deprecated; use --version- -                        files-only instead). -  --version-files-only  Bump version in the files from the config -  --local-version       Bump version only the local version portion (ignoring -                        the public version). -  --changelog, -ch      Generate the changelog for the latest version. -  --no-verify           Bypass the pre-commit and commit-msg hooks. -  --yes                 Accept automatically answered questions. -  --tag-format TAG_FORMAT -                        The format used to tag the commit and read it. Use it -                        in existing projects, and wrap around simple quotes. -  --bump-message BUMP_MESSAGE -                        Template used to create the release commit, useful -                        when working with CI. -  --prerelease {alpha,beta,rc}, -pr {alpha,beta,rc} -                        Type of prerelease. -  --devrelease DEVRELEASE, -d DEVRELEASE -                        Specify non-negative integer for dev release. -  --increment {MAJOR,MINOR,PATCH} -                        Specify the desired increment. -  --increment-mode {linear,exact} -                        Set the method by which the new version is chosen. -'linear'(default) resolves the next version based on -                        typical linear version progression, where bumping of a -                        pre-release with lower precedence than the current -                        pre-release phase maintains the current phase of -                        higher precedence. 'exact' applies the changes that -                        have been specified (or determined from the commit -                        log) without interpretation, ensuring the increment -                        and pre-release are always honored. -  --check-consistency, -cc -                        Check consistency among versions defined in Commitizen -                        configuration file and `version_files`. -  --annotated-tag, -at  Create annotated tag instead of lightweight one. -  --annotated-tag-message ANNOTATED_TAG_MESSAGE, -atm ANNOTATED_TAG_MESSAGE -                        Create annotated tag message. -  --gpg-sign, -s        Sign tag instead of lightweight one. -  --changelog-to-stdout -                        Output changelog to stdout. -  --git-output-to-stderr -                        Redirect git output to stderr. -  --retry               Retry commit if it fails for the first time. -  --major-version-zero  Keep major version at zero, even for breaking changes. -  --template TEMPLATE, -t TEMPLATE -                        Changelog template file name (relative to the current -                        working directory). -  --extra EXTRA, -e EXTRA -                        Changelog extra variables (in the form 'key=value'). -  --file-name FILE_NAME -                        File name of changelog (default: 'CHANGELOG.md'). -  --prerelease-offset PRERELEASE_OFFSET -                        Start pre-releases with this offset. -  --version-scheme {pep440,semver,semver2} -                        Choose version scheme. -  --version-type {pep440,semver,semver2} -                        Deprecated, use `--version-scheme` instead. -  --build-metadata BUILD_METADATA -                        Add additional build-metadata to the version-number. -  --get-next            Determine the next version and write to stdout. -  --allow-no-commit     Bump version without eligible commits. - + + $ cz bump --help +usage: cz bump [-h][--dry-run][--files-only][--version-files-only] +[--local-version][--changelog][--no-verify][--yes] +[--tag-format TAG_FORMAT][--bump-message BUMP_MESSAGE] +[--prerelease {alpha,beta,rc}][--devrelease DEVRELEASE] +[--postrelease][--increment {MAJOR,MINOR,PATCH}] +[--increment-mode {linear,exact}][--check-consistency] +[--annotated-tag] +[--annotated-tag-message ANNOTATED_TAG_MESSAGE][--gpg-sign] +[--changelog-to-stdout][--git-output-to-stderr][--retry] +[--major-version-zero][--template TEMPLATE][--extra EXTRA] +[--file-name FILE_NAME][--prerelease-offset PRERELEASE_OFFSET] +[--version-scheme {pep440,semver,semver2}] +[--version-type {pep440,semver,semver2}] +[--build-metadata BUILD_METADATA][--get-next] +[--allow-no-commit] +[MANUAL_VERSION] + +Bump semantic version based on the git log + +positional arguments: +  MANUAL_VERSION        Bump to the given version (e.g., 1.5.3). + +options: +  -h, --help            show this help message and exit +  --dry-run             Perform a dry run, without committing or modifying +                        files. +  --files-only          Bump version in the `version_files` specified in the +                        configuration file only(deprecated; use --version- +                        files-only instead). +  --version-files-only  Bump version in the files from the config +  --local-version       Bump version only the local version portion (ignoring +                        the public version). +  --changelog, -ch      Generate the changelog for the latest version. +  --no-verify           Bypass the pre-commit and commit-msg hooks. +  --yes                 Accept automatically answered questions. +  --tag-format TAG_FORMAT +                        The format used to tag the commit and read it. Use it +                        in existing projects, and wrap around simple quotes. +  --bump-message BUMP_MESSAGE +                        Template used to create the release commit, useful +                        when working with CI. +  --prerelease {alpha,beta,rc}, -pr {alpha,beta,rc} +                        Type of prerelease. +  --devrelease DEVRELEASE, -d DEVRELEASE +                        Specify non-negative integer for dev release. +  --postrelease         Mark as a post release +  --increment {MAJOR,MINOR,PATCH} +                        Specify the desired increment. +  --increment-mode {linear,exact} +                        Set the method by which the new version is chosen. +'linear'(default) resolves the next version based on +                        typical linear version progression, where bumping of a +                        pre-release with lower precedence than the current +                        pre-release phase maintains the current phase of +                        higher precedence. 'exact' applies the changes that +                        have been specified (or determined from the commit +                        log) without interpretation, ensuring the increment +                        and pre-release are always honored. +  --check-consistency, -cc +                        Check consistency among versions defined in Commitizen +                        configuration file and `version_files`. +  --annotated-tag, -at  Create annotated tag instead of lightweight one. +  --annotated-tag-message ANNOTATED_TAG_MESSAGE, -atm ANNOTATED_TAG_MESSAGE +                        Create annotated tag message. +  --gpg-sign, -s        Sign tag instead of lightweight one. +  --changelog-to-stdout +                        Output changelog to stdout. +  --git-output-to-stderr +                        Redirect git output to stderr. +  --retry               Retry commit if it fails for the first time. +  --major-version-zero  Keep major version at zero, even for breaking changes. +  --template TEMPLATE, -t TEMPLATE +                        Changelog template file name (relative to the current +                        working directory). +  --extra EXTRA, -e EXTRA +                        Changelog extra variables (in the form 'key=value'). +  --file-name FILE_NAME +                        File name of changelog (default: 'CHANGELOG.md'). +  --prerelease-offset PRERELEASE_OFFSET +                        Start pre-releases with this offset. +  --version-scheme {pep440,semver,semver2} +                        Choose version scheme. +  --version-type {pep440,semver,semver2} +                        Deprecated, use `--version-scheme` instead. +  --build-metadata BUILD_METADATA +                        Add additional build-metadata to the version-number. +  --get-next            Determine the next version and write to stdout. +  --allow-no-commit     Bump version without eligible commits. + diff --git a/tests/commands/test_bump_command.py b/tests/commands/test_bump_command.py index d458e34d8..dd9755f04 100644 --- a/tests/commands/test_bump_command.py +++ b/tests/commands/test_bump_command.py @@ -226,6 +226,32 @@ def test_bump_command_prerelease(util: UtilFixture): assert git.tag_exist("0.2.0") is True +@pytest.mark.usefixtures("tmp_commitizen_project") +def test_bump_command_postrelease(util: UtilFixture): + util.create_file_and_commit("feat: location") + + # Create a post-release. + # It maintains the current version (0.1.0) and adds post0 + util.run_cli("bump", "--postrelease", "--yes") + assert git.tag_exist("0.1.0.post0") is True + + # With a current post-release, bumping again must bump postrelease number. + # However, without new commits, bump command raises NoCommitsFoundError. + # We add a commit to allow bumping. + util.create_file_and_commit("fix: new fix") + util.run_cli("bump", "--postrelease", "--yes") + # 0.1.0 -> fix -> 0.1.0. post0 -> post1. Result: 0.1.0.post1 + assert git.tag_exist("0.1.0.post1") is True + + # Create a final release from the current post-release. + util.create_file_and_commit("fix: small fix") + util.run_cli("bump", "--yes") + # 0.1.0.post1 base is 0.1.0. + # increment is PATCH (from fix). + # 0.1.0 + PATCH -> 0.1.1 + assert git.tag_exist("0.1.1") is True + + @pytest.mark.usefixtures("tmp_commitizen_project") def test_bump_command_prerelease_increment(util: UtilFixture): # FINAL RELEASE diff --git a/tests/commands/test_common_command/test_command_shows_description_when_use_help_option_py_3_10_bump_.txt b/tests/commands/test_common_command/test_command_shows_description_when_use_help_option_py_3_10_bump_.txt index fa696d063..4f18b056f 100644 --- a/tests/commands/test_common_command/test_command_shows_description_when_use_help_option_py_3_10_bump_.txt +++ b/tests/commands/test_common_command/test_command_shows_description_when_use_help_option_py_3_10_bump_.txt @@ -2,7 +2,7 @@ usage: cz bump [-h] [--dry-run] [--files-only] [--version-files-only] [--local-version] [--changelog] [--no-verify] [--yes] [--tag-format TAG_FORMAT] [--bump-message BUMP_MESSAGE] [--prerelease {alpha,beta,rc}] [--devrelease DEVRELEASE] - [--increment {MAJOR,MINOR,PATCH}] + [--postrelease] [--increment {MAJOR,MINOR,PATCH}] [--increment-mode {linear,exact}] [--check-consistency] [--annotated-tag] [--annotated-tag-message ANNOTATED_TAG_MESSAGE] [--gpg-sign] @@ -43,6 +43,7 @@ options: Type of prerelease. --devrelease DEVRELEASE, -d DEVRELEASE Specify non-negative integer for dev release. + --postrelease Mark as a post release --increment {MAJOR,MINOR,PATCH} Specify the desired increment. --increment-mode {linear,exact} diff --git a/tests/commands/test_common_command/test_command_shows_description_when_use_help_option_py_3_11_bump_.txt b/tests/commands/test_common_command/test_command_shows_description_when_use_help_option_py_3_11_bump_.txt index fa696d063..4f18b056f 100644 --- a/tests/commands/test_common_command/test_command_shows_description_when_use_help_option_py_3_11_bump_.txt +++ b/tests/commands/test_common_command/test_command_shows_description_when_use_help_option_py_3_11_bump_.txt @@ -2,7 +2,7 @@ usage: cz bump [-h] [--dry-run] [--files-only] [--version-files-only] [--local-version] [--changelog] [--no-verify] [--yes] [--tag-format TAG_FORMAT] [--bump-message BUMP_MESSAGE] [--prerelease {alpha,beta,rc}] [--devrelease DEVRELEASE] - [--increment {MAJOR,MINOR,PATCH}] + [--postrelease] [--increment {MAJOR,MINOR,PATCH}] [--increment-mode {linear,exact}] [--check-consistency] [--annotated-tag] [--annotated-tag-message ANNOTATED_TAG_MESSAGE] [--gpg-sign] @@ -43,6 +43,7 @@ options: Type of prerelease. --devrelease DEVRELEASE, -d DEVRELEASE Specify non-negative integer for dev release. + --postrelease Mark as a post release --increment {MAJOR,MINOR,PATCH} Specify the desired increment. --increment-mode {linear,exact} diff --git a/tests/commands/test_common_command/test_command_shows_description_when_use_help_option_py_3_12_bump_.txt b/tests/commands/test_common_command/test_command_shows_description_when_use_help_option_py_3_12_bump_.txt index fa696d063..4f18b056f 100644 --- a/tests/commands/test_common_command/test_command_shows_description_when_use_help_option_py_3_12_bump_.txt +++ b/tests/commands/test_common_command/test_command_shows_description_when_use_help_option_py_3_12_bump_.txt @@ -2,7 +2,7 @@ usage: cz bump [-h] [--dry-run] [--files-only] [--version-files-only] [--local-version] [--changelog] [--no-verify] [--yes] [--tag-format TAG_FORMAT] [--bump-message BUMP_MESSAGE] [--prerelease {alpha,beta,rc}] [--devrelease DEVRELEASE] - [--increment {MAJOR,MINOR,PATCH}] + [--postrelease] [--increment {MAJOR,MINOR,PATCH}] [--increment-mode {linear,exact}] [--check-consistency] [--annotated-tag] [--annotated-tag-message ANNOTATED_TAG_MESSAGE] [--gpg-sign] @@ -43,6 +43,7 @@ options: Type of prerelease. --devrelease DEVRELEASE, -d DEVRELEASE Specify non-negative integer for dev release. + --postrelease Mark as a post release --increment {MAJOR,MINOR,PATCH} Specify the desired increment. --increment-mode {linear,exact} diff --git a/tests/commands/test_common_command/test_command_shows_description_when_use_help_option_py_3_13_bump_.txt b/tests/commands/test_common_command/test_command_shows_description_when_use_help_option_py_3_13_bump_.txt index 8e4c86358..801600379 100644 --- a/tests/commands/test_common_command/test_command_shows_description_when_use_help_option_py_3_13_bump_.txt +++ b/tests/commands/test_common_command/test_command_shows_description_when_use_help_option_py_3_13_bump_.txt @@ -2,7 +2,7 @@ usage: cz bump [-h] [--dry-run] [--files-only] [--version-files-only] [--local-version] [--changelog] [--no-verify] [--yes] [--tag-format TAG_FORMAT] [--bump-message BUMP_MESSAGE] [--prerelease {alpha,beta,rc}] [--devrelease DEVRELEASE] - [--increment {MAJOR,MINOR,PATCH}] + [--postrelease] [--increment {MAJOR,MINOR,PATCH}] [--increment-mode {linear,exact}] [--check-consistency] [--annotated-tag] [--annotated-tag-message ANNOTATED_TAG_MESSAGE] [--gpg-sign] @@ -43,6 +43,7 @@ options: Type of prerelease. --devrelease, -d DEVRELEASE Specify non-negative integer for dev release. + --postrelease Mark as a post release --increment {MAJOR,MINOR,PATCH} Specify the desired increment. --increment-mode {linear,exact} diff --git a/tests/commands/test_common_command/test_command_shows_description_when_use_help_option_py_3_14_bump_.txt b/tests/commands/test_common_command/test_command_shows_description_when_use_help_option_py_3_14_bump_.txt index 8e4c86358..801600379 100644 --- a/tests/commands/test_common_command/test_command_shows_description_when_use_help_option_py_3_14_bump_.txt +++ b/tests/commands/test_common_command/test_command_shows_description_when_use_help_option_py_3_14_bump_.txt @@ -2,7 +2,7 @@ usage: cz bump [-h] [--dry-run] [--files-only] [--version-files-only] [--local-version] [--changelog] [--no-verify] [--yes] [--tag-format TAG_FORMAT] [--bump-message BUMP_MESSAGE] [--prerelease {alpha,beta,rc}] [--devrelease DEVRELEASE] - [--increment {MAJOR,MINOR,PATCH}] + [--postrelease] [--increment {MAJOR,MINOR,PATCH}] [--increment-mode {linear,exact}] [--check-consistency] [--annotated-tag] [--annotated-tag-message ANNOTATED_TAG_MESSAGE] [--gpg-sign] @@ -43,6 +43,7 @@ options: Type of prerelease. --devrelease, -d DEVRELEASE Specify non-negative integer for dev release. + --postrelease Mark as a post release --increment {MAJOR,MINOR,PATCH} Specify the desired increment. --increment-mode {linear,exact} diff --git a/tests/test_version_scheme_pep440.py b/tests/test_version_scheme_pep440.py index 3c15eeb4a..a1c593bba 100644 --- a/tests/test_version_scheme_pep440.py +++ b/tests/test_version_scheme_pep440.py @@ -14,6 +14,7 @@ prerelease=None, prerelease_offset=0, devrelease=None, + postrelease=False, ), "0.1.2", ), @@ -24,6 +25,7 @@ prerelease=None, prerelease_offset=0, devrelease=None, + postrelease=False, ), "0.2.0", ), @@ -34,6 +36,7 @@ prerelease=None, prerelease_offset=0, devrelease=None, + postrelease=False, ), "3.0.0", ), @@ -44,6 +47,7 @@ prerelease="alpha", prerelease_offset=0, devrelease=None, + postrelease=False, ), "0.9.1a0", ), @@ -54,6 +58,7 @@ prerelease="alpha", prerelease_offset=0, devrelease=None, + postrelease=False, ), "0.10.0a0", ), @@ -64,6 +69,7 @@ prerelease="alpha", prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.0.0a0", ), @@ -74,6 +80,7 @@ prerelease="alpha", prerelease_offset=1, devrelease=None, + postrelease=False, ), "1.0.0a1", ), @@ -84,6 +91,7 @@ prerelease="beta", prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.0.0b0", ), @@ -94,6 +102,7 @@ prerelease="beta", prerelease_offset=1, devrelease=None, + postrelease=False, ), "1.0.0b1", ), @@ -104,6 +113,7 @@ prerelease="rc", prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.0.0rc0", ), @@ -114,6 +124,7 @@ prerelease="rc", prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.0.0rc2", ), @@ -125,6 +136,7 @@ prerelease=None, prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.1.1", ), @@ -135,6 +147,7 @@ prerelease=None, prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.1.0", ), @@ -145,6 +158,7 @@ prerelease=None, prerelease_offset=0, devrelease=None, + postrelease=False, ), "2.0.0", ), @@ -155,6 +169,7 @@ prerelease="alpha", prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.0.0a1", ), @@ -165,6 +180,7 @@ prerelease="alpha", prerelease_offset=1, devrelease=None, + postrelease=False, ), "1.0.0a1", ), @@ -175,6 +191,7 @@ prerelease="beta", prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.0.0b0", ), @@ -185,6 +202,7 @@ prerelease="beta", prerelease_offset=1, devrelease=None, + postrelease=False, ), "1.0.0b1", ), @@ -195,6 +213,7 @@ prerelease="beta", prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.0.0b1", ), @@ -205,6 +224,7 @@ prerelease="alpha", prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.0.0a2", ), @@ -215,6 +235,7 @@ prerelease="rc", prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.0.0rc0", ), @@ -225,6 +246,7 @@ prerelease=None, prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.0.0", ), @@ -236,6 +258,7 @@ prerelease=None, prerelease_offset=0, devrelease=None, + postrelease=False, ), "0.1.1", ), @@ -246,6 +269,7 @@ prerelease=None, prerelease_offset=0, devrelease=1, + postrelease=False, ), "0.1.1.dev1", ), @@ -256,6 +280,7 @@ prerelease=None, prerelease_offset=0, devrelease=None, + postrelease=False, ), "0.3.0", ), @@ -266,6 +291,7 @@ prerelease=None, prerelease_offset=0, devrelease=1, + postrelease=False, ), "0.3.0.dev1", ), @@ -276,6 +302,7 @@ prerelease=None, prerelease_offset=0, devrelease=None, + postrelease=False, ), "0.3.1", ), @@ -286,6 +313,7 @@ prerelease="alpha", prerelease_offset=0, devrelease=None, + postrelease=False, ), "0.3.1a0", ), @@ -296,6 +324,7 @@ prerelease="alpha", prerelease_offset=0, devrelease=None, + postrelease=False, ), "0.3.1a1", ), @@ -306,6 +335,7 @@ prerelease="alpha", prerelease_offset=1, devrelease=None, + postrelease=False, ), "0.3.1a1", ), @@ -316,6 +346,7 @@ prerelease="alpha", prerelease_offset=1, devrelease=None, + postrelease=False, ), "0.3.1a1", ), @@ -326,6 +357,7 @@ prerelease=None, prerelease_offset=0, devrelease=None, + postrelease=False, ), "0.3.1", ), @@ -336,6 +368,7 @@ prerelease=None, prerelease_offset=0, devrelease=None, + postrelease=False, ), "0.3.2", ), @@ -346,6 +379,7 @@ prerelease="alpha", prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.0.0a0", ), @@ -356,6 +390,7 @@ prerelease="alpha", prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.0.0a1", ), @@ -366,6 +401,7 @@ prerelease="alpha", prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.0.0a2", ), @@ -376,6 +412,7 @@ prerelease="alpha", prerelease_offset=0, devrelease=1, + postrelease=False, ), "1.0.0a2.dev1", ), @@ -386,6 +423,7 @@ prerelease="alpha", prerelease_offset=0, devrelease=1, + postrelease=False, ), "1.0.0a3.dev1", ), @@ -396,6 +434,7 @@ prerelease="alpha", prerelease_offset=0, devrelease=0, + postrelease=False, ), "1.0.0a3.dev0", ), @@ -406,6 +445,7 @@ prerelease="beta", prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.0.0b0", ), @@ -416,6 +456,7 @@ prerelease="beta", prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.0.0b1", ), @@ -426,6 +467,7 @@ prerelease="rc", prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.0.0rc0", ), @@ -436,6 +478,7 @@ prerelease="rc", prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.0.0rc1", ), @@ -446,6 +489,7 @@ prerelease="rc", prerelease_offset=0, devrelease=1, + postrelease=False, ), "1.0.0rc1.dev1", ), @@ -456,6 +500,7 @@ prerelease=None, prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.0.0", ), @@ -466,6 +511,7 @@ prerelease="beta", prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.0.0b0", ), @@ -476,6 +522,7 @@ prerelease=None, prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.0.1", ), @@ -486,6 +533,7 @@ prerelease=None, prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.0.2", ), @@ -496,6 +544,7 @@ prerelease=None, prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.1.0", ), @@ -506,6 +555,7 @@ prerelease=None, prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.2.0", ), @@ -516,6 +566,7 @@ prerelease=None, prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.2.1", ), @@ -526,6 +577,7 @@ prerelease=None, prerelease_offset=0, devrelease=None, + postrelease=False, ), "2.0.0", ), @@ -537,6 +589,7 @@ prerelease="alpha", prerelease_offset=0, devrelease=None, + postrelease=False, ), "0.1.1b2", ), @@ -547,6 +600,7 @@ prerelease="alpha", prerelease_offset=0, devrelease=None, + postrelease=False, ), "0.1.1rc1", ), @@ -557,6 +611,7 @@ prerelease="beta", prerelease_offset=0, devrelease=None, + postrelease=False, ), "0.1.1rc1", ), @@ -568,6 +623,7 @@ prerelease="alpha", prerelease_offset=0, devrelease=None, + postrelease=False, ), "3.3.4a0", ), @@ -578,6 +634,7 @@ prerelease="alpha", prerelease_offset=0, devrelease=None, + postrelease=False, ), "3.3.4a1", ), @@ -588,6 +645,7 @@ prerelease="alpha", prerelease_offset=0, devrelease=None, + postrelease=False, ), "3.4.0a0", ), @@ -598,6 +656,7 @@ prerelease="alpha", prerelease_offset=0, devrelease=None, + postrelease=False, ), "3.4.0a1", ), @@ -608,6 +667,7 @@ prerelease="alpha", prerelease_offset=0, devrelease=None, + postrelease=False, ), "3.4.0a2", ), @@ -618,6 +678,7 @@ prerelease="alpha", prerelease_offset=0, devrelease=None, + postrelease=False, ), "4.0.0a0", ), @@ -628,6 +689,7 @@ prerelease="alpha", prerelease_offset=0, devrelease=None, + postrelease=False, ), "4.0.0a1", ), @@ -638,6 +700,7 @@ prerelease="alpha", prerelease_offset=0, devrelease=None, + postrelease=False, ), "4.0.0a2", ), @@ -648,6 +711,7 @@ prerelease="alpha", prerelease_offset=0, devrelease=None, + postrelease=False, ), "4.0.0a3", ), @@ -659,6 +723,7 @@ prerelease="alpha", prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.0.1a0", ), @@ -669,6 +734,7 @@ prerelease="alpha", prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.0.1a1", ), @@ -679,6 +745,7 @@ prerelease="alpha", prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.1.0a0", ), @@ -689,6 +756,7 @@ prerelease="alpha", prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.1.0a1", ), @@ -699,6 +767,7 @@ prerelease="alpha", prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.1.0a2", ), @@ -709,6 +778,7 @@ prerelease="alpha", prerelease_offset=0, devrelease=None, + postrelease=False, ), "2.0.0a0", ), @@ -720,6 +790,7 @@ prerelease="alpha", prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.1.0a0", ), @@ -730,6 +801,7 @@ prerelease="alpha", prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.1.0a3", ), @@ -740,6 +812,7 @@ prerelease="alpha", prerelease_offset=0, devrelease=None, + postrelease=False, ), "2.0.0a0", ), @@ -751,6 +824,7 @@ prerelease="alpha", prerelease_offset=0, devrelease=None, + postrelease=False, ), "2.0.0a0", ), @@ -761,6 +835,7 @@ prerelease="alpha", prerelease_offset=0, devrelease=None, + postrelease=False, ), "2.0.0a1", ), @@ -771,6 +846,7 @@ prerelease="alpha", prerelease_offset=0, devrelease=None, + postrelease=False, ), "2.0.0a2", ), @@ -781,6 +857,7 @@ prerelease="alpha", prerelease_offset=0, devrelease=None, + postrelease=False, ), "2.0.0a3", ), @@ -791,6 +868,7 @@ prerelease="alpha", prerelease_offset=0, devrelease=None, + postrelease=False, ), "2.0.0a4", ), @@ -801,6 +879,7 @@ prerelease="alpha", prerelease_offset=0, devrelease=None, + postrelease=False, ), "2.0.0a5", ), @@ -811,6 +890,7 @@ prerelease="alpha", prerelease_offset=0, devrelease=None, + postrelease=False, ), "2.0.0a6", ), @@ -822,6 +902,7 @@ prerelease="alpha", prerelease_offset=0, devrelease=None, + postrelease=False, ), "2.0.0b1", ), @@ -832,6 +913,7 @@ prerelease="alpha", prerelease_offset=0, devrelease=None, + postrelease=False, ), "2.0.0b1", ), @@ -843,6 +925,7 @@ prerelease=None, prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.0.1", ), @@ -853,6 +936,7 @@ prerelease=None, prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.1.0", ), @@ -863,6 +947,7 @@ prerelease=None, prerelease_offset=0, devrelease=None, + postrelease=False, ), "2.0.0", ), @@ -874,6 +959,7 @@ prerelease=None, prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.1.0", ), @@ -884,6 +970,7 @@ prerelease=None, prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.1.0", ), @@ -894,6 +981,7 @@ prerelease=None, prerelease_offset=0, devrelease=None, + postrelease=False, ), "2.0.0", ), @@ -905,6 +993,7 @@ prerelease=None, prerelease_offset=0, devrelease=None, + postrelease=False, ), "2.0.0", ), @@ -915,6 +1004,7 @@ prerelease=None, prerelease_offset=0, devrelease=None, + postrelease=False, ), "2.0.0", ), @@ -925,6 +1015,7 @@ prerelease=None, prerelease_offset=0, devrelease=None, + postrelease=False, ), "2.0.0", ), @@ -936,6 +1027,7 @@ prerelease=None, prerelease_offset=0, devrelease=None, + postrelease=False, ), "3.0.0", ), @@ -946,6 +1038,7 @@ prerelease=None, prerelease_offset=0, devrelease=None, + postrelease=False, ), "3.0.0", ), @@ -956,6 +1049,7 @@ prerelease=None, prerelease_offset=0, devrelease=None, + postrelease=False, ), "3.0.0", ), @@ -967,6 +1061,7 @@ prerelease="alpha", prerelease_offset=0, devrelease=None, + postrelease=False, ), "3.1.4a0", ), @@ -977,6 +1072,7 @@ prerelease="beta", prerelease_offset=0, devrelease=None, + postrelease=False, ), "3.1.4b0", ), @@ -987,9 +1083,11 @@ prerelease="rc", prerelease_offset=0, devrelease=None, + postrelease=False, ), "3.1.4rc0", ), + # ( VersionSchemeTestArgs( current_version="3.1.4a0", @@ -997,6 +1095,7 @@ prerelease="alpha", prerelease_offset=0, devrelease=None, + postrelease=False, ), "3.1.4a1", ), @@ -1007,6 +1106,7 @@ prerelease="alpha", prerelease_offset=0, devrelease=None, + postrelease=False, ), "3.2.0a0", ), @@ -1017,9 +1117,88 @@ prerelease="alpha", prerelease_offset=0, devrelease=None, + postrelease=False, ), "4.0.0a0", ), + # postrelease + ( + VersionSchemeTestArgs( + current_version="1.0.0", + increment=None, + prerelease=None, + prerelease_offset=0, + devrelease=None, + postrelease=True, + ), + "1.0.0.post0", + ), + ( + VersionSchemeTestArgs( + current_version="1.0.0.post0", + increment=None, + prerelease=None, + prerelease_offset=0, + devrelease=None, + postrelease=True, + ), + "1.0.0.post1", + ), + ( + VersionSchemeTestArgs( + current_version="1.0.0", + increment=None, + prerelease=None, + prerelease_offset=0, + devrelease=1, + postrelease=True, + ), + "1.0.0.post0.dev1", + ), + ( + VersionSchemeTestArgs( + current_version="1.0.0.post0", + increment=None, + prerelease=None, + prerelease_offset=0, + devrelease=1, + postrelease=True, + ), + "1.0.0.post1.dev1", + ), + ( + VersionSchemeTestArgs( + current_version="1.0.0", + increment=None, + prerelease="alpha", + prerelease_offset=0, + devrelease=None, + postrelease=True, + ), + "1.0.0a0.post0", + ), + ( + VersionSchemeTestArgs( + current_version="1.0.0.post0", + increment=None, + prerelease="alpha", + prerelease_offset=0, + devrelease=None, + postrelease=True, + ), + "1.0.0a0.post1", + ), + ( + VersionSchemeTestArgs( + current_version="1.0.0.post0", + increment=None, + prerelease="alpha", + prerelease_offset=0, + devrelease=1, + postrelease=True, + ), + "1.0.0a0.post1.dev1", + ), ], ) def test_bump_pep440_version(version_args, expected_version): @@ -1030,6 +1209,7 @@ def test_bump_pep440_version(version_args, expected_version): prerelease=version_args.prerelease, prerelease_offset=version_args.prerelease_offset, devrelease=version_args.devrelease, + postrelease=version_args.postrelease, ) ) == expected_version @@ -1046,6 +1226,7 @@ def test_bump_pep440_version(version_args, expected_version): prerelease=None, prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.0.1", ), @@ -1056,6 +1237,7 @@ def test_bump_pep440_version(version_args, expected_version): prerelease=None, prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.1.0", ), @@ -1067,6 +1249,7 @@ def test_bump_pep440_version(version_args, expected_version): prerelease="beta", prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.0.1b0", ), @@ -1078,6 +1261,7 @@ def test_bump_pep440_version(version_args, expected_version): prerelease="beta", prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.0.1b0", ), @@ -1089,6 +1273,7 @@ def test_bump_pep440_version(version_args, expected_version): prerelease="rc", prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.0.1rc0", ), @@ -1100,6 +1285,7 @@ def test_bump_pep440_version(version_args, expected_version): prerelease="rc", prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.0.1rc0", ), @@ -1111,6 +1297,7 @@ def test_bump_pep440_version(version_args, expected_version): prerelease="rc", prerelease_offset=0, devrelease=1, + postrelease=False, ), "1.0.1rc0.dev1", ), @@ -1122,6 +1309,7 @@ def test_bump_pep440_version(version_args, expected_version): prerelease="beta", prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.1.0b0", ), @@ -1133,6 +1321,7 @@ def test_bump_pep440_version(version_args, expected_version): prerelease="beta", prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.1.0b0", ), @@ -1144,6 +1333,7 @@ def test_bump_pep440_version(version_args, expected_version): prerelease="alpha", prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.1.0a0", ), @@ -1155,6 +1345,7 @@ def test_bump_pep440_version(version_args, expected_version): prerelease="rc", prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.1.0rc0", ), @@ -1166,6 +1357,7 @@ def test_bump_pep440_version(version_args, expected_version): prerelease="rc", prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.1.0rc0", ), @@ -1177,6 +1369,7 @@ def test_bump_pep440_version(version_args, expected_version): prerelease="rc", prerelease_offset=0, devrelease=1, + postrelease=False, ), "1.1.0rc0.dev1", ), @@ -1188,6 +1381,7 @@ def test_bump_pep440_version(version_args, expected_version): prerelease=None, prerelease_offset=0, devrelease=None, + postrelease=False, ), "3.0.0", ), @@ -1199,6 +1393,7 @@ def test_bump_pep440_version(version_args, expected_version): prerelease=None, prerelease_offset=0, devrelease=None, + postrelease=False, ), "2.1.0", ), @@ -1210,6 +1405,7 @@ def test_bump_pep440_version(version_args, expected_version): prerelease=None, prerelease_offset=0, devrelease=None, + postrelease=False, ), "2.0.1", ), @@ -1221,6 +1417,7 @@ def test_bump_pep440_version(version_args, expected_version): prerelease="alpha", prerelease_offset=0, devrelease=None, + postrelease=False, ), "3.0.0a0", ), @@ -1232,6 +1429,7 @@ def test_bump_pep440_version(version_args, expected_version): prerelease="alpha", prerelease_offset=0, devrelease=None, + postrelease=False, ), "2.1.0a0", ), @@ -1243,6 +1441,7 @@ def test_bump_pep440_version(version_args, expected_version): prerelease="alpha", prerelease_offset=0, devrelease=None, + postrelease=False, ), "2.0.1a0", ), @@ -1256,6 +1455,7 @@ def test_bump_pep440_version_force(version_args, expected_version): prerelease=version_args.prerelease, prerelease_offset=version_args.prerelease_offset, devrelease=version_args.devrelease, + postrelease=version_args.postrelease, exact_increment=True, ) ) @@ -1273,6 +1473,7 @@ def test_bump_pep440_version_force(version_args, expected_version): prerelease=None, prerelease_offset=0, devrelease=None, + postrelease=False, ), "4.5.0+0.1.1", ), @@ -1283,6 +1484,7 @@ def test_bump_pep440_version_force(version_args, expected_version): prerelease=None, prerelease_offset=0, devrelease=None, + postrelease=False, ), "4.5.0+0.2.0", ), @@ -1293,6 +1495,7 @@ def test_bump_pep440_version_force(version_args, expected_version): prerelease=None, prerelease_offset=0, devrelease=None, + postrelease=False, ), "4.5.0+1.0.0", ), @@ -1306,6 +1509,7 @@ def test_bump_pep440_version_local(version_args, expected_version): prerelease=version_args.prerelease, prerelease_offset=version_args.prerelease_offset, devrelease=version_args.devrelease, + postrelease=version_args.postrelease, is_local_version=True, ) ) @@ -1320,3 +1524,19 @@ def test_pep440_scheme_property(): def test_pep440_implement_version_protocol(): assert isinstance(Pep440("0.0.1"), VersionProtocol) + + +def test_pep440_postrelease_property(): + version = Pep440("1.0.0.post1") + assert version.postrelease == "post1" + + version = Pep440("1.0.0") + assert version.postrelease is None + + +def test_pep440_prerelease_property(): + version = Pep440("1.0.0a1") + assert version.prerelease == "a1" + + version = Pep440("1.0.0") + assert version.prerelease is None diff --git a/tests/test_version_scheme_semver.py b/tests/test_version_scheme_semver.py index 1a75cd3ea..6b145da49 100644 --- a/tests/test_version_scheme_semver.py +++ b/tests/test_version_scheme_semver.py @@ -16,6 +16,7 @@ prerelease=None, prerelease_offset=0, devrelease=None, + postrelease=False, ), "0.1.2", ), @@ -26,6 +27,7 @@ prerelease=None, prerelease_offset=0, devrelease=None, + postrelease=False, ), "0.2.0", ), @@ -36,6 +38,7 @@ prerelease=None, prerelease_offset=0, devrelease=None, + postrelease=False, ), "3.0.0", ), @@ -46,6 +49,7 @@ prerelease="alpha", prerelease_offset=0, devrelease=None, + postrelease=False, ), "0.9.1-a0", ), @@ -56,6 +60,7 @@ prerelease="alpha", prerelease_offset=0, devrelease=None, + postrelease=False, ), "0.10.0-a0", ), @@ -66,6 +71,7 @@ prerelease="alpha", prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.0.0-a0", ), @@ -76,6 +82,7 @@ prerelease="alpha", prerelease_offset=1, devrelease=None, + postrelease=False, ), "1.0.0-a1", ), @@ -86,6 +93,7 @@ prerelease="beta", prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.0.0-b0", ), @@ -96,6 +104,7 @@ prerelease="beta", prerelease_offset=1, devrelease=None, + postrelease=False, ), "1.0.0-b1", ), @@ -106,6 +115,7 @@ prerelease="rc", prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.0.0-rc0", ), @@ -116,6 +126,7 @@ prerelease="rc", prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.0.0-rc2", ), @@ -126,6 +137,7 @@ prerelease="rc", prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.0.0-rc0", ), @@ -136,6 +148,7 @@ prerelease="alpha", prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.0.0-a2", ), @@ -147,6 +160,7 @@ prerelease=None, prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.1.1", ), @@ -157,6 +171,7 @@ prerelease=None, prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.1.0", ), @@ -167,6 +182,7 @@ prerelease=None, prerelease_offset=0, devrelease=None, + postrelease=False, ), "2.0.0", ), @@ -177,6 +193,7 @@ prerelease="alpha", prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.0.0-a1", ), @@ -187,6 +204,7 @@ prerelease="alpha", prerelease_offset=1, devrelease=None, + postrelease=False, ), "1.0.0-a1", ), @@ -197,6 +215,7 @@ prerelease="beta", prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.0.0-b0", ), @@ -207,6 +226,7 @@ prerelease="beta", prerelease_offset=1, devrelease=None, + postrelease=False, ), "1.0.0-b1", ), @@ -217,6 +237,7 @@ prerelease="beta", prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.0.0-b1", ), @@ -227,6 +248,7 @@ prerelease="alpha", prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.0.0-a2", ), @@ -237,6 +259,7 @@ prerelease="rc", prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.0.0-rc0", ), @@ -247,6 +270,7 @@ prerelease=None, prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.0.0", ), @@ -258,6 +282,7 @@ prerelease=None, prerelease_offset=0, devrelease=None, + postrelease=False, ), "0.1.1", ), @@ -268,6 +293,7 @@ prerelease=None, prerelease_offset=0, devrelease=1, + postrelease=False, ), "0.1.1-dev1", ), @@ -278,6 +304,7 @@ prerelease=None, prerelease_offset=0, devrelease=None, + postrelease=False, ), "0.3.0", ), @@ -288,6 +315,7 @@ prerelease=None, prerelease_offset=0, devrelease=1, + postrelease=False, ), "0.3.0-dev1", ), @@ -298,6 +326,7 @@ prerelease=None, prerelease_offset=0, devrelease=None, + postrelease=False, ), "0.3.1", ), @@ -308,6 +337,7 @@ prerelease="alpha", prerelease_offset=0, devrelease=None, + postrelease=False, ), "0.3.1-a0", ), @@ -318,6 +348,7 @@ prerelease="alpha", prerelease_offset=0, devrelease=None, + postrelease=False, ), "0.3.1-a1", ), @@ -328,6 +359,7 @@ prerelease="alpha", prerelease_offset=1, devrelease=None, + postrelease=False, ), "0.3.1-a1", ), @@ -338,6 +370,7 @@ prerelease="alpha", prerelease_offset=1, devrelease=None, + postrelease=False, ), "0.3.1-a1", ), @@ -348,6 +381,7 @@ prerelease=None, prerelease_offset=0, devrelease=None, + postrelease=False, ), "0.3.1", ), @@ -358,6 +392,7 @@ prerelease=None, prerelease_offset=0, devrelease=None, + postrelease=False, ), "0.3.2", ), @@ -368,6 +403,7 @@ prerelease="alpha", prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.0.0-a0", ), @@ -378,6 +414,7 @@ prerelease="alpha", prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.0.0-a1", ), @@ -388,6 +425,7 @@ prerelease="alpha", prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.0.0-a2", ), @@ -398,6 +436,7 @@ prerelease="alpha", prerelease_offset=0, devrelease=1, + postrelease=False, ), "1.0.0-a2-dev1", ), @@ -408,6 +447,7 @@ prerelease="alpha", prerelease_offset=0, devrelease=1, + postrelease=False, ), "1.0.0-a3-dev1", ), @@ -418,6 +458,7 @@ prerelease="alpha", prerelease_offset=0, devrelease=0, + postrelease=False, ), "1.0.0-a3-dev0", ), @@ -428,6 +469,7 @@ prerelease="beta", prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.0.0-b0", ), @@ -438,6 +480,7 @@ prerelease="beta", prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.0.0-b1", ), @@ -448,6 +491,7 @@ prerelease="rc", prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.0.0-rc0", ), @@ -458,6 +502,7 @@ prerelease="rc", prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.0.0-rc1", ), @@ -468,6 +513,7 @@ prerelease="rc", prerelease_offset=0, devrelease=1, + postrelease=False, ), "1.0.0-rc1-dev1", ), @@ -478,6 +524,7 @@ prerelease=None, prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.0.0", ), @@ -488,6 +535,7 @@ prerelease="beta", prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.0.0-b0", ), @@ -498,6 +546,7 @@ prerelease=None, prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.0.1", ), @@ -508,6 +557,7 @@ prerelease=None, prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.0.2", ), @@ -518,6 +568,7 @@ prerelease=None, prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.1.0", ), @@ -528,6 +579,7 @@ prerelease=None, prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.2.0", ), @@ -538,6 +590,7 @@ prerelease=None, prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.2.1", ), @@ -548,6 +601,7 @@ prerelease=None, prerelease_offset=0, devrelease=None, + postrelease=False, ), "2.0.0", ), @@ -559,6 +613,7 @@ prerelease="alpha", prerelease_offset=0, devrelease=None, + postrelease=False, ), "0.1.1-b2", ), @@ -569,6 +624,7 @@ prerelease="alpha", prerelease_offset=0, devrelease=None, + postrelease=False, ), "0.1.1-rc1", ), @@ -579,8 +635,86 @@ prerelease="beta", prerelease_offset=0, devrelease=None, + postrelease=False, ), "0.1.1-rc1", + ), # postrelease + ( + VersionSchemeTestArgs( + current_version="1.0.0", + increment=None, + prerelease=None, + prerelease_offset=0, + devrelease=None, + postrelease=True, + ), + "1.0.0-post0", + ), + ( + VersionSchemeTestArgs( + current_version="1.0.0-post0", + increment=None, + prerelease=None, + prerelease_offset=0, + devrelease=None, + postrelease=True, + ), + "1.0.0-post1", + ), + ( + VersionSchemeTestArgs( + current_version="1.0.0", + increment=None, + prerelease=None, + prerelease_offset=0, + devrelease=1, + postrelease=True, + ), + "1.0.0-post0-dev1", + ), + ( + VersionSchemeTestArgs( + current_version="1.0.0-post0", + increment=None, + prerelease=None, + prerelease_offset=0, + devrelease=1, + postrelease=True, + ), + "1.0.0-post1-dev1", + ), + ( + VersionSchemeTestArgs( + current_version="1.0.0", + increment=None, + prerelease="alpha", + prerelease_offset=0, + devrelease=None, + postrelease=True, + ), + "1.0.0-a0-post0", + ), + ( + VersionSchemeTestArgs( + current_version="1.0.0-post0", + increment=None, + prerelease="alpha", + prerelease_offset=0, + devrelease=None, + postrelease=True, + ), + "1.0.0-a0-post1", + ), + ( + VersionSchemeTestArgs( + current_version="1.0.0-post0", + increment=None, + prerelease="alpha", + prerelease_offset=0, + devrelease=1, + postrelease=True, + ), + "1.0.0-a0-post1-dev1", ), ], ) @@ -594,6 +728,7 @@ def test_bump_semver_version( prerelease=version_args.prerelease, prerelease_offset=version_args.prerelease_offset, devrelease=version_args.devrelease, + postrelease=version_args.postrelease, ) ) == expected_version @@ -610,6 +745,7 @@ def test_bump_semver_version( prerelease=None, prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.0.1", ), @@ -620,6 +756,7 @@ def test_bump_semver_version( prerelease=None, prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.1.0", ), @@ -631,6 +768,7 @@ def test_bump_semver_version( prerelease="beta", prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.0.1-b0", ), @@ -642,6 +780,7 @@ def test_bump_semver_version( prerelease="beta", prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.0.1-b0", ), @@ -653,6 +792,7 @@ def test_bump_semver_version( prerelease="rc", prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.0.1-rc0", ), @@ -664,6 +804,7 @@ def test_bump_semver_version( prerelease="rc", prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.0.1-rc0", ), @@ -675,6 +816,7 @@ def test_bump_semver_version( prerelease="rc", prerelease_offset=0, devrelease=1, + postrelease=False, ), "1.0.1-rc0-dev1", ), @@ -686,6 +828,7 @@ def test_bump_semver_version( prerelease="beta", prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.1.0-b0", ), @@ -697,6 +840,7 @@ def test_bump_semver_version( prerelease="beta", prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.1.0-b0", ), @@ -708,6 +852,7 @@ def test_bump_semver_version( prerelease="rc", prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.1.0-rc0", ), @@ -719,6 +864,7 @@ def test_bump_semver_version( prerelease="rc", prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.1.0-rc0", ), @@ -730,6 +876,7 @@ def test_bump_semver_version( prerelease="rc", prerelease_offset=0, devrelease=1, + postrelease=False, ), "1.1.0-rc0-dev1", ), @@ -741,6 +888,7 @@ def test_bump_semver_version( prerelease=None, prerelease_offset=0, devrelease=None, + postrelease=False, ), "3.0.0", ), @@ -752,6 +900,7 @@ def test_bump_semver_version( prerelease=None, prerelease_offset=0, devrelease=None, + postrelease=False, ), "2.1.0", ), @@ -763,6 +912,7 @@ def test_bump_semver_version( prerelease=None, prerelease_offset=0, devrelease=None, + postrelease=False, ), "2.0.1", ), @@ -774,6 +924,7 @@ def test_bump_semver_version( prerelease="alpha", prerelease_offset=0, devrelease=None, + postrelease=False, ), "3.0.0-a0", ), @@ -785,6 +936,7 @@ def test_bump_semver_version( prerelease="alpha", prerelease_offset=0, devrelease=None, + postrelease=False, ), "2.1.0-a0", ), @@ -796,6 +948,7 @@ def test_bump_semver_version( prerelease="alpha", prerelease_offset=0, devrelease=None, + postrelease=False, ), "2.0.1-a0", ), @@ -811,6 +964,7 @@ def test_bump_semver_version_force( prerelease=version_args.prerelease, prerelease_offset=version_args.prerelease_offset, devrelease=version_args.devrelease, + postrelease=version_args.postrelease, exact_increment=True, ) ) @@ -828,6 +982,7 @@ def test_bump_semver_version_force( prerelease=None, prerelease_offset=0, devrelease=None, + postrelease=False, ), "4.5.0+0.1.1", ), @@ -838,6 +993,7 @@ def test_bump_semver_version_force( prerelease=None, prerelease_offset=0, devrelease=None, + postrelease=False, ), "4.5.0+0.2.0", ), @@ -848,6 +1004,7 @@ def test_bump_semver_version_force( prerelease=None, prerelease_offset=0, devrelease=None, + postrelease=False, ), "4.5.0+1.0.0", ), @@ -863,6 +1020,7 @@ def test_bump_semver_version_local( prerelease=version_args.prerelease, prerelease_offset=version_args.prerelease_offset, devrelease=version_args.devrelease, + postrelease=version_args.postrelease, is_local_version=True, ) ) @@ -877,3 +1035,19 @@ def test_semver_scheme_property(): def test_semver_implement_version_protocol(): assert isinstance(SemVer("0.0.1"), VersionProtocol) + + +def test_semver_postrelease_property(): + version = SemVer("1.0.0-post0") + assert version.postrelease == "post0" + + version = SemVer("1.0.0") + assert version.postrelease is None + + +def test_semver_prerelease_property(): + version = SemVer("1.0.0-a1") + assert version.prerelease == "a1" + + version = SemVer("1.0.0") + assert version.prerelease is None diff --git a/tests/test_version_scheme_semver2.py b/tests/test_version_scheme_semver2.py index 6ce00e06e..e12259890 100644 --- a/tests/test_version_scheme_semver2.py +++ b/tests/test_version_scheme_semver2.py @@ -16,6 +16,7 @@ prerelease=None, prerelease_offset=0, devrelease=None, + postrelease=False, ), "0.1.2", ), @@ -26,6 +27,7 @@ prerelease=None, prerelease_offset=0, devrelease=None, + postrelease=False, ), "0.2.0", ), @@ -36,6 +38,7 @@ prerelease=None, prerelease_offset=0, devrelease=None, + postrelease=False, ), "3.0.0", ), @@ -46,6 +49,7 @@ prerelease="alpha", prerelease_offset=0, devrelease=None, + postrelease=False, ), "0.9.1-alpha.0", ), @@ -56,6 +60,7 @@ prerelease="alpha", prerelease_offset=0, devrelease=None, + postrelease=False, ), "0.10.0-alpha.0", ), @@ -66,6 +71,7 @@ prerelease="alpha", prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.0.0-alpha.0", ), @@ -76,6 +82,7 @@ prerelease="alpha", prerelease_offset=1, devrelease=None, + postrelease=False, ), "1.0.0-alpha.1", ), @@ -86,6 +93,7 @@ prerelease="beta", prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.0.0-beta.0", ), @@ -96,6 +104,7 @@ prerelease="beta", prerelease_offset=1, devrelease=None, + postrelease=False, ), "1.0.0-beta.1", ), @@ -106,6 +115,7 @@ prerelease="rc", prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.0.0-rc.0", ), @@ -116,6 +126,7 @@ prerelease="rc", prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.0.0-rc.2", ), @@ -126,6 +137,7 @@ prerelease="rc", prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.0.0-rc.0", ), @@ -136,6 +148,7 @@ prerelease="alpha", prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.0.0-alpha.2", ), @@ -147,6 +160,7 @@ prerelease=None, prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.1.1", ), @@ -157,6 +171,7 @@ prerelease=None, prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.1.0", ), @@ -167,6 +182,7 @@ prerelease=None, prerelease_offset=0, devrelease=None, + postrelease=False, ), "2.0.0", ), @@ -177,6 +193,7 @@ prerelease="alpha", prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.0.0-alpha.1", ), @@ -187,6 +204,7 @@ prerelease="alpha", prerelease_offset=1, devrelease=None, + postrelease=False, ), "1.0.0-alpha.1", ), @@ -197,6 +215,7 @@ prerelease="beta", prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.0.0-beta.0", ), @@ -207,6 +226,7 @@ prerelease="beta", prerelease_offset=1, devrelease=None, + postrelease=False, ), "1.0.0-beta.1", ), @@ -217,6 +237,7 @@ prerelease="beta", prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.0.0-beta.1", ), @@ -227,6 +248,7 @@ prerelease="rc", prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.0.0-rc.0", ), @@ -237,6 +259,7 @@ prerelease=None, prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.0.0", ), @@ -248,6 +271,7 @@ prerelease=None, prerelease_offset=0, devrelease=None, + postrelease=False, ), "0.1.1", ), @@ -258,6 +282,7 @@ prerelease=None, prerelease_offset=0, devrelease=1, + postrelease=False, ), "0.1.1-dev.1", ), @@ -268,6 +293,7 @@ prerelease=None, prerelease_offset=0, devrelease=None, + postrelease=False, ), "0.3.0", ), @@ -278,6 +304,7 @@ prerelease=None, prerelease_offset=0, devrelease=1, + postrelease=False, ), "0.3.0-dev.1", ), @@ -288,6 +315,7 @@ prerelease=None, prerelease_offset=0, devrelease=None, + postrelease=False, ), "0.3.1", ), @@ -298,6 +326,7 @@ prerelease="alpha", prerelease_offset=0, devrelease=None, + postrelease=False, ), "0.3.1-alpha.0", ), @@ -308,6 +337,7 @@ prerelease="alpha", prerelease_offset=0, devrelease=None, + postrelease=False, ), "0.3.1-alpha.1", ), @@ -318,6 +348,7 @@ prerelease="alpha", prerelease_offset=1, devrelease=None, + postrelease=False, ), "0.3.1-alpha.1", ), @@ -328,6 +359,7 @@ prerelease="alpha", prerelease_offset=1, devrelease=None, + postrelease=False, ), "0.3.1-alpha.1", ), @@ -338,6 +370,7 @@ prerelease=None, prerelease_offset=0, devrelease=None, + postrelease=False, ), "0.3.1", ), @@ -348,6 +381,7 @@ prerelease=None, prerelease_offset=0, devrelease=None, + postrelease=False, ), "0.3.2", ), @@ -358,6 +392,7 @@ prerelease="alpha", prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.0.0-alpha.0", ), @@ -368,6 +403,7 @@ prerelease="alpha", prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.0.0-alpha.1", ), @@ -378,6 +414,7 @@ prerelease="alpha", prerelease_offset=0, devrelease=1, + postrelease=False, ), "1.0.0-alpha.2.dev.1", ), @@ -388,6 +425,7 @@ prerelease="alpha", prerelease_offset=0, devrelease=1, + postrelease=False, ), "1.0.0-alpha.3.dev.1", ), @@ -398,6 +436,7 @@ prerelease="alpha", prerelease_offset=0, devrelease=0, + postrelease=False, ), "1.0.0-alpha.3.dev.0", ), @@ -408,6 +447,7 @@ prerelease="beta", prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.0.0-beta.0", ), @@ -418,6 +458,7 @@ prerelease="beta", prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.0.0-beta.1", ), @@ -428,6 +469,7 @@ prerelease="rc", prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.0.0-rc.1", ), @@ -438,6 +480,7 @@ prerelease="rc", prerelease_offset=0, devrelease=1, + postrelease=False, ), "1.0.0-rc.1.dev.1", ), @@ -448,6 +491,7 @@ prerelease=None, prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.0.0", ), @@ -458,6 +502,7 @@ prerelease="beta", prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.0.0-beta.0", ), @@ -468,6 +513,7 @@ prerelease=None, prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.0.1", ), @@ -478,6 +524,7 @@ prerelease=None, prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.0.2", ), @@ -488,6 +535,7 @@ prerelease=None, prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.1.0", ), @@ -498,6 +546,7 @@ prerelease=None, prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.2.0", ), @@ -508,6 +557,7 @@ prerelease=None, prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.2.1", ), @@ -518,6 +568,7 @@ prerelease=None, prerelease_offset=0, devrelease=None, + postrelease=False, ), "2.0.0", ), @@ -529,6 +580,7 @@ prerelease="alpha", prerelease_offset=0, devrelease=None, + postrelease=False, ), "0.1.1-beta.2", ), @@ -539,6 +591,7 @@ prerelease="alpha", prerelease_offset=0, devrelease=None, + postrelease=False, ), "0.1.1-rc.1", ), @@ -549,9 +602,88 @@ prerelease="beta", prerelease_offset=0, devrelease=None, + postrelease=False, ), "0.1.1-rc.1", ), + # postrelease + ( + VersionSchemeTestArgs( + current_version="1.0.0", + increment=None, + prerelease=None, + prerelease_offset=0, + devrelease=None, + postrelease=True, + ), + "1.0.0-post.0", + ), + ( + VersionSchemeTestArgs( + current_version="1.0.0-post.0", + increment=None, + prerelease=None, + prerelease_offset=0, + devrelease=None, + postrelease=True, + ), + "1.0.0-post.1", + ), + ( + VersionSchemeTestArgs( + current_version="1.0.0", + increment=None, + prerelease=None, + prerelease_offset=0, + devrelease=1, + postrelease=True, + ), + "1.0.0-post.0.dev.1", + ), + ( + VersionSchemeTestArgs( + current_version="1.0.0-post.0", + increment=None, + prerelease=None, + prerelease_offset=0, + devrelease=1, + postrelease=True, + ), + "1.0.0-post.1.dev.1", + ), + ( + VersionSchemeTestArgs( + current_version="1.0.0", + increment=None, + prerelease="alpha", + prerelease_offset=0, + devrelease=None, + postrelease=True, + ), + "1.0.0-alpha.0.post.0", + ), + ( + VersionSchemeTestArgs( + current_version="1.0.0-post.0", + increment=None, + prerelease="alpha", + prerelease_offset=0, + devrelease=None, + postrelease=True, + ), + "1.0.0-alpha.0.post.1", + ), + ( + VersionSchemeTestArgs( + current_version="1.0.0-post.0", + increment=None, + prerelease="alpha", + prerelease_offset=0, + devrelease=1, + postrelease=True, + ), + "1.0.0-alpha.0.post.1.dev.1", + ), ], ) def test_bump_semver_version( @@ -564,6 +696,7 @@ def test_bump_semver_version( prerelease=version_args.prerelease, prerelease_offset=version_args.prerelease_offset, devrelease=version_args.devrelease, + postrelease=version_args.postrelease, ) ) == expected_version @@ -580,6 +713,7 @@ def test_bump_semver_version( prerelease=None, prerelease_offset=0, devrelease=None, + postrelease=False, ), "4.5.0+0.1.1", ), @@ -590,6 +724,7 @@ def test_bump_semver_version( prerelease=None, prerelease_offset=0, devrelease=None, + postrelease=False, ), "4.5.0+0.2.0", ), @@ -600,6 +735,7 @@ def test_bump_semver_version( prerelease=None, prerelease_offset=0, devrelease=None, + postrelease=False, ), "4.5.0+1.0.0", ), @@ -615,6 +751,7 @@ def test_bump_semver_version_local( prerelease=version_args.prerelease, prerelease_offset=version_args.prerelease_offset, devrelease=version_args.devrelease, + postrelease=version_args.postrelease, is_local_version=True, ) ) @@ -629,3 +766,19 @@ def test_semver_scheme_property(): def test_semver_implement_version_protocol(): assert isinstance(SemVer2("0.0.1"), VersionProtocol) + + +def test_semver2_postrelease_property(): + version = SemVer2("1.0.0-post0") + assert version.postrelease == "post0" + + version = SemVer2("1.0.0") + assert version.postrelease is None + + +def test_semver2_prerelease_property(): + version = SemVer2("1.0.0-alpha.1") + assert version.prerelease == "alpha.1" + + version = SemVer2("1.0.0") + assert version.prerelease is None diff --git a/tests/utils.py b/tests/utils.py index bca565f78..d69db75a5 100644 --- a/tests/utils.py +++ b/tests/utils.py @@ -27,6 +27,7 @@ class VersionSchemeTestArgs(NamedTuple): prerelease: Prerelease | None prerelease_offset: int devrelease: int | None + postrelease: bool @dataclass