From eb62b1884582445ada00c4bea4198c4d9cb3b952 Mon Sep 17 00:00:00 2001 From: "Mikhail f. Shiryaev" Date: Wed, 6 Apr 2022 18:41:18 +0200 Subject: [PATCH] Improve and fix edge cases for docker_server.py - Allow define version as file - Add inline cache - Fix auto_release_type function --- tests/ci/docker_server.py | 22 +++++++++++++++++----- tests/ci/docker_test.py | 19 +++++++++++++++---- 2 files changed, 32 insertions(+), 9 deletions(-) diff --git a/tests/ci/docker_server.py b/tests/ci/docker_server.py index 789abc30b0c..a274cbbf170 100644 --- a/tests/ci/docker_server.py +++ b/tests/ci/docker_server.py @@ -16,6 +16,7 @@ from commit_status_helper import post_commit_status from docker_images_check import DockerImage from env_helper import CI, GITHUB_RUN_URL, RUNNER_TEMP, S3_BUILDS_BUCKET from get_robot_token import get_best_robot_token, get_parameter_from_ssm +from git_helper import removeprefix from pr_info import PRInfo from s3_helper import S3Helper from stopwatch import Stopwatch @@ -25,6 +26,7 @@ from version_helper import ( get_tagged_versions, get_version_from_repo, get_version_from_string, + get_version_from_tag, ) TEMP_PATH = p.join(RUNNER_TEMP, "docker_images_check") @@ -49,7 +51,8 @@ def parse_args() -> argparse.Namespace: "--version", type=version_arg, default=get_version_from_repo().string, - help="a version to build", + help="a version to build, automaticaly got from version_helper, accepts either " + "tag ('refs/tags/' is removed automatically) or a normal 22.2.2.2 format", ) parser.add_argument( "--release-type", @@ -112,10 +115,19 @@ def parse_args() -> argparse.Namespace: def version_arg(version: str) -> ClickHouseVersion: + version = removeprefix(version, "refs/tags/") try: return get_version_from_string(version) - except ValueError as e: - raise argparse.ArgumentTypeError(e) + except ValueError: + pass + try: + return get_version_from_tag(version) + except ValueError: + pass + + raise argparse.ArgumentTypeError( + f"version {version} does not match tag of plain version" + ) def auto_release_type(version: ClickHouseVersion, release_type: str) -> str: @@ -125,7 +137,7 @@ def auto_release_type(version: ClickHouseVersion, release_type: str) -> str: git_versions = get_tagged_versions() reference_version = git_versions[0] for i in reversed(range(len(git_versions))): - if git_versions[i] < version: + if git_versions[i] <= version: if i == len(git_versions) - 1: return "latest" reference_version = git_versions[i + 1] @@ -209,7 +221,7 @@ def build_and_push_image( result = [] if os != "ubuntu": tag += f"-{os}" - init_args = ["docker", "buildx", "build"] + init_args = ["docker", "buildx", "build", "--build-arg BUILDKIT_INLINE_CACHE=1"] if push: init_args.append("--push") init_args.append("--output=type=image,push-by-digest=true") diff --git a/tests/ci/docker_test.py b/tests/ci/docker_test.py index 0d1c554026f..23a007ccac0 100644 --- a/tests/ci/docker_test.py +++ b/tests/ci/docker_test.py @@ -9,7 +9,7 @@ from pr_info import PRInfo import docker_images_check as di with patch("git_helper.Git"): - from version_helper import get_version_from_string, get_tagged_versions + from version_helper import get_version_from_string import docker_server as ds # di.logging.basicConfig(level=di.logging.INFO) @@ -251,7 +251,8 @@ class TestDockerServer(unittest.TestCase): get_version_from_string("2.2.1.1"), get_version_from_string("2.2.2.1"), ] - cases = ( + + cases_less = ( (get_version_from_string("1.0.1.1"), "minor"), (get_version_from_string("1.1.2.1"), "minor"), (get_version_from_string("1.3.1.1"), "major"), @@ -260,8 +261,18 @@ class TestDockerServer(unittest.TestCase): (get_version_from_string("2.2.3.1"), "latest"), (get_version_from_string("2.3.1.1"), "latest"), ) - _ = get_tagged_versions() - for case in cases: + for case in cases_less: + release = ds.auto_release_type(case[0], "auto") + self.assertEqual(case[1], release) + + cases_equal = ( + (get_version_from_string("1.1.1.1"), "minor"), + (get_version_from_string("1.2.1.1"), "major"), + (get_version_from_string("2.1.1.1"), "minor"), + (get_version_from_string("2.2.1.1"), "patch"), + (get_version_from_string("2.2.2.1"), "latest"), + ) + for case in cases_equal: release = ds.auto_release_type(case[0], "auto") self.assertEqual(case[1], release)