This commit is contained in:
jerger 2023-02-24 11:39:38 +01:00
parent c6ef13ca7c
commit 975de636ed
5 changed files with 79 additions and 79 deletions

View file

@ -1,5 +1,11 @@
from enum import Enum from enum import Enum
class Config():
def __init__(self, main_branch):
pass
class ReleaseType(Enum): class ReleaseType(Enum):
MAJOR = 0 MAJOR = 0
MINOR = 1 MINOR = 1
@ -10,7 +16,8 @@ class ReleaseType(Enum):
class Version(): class Version():
def __init__(self, version_list: list): def __init__(self, id: Path, version_list: list):
self.id = id
self.version_list = version_list self.version_list = version_list
self.version_string = None self.version_string = None
self.is_snapshot = None self.is_snapshot = None
@ -55,6 +62,22 @@ class Version():
class Release(): class Release():
def __init__(self, release_type: ReleaseType, version: Version): def __init__(self, release_type: ReleaseType, version: Version, current_branch: str):
self.release_type = release_type self.release_type = release_type
self.version = version self.version = version
self.current_branch = current_branch
def release_version(self):
return self.version.create_release_version(self.release_type)
def bump_version(self):
return self.version.create_bump_version()
def validate(self, main_branch):
result = []
if self.release_type is not None and main_branch != self.current_branch:
result.append(f"Releases are allowed only on {main_branch}")
return result
def is_valid(self, main_branch):
return self.validate(main_branch).count < 1

View file

@ -54,5 +54,5 @@ class ReleaseRepository():
self.version_repository = version_repository self.version_repository = version_repository
self.release_type_repository = release_type_repository self.release_type_repository = release_type_repository
def get_current_release(self) -> Release: def get_release(self) -> Release:
return Release(self.release_type_repository.get_release_type(), self.version_repository.get_version()) return Release(self.release_type_repository.get_release_type(), self.version_repository.get_version())

View file

@ -1,43 +1,22 @@
from pathlib import Path from pathlib import Path
from infrastructure import VersionRepository, GitRepository from infrastructure import ReleaseRepository
from domain import Version, ReleaseType from domain import Version, ReleaseType
# Todo: can be removed
class InitReleaseService(): class InitReleaseService():
def __init__(self, version_repo: VersionRepository): def __init__(self, release_repo: ReleaseRepository):
if version_repo is None: self.release_repo = release_repo
raise Exception('VersionRepo was not created. Did you run create_release_version()?')
self.version_repo = version_repo
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()
def get_version(self): def get_version(self):
return self.version_repo.get_version() return self.release_repo.get_release().version
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
def create_bump_version(self):
version = self.get_version().create_bump_version()
return version
class PrepareReleaseService(): class PrepareReleaseService():
def __init__(self, version_repository: VersionRepository, git_repository: GitRepository, config_file: Path, main_branch: str): def __init__(self, release_repo: ReleaseRepository):
self.version_repository = version_repository self.release_repo = release_repo
self.git_repository = git_repository
self.main_branch = main_branch
self.config_file = config_file
def run_tests(self): # maybe auto?
raise NotImplementedError
def __write_and_commit_version(self, version: Version, commit_message: str): def __write_and_commit_version(self, version: Version, commit_message: str):
if self.main_branch != self.git_repository.get_current_branch(): if self.main_branch != self.git_repository.get_current_branch():

View file

@ -29,49 +29,6 @@ class TestGitApi(GitApi):
return self.commit_string return self.commit_string
def test_git_repository():
# init
commit_string = "Major bla"
repo = GitRepository.create_from_commit_string(commit_string)
release_type = repo.get_release_type_from_latest_commit()
# test
assert release_type == ReleaseType.MAJOR
# init
commit_string = "MINOR bla"
repo = GitRepository.create_from_commit_string(commit_string)
release_type = repo.get_release_type_from_latest_commit()
# test
assert release_type == ReleaseType.MINOR
# init
commit_string = "PATCH bla"
repo = GitRepository.create_from_commit_string(commit_string)
release_type = repo.get_release_type_from_latest_commit()
# test
assert release_type == ReleaseType.PATCH
# init
commit_string = "SNAPSHOT bla"
repo = GitRepository.create_from_commit_string(commit_string)
release_type = repo.get_release_type_from_latest_commit()
# test
assert release_type == ReleaseType.SNAPSHOT
# init
commit_string = "bla"
repo = GitRepository.create_from_commit_string(commit_string)
release_type = repo.get_release_type_from_latest_commit()
# test
assert release_type == None
def test_gradle(tmp_path): def test_gradle(tmp_path):
# init # init
file_name = 'config.gradle' file_name = 'config.gradle'
@ -159,12 +116,32 @@ def test_release_repository(tmp_path):
# test # test
sut = ReleaseRepository(VersionRepository(f), ReleaseTypeRepository(TestGitApi('MINOR test'))) sut = ReleaseRepository(VersionRepository(f), ReleaseTypeRepository(TestGitApi('MINOR test')))
release = sut.get_current_release() release = sut.get_release()
assert release is not None
assert release.version is not None
def test_release_type_repository(): def test_release_type_repository():
sut = ReleaseTypeRepository(TestGitApi('MINOR test')) sut = ReleaseTypeRepository(TestGitApi('MINOR test'))
release_type = sut.get_release_type() release_type = sut.get_release_type()
assert release_type is ReleaseType.MINOR assert release_type is ReleaseType.MINOR
sut = ReleaseTypeRepository(TestGitApi('MINOR bla'))
release_type = sut.get_release_type()
assert release_type is ReleaseType.MINOR
sut = ReleaseTypeRepository(TestGitApi('Major bla'))
release_type = sut.get_release_type()
assert release_type == ReleaseType.MAJOR
sut = ReleaseTypeRepository(TestGitApi('PATCH bla'))
release_type = sut.get_release_type()
assert release_type == ReleaseType.PATCH
sut = ReleaseTypeRepository(TestGitApi('SNAPSHOT bla'))
release_type = sut.get_release_type()
assert release_type == ReleaseType.SNAPSHOT
sut = ReleaseTypeRepository(TestGitApi('bla'))
release_type = sut.get_release_type()
assert release_type == None

View file

@ -0,0 +1,21 @@
from pathlib import Path
import sys
import os
# getting the name of the directory
# where the this file is present.
current = os.path.dirname(os.path.realpath(__file__))
# Getting the parent directory name
# where the current directory is present.
parent = os.path.dirname(current)
# adding the parent directory to
# the sys.path.
sys.path.append(parent)
# now we can import the module in the parent
# directory.
from infrastructure_api import GitApi