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 from services import InitReleaseService, PrepareReleaseService, TagAndPushReleaseService from git_repository import GitRepository def create_release_mixin_config(config, release_type, config_file, main_branch): config.update({'ReleaseMixin': {'main_branch': main_branch, 'file': config_file}}) return config class ReleaseMixin(DevopsBuild): def __init__(self, project, config): super().__init__(project, config) release_mixin_config = config['ReleaseMixin'] self.file = release_mixin_config['file'] self.main_branch = release_mixin_config['main_branch'] self.version_repo = VersionRepository(self.file) def init(self): # returns versions init_service = InitReleaseService(self.version_repo) release_version = init_service.create_release_version() bump_version = release_version.create_bump_version() return release_version, bump_version def prepare(self, release_version: Version, bump_version: Version): # writes into files, add. commit git_repository = GitRepository() if self.main_branch not in git_repository.get_current_branch(): raise Exception('Trying to release while not on main branch') self.version_repo.write_file(release_version.get_version_string()) git_repository.add_file(self.file) git_repository.commit(f'Release {release_version.get_version_string()}') self.version_repo.write_file(bump_version.get_version_string()) git_repository.add_file(self.file) git_repository.commit(f'Version bump {bump_version.get_version_string()}') def tag_and_push(): # correct tag and do push pass