dda-devops-build/build.py

202 lines
6 KiB
Python
Raw Normal View History

2019-09-06 10:10:10 +00:00
# dda_devops_build
2019-09-04 16:40:41 +00:00
# Copyright 2019 meissa GmbH.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
2023-06-26 07:35:40 +00:00
from os import environ
2023-06-26 10:58:17 +00:00
from subprocess import run
2023-06-26 07:35:40 +00:00
from pybuilder.core import init, task, use_plugin, Author
from ddadevops import *
2019-09-04 16:40:41 +00:00
use_plugin("python.core")
2020-03-12 13:10:16 +00:00
use_plugin("copy_resources")
2019-09-06 10:10:10 +00:00
use_plugin("filter_resources")
2023-07-14 09:33:01 +00:00
# use_plugin("python.unittest")
# use_plugin("python.coverage")
2019-09-04 16:40:41 +00:00
use_plugin("python.distutils")
2023-07-14 09:33:01 +00:00
# use_plugin("python.install_dependencies")
2019-09-04 16:40:41 +00:00
2023-06-28 06:24:21 +00:00
default_task = "dev"
2019-09-04 16:40:41 +00:00
2019-09-06 10:10:10 +00:00
name = "ddadevops"
2023-06-26 07:35:40 +00:00
MODULE = "not-used"
PROJECT_ROOT_PATH = "."
2024-02-16 17:13:32 +00:00
version = "4.11.1-dev"
2019-09-04 16:40:41 +00:00
summary = "tools to support builds combining gopass, terraform, dda-pallet, aws & hetzner-cloud"
description = __doc__
authors = [Author("meissa GmbH", "buero@meissa-gmbh.de")]
2023-05-31 06:40:39 +00:00
url = "https://repo.prod.meissa.de/meissa/dda-devops-build"
2023-07-14 09:33:01 +00:00
requires_python = ">=3.10" # CHECK IF NEW VERSION EXISTS
2019-09-04 16:40:41 +00:00
license = "Apache Software License"
2023-07-14 09:33:01 +00:00
2019-09-04 16:40:41 +00:00
@init
def initialize(project):
2023-07-14 09:33:01 +00:00
# project.build_depends_on('mockito')
# project.build_depends_on('unittest-xml-reporting')
2023-08-17 15:25:55 +00:00
project.build_depends_on("ddadevops>=4.7.0")
2019-09-04 16:40:41 +00:00
2019-09-06 10:10:10 +00:00
project.set_property("verbose", True)
2023-07-14 09:33:01 +00:00
project.get_property("filter_resources_glob").append(
"main/python/ddadevops/__init__.py"
)
2023-03-16 12:15:39 +00:00
project.set_property("dir_source_unittest_python", "src/test/python")
2020-03-12 13:10:16 +00:00
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/*")
2023-07-14 09:33:01 +00:00
project.get_property("copy_resources_glob").append(
"src/main/resources/docker/image/resources/*"
)
2020-03-12 13:10:16 +00:00
project.include_file("ddadevops", "LICENSE")
project.include_file("ddadevops", "src/main/resources/terraform/*")
2020-04-17 19:57:21 +00:00
project.include_file("ddadevops", "src/main/resources/docker/image/resources/*")
2023-07-14 09:33:01 +00:00
# project.set_property('distutils_upload_sign', True)
# project.set_property('distutils_upload_sign_identity', '')
2019-09-06 10:10:10 +00:00
project.set_property("distutils_readme_description", True)
project.set_property("distutils_description_overwrite", True)
2023-07-14 09:33:01 +00:00
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",
],
)
2023-06-26 07:35:40 +00:00
input = {
"name": name,
"module": MODULE,
"stage": "notused",
"project_root_path": PROJECT_ROOT_PATH,
"build_types": [],
"mixin_types": ["RELEASE"],
"release_primary_build_file": "build.py",
2023-07-14 09:33:01 +00:00
"release_secondary_build_files": [
"infrastructure/python/build.py",
"infrastructure/dind/build.py",
"infrastructure/ddadevops/build.py",
2023-07-21 15:42:53 +00:00
"infrastructure/clj-cljs/build.py",
"infrastructure/clj/build.py",
2023-08-08 07:04:28 +00:00
"infrastructure/kotlin/build.py",
2023-07-14 09:33:01 +00:00
],
2023-08-15 06:21:06 +00:00
"release_artifacts": [],
"release_artifact_server_url": "https://repo.prod.meissa.de",
"release_organisation": "meissa",
"release_repository_name": "dda-devops-build",
2023-06-26 07:35:40 +00:00
}
build = ReleaseMixin(project, input)
build.initialize_build_dir()
2023-07-14 09:33:01 +00:00
2023-06-26 10:58:17 +00:00
@task
def test(project):
2023-07-12 06:56:01 +00:00
run("pytest", check=True)
2023-06-26 10:58:17 +00:00
2023-07-14 09:33:01 +00:00
2023-06-26 10:58:17 +00:00
@task
def lint(project):
2023-07-14 09:33:01 +00:00
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,
)
2023-06-26 10:58:17 +00:00
@task
def patch(project):
2023-07-14 11:27:11 +00:00
linttest(project, "PATCH")
release(project)
2023-06-28 06:24:21 +00:00
2023-07-14 09:33:01 +00:00
2023-06-28 06:24:21 +00:00
@task
def minor(project):
2023-07-14 11:27:11 +00:00
linttest(project, "MINOR")
release(project)
2023-06-28 06:24:21 +00:00
2023-07-14 09:33:01 +00:00
2023-06-28 06:24:21 +00:00
@task
def major(project):
2023-07-14 11:27:11 +00:00
linttest(project, "MAJOR")
release(project)
2023-07-14 09:33:01 +00:00
2023-06-28 06:24:21 +00:00
@task
def dev(project):
2023-07-14 11:27:11 +00:00
linttest(project, "NONE")
2023-06-26 10:58:17 +00:00
2023-07-14 09:33:01 +00:00
2023-06-26 07:35:40 +00:00
@task
2023-07-14 11:27:11 +00:00
def prepare(project):
2023-06-28 06:24:21 +00:00
build = get_devops_build(project)
build.prepare_release()
2023-07-14 09:33:01 +00:00
2023-06-28 06:24:21 +00:00
@task
2023-07-14 11:27:11 +00:00
def tag(project):
2023-06-28 06:24:21 +00:00
build = get_devops_build(project)
build.tag_bump_and_push_release()
2023-08-15 06:21:06 +00:00
@task
def publish_artifacts(project):
2023-08-16 10:48:37 +00:00
build = get_devops_build(project)
2023-08-15 06:21:06 +00:00
build.publish_artifacts()
2023-06-28 06:24:21 +00:00
2023-07-14 11:27:11 +00:00
def release(project):
prepare(project)
tag(project)
def linttest(project, release_type):
2023-06-28 06:24:21 +00:00
build = get_devops_build(project)
build.update_release_type(release_type)
test(project)
lint(project)