mirror of
https://github.com/bytecodealliance/wasm-micro-runtime.git
synced 2024-11-26 15:32:05 +00:00
124 lines
3.4 KiB
Python
124 lines
3.4 KiB
Python
#!/usr/bin/env python3
|
|
#
|
|
# Copyright (C) 2019 Intel Corporation. All rights reserved.
|
|
# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
#
|
|
|
|
import re
|
|
import shlex
|
|
import subprocess
|
|
import sys
|
|
|
|
|
|
def fetch_version_from_code():
|
|
"""
|
|
search the semantic version definition in core/version.h
|
|
"""
|
|
major, minor, patch = "", "", ""
|
|
with open("core/version.h", encoding="utf-8") as f:
|
|
for line in f:
|
|
if "WAMR_VERSION" not in line:
|
|
continue
|
|
|
|
major_match = re.search(r"WAMR_VERSION_MAJOR (\d+)", line)
|
|
if major_match is not None:
|
|
major = major_match.groups()[0]
|
|
continue
|
|
|
|
minor_match = re.search(r"WAMR_VERSION_MINOR (\d+)", line)
|
|
if minor_match is not None:
|
|
minor = minor_match.groups()[0]
|
|
continue
|
|
|
|
patch_match = re.search(r"WAMR_VERSION_PATCH (\d+)", line)
|
|
if patch_match is not None:
|
|
patch = patch_match.groups()[0]
|
|
|
|
if len(major) == 0 or len(minor) == 0 or len(patch) == 0:
|
|
raise Exception(
|
|
"can't find the semantic version definition likes WAMR_VERSION_*"
|
|
)
|
|
return f"WAMR-{major}.{minor}.{patch}"
|
|
|
|
|
|
def fetch_latest_git_tag():
|
|
list_tag_cmd = (
|
|
'git tag --list WAMR-*.*.* --sort=committerdate --format="%(refname:short)"'
|
|
)
|
|
p = subprocess.run(shlex.split(list_tag_cmd), capture_output=True, check=True)
|
|
|
|
all_tags = p.stdout.decode().strip()
|
|
latest_tag = all_tags.split("\n")[-1]
|
|
return latest_tag
|
|
|
|
|
|
def match_version_pattern(v):
|
|
pattern = r"WAMR-\d+\.\d+\.\d+"
|
|
m = re.match(pattern, v)
|
|
return m is not None
|
|
|
|
|
|
def split_version_string(v):
|
|
"""
|
|
return the semantic version as an integer list
|
|
"""
|
|
pattern = r"WAMR-(\d+)\.(\d+)\.(\d+)"
|
|
m = re.match(pattern, v)
|
|
return [int(x) for x in m.groups()]
|
|
|
|
|
|
def compare_version_string(v1, v2):
|
|
"""
|
|
return value:
|
|
- 1. if v1 > v2
|
|
- -1. if v1 < v2
|
|
- 0. if v1 == v2
|
|
"""
|
|
if not match_version_pattern(v1):
|
|
raise Exception(f"{v1} doesn't match the version pattern")
|
|
|
|
if not match_version_pattern(v2):
|
|
raise Exception(f"{v2} doesn't match the version pattern")
|
|
|
|
v1_sem_ver = split_version_string(v1)
|
|
v2_sem_ver = split_version_string(v2)
|
|
|
|
return 0 if v1_sem_ver == v2_sem_ver else (1 if v1_sem_ver > v2_sem_ver else -1)
|
|
|
|
|
|
def is_major_or_minor_changed(v1, v2):
|
|
"""
|
|
return true if change either major of v2 or minor of v2
|
|
return false or else
|
|
"""
|
|
if not match_version_pattern(v1):
|
|
raise Exception(f"{v1} doesn't match the version pattern")
|
|
|
|
if not match_version_pattern(v2):
|
|
raise Exception(f"{v2} doesn't match the version pattern")
|
|
|
|
v1_major, v1_minor, _ = split_version_string(v1)
|
|
v2_major, v2_minor, _ = split_version_string(v2)
|
|
|
|
return v2_major != v1_major or v2_minor != v1_minor
|
|
|
|
|
|
def next_version():
|
|
definition = fetch_version_from_code()
|
|
tag = fetch_latest_git_tag()
|
|
|
|
new_version = ""
|
|
minor_changed = False
|
|
if compare_version_string(definition, tag) == 1:
|
|
new_version = definition.split("-")[-1]
|
|
|
|
if is_major_or_minor_changed(tag, definition):
|
|
minor_changed = True
|
|
|
|
return new_version, "major_minor_change" if minor_changed else "patch_change"
|
|
|
|
|
|
if __name__ == "__main__":
|
|
print(f"{next_version()[0]},{next_version()[1]}")
|
|
sys.exit(0)
|