Skip to content

Commit 2f10d4a

Browse files
marbreIanNod
authored andcommitted
Harmonize scripts to compute versions (nod-ai#674)
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.
1 parent ea3635d commit 2f10d4a

File tree

3 files changed

+66
-63
lines changed

3 files changed

+66
-63
lines changed

.github/workflows/build_packages.yml

+3-3
Original file line numberDiff line numberDiff line change
@@ -67,9 +67,9 @@ jobs:
6767
id: version_local
6868
run: |
6969
echo "version_suffix=${version_suffix}" >> $GITHUB_OUTPUT
70-
python3 build_tools/python_deploy/compute_local_version.py --version-suffix=${version_suffix} sharktank
71-
python3 build_tools/python_deploy/compute_local_version.py --version-suffix=${version_suffix} shortfin
72-
python3 build_tools/python_deploy/compute_common_version.py -rc --version-suffix=${version_suffix} --write-json
70+
python3 build_tools/python_deploy/compute_local_version.py --version-suffix=${version_suffix} --write-json sharktank
71+
python3 build_tools/python_deploy/compute_local_version.py --version-suffix=${version_suffix} --write-json shortfin
72+
python3 build_tools/python_deploy/compute_common_version.py --version-suffix=${version_suffix} --write-json
7373
7474
- name: Upload version_local.json files
7575
uses: actions/upload-artifact@b4b15b8c7c6ac21ea08fcf65892d2ee8f75cf882 # v4.4.3

build_tools/python_deploy/compute_common_version.py

+30-38
Original file line numberDiff line numberDiff line change
@@ -17,73 +17,65 @@
1717
from pathlib import Path
1818
import json
1919
from datetime import datetime
20-
import sys
20+
import subprocess
2121

2222
from packaging.version import Version
2323

2424

2525
parser = argparse.ArgumentParser()
2626
parser.add_argument("--write-json", action="store_true")
27-
parser.add_argument("--version-suffix", action="store", type=str)
2827

29-
release_type = parser.add_mutually_exclusive_group()
30-
release_type.add_argument("-stable", "--stable-release", action="store_true") # default
28+
release_type = parser.add_mutually_exclusive_group(required=True)
29+
release_type.add_argument("-stable", "--stable-release", action="store_true")
3130
release_type.add_argument("-rc", "--nightly-release", action="store_true")
32-
31+
release_type.add_argument("-dev", "--development-release", action="store_true")
32+
release_type.add_argument("--version-suffix", action="store", type=str)
3333

3434
args = parser.parse_args()
3535

36-
if not (args.stable_release or args.nightly_release):
37-
parser.print_usage(sys.stderr)
38-
sys.stderr.write("error: A release type is required\n")
39-
sys.exit(1)
40-
41-
if args.stable_release and args.version_suffix:
42-
sys.stderr.write("error: A version suffix is only supported for stable releases\n")
43-
sys.exit(1)
44-
4536
THIS_DIR = Path(__file__).parent.resolve()
4637
REPO_ROOT = THIS_DIR.parent.parent
4738

48-
VERSION_FILE_SHARKTANK = REPO_ROOT / "sharktank/version.json"
49-
VERSION_FILE_SHORTFIN = REPO_ROOT / "shortfin/version.json"
50-
VERSION_FILE_LOCAL = REPO_ROOT / "shark-ai/version_local.json"
39+
VERSION_FILE_SHARKTANK_PATH = REPO_ROOT / "sharktank/version.json"
40+
VERSION_FILE_SHORTFIN_PATH = REPO_ROOT / "shortfin/version.json"
41+
VERSION_FILE_LOCAL_PATH = REPO_ROOT / "shark-ai/version_local.json"
5142

5243

5344
def load_version_info(version_file):
5445
with open(version_file, "rt") as f:
5546
return json.load(f)
5647

5748

58-
def write_version_info():
59-
with open(VERSION_FILE_LOCAL, "w") as f:
60-
json.dump(version_local, f, indent=2)
49+
def write_version_info(version_file, version):
50+
with open(version_file, "w") as f:
51+
json.dump({"package-version": version}, f, indent=2)
6152
f.write("\n")
6253

6354

64-
sharktank_version = load_version_info(VERSION_FILE_SHARKTANK)
65-
SHARKTANK_PACKAGE_VERSION = sharktank_version.get("package-version")
66-
SHARKTANK_BASE_VERSION = Version(SHARKTANK_PACKAGE_VERSION).base_version
55+
sharktank_version = load_version_info(VERSION_FILE_SHARKTANK_PATH)
56+
sharktank_package_version = sharktank_version.get("package-version")
57+
sharktank_base_version = Version(sharktank_package_version).base_version
6758

68-
shortfin_version = load_version_info(VERSION_FILE_SHORTFIN)
69-
SHORTFIN_PACKAGE_VERSION = shortfin_version.get("package-version")
70-
SHORTFIN_BASE_VERSION = Version(SHORTFIN_PACKAGE_VERSION).base_version
59+
shortfin_version = load_version_info(VERSION_FILE_SHORTFIN_PATH)
60+
shortfin_package_version = shortfin_version.get("package-version")
61+
shortfin_base_version = Version(shortfin_package_version).base_version
7162

72-
if SHARKTANK_BASE_VERSION > SHORTFIN_BASE_VERSION:
73-
COMMON_VERSION = SHARKTANK_BASE_VERSION
63+
if sharktank_base_version > shortfin_base_version:
64+
common_version = sharktank_base_version
7465
else:
75-
COMMON_VERSION = SHORTFIN_BASE_VERSION
66+
common_version = shortfin_base_version
7667

7768
if args.nightly_release:
78-
if args.version_suffix:
79-
VERSION_SUFFIX = args.version_suffix
80-
else:
81-
VERSION_SUFFIX = "rc" + datetime.today().strftime("%Y%m%d")
82-
83-
COMMON_VERSION += VERSION_SUFFIX
69+
common_version += "rc" + datetime.today().strftime("%Y%m%d")
70+
elif args.development_release:
71+
common_version += (
72+
".dev0+"
73+
+ subprocess.check_output(["git", "rev-parse", "HEAD"]).decode("ascii").strip()
74+
)
75+
elif args.version_suffix:
76+
common_version += args.version_suffix
8477

8578
if args.write_json:
86-
version_local = {"package-version": COMMON_VERSION}
87-
write_version_info()
79+
write_version_info(VERSION_FILE_LOCAL_PATH, common_version)
8880

89-
print(COMMON_VERSION)
81+
print(common_version)

build_tools/python_deploy/compute_local_version.py

+33-22
Original file line numberDiff line numberDiff line change
@@ -6,50 +6,61 @@
66
# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
77

88
# This scripts grabs the X.Y.Z[.dev]` version identifier from a
9-
# `version.json` and writes the corresponding
9+
# `version.json` and writes a version identifier for a stable,
10+
# nightly or development release, or a release with an arbitrary
1011
# `X.Y.ZrcYYYYMMDD` version identifier to `version_local.json`.
1112

1213
import argparse
1314
from pathlib import Path
1415
import json
1516
from datetime import datetime
17+
import subprocess
1618

1719
from packaging.version import Version
1820

1921

2022
parser = argparse.ArgumentParser()
2123
parser.add_argument("path", type=Path)
22-
parser.add_argument("--version-suffix", action="store", type=str)
24+
parser.add_argument("--write-json", action="store_true")
25+
26+
release_type = parser.add_mutually_exclusive_group(required=True)
27+
release_type.add_argument("-stable", "--stable-release", action="store_true")
28+
release_type.add_argument("-rc", "--nightly-release", action="store_true")
29+
release_type.add_argument("-dev", "--development-release", action="store_true")
30+
release_type.add_argument("--version-suffix", action="store", type=str)
31+
2332
args = parser.parse_args()
2433

25-
VERSION_FILE = args.path / "version.json"
26-
VERSION_FILE_LOCAL = args.path / "version_local.json"
34+
VERSION_FILE_PATH = args.path / "version.json"
35+
VERSION_FILE_LOCAL_PATH = args.path / "version_local.json"
2736

2837

29-
def load_version_info():
30-
with open(VERSION_FILE, "rt") as f:
38+
def load_version_info(version_file):
39+
with open(version_file, "rt") as f:
3140
return json.load(f)
3241

3342

34-
def write_version_info():
35-
with open(VERSION_FILE_LOCAL, "w") as f:
36-
json.dump(version_local, f, indent=2)
43+
def write_version_info(version_file, version):
44+
with open(version_file, "w") as f:
45+
json.dump({"package-version": version}, f, indent=2)
3746
f.write("\n")
3847

3948

40-
version_info = load_version_info()
41-
42-
if args.version_suffix:
43-
VERSION_SUFFIX = args.version_suffix
44-
else:
45-
VERSION_SUFFIX = "rc" + datetime.today().strftime("%Y%m%d")
46-
47-
PACKAGE_VERSION = version_info.get("package-version")
48-
PACKAGE_BASE_VERSION = Version(PACKAGE_VERSION).base_version
49-
PACKAGE_LOCAL_VERSION = PACKAGE_BASE_VERSION + VERSION_SUFFIX
49+
version_info = load_version_info(VERSION_FILE_PATH)
50+
package_version = version_info.get("package-version")
51+
current_version = Version(package_version).base_version
5052

51-
version_local = {"package-version": PACKAGE_LOCAL_VERSION}
53+
if args.nightly_release:
54+
current_version += "rc" + datetime.today().strftime("%Y%m%d")
55+
elif args.development_release:
56+
current_version += (
57+
".dev0+"
58+
+ subprocess.check_output(["git", "rev-parse", "HEAD"]).decode("ascii").strip()
59+
)
60+
elif args.version_suffix:
61+
current_version += args.version_suffix
5262

53-
write_version_info()
63+
if args.write_json:
64+
write_version_info(VERSION_FILE_LOCAL_PATH, current_version)
5465

55-
print(PACKAGE_LOCAL_VERSION)
66+
print(current_version)

0 commit comments

Comments
 (0)