dda-devops-build/release_mixin.py

68 lines
2.7 KiB
Python
Raw Normal View History

2023-02-16 13:21:27 +00:00
from ddadevops import DevopsBuild
from ddadevops import execute
from ddadevops import gopass_field_from_path, gopass_password_from_path
from version import Version
from version_repository import VersionRepository
2023-02-22 11:05:34 +00:00
from services import InitReleaseService, PrepareReleaseService, TagAndPushReleaseService
from git_repository import GitRepository
2023-02-22 14:14:48 +00:00
from release_type import ReleaseType
2023-02-16 13:21:27 +00:00
2023-02-22 13:11:39 +00:00
def create_release_mixin_config(config_file, main_branch) -> dict:
config = {}
config.update(
{'ReleaseMixin':
{'main_branch': main_branch,
'file': config_file}})
2023-02-16 13:21:27 +00:00
return config
2023-02-22 13:11:39 +00:00
def add_versions(config, release_version, bump_version) -> dict:
config['ReleaseMixin'].update(
{'release_version': release_version,
'bump_version': bump_version})
return config
2023-02-16 13:21:27 +00:00
class ReleaseMixin(DevopsBuild):
def __init__(self, project, config):
super().__init__(project, config)
release_mixin_config = config['ReleaseMixin']
2023-02-16 13:21:27 +00:00
self.file = release_mixin_config['file']
2023-02-22 11:05:34 +00:00
self.main_branch = release_mixin_config['main_branch']
self.version_repo = VersionRepository(self.file)
2023-02-22 13:11:39 +00:00
self.release_version = None
self.bump_version = None
2023-02-16 13:21:27 +00:00
2023-02-22 13:11:39 +00:00
def init(self):
2023-02-22 11:05:34 +00:00
init_service = InitReleaseService(self.version_repo)
2023-02-22 13:11:39 +00:00
self.release_version = init_service.create_release_version()
self.bump_version = self.release_version.create_bump_version()
2023-02-22 11:05:34 +00:00
2023-02-22 13:11:39 +00:00
def prepare(self, version):
2023-02-22 11:05:34 +00:00
git_repository = GitRepository()
if self.main_branch not in git_repository.get_current_branch():
raise Exception('Trying to release while not on main branch')
2023-02-22 13:11:39 +00:00
self.version_repo.write_file(version.get_version_string())
git_repository.add_file(self.file)
match version.release_type:
case None:
raise Exception('Release type not set but trying to commit.')
case ReleaseType.BUMP:
git_repository.commit(f'Version bump')
case _:
git_repository.commit(f'Release {version.get_version_string()}')
def tag_and_push(self, version):
git_repository = GitRepository()
match version.release_type:
case None:
raise Exception('Release type not set but trying to tag and push.')
case ReleaseType.BUMP:
annotation = 'v' + version.get_version_string()
message = 'Version bump'
case _:
annotation = 'v' + self.release_version.get_version_string()
message = 'Release' + annotation
git_repository.tag_annotated(annotation, message)
git_repository.push()