From d4d8548eb7a45f84a0ff3ed7b8347783ac866177 Mon Sep 17 00:00:00 2001 From: Marius Brehler Date: Wed, 11 Dec 2024 13:19:03 +0100 Subject: [PATCH] Harmonize scripts to compute versions Harmonizes the scripts to compute the versions. JSON files are only written if `--write-json` is passed. Furthermore, `--version-suffix` can no longer be combined with other release types and gives full control over defining a suffix to the user. Similar changes are applied to the scripts used in IREE. --- .github/workflows/build_packages.yml | 6 +- .../python_deploy/compute_common_version.py | 68 ++++++++----------- .../python_deploy/compute_local_version.py | 55 +++++++++------ 3 files changed, 66 insertions(+), 63 deletions(-) diff --git a/.github/workflows/build_packages.yml b/.github/workflows/build_packages.yml index 9530cf4d6..e711dc7e2 100644 --- a/.github/workflows/build_packages.yml +++ b/.github/workflows/build_packages.yml @@ -67,9 +67,9 @@ jobs: id: version_local run: | echo "version_suffix=${version_suffix}" >> $GITHUB_OUTPUT - python3 build_tools/python_deploy/compute_local_version.py --version-suffix=${version_suffix} sharktank - python3 build_tools/python_deploy/compute_local_version.py --version-suffix=${version_suffix} shortfin - python3 build_tools/python_deploy/compute_common_version.py -rc --version-suffix=${version_suffix} --write-json + python3 build_tools/python_deploy/compute_local_version.py --version-suffix=${version_suffix} --write-json sharktank + python3 build_tools/python_deploy/compute_local_version.py --version-suffix=${version_suffix} --write-json shortfin + python3 build_tools/python_deploy/compute_common_version.py --version-suffix=${version_suffix} --write-json - name: Upload version_local.json files uses: actions/upload-artifact@b4b15b8c7c6ac21ea08fcf65892d2ee8f75cf882 # v4.4.3 diff --git a/build_tools/python_deploy/compute_common_version.py b/build_tools/python_deploy/compute_common_version.py index aa193bcc1..b9e7c438c 100755 --- a/build_tools/python_deploy/compute_common_version.py +++ b/build_tools/python_deploy/compute_common_version.py @@ -17,37 +17,28 @@ from pathlib import Path import json from datetime import datetime -import sys +import subprocess from packaging.version import Version parser = argparse.ArgumentParser() parser.add_argument("--write-json", action="store_true") -parser.add_argument("--version-suffix", action="store", type=str) -release_type = parser.add_mutually_exclusive_group() -release_type.add_argument("-stable", "--stable-release", action="store_true") # default +release_type = parser.add_mutually_exclusive_group(required=True) +release_type.add_argument("-stable", "--stable-release", action="store_true") release_type.add_argument("-rc", "--nightly-release", action="store_true") - +release_type.add_argument("-dev", "--development-release", action="store_true") +release_type.add_argument("--version-suffix", action="store", type=str) args = parser.parse_args() -if not (args.stable_release or args.nightly_release): - parser.print_usage(sys.stderr) - sys.stderr.write("error: A release type is required\n") - sys.exit(1) - -if args.stable_release and args.version_suffix: - sys.stderr.write("error: A version suffix is only supported for stable releases\n") - sys.exit(1) - THIS_DIR = Path(__file__).parent.resolve() REPO_ROOT = THIS_DIR.parent.parent -VERSION_FILE_SHARKTANK = REPO_ROOT / "sharktank/version.json" -VERSION_FILE_SHORTFIN = REPO_ROOT / "shortfin/version.json" -VERSION_FILE_LOCAL = REPO_ROOT / "shark-ai/version_local.json" +VERSION_FILE_SHARKTANK_PATH = REPO_ROOT / "sharktank/version.json" +VERSION_FILE_SHORTFIN_PATH = REPO_ROOT / "shortfin/version.json" +VERSION_FILE_LOCAL_PATH = REPO_ROOT / "shark-ai/version_local.json" def load_version_info(version_file): @@ -55,35 +46,36 @@ def load_version_info(version_file): return json.load(f) -def write_version_info(): - with open(VERSION_FILE_LOCAL, "w") as f: - json.dump(version_local, f, indent=2) +def write_version_info(version_file, version): + with open(version_file, "w") as f: + json.dump({"package-version": version}, f, indent=2) f.write("\n") -sharktank_version = load_version_info(VERSION_FILE_SHARKTANK) -SHARKTANK_PACKAGE_VERSION = sharktank_version.get("package-version") -SHARKTANK_BASE_VERSION = Version(SHARKTANK_PACKAGE_VERSION).base_version +sharktank_version = load_version_info(VERSION_FILE_SHARKTANK_PATH) +sharktank_package_version = sharktank_version.get("package-version") +sharktank_base_version = Version(sharktank_package_version).base_version -shortfin_version = load_version_info(VERSION_FILE_SHORTFIN) -SHORTFIN_PACKAGE_VERSION = shortfin_version.get("package-version") -SHORTFIN_BASE_VERSION = Version(SHORTFIN_PACKAGE_VERSION).base_version +shortfin_version = load_version_info(VERSION_FILE_SHORTFIN_PATH) +shortfin_package_version = shortfin_version.get("package-version") +shortfin_base_version = Version(shortfin_package_version).base_version -if SHARKTANK_BASE_VERSION > SHORTFIN_BASE_VERSION: - COMMON_VERSION = SHARKTANK_BASE_VERSION +if sharktank_base_version > shortfin_base_version: + common_version = sharktank_base_version else: - COMMON_VERSION = SHORTFIN_BASE_VERSION + common_version = shortfin_base_version if args.nightly_release: - if args.version_suffix: - VERSION_SUFFIX = args.version_suffix - else: - VERSION_SUFFIX = "rc" + datetime.today().strftime("%Y%m%d") - - COMMON_VERSION += VERSION_SUFFIX + common_version += "rc" + datetime.today().strftime("%Y%m%d") +elif args.development_release: + common_version += ( + ".dev0+" + + subprocess.check_output(["git", "rev-parse", "HEAD"]).decode("ascii").strip() + ) +elif args.version_suffix: + common_version += args.version_suffix if args.write_json: - version_local = {"package-version": COMMON_VERSION} - write_version_info() + write_version_info(VERSION_FILE_LOCAL_PATH, common_version) -print(COMMON_VERSION) +print(common_version) diff --git a/build_tools/python_deploy/compute_local_version.py b/build_tools/python_deploy/compute_local_version.py index 0465fa443..3cb0fab34 100755 --- a/build_tools/python_deploy/compute_local_version.py +++ b/build_tools/python_deploy/compute_local_version.py @@ -6,50 +6,61 @@ # SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception # This scripts grabs the X.Y.Z[.dev]` version identifier from a -# `version.json` and writes the corresponding +# `version.json` and writes a version identifier for a stable, +# nightly or development release, or a release with an arbitrary # `X.Y.ZrcYYYYMMDD` version identifier to `version_local.json`. import argparse from pathlib import Path import json from datetime import datetime +import subprocess from packaging.version import Version parser = argparse.ArgumentParser() parser.add_argument("path", type=Path) -parser.add_argument("--version-suffix", action="store", type=str) +parser.add_argument("--write-json", action="store_true") + +release_type = parser.add_mutually_exclusive_group(required=True) +release_type.add_argument("-stable", "--stable-release", action="store_true") +release_type.add_argument("-rc", "--nightly-release", action="store_true") +release_type.add_argument("-dev", "--development-release", action="store_true") +release_type.add_argument("--version-suffix", action="store", type=str) + args = parser.parse_args() -VERSION_FILE = args.path / "version.json" -VERSION_FILE_LOCAL = args.path / "version_local.json" +VERSION_FILE_PATH = args.path / "version.json" +VERSION_FILE_LOCAL_PATH = args.path / "version_local.json" -def load_version_info(): - with open(VERSION_FILE, "rt") as f: +def load_version_info(version_file): + with open(version_file, "rt") as f: return json.load(f) -def write_version_info(): - with open(VERSION_FILE_LOCAL, "w") as f: - json.dump(version_local, f, indent=2) +def write_version_info(version_file, version): + with open(version_file, "w") as f: + json.dump({"package-version": version}, f, indent=2) f.write("\n") -version_info = load_version_info() - -if args.version_suffix: - VERSION_SUFFIX = args.version_suffix -else: - VERSION_SUFFIX = "rc" + datetime.today().strftime("%Y%m%d") - -PACKAGE_VERSION = version_info.get("package-version") -PACKAGE_BASE_VERSION = Version(PACKAGE_VERSION).base_version -PACKAGE_LOCAL_VERSION = PACKAGE_BASE_VERSION + VERSION_SUFFIX +version_info = load_version_info(VERSION_FILE_PATH) +package_version = version_info.get("package-version") +current_version = Version(package_version).base_version -version_local = {"package-version": PACKAGE_LOCAL_VERSION} +if args.nightly_release: + current_version += "rc" + datetime.today().strftime("%Y%m%d") +elif args.development_release: + current_version += ( + ".dev0+" + + subprocess.check_output(["git", "rev-parse", "HEAD"]).decode("ascii").strip() + ) +elif args.version_suffix: + current_version += args.version_suffix -write_version_info() +if args.write_json: + write_version_info(VERSION_FILE_LOCAL_PATH, current_version) -print(PACKAGE_LOCAL_VERSION) +print(current_version)