-
Notifications
You must be signed in to change notification settings - Fork 0
/
version_tag_in_last_commit.py
28 lines (22 loc) · 1.09 KB
/
version_tag_in_last_commit.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
from dataclasses import dataclass
from gitversioniser.domain.repository.commit import Commit
from gitversioniser.domain.repository.semver_tag import SemverTag
from gitversioniser.domain.versioniser.routines.version.abstract import RoutineVersion
@dataclass
class VersionTagInLastCommit(RoutineVersion):
"""
Works best with:
- Pushing to main repository branch after each commit
- Merging develop branches to main repository branch
"""
def generate_new_version(self) -> SemverTag:
latest_commit: Commit = self.repo.commits.latest
last_version: SemverTag = self.repo.tags.latest_semver
return self._bump_version(latest_commit, last_version)
@staticmethod
def _bump_version(commit: Commit, version: SemverTag) -> SemverTag:
if not commit.message.increment_tag.exist():
return version.bump_build() if (version.prerelease or version.build) else version.bump_patch().bump_prerelease('alpha')
for increment in commit.message.increment_tag.get():
version = increment.bump_version(version)
return version