First steps for BuildFile
This commit is contained in:
parent
8359406330
commit
ac7f5b8dd1
6 changed files with 110 additions and 11 deletions
|
@ -43,8 +43,10 @@ classDiagram
|
||||||
class BuildFile {
|
class BuildFile {
|
||||||
<<AggregateRoot>>
|
<<AggregateRoot>>
|
||||||
file_path [id]
|
file_path [id]
|
||||||
file_type
|
|
||||||
content
|
content
|
||||||
|
build_file_type()
|
||||||
|
getVersion()
|
||||||
|
setVersion(version)
|
||||||
}
|
}
|
||||||
|
|
||||||
class Version {
|
class Version {
|
||||||
|
|
|
@ -4,3 +4,4 @@ from .image import Image
|
||||||
from .c4k import C4k
|
from .c4k import C4k
|
||||||
from .release import Release, EnvironmentKeys
|
from .release import Release, EnvironmentKeys
|
||||||
from .version import Version
|
from .version import Version
|
||||||
|
from .build_file import BuildFileType, BuildFile
|
||||||
|
|
47
src/main/python/ddadevops/domain/build_file.py
Normal file
47
src/main/python/ddadevops/domain/build_file.py
Normal file
|
@ -0,0 +1,47 @@
|
||||||
|
from enum import Enum
|
||||||
|
from typing import Optional
|
||||||
|
from pathlib import Path
|
||||||
|
from .common import (
|
||||||
|
Validateable,
|
||||||
|
Devops,
|
||||||
|
ReleaseType,
|
||||||
|
)
|
||||||
|
from .version import (
|
||||||
|
Version,
|
||||||
|
)
|
||||||
|
|
||||||
|
class BuildFileType(Enum):
|
||||||
|
JS = '.json'
|
||||||
|
JAVA_GRADLE = '.gradle'
|
||||||
|
JAVA_CLOJURE = ".clj"
|
||||||
|
PYTHON = '.py'
|
||||||
|
|
||||||
|
class BuildFile(Validateable):
|
||||||
|
def __init__(self, file_path: Path, content: str):
|
||||||
|
self.file_path = file_path
|
||||||
|
self.content = content
|
||||||
|
|
||||||
|
def validate(self):
|
||||||
|
result = []
|
||||||
|
result += self.__validate_is_not_empty__("file_path")
|
||||||
|
result += self.__validate_is_not_empty__("content")
|
||||||
|
if not self.build_file_type():
|
||||||
|
result += [f"Suffix {self.file_path} is unknown."]
|
||||||
|
return result
|
||||||
|
|
||||||
|
def build_file_type(self):
|
||||||
|
if not self.file_path:
|
||||||
|
return None
|
||||||
|
config_file_type = self.file_path.suffix
|
||||||
|
match config_file_type:
|
||||||
|
case '.json':
|
||||||
|
result = BuildFileType.JS
|
||||||
|
case '.gradle':
|
||||||
|
result = BuildFileType.JAVA_GRADLE
|
||||||
|
case '.clj':
|
||||||
|
result = BuildFileType.JAVA_CLOJURE
|
||||||
|
case '.py':
|
||||||
|
result = BuildFileType.PYTHON
|
||||||
|
case _:
|
||||||
|
result = None
|
||||||
|
return result
|
|
@ -34,6 +34,7 @@ class Validateable:
|
||||||
|
|
||||||
def __validate_is_not_empty__(self, field_name: str) -> List[str]:
|
def __validate_is_not_empty__(self, field_name: str) -> List[str]:
|
||||||
result = self.__validate_is_not_none__(field_name)
|
result = self.__validate_is_not_none__(field_name)
|
||||||
|
if len(result) == 0:
|
||||||
value = self.__dict__[field_name]
|
value = self.__dict__[field_name]
|
||||||
if type(value) is str and value == "":
|
if type(value) is str and value == "":
|
||||||
result += [f"Field '{field_name}' must not be empty."]
|
result += [f"Field '{field_name}' must not be empty."]
|
||||||
|
|
|
@ -5,9 +5,10 @@ from subprocess import run
|
||||||
from pkg_resources import resource_string
|
from pkg_resources import resource_string
|
||||||
import yaml
|
import yaml
|
||||||
import deprecation
|
import deprecation
|
||||||
from ..domain import Devops, Image, C4k, Release
|
from ..domain import Devops, Image, C4k, Release, BuildFile
|
||||||
from ..python_util import execute
|
from ..python_util import execute
|
||||||
|
|
||||||
|
|
||||||
class DevopsRepository:
|
class DevopsRepository:
|
||||||
def get_devops(self, project) -> Devops:
|
def get_devops(self, project) -> Devops:
|
||||||
devops = project.get_property("devops")
|
devops = project.get_property("devops")
|
||||||
|
@ -19,10 +20,24 @@ class DevopsRepository:
|
||||||
project.set_property("devops", devops)
|
project.set_property("devops", devops)
|
||||||
|
|
||||||
|
|
||||||
class ProjectRepository:
|
class BuildFileRepository:
|
||||||
def set_build(self, project, build):
|
def get(self, path: Path) -> BuildFile:
|
||||||
project.set_property("devops_build", build)
|
with open(path, "r", encoding="utf-8") as file:
|
||||||
|
content = file.read()
|
||||||
|
result = BuildFile(path, content)
|
||||||
|
result.throw_if_invalid()
|
||||||
|
return result
|
||||||
|
|
||||||
|
def write(self, build_file: BuildFile):
|
||||||
|
build_file.throw_if_invalid()
|
||||||
|
with open(build_file.file_path, "r+", encoding="utf-8") as file:
|
||||||
|
file.seek(0)
|
||||||
|
file.write(build_file.content)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
class ProjectRepository:
|
||||||
|
pass
|
||||||
|
|
||||||
class ResourceApi:
|
class ResourceApi:
|
||||||
def read_resource(self, path: str) -> bytes:
|
def read_resource(self, path: str) -> bytes:
|
||||||
|
@ -60,7 +75,7 @@ class ImageApi:
|
||||||
|
|
||||||
def drun(self, name: str):
|
def drun(self, name: str):
|
||||||
run(
|
run(
|
||||||
f"docker run -it --entrypoint=\"\" {name} /bin/bash",
|
f'docker run -it --entrypoint="" {name} /bin/bash',
|
||||||
shell=True,
|
shell=True,
|
||||||
check=True,
|
check=True,
|
||||||
)
|
)
|
||||||
|
|
33
src/test/python/domain/test_build_file.py
Normal file
33
src/test/python/domain/test_build_file.py
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
from pathlib import Path
|
||||||
|
from src.main.python.ddadevops.domain import (
|
||||||
|
BuildFileType,
|
||||||
|
BuildFile,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def test_sould_validate_build_file():
|
||||||
|
sut = BuildFile(
|
||||||
|
Path("./project.clj"),
|
||||||
|
"content"
|
||||||
|
)
|
||||||
|
assert sut.is_valid()
|
||||||
|
|
||||||
|
sut = BuildFile(
|
||||||
|
None,
|
||||||
|
""
|
||||||
|
)
|
||||||
|
assert not sut.is_valid()
|
||||||
|
|
||||||
|
sut = BuildFile(
|
||||||
|
Path("./unknown.extension"),
|
||||||
|
"content"
|
||||||
|
)
|
||||||
|
assert not sut.is_valid()
|
||||||
|
|
||||||
|
|
||||||
|
def test_sould_calculate_build_type():
|
||||||
|
sut = BuildFile(
|
||||||
|
Path("./project.clj"),
|
||||||
|
"content"
|
||||||
|
)
|
||||||
|
assert sut.build_file_type() == BuildFileType.JAVA_CLOJURE
|
Loading…
Reference in a new issue