diff --git a/commitizen/cli.py b/commitizen/cli.py index 364bc93f85..69d890930c 100644 --- a/commitizen/cli.py +++ b/commitizen/cli.py @@ -257,6 +257,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": "manually specify the desired increment", diff --git a/commitizen/commands/bump.py b/commitizen/commands/bump.py index f6637b5c74..6c6b9366fe 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 @@ -166,6 +167,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"), @@ -227,11 +229,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 6de41f63d1..9211884d9e 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 c03d908aab..a740bb77da 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 e7a7c04030..31014f4102 100644 --- a/docs/commands/bump.md +++ b/docs/commands/bump.md @@ -103,7 +103,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 @@ -149,6 +171,47 @@ 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`). + +Examples: + +```bash +# create a development release +cz bump --devrelease 0 --yes # 1.0.0 -> 1.0.0.dev0 + +# increment a development release (with new commits) +cz bump --devrelease 1 --yes # 1.0.0 -> 1.0.0.dev1 + +# combined with a prerelease +cz bump --prerelease alpha --devrelease 0 --yes # 1.1.0 -> 1.1.0a0.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`. + +Examples: + +```bash +# create post-release +cz bump --postrelease --yes # 0.1.0 -> 0.1.0.post0 + +# increment post-release (requires new commits) +cz bump --postrelease --yes # 0.1.0.post0 -> 0.1.0.post1 + +# finalize to next release (normal bump) +cz bump --yes # 0.1.0.post1 -> 0.1.1 +``` + ### `--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 dff62998d2..c18c2c2a44 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][--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             show output to stdout, no commit, no modified files -  --files-only          bump version in the files from the config -  --local-version       bump only the local version portion -  --changelog, -ch      generate the changelog for the newest version -  --no-verify           this option bypasses the pre-commit and commit-msg -                        hooks -  --yes                 accept automatically questions done -  --tag-format TAG_FORMAT -                        the format used to tag the commit and read it, use it -                        in existing projects, 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} -                        choose type of prerelease -  --devrelease DEVRELEASE, -d DEVRELEASE -                        specify non-negative integer for dev. release -  --increment {MAJOR,MINOR,PATCH} -                        manually specify the desired increment -  --increment-mode {linear,exact} -                        set the method by which the new version is chosen. -'linear'(default) guesses the next version based on -                        typical linear version progression, such that 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, such that the increment -                        and pre-release are always honored -  --check-consistency, -cc -                        check consistency among versions defined in commitizen -                        configuration 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 the stdout -  --git-output-to-stderr -                        Redirect git output to stderr -  --retry               retry commit if it fails the 1st 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 -                        a changelog extra variable (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][--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             show output to stdout, no commit, no modified files +  --files-only          bump version in the files from the config +  --local-version       bump only the local version portion +  --changelog, -ch      generate the changelog for the newest version +  --no-verify           this option bypasses the pre-commit and commit-msg +                        hooks +  --yes                 accept automatically questions done +  --tag-format TAG_FORMAT +                        the format used to tag the commit and read it, use it +                        in existing projects, 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} +                        choose type of prerelease +  --devrelease DEVRELEASE, -d DEVRELEASE +                        specify non-negative integer for dev. release +  --postrelease         mark as a post release +  --increment {MAJOR,MINOR,PATCH} +                        manually specify the desired increment +  --increment-mode {linear,exact} +                        set the method by which the new version is chosen. +'linear'(default) guesses the next version based on +                        typical linear version progression, such that 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, such that the increment +                        and pre-release are always honored +  --check-consistency, -cc +                        check consistency among versions defined in commitizen +                        configuration 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 the stdout +  --git-output-to-stderr +                        Redirect git output to stderr +  --retry               retry commit if it fails the 1st 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 +                        a changelog extra variable (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 a1c70b9480..8e8a7424df 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 ad0a693278..d21e3f93be 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 @@ -1,7 +1,8 @@ usage: cz bump [-h] [--dry-run] [--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}] + [--devrelease DEVRELEASE] [--postrelease] + [--increment {MAJOR,MINOR,PATCH}] [--increment-mode {linear,exact}] [--check-consistency] [--annotated-tag] [--annotated-tag-message ANNOTATED_TAG_MESSAGE] [--gpg-sign] @@ -38,6 +39,7 @@ options: choose type of prerelease --devrelease DEVRELEASE, -d DEVRELEASE specify non-negative integer for dev. release + --postrelease mark as a post release --increment {MAJOR,MINOR,PATCH} manually 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 ad0a693278..d21e3f93be 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 @@ -1,7 +1,8 @@ usage: cz bump [-h] [--dry-run] [--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}] + [--devrelease DEVRELEASE] [--postrelease] + [--increment {MAJOR,MINOR,PATCH}] [--increment-mode {linear,exact}] [--check-consistency] [--annotated-tag] [--annotated-tag-message ANNOTATED_TAG_MESSAGE] [--gpg-sign] @@ -38,6 +39,7 @@ options: choose type of prerelease --devrelease DEVRELEASE, -d DEVRELEASE specify non-negative integer for dev. release + --postrelease mark as a post release --increment {MAJOR,MINOR,PATCH} manually 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 ad0a693278..d21e3f93be 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 @@ -1,7 +1,8 @@ usage: cz bump [-h] [--dry-run] [--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}] + [--devrelease DEVRELEASE] [--postrelease] + [--increment {MAJOR,MINOR,PATCH}] [--increment-mode {linear,exact}] [--check-consistency] [--annotated-tag] [--annotated-tag-message ANNOTATED_TAG_MESSAGE] [--gpg-sign] @@ -38,6 +39,7 @@ options: choose type of prerelease --devrelease DEVRELEASE, -d DEVRELEASE specify non-negative integer for dev. release + --postrelease mark as a post release --increment {MAJOR,MINOR,PATCH} manually 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 4cf8e6c91b..ab4d7722b0 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 @@ -1,7 +1,8 @@ usage: cz bump [-h] [--dry-run] [--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}] + [--devrelease DEVRELEASE] [--postrelease] + [--increment {MAJOR,MINOR,PATCH}] [--increment-mode {linear,exact}] [--check-consistency] [--annotated-tag] [--annotated-tag-message ANNOTATED_TAG_MESSAGE] [--gpg-sign] @@ -38,6 +39,7 @@ options: choose type of prerelease --devrelease, -d DEVRELEASE specify non-negative integer for dev. release + --postrelease mark as a post release --increment {MAJOR,MINOR,PATCH} manually 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 4cf8e6c91b..ab4d7722b0 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 @@ -1,7 +1,8 @@ usage: cz bump [-h] [--dry-run] [--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}] + [--devrelease DEVRELEASE] [--postrelease] + [--increment {MAJOR,MINOR,PATCH}] [--increment-mode {linear,exact}] [--check-consistency] [--annotated-tag] [--annotated-tag-message ANNOTATED_TAG_MESSAGE] [--gpg-sign] @@ -38,6 +39,7 @@ options: choose type of prerelease --devrelease, -d DEVRELEASE specify non-negative integer for dev. release + --postrelease mark as a post release --increment {MAJOR,MINOR,PATCH} manually 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 0ce4f81545..3075cf18ab 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.2.0", ), @@ -266,6 +291,7 @@ prerelease=None, prerelease_offset=0, devrelease=None, + postrelease=False, ), "0.3.0", ), @@ -276,6 +302,7 @@ prerelease=None, prerelease_offset=0, devrelease=1, + postrelease=False, ), "0.3.0.dev1", ), @@ -286,6 +313,7 @@ prerelease=None, prerelease_offset=0, devrelease=None, + postrelease=False, ), "0.3.1", ), @@ -296,6 +324,7 @@ prerelease="alpha", prerelease_offset=0, devrelease=None, + postrelease=False, ), "0.3.1a0", ), @@ -306,6 +335,7 @@ prerelease="alpha", prerelease_offset=0, 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="alpha", prerelease_offset=1, devrelease=None, + postrelease=False, ), "0.3.1a1", ), @@ -336,6 +368,7 @@ prerelease=None, prerelease_offset=0, devrelease=None, + postrelease=False, ), "0.3.1", ), @@ -346,6 +379,7 @@ prerelease=None, prerelease_offset=0, devrelease=None, + postrelease=False, ), "0.3.2", ), @@ -356,6 +390,7 @@ prerelease="alpha", prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.0.0a0", ), @@ -366,6 +401,7 @@ prerelease="alpha", prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.0.0a1", ), @@ -376,6 +412,7 @@ prerelease="alpha", prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.0.0a2", ), @@ -386,6 +423,7 @@ prerelease="alpha", prerelease_offset=0, devrelease=1, + postrelease=False, ), "1.0.0a2.dev1", ), @@ -396,6 +434,7 @@ prerelease="alpha", prerelease_offset=0, devrelease=1, + postrelease=False, ), "1.0.0a3.dev1", ), @@ -406,6 +445,7 @@ prerelease="alpha", prerelease_offset=0, devrelease=0, + postrelease=False, ), "1.0.0a3.dev0", ), @@ -416,6 +456,7 @@ prerelease="beta", prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.0.0b0", ), @@ -426,6 +467,7 @@ prerelease="beta", prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.0.0b1", ), @@ -436,6 +478,7 @@ prerelease="rc", prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.0.0rc0", ), @@ -446,6 +489,7 @@ prerelease="rc", prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.0.0rc1", ), @@ -456,6 +500,7 @@ prerelease="rc", prerelease_offset=0, devrelease=1, + postrelease=False, ), "1.0.0rc1.dev1", ), @@ -466,6 +511,7 @@ prerelease=None, prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.0.0", ), @@ -476,6 +522,7 @@ prerelease="beta", prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.0.0b0", ), @@ -486,6 +533,7 @@ prerelease=None, prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.0.1", ), @@ -496,6 +544,7 @@ prerelease=None, prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.0.2", ), @@ -506,6 +555,7 @@ prerelease=None, prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.1.0", ), @@ -516,6 +566,7 @@ prerelease=None, prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.2.0", ), @@ -526,6 +577,7 @@ prerelease=None, prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.2.1", ), @@ -536,6 +588,7 @@ prerelease=None, prerelease_offset=0, devrelease=None, + postrelease=False, ), "2.0.0", ), @@ -547,6 +600,7 @@ prerelease="alpha", prerelease_offset=0, devrelease=None, + postrelease=False, ), "0.1.1b2", ), @@ -557,6 +611,7 @@ prerelease="alpha", prerelease_offset=0, devrelease=None, + postrelease=False, ), "0.1.1rc1", ), @@ -567,6 +622,7 @@ prerelease="beta", prerelease_offset=0, devrelease=None, + postrelease=False, ), "0.1.1rc1", ), @@ -578,6 +634,7 @@ prerelease="alpha", prerelease_offset=0, devrelease=None, + postrelease=False, ), "3.3.4a0", ), @@ -588,6 +645,7 @@ prerelease="alpha", prerelease_offset=0, devrelease=None, + postrelease=False, ), "3.3.4a1", ), @@ -598,6 +656,7 @@ prerelease="alpha", prerelease_offset=0, devrelease=None, + postrelease=False, ), "3.4.0a0", ), @@ -608,6 +667,7 @@ prerelease="alpha", prerelease_offset=0, devrelease=None, + postrelease=False, ), "3.4.0a1", ), @@ -618,6 +678,7 @@ prerelease="alpha", prerelease_offset=0, devrelease=None, + postrelease=False, ), "3.4.0a2", ), @@ -628,6 +689,7 @@ prerelease="alpha", prerelease_offset=0, devrelease=None, + postrelease=False, ), "4.0.0a0", ), @@ -638,6 +700,7 @@ prerelease="alpha", prerelease_offset=0, devrelease=None, + postrelease=False, ), "4.0.0a1", ), @@ -648,6 +711,7 @@ prerelease="alpha", prerelease_offset=0, devrelease=None, + postrelease=False, ), "4.0.0a2", ), @@ -658,6 +722,7 @@ prerelease="alpha", prerelease_offset=0, devrelease=None, + postrelease=False, ), "4.0.0a3", ), @@ -669,6 +734,7 @@ prerelease="alpha", prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.0.1a0", ), @@ -679,6 +745,7 @@ prerelease="alpha", prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.0.1a1", ), @@ -689,6 +756,7 @@ prerelease="alpha", prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.1.0a0", ), @@ -699,6 +767,7 @@ prerelease="alpha", prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.1.0a1", ), @@ -709,6 +778,7 @@ prerelease="alpha", prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.1.0a2", ), @@ -719,6 +789,7 @@ prerelease="alpha", prerelease_offset=0, devrelease=None, + postrelease=False, ), "2.0.0a0", ), @@ -730,6 +801,7 @@ prerelease="alpha", prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.1.0a0", ), @@ -740,6 +812,7 @@ prerelease="alpha", prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.1.0a1", ), @@ -750,6 +823,7 @@ prerelease="alpha", prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.1.0a2", ), @@ -760,6 +834,7 @@ prerelease="alpha", prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.1.0a3", ), @@ -770,6 +845,7 @@ prerelease="alpha", prerelease_offset=0, devrelease=None, + postrelease=False, ), "2.0.0a0", ), @@ -781,6 +857,7 @@ prerelease="alpha", prerelease_offset=0, devrelease=None, + postrelease=False, ), "2.0.0a0", ), @@ -791,6 +868,7 @@ prerelease="alpha", prerelease_offset=0, devrelease=None, + postrelease=False, ), "2.0.0a1", ), @@ -801,6 +879,7 @@ prerelease="alpha", prerelease_offset=0, devrelease=None, + postrelease=False, ), "2.0.0a2", ), @@ -811,6 +890,7 @@ prerelease="alpha", prerelease_offset=0, devrelease=None, + postrelease=False, ), "2.0.0a3", ), @@ -821,6 +901,7 @@ prerelease="alpha", prerelease_offset=0, devrelease=None, + postrelease=False, ), "2.0.0a4", ), @@ -831,6 +912,7 @@ prerelease="alpha", prerelease_offset=0, devrelease=None, + postrelease=False, ), "2.0.0a5", ), @@ -841,6 +923,7 @@ prerelease="alpha", prerelease_offset=0, devrelease=None, + postrelease=False, ), "2.0.0a6", ), @@ -852,6 +935,7 @@ prerelease="alpha", prerelease_offset=0, devrelease=None, + postrelease=False, ), "2.0.0b1", ), @@ -862,6 +946,7 @@ prerelease="alpha", prerelease_offset=0, devrelease=None, + postrelease=False, ), "2.0.0b1", ), @@ -873,6 +958,7 @@ prerelease=None, prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.0.1", ), @@ -883,6 +969,7 @@ prerelease=None, prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.1.0", ), @@ -893,6 +980,7 @@ prerelease=None, prerelease_offset=0, devrelease=None, + postrelease=False, ), "2.0.0", ), @@ -904,6 +992,7 @@ prerelease=None, prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.1.0", ), @@ -914,6 +1003,7 @@ prerelease=None, prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.1.0", ), @@ -924,6 +1014,7 @@ prerelease=None, prerelease_offset=0, devrelease=None, + postrelease=False, ), "2.0.0", ), @@ -935,6 +1026,7 @@ prerelease=None, prerelease_offset=0, devrelease=None, + postrelease=False, ), "2.0.0", ), @@ -945,6 +1037,7 @@ prerelease=None, prerelease_offset=0, devrelease=None, + postrelease=False, ), "2.0.0", ), @@ -955,6 +1048,7 @@ prerelease=None, prerelease_offset=0, devrelease=None, + postrelease=False, ), "2.0.0", ), @@ -966,6 +1060,7 @@ prerelease=None, prerelease_offset=0, devrelease=None, + postrelease=False, ), "3.0.0", ), @@ -976,6 +1071,7 @@ prerelease=None, prerelease_offset=0, devrelease=None, + postrelease=False, ), "3.0.0", ), @@ -986,6 +1082,7 @@ prerelease=None, prerelease_offset=0, devrelease=None, + postrelease=False, ), "3.0.0", ), @@ -997,6 +1094,7 @@ prerelease="alpha", prerelease_offset=0, devrelease=None, + postrelease=False, ), "3.1.4a0", ), @@ -1007,6 +1105,7 @@ prerelease="beta", prerelease_offset=0, devrelease=None, + postrelease=False, ), "3.1.4b0", ), @@ -1017,6 +1116,7 @@ prerelease="rc", prerelease_offset=0, devrelease=None, + postrelease=False, ), "3.1.4rc0", ), @@ -1028,6 +1128,7 @@ prerelease="alpha", prerelease_offset=0, devrelease=None, + postrelease=False, ), "3.1.4a0", ), @@ -1038,6 +1139,7 @@ prerelease="alpha", prerelease_offset=0, devrelease=None, + postrelease=False, ), "3.1.4a1", ), @@ -1048,6 +1150,7 @@ prerelease="alpha", prerelease_offset=0, devrelease=None, + postrelease=False, ), "3.2.0a0", ), @@ -1058,9 +1161,33 @@ 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", + ), ], ) def test_bump_pep440_version(version_args, expected_version): @@ -1071,6 +1198,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 @@ -1087,6 +1215,7 @@ def test_bump_pep440_version(version_args, expected_version): prerelease=None, prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.0.1", ), @@ -1097,6 +1226,7 @@ def test_bump_pep440_version(version_args, expected_version): prerelease=None, prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.1.0", ), @@ -1108,6 +1238,7 @@ def test_bump_pep440_version(version_args, expected_version): prerelease="beta", prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.0.1b0", ), @@ -1119,6 +1250,7 @@ def test_bump_pep440_version(version_args, expected_version): prerelease="beta", prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.0.1b0", ), @@ -1130,6 +1262,7 @@ def test_bump_pep440_version(version_args, expected_version): prerelease="rc", prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.0.1rc0", ), @@ -1141,6 +1274,7 @@ def test_bump_pep440_version(version_args, expected_version): prerelease="rc", prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.0.1rc0", ), @@ -1152,6 +1286,7 @@ def test_bump_pep440_version(version_args, expected_version): prerelease="rc", prerelease_offset=0, devrelease=1, + postrelease=False, ), "1.0.1rc0.dev1", ), @@ -1163,6 +1298,7 @@ def test_bump_pep440_version(version_args, expected_version): prerelease="beta", prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.1.0b0", ), @@ -1174,6 +1310,7 @@ def test_bump_pep440_version(version_args, expected_version): prerelease="beta", prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.1.0b0", ), @@ -1185,6 +1322,7 @@ def test_bump_pep440_version(version_args, expected_version): prerelease="alpha", prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.1.0a0", ), @@ -1196,6 +1334,7 @@ def test_bump_pep440_version(version_args, expected_version): prerelease="rc", prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.1.0rc0", ), @@ -1207,6 +1346,7 @@ def test_bump_pep440_version(version_args, expected_version): prerelease="rc", prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.1.0rc0", ), @@ -1218,6 +1358,7 @@ def test_bump_pep440_version(version_args, expected_version): prerelease="rc", prerelease_offset=0, devrelease=1, + postrelease=False, ), "1.1.0rc0.dev1", ), @@ -1229,6 +1370,7 @@ def test_bump_pep440_version(version_args, expected_version): prerelease=None, prerelease_offset=0, devrelease=None, + postrelease=False, ), "3.0.0", ), @@ -1240,6 +1382,7 @@ def test_bump_pep440_version(version_args, expected_version): prerelease=None, prerelease_offset=0, devrelease=None, + postrelease=False, ), "2.1.0", ), @@ -1251,6 +1394,7 @@ def test_bump_pep440_version(version_args, expected_version): prerelease=None, prerelease_offset=0, devrelease=None, + postrelease=False, ), "2.0.1", ), @@ -1262,6 +1406,7 @@ def test_bump_pep440_version(version_args, expected_version): prerelease="alpha", prerelease_offset=0, devrelease=None, + postrelease=False, ), "3.0.0a0", ), @@ -1273,6 +1418,7 @@ def test_bump_pep440_version(version_args, expected_version): prerelease="alpha", prerelease_offset=0, devrelease=None, + postrelease=False, ), "2.1.0a0", ), @@ -1284,6 +1430,7 @@ def test_bump_pep440_version(version_args, expected_version): prerelease="alpha", prerelease_offset=0, devrelease=None, + postrelease=False, ), "2.0.1a0", ), @@ -1297,6 +1444,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, ) ) @@ -1314,6 +1462,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", ), @@ -1324,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.2.0", ), @@ -1334,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+1.0.0", ), @@ -1347,6 +1498,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, ) ) @@ -1361,3 +1513,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 8a163d4f6b..38a00bc962 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.2.0", ), @@ -288,6 +315,7 @@ prerelease=None, prerelease_offset=0, devrelease=None, + postrelease=False, ), "0.3.0", ), @@ -298,6 +326,7 @@ prerelease=None, prerelease_offset=0, devrelease=1, + postrelease=False, ), "0.3.0-dev1", ), @@ -308,6 +337,7 @@ prerelease=None, prerelease_offset=0, devrelease=None, + postrelease=False, ), "0.3.1", ), @@ -318,6 +348,7 @@ prerelease="alpha", prerelease_offset=0, devrelease=None, + postrelease=False, ), "0.3.1-a0", ), @@ -328,6 +359,7 @@ prerelease="alpha", prerelease_offset=0, 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="alpha", prerelease_offset=1, devrelease=None, + postrelease=False, ), "0.3.1-a1", ), @@ -358,6 +392,7 @@ prerelease=None, prerelease_offset=0, devrelease=None, + postrelease=False, ), "0.3.1", ), @@ -368,6 +403,7 @@ prerelease=None, prerelease_offset=0, devrelease=None, + postrelease=False, ), "0.3.2", ), @@ -378,6 +414,7 @@ prerelease="alpha", prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.0.0-a0", ), @@ -388,6 +425,7 @@ prerelease="alpha", prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.0.0-a1", ), @@ -398,6 +436,7 @@ prerelease="alpha", prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.0.0-a2", ), @@ -408,6 +447,7 @@ prerelease="alpha", prerelease_offset=0, devrelease=1, + postrelease=False, ), "1.0.0-a2-dev1", ), @@ -418,6 +458,7 @@ prerelease="alpha", prerelease_offset=0, devrelease=1, + postrelease=False, ), "1.0.0-a3-dev1", ), @@ -428,6 +469,7 @@ prerelease="alpha", prerelease_offset=0, devrelease=0, + postrelease=False, ), "1.0.0-a3-dev0", ), @@ -438,6 +480,7 @@ prerelease="beta", prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.0.0-b0", ), @@ -448,6 +491,7 @@ prerelease="beta", prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.0.0-b1", ), @@ -458,6 +502,7 @@ prerelease="rc", prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.0.0-rc0", ), @@ -468,6 +513,7 @@ prerelease="rc", prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.0.0-rc1", ), @@ -478,6 +524,7 @@ prerelease="rc", prerelease_offset=0, devrelease=1, + postrelease=False, ), "1.0.0-rc1-dev1", ), @@ -488,6 +535,7 @@ prerelease=None, prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.0.0", ), @@ -498,6 +546,7 @@ prerelease="beta", prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.0.0-b0", ), @@ -508,6 +557,7 @@ prerelease=None, prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.0.1", ), @@ -518,6 +568,7 @@ prerelease=None, prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.0.2", ), @@ -528,6 +579,7 @@ prerelease=None, prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.1.0", ), @@ -538,6 +590,7 @@ prerelease=None, prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.2.0", ), @@ -548,6 +601,7 @@ prerelease=None, prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.2.1", ), @@ -558,6 +612,7 @@ prerelease=None, prerelease_offset=0, devrelease=None, + postrelease=False, ), "2.0.0", ), @@ -569,6 +624,7 @@ prerelease="alpha", prerelease_offset=0, devrelease=None, + postrelease=False, ), "0.1.1-b2", ), @@ -579,6 +635,7 @@ prerelease="alpha", prerelease_offset=0, devrelease=None, + postrelease=False, ), "0.1.1-rc1", ), @@ -589,8 +646,31 @@ 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", ), ], ) @@ -604,6 +684,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 @@ -620,6 +701,7 @@ def test_bump_semver_version( prerelease=None, prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.0.1", ), @@ -630,6 +712,7 @@ def test_bump_semver_version( prerelease=None, prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.1.0", ), @@ -641,6 +724,7 @@ def test_bump_semver_version( prerelease="beta", prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.0.1-b0", ), @@ -652,6 +736,7 @@ def test_bump_semver_version( prerelease="beta", prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.0.1-b0", ), @@ -663,6 +748,7 @@ def test_bump_semver_version( prerelease="rc", prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.0.1-rc0", ), @@ -674,6 +760,7 @@ def test_bump_semver_version( prerelease="rc", prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.0.1-rc0", ), @@ -685,6 +772,7 @@ def test_bump_semver_version( prerelease="rc", prerelease_offset=0, devrelease=1, + postrelease=False, ), "1.0.1-rc0-dev1", ), @@ -696,6 +784,7 @@ def test_bump_semver_version( prerelease="beta", prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.1.0-b0", ), @@ -707,6 +796,7 @@ def test_bump_semver_version( prerelease="beta", prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.1.0-b0", ), @@ -718,6 +808,7 @@ def test_bump_semver_version( prerelease="rc", prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.1.0-rc0", ), @@ -729,6 +820,7 @@ def test_bump_semver_version( prerelease="rc", prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.1.0-rc0", ), @@ -740,6 +832,7 @@ def test_bump_semver_version( prerelease="rc", prerelease_offset=0, devrelease=1, + postrelease=False, ), "1.1.0-rc0-dev1", ), @@ -751,6 +844,7 @@ def test_bump_semver_version( prerelease=None, prerelease_offset=0, devrelease=None, + postrelease=False, ), "3.0.0", ), @@ -762,6 +856,7 @@ def test_bump_semver_version( prerelease=None, prerelease_offset=0, devrelease=None, + postrelease=False, ), "2.1.0", ), @@ -773,6 +868,7 @@ def test_bump_semver_version( prerelease=None, prerelease_offset=0, devrelease=None, + postrelease=False, ), "2.0.1", ), @@ -784,6 +880,7 @@ def test_bump_semver_version( prerelease="alpha", prerelease_offset=0, devrelease=None, + postrelease=False, ), "3.0.0-a0", ), @@ -795,6 +892,7 @@ def test_bump_semver_version( prerelease="alpha", prerelease_offset=0, devrelease=None, + postrelease=False, ), "2.1.0-a0", ), @@ -806,6 +904,7 @@ def test_bump_semver_version( prerelease="alpha", prerelease_offset=0, devrelease=None, + postrelease=False, ), "2.0.1-a0", ), @@ -821,6 +920,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, ) ) @@ -838,6 +938,7 @@ def test_bump_semver_version_force( prerelease=None, prerelease_offset=0, devrelease=None, + postrelease=False, ), "4.5.0+0.1.1", ), @@ -848,6 +949,7 @@ def test_bump_semver_version_force( prerelease=None, prerelease_offset=0, devrelease=None, + postrelease=False, ), "4.5.0+0.2.0", ), @@ -858,6 +960,7 @@ def test_bump_semver_version_force( prerelease=None, prerelease_offset=0, devrelease=None, + postrelease=False, ), "4.5.0+1.0.0", ), @@ -873,6 +976,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, ) ) @@ -887,3 +991,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 4a35e6470a..ba5263bf06 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="alpha", prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.0.0-alpha.2", ), @@ -237,6 +259,7 @@ prerelease="rc", prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.0.0-rc.0", ), @@ -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-dev.1", ), @@ -278,6 +304,7 @@ prerelease=None, prerelease_offset=0, devrelease=None, + postrelease=False, ), "0.2.0", ), @@ -288,6 +315,7 @@ prerelease=None, prerelease_offset=0, devrelease=None, + postrelease=False, ), "0.3.0", ), @@ -298,6 +326,7 @@ prerelease=None, prerelease_offset=0, devrelease=1, + postrelease=False, ), "0.3.0-dev.1", ), @@ -308,6 +337,7 @@ prerelease=None, prerelease_offset=0, devrelease=None, + postrelease=False, ), "0.3.1", ), @@ -318,6 +348,7 @@ prerelease="alpha", prerelease_offset=0, devrelease=None, + postrelease=False, ), "0.3.1-alpha.0", ), @@ -328,6 +359,7 @@ prerelease="alpha", prerelease_offset=0, devrelease=None, + postrelease=False, ), "0.3.1-alpha.1", ), @@ -338,6 +370,7 @@ prerelease="alpha", prerelease_offset=1, devrelease=None, + postrelease=False, ), "0.3.1-alpha.1", ), @@ -348,6 +381,7 @@ prerelease="alpha", prerelease_offset=1, devrelease=None, + postrelease=False, ), "0.3.1-alpha.1", ), @@ -358,6 +392,7 @@ prerelease=None, prerelease_offset=0, devrelease=None, + postrelease=False, ), "0.3.1", ), @@ -368,6 +403,7 @@ prerelease=None, prerelease_offset=0, devrelease=None, + postrelease=False, ), "0.3.2", ), @@ -378,6 +414,7 @@ prerelease="alpha", prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.0.0-alpha.0", ), @@ -388,6 +425,7 @@ prerelease="alpha", prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.0.0-alpha.1", ), @@ -398,6 +436,7 @@ prerelease="alpha", prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.0.0-alpha.2", ), @@ -408,6 +447,7 @@ prerelease="alpha", prerelease_offset=0, devrelease=1, + postrelease=False, ), "1.0.0-alpha.2.dev.1", ), @@ -418,6 +458,7 @@ prerelease="alpha", prerelease_offset=0, devrelease=1, + postrelease=False, ), "1.0.0-alpha.3.dev.1", ), @@ -428,6 +469,7 @@ prerelease="alpha", prerelease_offset=0, devrelease=0, + postrelease=False, ), "1.0.0-alpha.3.dev.0", ), @@ -438,6 +480,7 @@ prerelease="beta", prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.0.0-beta.0", ), @@ -448,6 +491,7 @@ prerelease="beta", prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.0.0-beta.1", ), @@ -458,6 +502,7 @@ prerelease="rc", prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.0.0-rc.0", ), @@ -468,6 +513,7 @@ prerelease="rc", prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.0.0-rc.1", ), @@ -478,6 +524,7 @@ prerelease="rc", prerelease_offset=0, devrelease=1, + postrelease=False, ), "1.0.0-rc.1.dev.1", ), @@ -488,6 +535,7 @@ prerelease=None, prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.0.0", ), @@ -498,6 +546,7 @@ prerelease="beta", prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.0.0-beta.0", ), @@ -508,6 +557,7 @@ prerelease=None, prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.0.1", ), @@ -518,6 +568,7 @@ prerelease=None, prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.0.2", ), @@ -528,6 +579,7 @@ prerelease=None, prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.1.0", ), @@ -538,6 +590,7 @@ prerelease=None, prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.2.0", ), @@ -548,6 +601,7 @@ prerelease=None, prerelease_offset=0, devrelease=None, + postrelease=False, ), "1.2.1", ), @@ -558,6 +612,7 @@ prerelease=None, prerelease_offset=0, devrelease=None, + postrelease=False, ), "2.0.0", ), @@ -569,6 +624,7 @@ prerelease="alpha", prerelease_offset=0, devrelease=None, + postrelease=False, ), "0.1.1-beta.2", ), @@ -579,6 +635,7 @@ prerelease="alpha", prerelease_offset=0, devrelease=None, + postrelease=False, ), "0.1.1-rc.1", ), @@ -589,9 +646,33 @@ 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", + ), ], ) def test_bump_semver_version( @@ -604,6 +685,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 @@ -620,6 +702,7 @@ def test_bump_semver_version( prerelease=None, prerelease_offset=0, devrelease=None, + postrelease=False, ), "4.5.0+0.1.1", ), @@ -630,6 +713,7 @@ def test_bump_semver_version( prerelease=None, prerelease_offset=0, devrelease=None, + postrelease=False, ), "4.5.0+0.2.0", ), @@ -640,6 +724,7 @@ def test_bump_semver_version( prerelease=None, prerelease_offset=0, devrelease=None, + postrelease=False, ), "4.5.0+1.0.0", ), @@ -655,6 +740,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, ) ) @@ -669,3 +755,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 bca565f78c..d69db75a59 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