From 953e05ecfb4fbe837ab51dc5c7a58ea7a44dee46 Mon Sep 17 00:00:00 2001 From: erik Date: Fri, 28 Apr 2023 14:27:41 +0200 Subject: [PATCH 01/10] Remove unused imports --- src/main/python/ddadevops/devops_build.py | 1 - src/main/python/ddadevops/domain/image.py | 1 - src/main/python/ddadevops/domain/release.py | 1 - .../infrastructure/release_mixin/infrastructure_api.py | 1 - src/main/python/ddadevops/infrastructure/release_mixin/repo.py | 2 +- src/main/python/ddadevops/release_mixin.py | 1 - 6 files changed, 1 insertion(+), 6 deletions(-) diff --git a/src/main/python/ddadevops/devops_build.py b/src/main/python/ddadevops/devops_build.py index 36ddb84..a239ae2 100644 --- a/src/main/python/ddadevops/devops_build.py +++ b/src/main/python/ddadevops/devops_build.py @@ -1,5 +1,4 @@ from typing import Optional -from subprocess import run, CalledProcessError import deprecation from .domain import Devops from .infrastructure import ProjectRepository, FileApi diff --git a/src/main/python/ddadevops/domain/image.py b/src/main/python/ddadevops/domain/image.py index 49ca555..37a23aa 100644 --- a/src/main/python/ddadevops/domain/image.py +++ b/src/main/python/ddadevops/domain/image.py @@ -1,4 +1,3 @@ -from typing import Optional from .common import ( filter_none, Validateable, diff --git a/src/main/python/ddadevops/domain/release.py b/src/main/python/ddadevops/domain/release.py index 040db05..882a8fc 100644 --- a/src/main/python/ddadevops/domain/release.py +++ b/src/main/python/ddadevops/domain/release.py @@ -2,7 +2,6 @@ from enum import Enum from typing import Optional from pathlib import Path from .common import ( - filter_none, Validateable, Devops, ) diff --git a/src/main/python/ddadevops/infrastructure/release_mixin/infrastructure_api.py b/src/main/python/ddadevops/infrastructure/release_mixin/infrastructure_api.py index 09587b9..5d297b9 100644 --- a/src/main/python/ddadevops/infrastructure/release_mixin/infrastructure_api.py +++ b/src/main/python/ddadevops/infrastructure/release_mixin/infrastructure_api.py @@ -1,6 +1,5 @@ import json import re -import subprocess as sub from abc import ABC, abstractmethod from typing import Optional from pathlib import Path diff --git a/src/main/python/ddadevops/infrastructure/release_mixin/repo.py b/src/main/python/ddadevops/infrastructure/release_mixin/repo.py index 308d6c0..4fd65df 100644 --- a/src/main/python/ddadevops/infrastructure/release_mixin/repo.py +++ b/src/main/python/ddadevops/infrastructure/release_mixin/repo.py @@ -1,4 +1,4 @@ -from typing import Optional + from src.main.python.ddadevops.domain import ( ReleaseContext, Version, diff --git a/src/main/python/ddadevops/release_mixin.py b/src/main/python/ddadevops/release_mixin.py index c7eddb7..597ee6a 100644 --- a/src/main/python/ddadevops/release_mixin.py +++ b/src/main/python/ddadevops/release_mixin.py @@ -1,4 +1,3 @@ -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 ReleaseContextRepository, ReleaseTypeRepository, VersionRepository, GitApi, EnvironmentApi From 0214cdd99a527341f05081b149f95b52cfedc372 Mon Sep 17 00:00:00 2001 From: erik Date: Fri, 28 Apr 2023 14:33:49 +0200 Subject: [PATCH 02/10] Update Ignore Settings --- .gitlab-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 1c2920c..023a56b 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -27,7 +27,7 @@ pylint: stage: lint&test script: - pip install -r dev_requirements.txt - - pylint -d C0301,W0614,C0114,C0115,C0116,similarities,W0702,W0702,R0913,R0902,R0914,R1732 src/main/python/ddadevops/ + - pylint -d W0511,R0903,C0301,W0614,C0114,C0115,C0116,similarities,W0702,W0702,R0913,R0902,R0914,R1732 src/main/python/ddadevops/ pytest: stage: lint&test From 9db91c0a16c40b656af23ef9460e882498f6c94f Mon Sep 17 00:00:00 2001 From: erik Date: Fri, 28 Apr 2023 14:41:37 +0200 Subject: [PATCH 03/10] Fix pylint messages for repo --- .../infrastructure/release_mixin/repo.py | 65 ++++++++++--------- 1 file changed, 33 insertions(+), 32 deletions(-) diff --git a/src/main/python/ddadevops/infrastructure/release_mixin/repo.py b/src/main/python/ddadevops/infrastructure/release_mixin/repo.py index 4fd65df..2dab0c1 100644 --- a/src/main/python/ddadevops/infrastructure/release_mixin/repo.py +++ b/src/main/python/ddadevops/infrastructure/release_mixin/repo.py @@ -23,9 +23,8 @@ class VersionRepository: def write_file(self, version_string): if self.file_handler is None: - raise Exception("Version was not created by load_file method.") - else: - self.file_handler.write(version_string) + raise RuntimeError("Version was not created by load_file method.") + self.file_handler.write(version_string) def parse_file(self): version_list, is_snapshot = self.file_handler.parse() @@ -53,29 +52,30 @@ class ReleaseTypeRepository: @classmethod def from_git(cls, git_api: GitApi): - releaseTypeRepo = cls(git_api=git_api) - releaseTypeRepo.get_from_git = True - return releaseTypeRepo + release_type_repo = cls(git_api=git_api) + release_type_repo.get_from_git = True + return release_type_repo @classmethod def from_environment(cls, environment_api: EnvironmentApi): - releaseTypeRepo = cls(environment_api=environment_api) - releaseTypeRepo.get_from_env = True - return releaseTypeRepo + release_type_repo = cls(environment_api=environment_api) + release_type_repo.get_from_env = True + return release_type_repo def __get_release_type_git(self) -> ReleaseType | None: latest_commit = self.git_api.get_latest_commit() - if ReleaseType.MAJOR.name in latest_commit.upper(): - return ReleaseType.MAJOR - elif ReleaseType.MINOR.name in latest_commit.upper(): - return ReleaseType.MINOR - elif ReleaseType.PATCH.name in latest_commit.upper(): - return ReleaseType.PATCH - elif ReleaseType.SNAPSHOT.name in latest_commit.upper(): - return ReleaseType.SNAPSHOT - else: - return None + match latest_commit.upper(): + case ReleaseType.MAJOR.name: + return ReleaseType.MAJOR + case ReleaseType.MINOR.name: + return ReleaseType.MINOR + case ReleaseType.PATCH.name: + return ReleaseType.PATCH + case ReleaseType.SNAPSHOT.name: + return ReleaseType.SNAPSHOT + case _: + return None def __get_release_type_environment(self) -> ReleaseType | None: release_name = self.environment_api.get( @@ -86,24 +86,25 @@ class ReleaseTypeRepository: raise ValueError( "Release Name not found. Is the Environment correctly configured?" ) - elif ReleaseType.MAJOR.name in release_name.upper(): - return ReleaseType.MAJOR - elif ReleaseType.MINOR.name in release_name.upper(): - return ReleaseType.MINOR - elif ReleaseType.PATCH.name in release_name.upper(): - return ReleaseType.PATCH - elif ReleaseType.SNAPSHOT.name in release_name.upper(): - return ReleaseType.SNAPSHOT - else: - return None + + match release_name.upper(): + case ReleaseType.MAJOR.name: + return ReleaseType.MAJOR + case ReleaseType.MINOR.name: + return ReleaseType.MINOR + case ReleaseType.PATCH.name: + return ReleaseType.PATCH + case ReleaseType.SNAPSHOT.name: + return ReleaseType.SNAPSHOT + case _: + return None def get_release_type(self) -> ReleaseType | None: if self.get_from_git: return self.__get_release_type_git() - elif self.get_from_env: + if self.get_from_env: return self.__get_release_type_environment() - else: - raise ValueError("No valid api passed to ReleaseTypeRepository") + raise ValueError("No valid api passed to ReleaseTypeRepository") class ReleaseContextRepository: From 2463d3667498a8a18415cd55d2df69abdad4bb68 Mon Sep 17 00:00:00 2001 From: erik Date: Fri, 28 Apr 2023 14:42:36 +0200 Subject: [PATCH 04/10] [Skip-CI] More specific exception --- .../infrastructure/release_mixin/infrastructure_api.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/python/ddadevops/infrastructure/release_mixin/infrastructure_api.py b/src/main/python/ddadevops/infrastructure/release_mixin/infrastructure_api.py index 5d297b9..33bb455 100644 --- a/src/main/python/ddadevops/infrastructure/release_mixin/infrastructure_api.py +++ b/src/main/python/ddadevops/infrastructure/release_mixin/infrastructure_api.py @@ -25,7 +25,7 @@ class FileHandler(ABC): case '.py': file_handler = PythonFileHandler() case _: - raise Exception( + raise RuntimeError( f'The file type "{config_file_type}" is not implemented') # TODO: Attribute is only set in classmethod. Should this be initialized outside of this class? file_handler.config_file_path = file_path From c70daa346d3d6a6e687d362d697888e9ec8ec312 Mon Sep 17 00:00:00 2001 From: bom Date: Fri, 28 Apr 2023 14:50:35 +0200 Subject: [PATCH 05/10] Resolve pylint errors in release.py --- .gitlab-ci.yml | 2 +- src/main/python/ddadevops/domain/release.py | 14 +++++++------- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 023a56b..6d8e287 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -27,7 +27,7 @@ pylint: stage: lint&test script: - pip install -r dev_requirements.txt - - pylint -d W0511,R0903,C0301,W0614,C0114,C0115,C0116,similarities,W0702,W0702,R0913,R0902,R0914,R1732 src/main/python/ddadevops/ + - pylint -d W0511,R0903,C0301,W0614,C0114,C0115,C0116,similarities,W0719,W0702,W0702,R0913,R0902,R0914,R1732 src/main/python/ddadevops/ pytest: stage: lint&test diff --git a/src/main/python/ddadevops/domain/release.py b/src/main/python/ddadevops/domain/release.py index 882a8fc..2c27b4a 100644 --- a/src/main/python/ddadevops/domain/release.py +++ b/src/main/python/ddadevops/domain/release.py @@ -18,8 +18,8 @@ class EnvironmentKeys(Enum): class Version(): - def __init__(self, id: Path, version_list: list): - self.id = id + def __init__(self, path: Path, version_list: list): + self.path = path self.version_list = version_list self.version_string: Optional[str | None] = None self.is_snapshot: Optional[bool | None] = None @@ -42,7 +42,7 @@ class Version(): self.version_list[ReleaseType.MINOR.value] = 0 self.version_list[ReleaseType.MAJOR.value] += 1 case None: - raise Exception("Release Type was not set!") + raise RuntimeError("Release Type was not set!") def get_version_string(self) -> str: self.version_string = ".".join([str(x) for x in self.version_list]) @@ -51,13 +51,13 @@ class Version(): return self.version_string def create_release_version(self, release_type: ReleaseType | None): - release_version = Version(self.id, self.version_list.copy()) + release_version = Version(self.path, self.version_list.copy()) release_version.is_snapshot = self.is_snapshot release_version.increment(release_type) return release_version def create_bump_version(self): - bump_version = Version(self.id, self.version_list.copy()) + bump_version = Version(self.path, self.version_list.copy()) bump_version.is_snapshot = self.is_snapshot bump_version.increment(ReleaseType.BUMP) return bump_version @@ -99,9 +99,9 @@ class Release(Validateable): self.config_file = config_file self.release_context: ReleaseContext | None = None - def set_release_context(self, set_release_context: ReleaseContext): + def set_release_context(self, set_release_context: ReleaseContext): self.release_context = set_release_context - + def release_version(self): return self.release_context.release_version() From 837b58d5b893d3deddbf87c67f3f7b99d4761c0d Mon Sep 17 00:00:00 2001 From: bom Date: Fri, 28 Apr 2023 14:57:19 +0200 Subject: [PATCH 06/10] Resolve pylint errors in common.py --- .gitlab-ci.yml | 2 +- src/main/python/ddadevops/domain/common.py | 19 ++++++++++--------- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 6d8e287..1abb7b6 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -27,7 +27,7 @@ pylint: stage: lint&test script: - pip install -r dev_requirements.txt - - pylint -d W0511,R0903,C0301,W0614,C0114,C0115,C0116,similarities,W0719,W0702,W0702,R0913,R0902,R0914,R1732 src/main/python/ddadevops/ + - pylint -d W0511,R0903,C0301,W0614,C0114,C0115,C0116,similarities,W1203,W0719,W0702,W0702,R0913,R0902,R0914,R1732 src/main/python/ddadevops/ pytest: stage: lint&test diff --git a/src/main/python/ddadevops/domain/common.py b/src/main/python/ddadevops/domain/common.py index a5f1fc8..5ffdb14 100644 --- a/src/main/python/ddadevops/domain/common.py +++ b/src/main/python/ddadevops/domain/common.py @@ -1,6 +1,6 @@ -import deprecation -import logging from typing import List +import logging +import deprecation def filter_none(list_to_filter): return [x for x in list_to_filter if x is not None] @@ -10,15 +10,15 @@ class Validateable: value = self.__dict__[field_name] if value is None or value == "": return [f"Field '{field_name}' must not be empty."] - else: - return [] + + return [] def validate(self) -> List[str]: return [] def is_valid(self) -> bool: return len(self.validate()) < 1 - + def throw_if_invalid(self): if not self.is_valid(): issues = '\n'.join(self.validate()) @@ -46,7 +46,7 @@ class Devops(Validateable): self.stage = stage self.name = name self.project_root_path = project_root_path - logging.warn(f"Set project root in DevOps {self.project_root_path}") + logging.warning(f"Set project root in DevOps {self.project_root_path}") self.module = module if not name: self.name = module @@ -56,22 +56,23 @@ class Devops(Validateable): @deprecation.deprecated(deprecated_in="3.2") # use .name instead + #pylint: disable=method-hidden def name(self): return self.name def build_path(self): path = [self.project_root_path, self.build_dir_name, self.name, self.module] - logging.warn(f"Set project build_path in Devops {path}") + logging.warning(f"Set project build_path in Devops {path}") return "/".join(filter_none(path)) def __put__(self, key, value): self.stack[key] = value - def __get__(self, key): + def __get(self, key): return self.stack[key] def __get_keys__(self, keys): result = {} for key in keys: - result[key] = self.__get__(key) + result[key] = self.__get(key) return result From af0d6cc43e8e9f8037846767c87e1e590ba80d0d Mon Sep 17 00:00:00 2001 From: bom Date: Fri, 28 Apr 2023 15:01:03 +0200 Subject: [PATCH 07/10] Resolve pylint errors in infrastructure_api.py --- .../release_mixin/infrastructure_api.py | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/src/main/python/ddadevops/infrastructure/release_mixin/infrastructure_api.py b/src/main/python/ddadevops/infrastructure/release_mixin/infrastructure_api.py index 33bb455..f65140e 100644 --- a/src/main/python/ddadevops/infrastructure/release_mixin/infrastructure_api.py +++ b/src/main/python/ddadevops/infrastructure/release_mixin/infrastructure_api.py @@ -46,7 +46,7 @@ class JsonFileHandler(FileHandler): def parse(self) -> tuple[list[int], bool]: if self.config_file_path is None: raise ValueError("No file name given.") - with open(self.config_file_path, 'r') as json_file: + with open(self.config_file_path, 'r', encoding='utf-8') as json_file: json_version = json.load(json_file)['version'] is_snapshot = False if '-SNAPSHOT' in json_version: @@ -56,7 +56,7 @@ class JsonFileHandler(FileHandler): return version, is_snapshot def write(self, version_string): - with open(self.config_file_path, 'r+') as json_file: + with open(self.config_file_path, 'r+', encoding='utf-8') as json_file: json_data = json.load(json_file) json_data['version'] = version_string json_file.seek(0) @@ -69,7 +69,7 @@ class GradleFileHandler(FileHandler): def parse(self) -> tuple[list[int], bool]: if self.config_file_path is None: raise ValueError("No file name given.") - with open(self.config_file_path, 'r') as gradle_file: + with open(self.config_file_path, 'r', encoding='utf-8') as gradle_file: contents = gradle_file.read() version_line = re.search("\nversion = .*", contents) exception = Exception("Version not found in gradle file") @@ -93,7 +93,7 @@ class GradleFileHandler(FileHandler): return version, is_snapshot def write(self, version_string): - with open(self.config_file_path, 'r+') as gradle_file: + with open(self.config_file_path, 'r+', encoding='utf-8') as gradle_file: contents = gradle_file.read() version_substitute = re.sub( '\nversion = "[0-9]*\\.[0-9]*\\.[0-9]*(-SNAPSHOT)?"', f'\nversion = "{version_string}"', contents) @@ -107,7 +107,7 @@ class PythonFileHandler(FileHandler): def parse(self) -> tuple[list[int], bool]: if self.config_file_path is None: raise ValueError("No file name given.") - with open(self.config_file_path, 'r') as python_file: + with open(self.config_file_path, 'r', encoding='utf-8') as python_file: contents = python_file.read() version_line = re.search("\nversion = .*\n", contents) exception = Exception("Version not found in gradle file") @@ -131,7 +131,7 @@ class PythonFileHandler(FileHandler): return version, is_snapshot def write(self, version_string): - with open(self.config_file_path, 'r+') as python_file: + with open(self.config_file_path, 'r+', encoding='utf-8') as python_file: contents = python_file.read() version_substitute = re.sub( '\nversion = "[0-9]*\\.[0-9]*\\.[0-9]*(-SNAPSHOT)?"', f'\nversion = "{version_string}"', contents) @@ -145,7 +145,7 @@ class ClojureFileHandler(FileHandler): def parse(self) -> tuple[list[int], bool]: if self.config_file_path is None: raise ValueError("No file name given.") - with open(self.config_file_path, 'r') as clj_file: + with open(self.config_file_path, 'r', encoding='utf-8') as clj_file: contents = clj_file.read() version_line = re.search("^\\(defproject .*\n", contents) exception = Exception("Version not found in clj file") @@ -169,7 +169,7 @@ class ClojureFileHandler(FileHandler): return version, is_snapshot def write(self, version_string): - with open(self.config_file_path, 'r+') as clj_file: + with open(self.config_file_path, 'r+', encoding='utf-8') as clj_file: clj_first = clj_file.readline() clj_rest = clj_file.read() version_substitute = re.sub( @@ -185,6 +185,7 @@ class GitApi(): def __init__(self): self.execution_api = ExecutionApi() + # pylint: disable=invalid-name def get_latest_n_commits(self, n: int): return self.execution_api.execute( f'git log --oneline --format="%s %b" -n {n}') @@ -203,11 +204,10 @@ class GitApi(): return self.execution_api.execute('git describe --tags --abbrev=0') def get_current_branch(self): - self.execution_api.execute('git branch --show-current') - return ''.join(self.execution_api.stdout).rstrip() + return ''.join(self.execution_api.execute('git branch --show-current')).rstrip() def init(self, default_branch: str = "main"): - self.execution_api.execute(f'git init') + self.execution_api.execute('git init') self.execution_api.execute(f'git checkout -b {default_branch}') def set_user_config(self, email: str, name: str): From 93d6063e6e85ec4f98bf10b385e010cb0437c233 Mon Sep 17 00:00:00 2001 From: erik Date: Fri, 28 Apr 2023 15:31:54 +0200 Subject: [PATCH 08/10] Remove Cyclic import --- src/main/python/ddadevops/infrastructure/release_mixin/repo.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/python/ddadevops/infrastructure/release_mixin/repo.py b/src/main/python/ddadevops/infrastructure/release_mixin/repo.py index 2dab0c1..588118a 100644 --- a/src/main/python/ddadevops/infrastructure/release_mixin/repo.py +++ b/src/main/python/ddadevops/infrastructure/release_mixin/repo.py @@ -5,7 +5,7 @@ from src.main.python.ddadevops.domain import ( ReleaseType, EnvironmentKeys, ) -from src.main.python.ddadevops.infrastructure.release_mixin import ( +from src.main.python.ddadevops.infrastructure.release_mixin.infrastructure_api import ( FileHandler, GitApi, EnvironmentApi, From 172d0b848f0491e99d1487f759b9d95d79d83f4d Mon Sep 17 00:00:00 2001 From: erik Date: Fri, 28 Apr 2023 15:32:15 +0200 Subject: [PATCH 09/10] Format --- src/main/python/ddadevops/domain/common.py | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/python/ddadevops/domain/common.py b/src/main/python/ddadevops/domain/common.py index 5ffdb14..fd15e27 100644 --- a/src/main/python/ddadevops/domain/common.py +++ b/src/main/python/ddadevops/domain/common.py @@ -24,7 +24,6 @@ class Validateable: issues = '\n'.join(self.validate()) raise ValueError(f"Invalid Validateable: {issues}") - class DnsRecord(Validateable): def __init__(self, fqdn, ipv4=None, ipv6=None): self.fqdn = fqdn From 9e519519cbfbc07d5274d4c371593ad989bc7484 Mon Sep 17 00:00:00 2001 From: erik Date: Fri, 28 Apr 2023 15:33:06 +0200 Subject: [PATCH 10/10] [Skip-CI] Fix method override --- src/main/python/ddadevops/domain/image.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/main/python/ddadevops/domain/image.py b/src/main/python/ddadevops/domain/image.py index 37a23aa..62e7c63 100644 --- a/src/main/python/ddadevops/domain/image.py +++ b/src/main/python/ddadevops/domain/image.py @@ -10,7 +10,6 @@ class Image(Validateable): dockerhub_user, dockerhub_password, devops: Devops, - build_dir_name="target", use_package_common_files=True, build_commons_path=None, docker_build_commons_dir_name="docker", @@ -25,5 +24,5 @@ class Image(Validateable): self.devops = devops def docker_build_commons_path(self): - list = [self.build_commons_path, self.docker_build_commons_dir_name] - return "/".join(filter_none(list)) + "/" + commons_path = [self.build_commons_path, self.docker_build_commons_dir_name] + return "/".join(filter_none(commons_path)) + "/"