from typing import Optional from pybuilder.core import Project from src.main.python.ddadevops.devops_build import DevopsBuild from src.main.python.ddadevops.infrastructure.release_mixin import ReleaseRepository, ReleaseTypeRepository, VersionRepository, GitApi, EnvironmentApi from src.main.python.ddadevops.application import PrepareReleaseService, TagAndPushReleaseService from src.main.python.ddadevops.domain import ReleaseConfig, EnvironmentKeys def create_release_mixin_config(config_file, main_branch) -> dict: config = {} config.update( {'ReleaseMixin': {'main_branch': main_branch, 'config_file': config_file}}) return config def add_versions(config, release_version, bump_version) -> dict: config['ReleaseMixin'].update( {'release_version': release_version, 'bump_version': bump_version}) return config class ReleaseMixin(DevopsBuild): def __init__(self, project: Project, config: Optional[dict] = None, release_config: Optional[ReleaseConfig] = None): if not release_config: if not config: raise ValueError("Release parameters could not be set.") super().__init__(project, config=config) release_mixin_config = config['ReleaseMixin'] release_config = ReleaseConfig( main_branch = release_mixin_config['main_branch'], config_file = release_mixin_config['config_file'], devops=self.repo.get_devops(project) ) else: super().__init__(project, devops=release_config.devops) self.repo.set_release(self.project, release_config) git_api = GitApi() environment_api = EnvironmentApi() env_key = EnvironmentKeys.DDADEVOPS_RELEASE_TYPE.name environment_val_set = environment_api.get(env_key) != "" and environment_api.get(env_key) is not None if environment_val_set: release_type_repo = ReleaseTypeRepository.from_environment(environment_api) else: release_type_repo = ReleaseTypeRepository.from_git(git_api) version_repo = VersionRepository(release_config.config_file) release_repo = ReleaseRepository(version_repo, release_type_repo, release_config.main_branch) self.prepare_release_service = PrepareReleaseService(release_repo) self.tag_and_push_release_service = TagAndPushReleaseService(git_api, release_repo) def prepare_release(self): self.prepare_release_service.write_and_commit_release() self.prepare_release_service.write_and_commit_bump() def tag_and_push_release(self): self.tag_and_push_release_service.tag_release() self.tag_and_push_release_service.push_release()