diff --git a/build.py b/build.py index f1d0b48..2a8ce58 100644 --- a/build.py +++ b/build.py @@ -22,63 +22,71 @@ from ddadevops import * use_plugin("python.core") use_plugin("copy_resources") use_plugin("filter_resources") -#use_plugin("python.unittest") -#use_plugin("python.coverage") +# use_plugin("python.unittest") +# use_plugin("python.coverage") use_plugin("python.distutils") -#use_plugin("python.install_dependencies") +# use_plugin("python.install_dependencies") default_task = "dev" name = "ddadevops" MODULE = "not-used" PROJECT_ROOT_PATH = "." -version = "4.0.15-dev" +version = "4.0.17-dev3" summary = "tools to support builds combining gopass, terraform, dda-pallet, aws & hetzner-cloud" description = __doc__ authors = [Author("meissa GmbH", "buero@meissa-gmbh.de")] url = "https://repo.prod.meissa.de/meissa/dda-devops-build" -requires_python = ">=3.10" # CHECK IF NEW VERSION EXISTS +requires_python = ">=3.10" # CHECK IF NEW VERSION EXISTS license = "Apache Software License" + @init def initialize(project): - #project.build_depends_on('mockito') - #project.build_depends_on('unittest-xml-reporting') + # project.build_depends_on('mockito') + # project.build_depends_on('unittest-xml-reporting') project.build_depends_on("ddadevops>=4.0.0") project.set_property("verbose", True) - project.get_property("filter_resources_glob").append("main/python/ddadevops/__init__.py") + project.get_property("filter_resources_glob").append( + "main/python/ddadevops/__init__.py" + ) project.set_property("dir_source_unittest_python", "src/test/python") project.set_property("copy_resources_target", "$dir_dist/ddadevops") project.get_property("copy_resources_glob").append("LICENSE") project.get_property("copy_resources_glob").append("src/main/resources/terraform/*") - project.get_property("copy_resources_glob").append("src/main/resources/docker/image/resources/*") + project.get_property("copy_resources_glob").append( + "src/main/resources/docker/image/resources/*" + ) project.include_file("ddadevops", "LICENSE") project.include_file("ddadevops", "src/main/resources/terraform/*") project.include_file("ddadevops", "src/main/resources/docker/image/resources/*") - - #project.set_property('distutils_upload_sign', True) - #project.set_property('distutils_upload_sign_identity', '') + + # project.set_property('distutils_upload_sign', True) + # project.set_property('distutils_upload_sign_identity', '') project.set_property("distutils_readme_description", True) project.set_property("distutils_description_overwrite", True) - project.set_property("distutils_classifiers", [ - 'License :: OSI Approved :: Apache Software License', - 'Programming Language :: Python', - 'Programming Language :: Python :: 3', - 'Programming Language :: Python :: 3.8', - 'Programming Language :: Python :: 3.10', - 'Operating System :: POSIX :: Linux', - 'Operating System :: OS Independent', - 'Development Status :: 5 - Production/Stable', - 'Environment :: Console', - 'Intended Audience :: Developers', - 'License :: OSI Approved :: Apache Software License', - 'Topic :: Software Development :: Build Tools', - 'Topic :: Software Development :: Quality Assurance', - 'Topic :: Software Development :: Testing' - ]) + project.set_property( + "distutils_classifiers", + [ + "License :: OSI Approved :: Apache Software License", + "Programming Language :: Python", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.8", + "Programming Language :: Python :: 3.10", + "Operating System :: POSIX :: Linux", + "Operating System :: OS Independent", + "Development Status :: 5 - Production/Stable", + "Environment :: Console", + "Intended Audience :: Developers", + "License :: OSI Approved :: Apache Software License", + "Topic :: Software Development :: Build Tools", + "Topic :: Software Development :: Quality Assurance", + "Topic :: Software Development :: Testing", + ], + ) input = { "name": name, @@ -88,52 +96,83 @@ def initialize(project): "build_types": [], "mixin_types": ["RELEASE"], "release_primary_build_file": "build.py", + "release_secondary_build_files": [ + "infrastructure/python/build.py", + "infrastructure/dind/build.py", + "infrastructure/ddadevops/build.py", + "infrastructure/clojure/build.py", + ], } build = ReleaseMixin(project, input) build.initialize_build_dir() + @task def test(project): run("pytest", check=True) + @task def lint(project): - run("flake8 --max-line-length=120 --count --select=E9,F63,F7,F82 "+ - "--show-source --statistics src/main/python/ddadevops/", shell=True, check=True) - run("flake8 --count --exit-zero --max-complexity=10 --max-line-length=127 "+ - "--per-file-ignores=\"__init__.py:F401\" "+ - "--ignore=E722,W503 --statistics src/main/python/ddadevops/", shell=True, check=True) - run("python -m mypy src/main/python/ddadevops/ --ignore-missing-imports "+ - "--disable-error-code=attr-defined --disable-error-code=union-attr", shell=True, check=True) - run("pylint -d W0511,R0903,C0301,W0614,C0114,C0115,C0116,similarities,W1203,W0702,W0702,"+ - "R0913,R0902,R0914,R1732,R1705,W0707,C0123,W0703,C0103 src/main/python/ddadevops/", shell=True, check=True) + run( + "flake8 --max-line-length=120 --count --select=E9,F63,F7,F82 " + + "--show-source --statistics src/main/python/ddadevops/", + shell=True, + check=True, + ) + run( + "flake8 --count --exit-zero --max-complexity=10 --max-line-length=127 " + + '--per-file-ignores="__init__.py:F401" ' + + "--ignore=E722,W503 --statistics src/main/python/ddadevops/", + shell=True, + check=True, + ) + run( + "python -m mypy src/main/python/ddadevops/ --ignore-missing-imports " + + "--disable-error-code=attr-defined --disable-error-code=union-attr", + shell=True, + check=True, + ) + run( + "pylint -d W0511,R0903,C0301,W0614,C0114,C0115,C0116,similarities,W1203,W0702,W0702," + + "R0913,R0902,R0914,R1732,R1705,W0707,C0123,W0703,C0103 src/main/python/ddadevops/", + shell=True, + check=True, + ) + @task def patch(project): build(project, "PATCH") + @task def minor(project): build(project, "MINOR") + @task def major(project): build(project, "MAJOR") - + + @task def dev(project): build(project, "NONE") + @task def nothing(project): pass + @task def prepare_release(project): build = get_devops_build(project) build.prepare_release() + @task def tag_bump_and_push_release(project): build = get_devops_build(project) diff --git a/infrastructure/clojure/build.py b/infrastructure/clojure/build.py index 7d337ea..832e4e5 100644 --- a/infrastructure/clojure/build.py +++ b/infrastructure/clojure/build.py @@ -5,7 +5,7 @@ from ddadevops import * name = "ddadevops" MODULE = "clojure" PROJECT_ROOT_PATH = "../.." - +version = "4.0.0-dev73" @init def initialize(project): diff --git a/infrastructure/ddadevops/build.py b/infrastructure/ddadevops/build.py index c07b871..40ebb7c 100644 --- a/infrastructure/ddadevops/build.py +++ b/infrastructure/ddadevops/build.py @@ -5,6 +5,7 @@ from ddadevops import * name = "ddadevops" MODULE = "" PROJECT_ROOT_PATH = "../.." +version = "4.0.0-dev73" @init diff --git a/infrastructure/devops-build/build.py b/infrastructure/devops-build/build.py index a415b4d..94000c8 100644 --- a/infrastructure/devops-build/build.py +++ b/infrastructure/devops-build/build.py @@ -5,6 +5,7 @@ from ddadevops import * name = "devops-build" MODULE = "image" PROJECT_ROOT_PATH = "../.." +version = "4.0.0-dev73" @init diff --git a/infrastructure/dind/build.py b/infrastructure/dind/build.py index eddc7da..6173240 100644 --- a/infrastructure/dind/build.py +++ b/infrastructure/dind/build.py @@ -5,6 +5,7 @@ from ddadevops import * name = "ddadevops" MODULE = "dind" PROJECT_ROOT_PATH = "../.." +version = "4.0.0-dev73" @init diff --git a/infrastructure/python/build.py b/infrastructure/python/build.py index ba87e9d..da1c84c 100644 --- a/infrastructure/python/build.py +++ b/infrastructure/python/build.py @@ -1,15 +1,20 @@ from os import environ +from datetime import datetime from pybuilder.core import task, init from ddadevops import * name = "ddadevops" MODULE = "python" PROJECT_ROOT_PATH = "../.." - +version = "4.0.15-dev" @init def initialize(project): + image_version = version + if "dev" in image_version: + image_version += datetime.now().strftime("%Y-%m-%d-%H-%M-%S") + input = { "name": name, "module": MODULE, @@ -17,6 +22,8 @@ def initialize(project): "project_root_path": PROJECT_ROOT_PATH, "build_types": ["IMAGE"], "mixin_types": [], + 'image_naming': "NAME_AND_MODULE", + "image_version": f"{image_version}", } project.build_depends_on("ddadevops>=4.0.0") diff --git a/infrastructure/python/test/dummy b/infrastructure/python/test/dummy new file mode 100644 index 0000000..e69de29 diff --git a/src/main/python/ddadevops/application/image_build_service.py b/src/main/python/ddadevops/application/image_build_service.py index cc77ca3..03ea089 100644 --- a/src/main/python/ddadevops/application/image_build_service.py +++ b/src/main/python/ddadevops/application/image_build_service.py @@ -46,10 +46,12 @@ class ImageBuildService: self.file_api.cp_recursive("test", build_path) def image(self, devops: Devops): - self.image_api.image(devops.name, devops.build_path()) + image = devops.specialized_builds[BuildType.IMAGE] + self.image_api.image(image.image_name(), devops.build_path()) def drun(self, devops: Devops): - self.image_api.drun(devops.name) + image = devops.specialized_builds[BuildType.IMAGE] + self.image_api.drun(image.image_name()) def dockerhub_login(self, devops: Devops): image = devops.specialized_builds[BuildType.IMAGE] @@ -60,8 +62,9 @@ class ImageBuildService: def dockerhub_publish(self, devops: Devops): image = devops.specialized_builds[BuildType.IMAGE] self.image_api.dockerhub_publish( - devops.name, image.image_dockerhub_user, image.image_tag + image.image_name(), image.image_dockerhub_user, image.image_tag ) def test(self, devops: Devops): - self.image_api.test(devops.name, devops.build_path()) + image = devops.specialized_builds[BuildType.IMAGE] + self.image_api.test(image.image_name(), devops.build_path()) diff --git a/src/main/python/ddadevops/infrastructure/infrastructure.py b/src/main/python/ddadevops/infrastructure/infrastructure.py index aa3f137..2d375da 100644 --- a/src/main/python/ddadevops/infrastructure/infrastructure.py +++ b/src/main/python/ddadevops/infrastructure/infrastructure.py @@ -53,37 +53,37 @@ class ImageApi: self.execution_api = ExecutionApi() def image(self, name: str, path: Path): - self.execution_api.execute( + self.execution_api.execute_live( f"docker build -t {name} --file {path}/image/Dockerfile {path}/image" ) def drun(self, name: str): - self.execution_api.execute( + self.execution_api.execute_live( f'docker run -it --entrypoint="" {name} /bin/bash' ) def dockerhub_login(self, username: str, password: str): - self.execution_api.execute( + self.execution_api.execute_live( f"docker login --username {username} --password {password}" ) def dockerhub_publish(self, name: str, username: str, tag=None): if tag is not None: - self.execution_api.execute( + self.execution_api.execute_live( f"docker tag {name} {username}/{name}:{tag}" ) - self.execution_api.execute( + self.execution_api.execute_live( f"docker push {username}/{name}:{tag}" ) - self.execution_api.execute( + self.execution_api.execute_live( f"docker tag {name} {username}/{name}:latest" ) - self.execution_api.execute( + self.execution_api.execute_live( f"docker push {username}/{name}:latest" ) def test(self, name: str, path: Path): - self.execution_api.execute( + self.execution_api.execute_live( f"docker build -t {name} -test --file {path}/test/Dockerfile {path}/test" )