dda-devops-build/services.py

70 lines
2.7 KiB
Python
Raw Normal View History

from pathlib import Path
2023-02-22 08:59:16 +00:00
from version_repository import VersionRepository
from release_type import ReleaseType
2023-02-22 09:27:07 +00:00
from git_repository import GitRepository
2023-02-24 09:14:26 +00:00
from domain import Version
2023-02-22 08:59:16 +00:00
2023-02-16 15:55:01 +00:00
class InitReleaseService():
def __init__(self, version_repo: VersionRepository):
if version_repo is None:
raise Exception('VersionRepo was not created. Did you run create_release_version()?')
self.version_repo = version_repo
2023-02-16 15:55:01 +00:00
2023-02-22 09:57:24 +00:00
def __calculate_release_type(self, commit_string = None):
if commit_string is None:
return GitRepository().get_release_type_from_latest_commit()
else:
return GitRepository.create_from_commit_string(commit_string).get_release_type_from_latest_commit()
2023-02-22 09:27:07 +00:00
def get_version(self):
return self.version_repo.get_version()
2023-02-20 13:45:15 +00:00
2023-02-22 09:57:24 +00:00
def create_release_version(self, commit_string = None):
release_type = self.__calculate_release_type(commit_string)
version = self.get_version().create_release_version(release_type)
return version
2023-02-16 15:55:01 +00:00
def create_bump_version(self):
version = self.get_version().create_bump_version()
return version
2023-02-20 14:50:58 +00:00
class PrepareReleaseService():
2023-02-16 15:55:01 +00:00
def __init__(self, version_repository: VersionRepository, git_repository: GitRepository, config_file: Path, main_branch: str):
self.version_repository = version_repository
self.git_repository = git_repository
self.main_branch = main_branch
self.config_file = config_file
2023-02-16 15:55:01 +00:00
def run_tests(self): # maybe auto?
raise NotImplementedError
def __write_and_commit_version(self, version: Version, commit_message: str):
if self.main_branch != self.git_repository.get_current_branch():
raise Exception('Trying to release while not on main branch')
self.version_repository.write_file(version.get_version_string())
self.git_repository.add_file(self.config_file)
self.git_repository.commit(commit_message)
def write_and_commit_release(self, release_version: Version):
self.__write_and_commit_version(release_version, commit_message=f'Release {release_version.get_version_string()}')
def write_and_commit_bump(self, bump_version: Version):
self.__write_and_commit_version(bump_version, commit_message=f'Version bump')
2023-02-16 15:55:01 +00:00
class TagAndPushReleaseService():
def __init__(self, git_repository: GitRepository):
self.git_repository = git_repository
def tag_and_push_release(self, release_version: Version):
annotation = 'v' + release_version.get_version_string()
message = 'Release ' + annotation
self.git_repository.tag_annotated(annotation, message, 1)
# self.git_repository.push()
2023-02-16 15:55:01 +00:00