Diff of /.github/release_utils.py [000000] .. [87e8bf]

Switch to side-by-side view

--- a
+++ b/.github/release_utils.py
@@ -0,0 +1,79 @@
+import argparse
+import re
+from typing import Tuple
+
+# https://packaging.python.org/guides/single-sourcing-package-version/
+def find_version(version_file_path) -> str:
+    with open(version_file_path) as version_file:
+        version_match = re.search(r"^__version_tuple__ = (.*)", version_file.read(), re.M)
+        if version_match:
+            ver_tup = eval(version_match.group(1))
+            ver_str = ".".join([str(x) for x in ver_tup])
+            return ver_str
+        raise RuntimeError("Unable to find version tuple.")
+
+
+def get_next_version(release_type) -> Tuple[Tuple[int, int, int], str, str]:
+    current_ver = find_version("myosuite/version.py")
+    version_list = [int(x) for x in current_ver.strip("'").split(".")]
+    major, minor, patch = version_list[0], version_list[1], version_list[2]
+    if release_type == "patch":
+        patch += 1
+    elif release_type == "minor":
+        minor += 1
+        patch = 0
+    elif release_type == "major":
+        major += 1
+        minor = patch = 0
+    else:
+        raise ValueError("Incorrect release type specified. Acceptable types are major, minor and patch.")
+
+    new_version_tuple = (major, minor, patch)
+    new_version_str = ".".join([str(x) for x in new_version_tuple])
+    new_tag_str = "v" + new_version_str
+    return new_version_tuple, new_version_str, new_tag_str
+
+
+def update_version(new_version_tuple) -> None:
+    """
+    given the current version, update the version to the
+    next version depending on the type of release.
+    """
+
+    with open("myosuite/version.py", "r") as reader:
+        current_version_data = reader.read()
+
+    # for line in current_version_data:
+    version_match = re.search(r"^__version_tuple__ ", current_version_data)
+
+    if version_match:
+        new_version_data = "__version_tuple__ = %s\n" % str(new_version_tuple)
+        current_version_data = current_version_data.replace(version_match.string, new_version_data)
+
+        with open("myosuite/version.py", "w") as writer:
+            writer.write(current_version_data)
+    else:
+        raise RuntimeError("__version_tuple__ not found in version.py")
+
+
+def main(args):
+    if args.release_type in ["major", "minor", "patch"]:
+        new_version_tuple, new_version, new_tag = get_next_version(args.release_type)
+    else:
+        raise ValueError("Incorrect release type specified")
+
+    if args.update_version:
+        update_version(new_version_tuple)
+
+    print(new_version, new_tag)
+
+
+if __name__ == "__main__":
+    parser = argparse.ArgumentParser(description="Versioning utils")
+    parser.add_argument("--release-type", type=str, required=True, help="type of release = major/minor/patch")
+    parser.add_argument(
+        "--update-version", action="store_true", required=False, help="updates the version in fairscale/version.py"
+    )
+
+    args = parser.parse_args()
+    main(args)