from lib.utils import get_dir_location import re import os README_DIR = get_dir_location("../README.md") VERSION_REGEX = r"\_Currently supported Minecraft version: `(.*)`.\_" def get_version_id() -> str: with open(README_DIR, "rb") as f: readme_text = f.read().decode() version_line_match = re.search(VERSION_REGEX, readme_text) if version_line_match: version_id = version_line_match.group(1) return version_id else: raise Exception("Could not find version id in README.md") def set_version_id(version_id: str) -> None: with open(README_DIR, "rb") as f: readme_text = f.read().decode() version_line_match = re.search(VERSION_REGEX, readme_text) if version_line_match: readme_text = readme_text.replace(version_line_match.group(1), version_id) else: raise Exception("Could not find version id in README.md") with open(README_DIR, "wb") as f: f.write(readme_text.encode()) # update the version in all Cargo.toml files # version = "0.10.3+mc1.21.1" for root, _, files in os.walk(get_dir_location("..")): for file in files: if file == "Cargo.toml": with open(os.path.join(root, file), "r") as f: cargo_toml = f.read().splitlines() for i, line in enumerate(cargo_toml): if line.strip().startswith("version = "): replaced = re.sub(r'\+mc[^"]+?"', f'+mc{version_id}"', line) cargo_toml[i] = replaced break else: # didn't have a version line continue if cargo_toml[-1] != "": # make sure there's always a trailing newline cargo_toml.append("") with open(os.path.join(root, file), "w") as f: f.write("\n".join(cargo_toml)) print("Updated version in README.md and Cargo.toml files") def get_protocol_version() -> str: # azalea-protocol/src/packets/mod.rs # pub const PROTOCOL_VERSION: i32 = 758; with open(get_dir_location("../azalea-protocol/src/packets/mod.rs"), "r") as f: mod_rs = f.read().splitlines() for line in mod_rs: if line.strip().startswith("pub const PROTOCOL_VERSION"): return line.strip().split(" ")[-1].strip(";") raise Exception( "Could not find protocol version in azalea-protocol/src/packets/mod.rs" ) def set_protocol_version(protocol_version: str) -> None: with open(get_dir_location("../azalea-protocol/src/packets/mod.rs"), "r") as f: mod_rs = f.read().splitlines() for i, line in enumerate(mod_rs): if line.strip().startswith("pub const PROTOCOL_VERSION:"): mod_rs[i] = f"pub const PROTOCOL_VERSION: i32 = {protocol_version};" break else: raise Exception( "Could not find protocol version in azalea-protocol/src/packets/mod.rs" ) with open(get_dir_location("../azalea-protocol/src/packets/mod.rs"), "w") as f: f.write("\n".join(mod_rs)) def set_version_name(version_name: str) -> None: with open(get_dir_location("../azalea-protocol/src/packets/mod.rs"), "r") as f: mod_rs = f.read().splitlines() for i, line in enumerate(mod_rs): if line.strip().startswith("pub const VERSION_NAME:"): mod_rs[i] = f'pub const VERSION_NAME: &str = "{version_name}";' break else: raise Exception( "Could not find version name in azalea-protocol/src/packets/mod.rs" ) with open(get_dir_location("../azalea-protocol/src/packets/mod.rs"), "w") as f: f.write("\n".join(mod_rs))