|
10 | 10 | from semvertag.strategies._base import BumpStrategy |
11 | 11 |
|
12 | 12 |
|
| 13 | +_V_PREFIX: typing.Final = "v" |
| 14 | + |
| 15 | + |
13 | 16 | @dataclasses.dataclass(frozen=True, slots=True, kw_only=True) |
14 | 17 | class SemvertagUseCase: |
15 | 18 | provider: Provider |
@@ -39,30 +42,34 @@ def __call__(self, *, output: Output, dry_run: bool = False) -> Outcome: |
39 | 42 | NoBump(status=self.strategy.no_bump_status, reason=self.strategy.no_bump_reason, commit=commit.sha), |
40 | 43 | ) |
41 | 44 |
|
42 | | - new_version: typing.Final = _compute_new_version(latest_version, bump) |
| 45 | + new_tag: typing.Final = _tag_prefix(latest_tag) + _compute_new_version(latest_version, bump) |
43 | 46 | if dry_run: |
44 | | - return self._emit(output, DryRun(tag=new_version, bump=bump, commit=commit.sha)) |
| 47 | + return self._emit(output, DryRun(tag=new_tag, bump=bump, commit=commit.sha)) |
45 | 48 |
|
46 | | - output.progress(f"Creating tag {new_version}...") |
47 | | - self.provider.create_tag(name=new_version, commit_sha=commit.sha) |
48 | | - return self._emit(output, Created(tag=new_version, bump=bump, commit=commit.sha)) |
| 49 | + output.progress(f"Creating tag {new_tag}...") |
| 50 | + self.provider.create_tag(name=new_tag, commit_sha=commit.sha) |
| 51 | + return self._emit(output, Created(tag=new_tag, bump=bump, commit=commit.sha)) |
49 | 52 |
|
50 | 53 | def _emit(self, output: Output, outcome: Outcome) -> Outcome: |
51 | 54 | output.emit(outcome, strategy=self.strategy.name) |
52 | 55 | return outcome |
53 | 56 |
|
54 | 57 |
|
| 58 | +def _tag_prefix(tag: Tag) -> str: |
| 59 | + return _V_PREFIX if tag.name.startswith(_V_PREFIX) else "" |
| 60 | + |
| 61 | + |
55 | 62 | def _select_latest_semver_tag(tags: list[Tag]) -> tuple[Tag, semver.Version] | None: |
56 | 63 | parsed: list[tuple[semver.Version, Tag]] = [] |
57 | 64 | for tag in tags: |
58 | 65 | try: |
59 | | - version = semver.Version.parse(tag.name).replace(build=None) |
| 66 | + version = semver.Version.parse(tag.name.removeprefix(_V_PREFIX)).replace(build=None) |
60 | 67 | except ValueError: |
61 | 68 | continue |
62 | 69 | parsed.append((version, tag)) |
63 | 70 | if not parsed: |
64 | 71 | return None |
65 | | - parsed.sort(key=lambda item: item[0]) |
| 72 | + parsed.sort(key=lambda item: (item[0], item[1].name.startswith(_V_PREFIX))) |
66 | 73 | version, tag = parsed[-1] |
67 | 74 | return tag, version |
68 | 75 |
|
|
0 commit comments