release_mixin now might work
parent
9e91491542
commit
7f7878fe36
@ -1,2 +1,2 @@
|
||||
from .image_build_service import ImageBuildService
|
||||
from .release_mixin_services import TagAndPushReleaseService, PrepareReleaseService
|
||||
from .release_mixin_services import ReleaseService
|
||||
|
@ -1,34 +1,60 @@
|
||||
from src.main.python.ddadevops.infrastructure.release_mixin import ReleaseContextRepository, VersionRepository, GitApi
|
||||
from typing import Optional, List
|
||||
from src.main.python.ddadevops.infrastructure import GitApi, BuildFileRepository
|
||||
from src.main.python.ddadevops.domain import Version, Release
|
||||
|
||||
|
||||
class PrepareReleaseService():
|
||||
|
||||
def __init__(self):
|
||||
self.git_api = GitApi()
|
||||
|
||||
def __write_and_commit_version(self, release: Release, version_repository: VersionRepository, version: Version, commit_message: str):
|
||||
release.is_valid()
|
||||
|
||||
version_repository.write_file(version.get_version_string())
|
||||
self.git_api.add_file(version_repository.file)
|
||||
self.git_api.commit(commit_message)
|
||||
|
||||
def write_and_commit_release(self, release: Release, version_repository: VersionRepository):
|
||||
self.__write_and_commit_version(release, version_repository, release.release_version(), commit_message=f'Release v{release.release_version().get_version_string()}')
|
||||
|
||||
def write_and_commit_bump(self, release: Release, version_repository: VersionRepository):
|
||||
self.__write_and_commit_version(release, version_repository, release.bump_version(), commit_message='Version bump')
|
||||
|
||||
class TagAndPushReleaseService():
|
||||
|
||||
def __init__(self, git_api: GitApi):
|
||||
class ReleaseService:
|
||||
def __init__(self, git_api: GitApi, build_file_repository: BuildFileRepository):
|
||||
self.git_api = git_api
|
||||
|
||||
def tag_release(self, release_repo: ReleaseContextRepository):
|
||||
annotation = 'v' + release_repo.get_release().version.get_version_string()
|
||||
message = 'Release ' + annotation
|
||||
self.git_api.tag_annotated_second_last(annotation, message)
|
||||
|
||||
def push_release(self):
|
||||
self.build_file_repository = build_file_repository
|
||||
|
||||
@classmethod
|
||||
def prod(cls):
|
||||
return cls(
|
||||
GitApi(),
|
||||
BuildFileRepository(),
|
||||
)
|
||||
|
||||
def prepare_release(self, release: Release):
|
||||
match release.release_type:
|
||||
case ReleaseType.MAJOR:
|
||||
version = release.version.create_major()
|
||||
case ReleaseType.MINOR:
|
||||
version = release.version.create_minor()
|
||||
case ReleaseType.PATCH:
|
||||
version = release.version.create_patch()
|
||||
case ReleaseType.NONE:
|
||||
return
|
||||
message = f"release: {version.to_string()}"
|
||||
self.__set_version_and_commit__(version, release.build_files(), message)
|
||||
|
||||
def tag_bump_and_push_release(self, release: Release):
|
||||
match release.release_type:
|
||||
case ReleaseType.MAJOR:
|
||||
release_version = release.version.create_major()
|
||||
case ReleaseType.MINOR:
|
||||
release_version = release.version.create_minor()
|
||||
case ReleaseType.PATCH:
|
||||
release_version = release.version.create_patch()
|
||||
case ReleaseType.NONE:
|
||||
return
|
||||
bump_version = release_version.create_bump()
|
||||
release_message = f"release: {release_version.to_string()}"
|
||||
bump_message = f"bump version to: {bump_version.to_string()}"
|
||||
self.git_api.tag_annotated(release_version.to_string(), release_message, 0)
|
||||
self.__set_version_and_commit__(
|
||||
bump_version,
|
||||
release.build_files(),
|
||||
bump_message,
|
||||
)
|
||||
self.git_api.push()
|
||||
|
||||
def __set_version_and_commit__(
|
||||
self, version: Version, build_file_ids: List[str], message: str
|
||||
):
|
||||
for id in build_file_ids:
|
||||
build_file = self.build_file_repository.get(id)
|
||||
build_file.set_version(release_version)
|
||||
self.build_file_repository.write(build_file)
|
||||
self.git_api.add_file(build_file.file_path)
|
||||
self.git_api.commit(message)
|
||||
|
@ -1,2 +1,2 @@
|
||||
from .infrastructure_api import FileHandler, GitApi, JsonFileHandler, GradleFileHandler, PythonFileHandler, ClojureFileHandler
|
||||
from .infrastructure_api import FileHandler, JsonFileHandler, GradleFileHandler, PythonFileHandler, ClojureFileHandler
|
||||
from .repo import VersionRepository, ReleaseContextRepository, ReleaseTypeRepository
|
||||
|
@ -1,39 +1,23 @@
|
||||
from pybuilder.core import Project
|
||||
from src.main.python.ddadevops.devops_build import DevopsBuild
|
||||
from src.main.python.ddadevops.infrastructure.release_mixin import ReleaseContextRepository, ReleaseTypeRepository, VersionRepository, GitApi
|
||||
from src.main.python.ddadevops.infrastructure import EnvironmentApi
|
||||
from src.main.python.ddadevops.application import PrepareReleaseService, TagAndPushReleaseService
|
||||
from src.main.python.ddadevops.domain import Release, EnvironmentKeys, MixinType
|
||||
from src.main.python.ddadevops.application import ReleaseService
|
||||
from src.main.python.ddadevops.domain import MixinType
|
||||
|
||||
|
||||
class ReleaseMixin(DevopsBuild):
|
||||
def __init__(self, project: Project, input: dict):
|
||||
super().__init__(project, input)
|
||||
devops = self.repo.get_devops(self.project)
|
||||
git_api = GitApi()
|
||||
self.tag_and_push_release_service = TagAndPushReleaseService(git_api)
|
||||
environment_api = EnvironmentApi()
|
||||
self.release_service = ReleaseService.prod()
|
||||
devops = self.devops_repo.get_devops(self.project)
|
||||
if MixinType.RELEASE not in devops.mixins:
|
||||
raise ValueError(f"ReleaseMixin requires MixinType.RELEASE")
|
||||
|
||||
# TODO: move this to service
|
||||
release = devops.mixins[MixinType.RELEASE]
|
||||
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.release_config_file)
|
||||
self.release_repo = ReleaseContextRepository(version_repo, release_type_repo)
|
||||
# Here the initialization can happen
|
||||
self.prepare_release_service = PrepareReleaseService()
|
||||
|
||||
def prepare_release(self):
|
||||
devops = self.repo.get_devops(self.project)
|
||||
release = devops.mixins[MixinType.RELEASE]
|
||||
self.prepare_release_service.write_and_commit_release(release, self.release_repo.version_repository)
|
||||
self.prepare_release_service.write_and_commit_bump(release, self.release_repo.version_repository)
|
||||
self.release_service.prepare_release(release)
|
||||
|
||||
def tag_and_push_release(self):
|
||||
self.tag_and_push_release_service.tag_release(self.release_repo)
|
||||
self.tag_and_push_release_service.push_release()
|
||||
def tag_bump_and_push_release(self):
|
||||
devops = self.repo.get_devops(self.project)
|
||||
release = devops.mixins[MixinType.RELEASE]
|
||||
self.release_service.tag_bump_and_push_release(release)
|
||||
|
Loading…
Reference in New Issue