diff --git a/docs/plugins/version.md b/docs/plugins/version.md index 77fadb7..943fc7e 100644 --- a/docs/plugins/version.md +++ b/docs/plugins/version.md @@ -32,6 +32,15 @@ If you're using the version plugin for the first time on a repo and a `Ctl/VERSI ctl version tag 1.0.0 --init ``` +You may also choose to add a prefix to the tag + +```sh +# update Ctl/VERSION to 1.1.0 +# tag v1.1.0 +# push tag +ctl version tag 1.0.0 prefix v +``` + You may also chose to bump a semantic version ```sh @@ -41,6 +50,15 @@ You may also chose to bump a semantic version ctl version bump minor ``` +You may also choose to bump but not tag in git + +```sh +# update Ctl/VERSION to 1.1.0 +# tag v1.1.0 +# push tag +ctl version bump --nogit +``` + ### Use existing repository checkout Instead of configuring and specifying a git type plugin to use diff --git a/src/ctl/plugins/semver2.py b/src/ctl/plugins/semver2.py index 392c62a..d54c506 100644 --- a/src/ctl/plugins/semver2.py +++ b/src/ctl/plugins/semver2.py @@ -102,7 +102,6 @@ def tag(self, version, repo, prerelease=None, **kwargs): raise UsageError("Currently checked out branch is not clean") version = semver.VersionInfo.parse(version) - if prerelease: version = version.bump_prerelease(prerelease) @@ -125,7 +124,9 @@ def tag(self, version, repo, prerelease=None, **kwargs): repo_plugin.commit(files=files, message=f"Version {version_tag}", push=True) nogit = kwargs.pop("nogit", False) if not nogit: - repo_plugin.tag(version_tag, message=version_tag, push=True) + prefix = kwargs.pop("prefix", None) + version_tag = f"{prefix}{version_tag}" if prefix else version_tag + repo_plugin.tag(version_tag, message=version_tag, push=True, prefix=prefix) @expose("ctl.{plugin_name}.bump") def bump(self, version, repo, **kwargs): @@ -166,7 +167,9 @@ def bump(self, version, repo, **kwargs): self.log.info(f"Bumping semantic version: {current} to {new_version}") - self.tag(version=str(new_version), repo=repo, **kwargs) + nogit = kwargs.pop("nogit", False) + if not nogit: + self.tag(version=str(new_version), repo=repo, **kwargs) @expose("ctl.{plugin_name}.release") def release(self, repo, **kwargs): diff --git a/src/ctl/plugins/version_base.py b/src/ctl/plugins/version_base.py index 19ba39c..94770fc 100644 --- a/src/ctl/plugins/version_base.py +++ b/src/ctl/plugins/version_base.py @@ -99,6 +99,14 @@ def add_arguments(cls, parser, plugin_config, confu_cli_args): op_tag_parser.add_argument( "version", nargs=1, type=str, help="version string to tag with" ) + op_tag_parser.add_argument( + "prefix", + nargs=1, + type=str, + help="prefix string to tag with i.e. {v}1.0.1 - v being the prefix", + required=False, + default=None, + ) confu_cli_args.add(op_tag_parser, "changelog_validate") confu_cli_args.add(op_tag_parser, "branch") @@ -117,6 +125,12 @@ def add_arguments(cls, parser, plugin_config, confu_cli_args): choices=["major", "minor", "patch", "prerelease"], help="bumps the specified version segment by 1", ) + op_bump_parser.add_argument( + "--nogit", + action="store_true", + help="whether to tag or not to tag (default: False)", + default=False, + ) confu_cli_args.add(op_bump_parser, "changelog_validate") confu_cli_args.add(op_bump_parser, "branch") diff --git a/tests/test_plugin_semver2.py b/tests/test_plugin_semver2.py index daee555..d7944f4 100644 --- a/tests/test_plugin_semver2.py +++ b/tests/test_plugin_semver2.py @@ -35,6 +35,10 @@ def test_tag(tmpdir, ctlr): assert dummy_repo.version == "1.0.3" assert not dummy_repo.has_tag("1.0.3") + plugin.tag(version="1.0.4", repo="dummy_repo", prefix="v") + assert dummy_repo.version == "1.0.4" + assert dummy_repo.has_tag("v1.0.4") + def test_tag_prerelease(tmpdir, ctlr): plugin, dummy_repo = instantiate(tmpdir, ctlr) @@ -60,7 +64,7 @@ def test_tag_pyproject(tmpdir, ctlr): plugin.tag(version="2.0.0", repo="dummy_repo", prerelease="rc") - with open(pyproject_path, "r") as f: + with open(pyproject_path) as f: pyproject = tomlkit.load(f) assert pyproject["tool"]["poetry"]["version"] == "2.0.0-rc.1" @@ -83,7 +87,7 @@ def test_bump(tmpdir, ctlr): plugin.bump(version="invalid", repo="dummy_repo") plugin.bump(version="patch", repo="dummy_repo", nogit=True) - assert dummy_repo.version == "2.0.1" + assert dummy_repo.version == "2.0.0" assert not dummy_repo.has_tag("2.0.1") @@ -96,7 +100,7 @@ def test_bump_w_prerelease_flag(tmpdir, ctlr): assert dummy_repo.has_tag("1.0.1-rc.1") plugin.bump(version="patch", repo="dummy_repo", prerelease="beta", nogit=True) - assert dummy_repo.version == "1.0.2-beta.1" + assert dummy_repo.version == "1.0.1-rc.1" assert not dummy_repo.has_tag("1.0.2-beta.1") @@ -112,7 +116,7 @@ def test_bump_prerelease_version(tmpdir, ctlr): assert dummy_repo.has_tag("1.0.0-rc.3") plugin.bump(version="prerelease", repo="dummy_repo", nogit=True) - assert dummy_repo.version == "1.0.0-rc.4" + assert dummy_repo.version == "1.0.0-rc.3" assert not dummy_repo.has_tag("1.0.0-rc.4")