115 lines
3.7 KiB
Python
Executable File
115 lines
3.7 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
|
|
"""
|
|
Updates the version information for Python & C SDK.
|
|
|
|
This includes:
|
|
- Python
|
|
- `rerun.__version__`
|
|
- `rerun.__version_info__`
|
|
- C/C++
|
|
- `#define RERUN_SDK_HEADER_VERSION`
|
|
- `#define RERUN_SDK_HEADER_VERSION_MAJOR`
|
|
- `#define RERUN_SDK_HEADER_VERSION_MINOR`
|
|
- `#define RERUN_SDK_HEADER_VERSION_PATCH`
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
import argparse
|
|
import sys
|
|
from pathlib import Path
|
|
|
|
import semver
|
|
|
|
|
|
def update_python_line(line: str, version_line: str, version_info_line: str) -> str:
|
|
if line.startswith("__version__"):
|
|
return version_line
|
|
if line.startswith("__version_info__"):
|
|
return version_info_line
|
|
return line
|
|
|
|
|
|
def set_rerun_py_version(init_path: Path, version: semver.VersionInfo) -> None:
|
|
version_line = f'__version__ = "{version}"\n'
|
|
version_info_items = [str(item) for item in (version.major, version.minor, version.patch)]
|
|
if version.prerelease is not None:
|
|
version_info_items.append(f'"{version.prerelease}"')
|
|
else:
|
|
version_info_items.append("None")
|
|
|
|
version_info_line = f"__version_info__ = ({', '.join(version_info_items)})\n"
|
|
|
|
with init_path.open(encoding="utf-8") as f:
|
|
lines = f.readlines()
|
|
|
|
new_lines = [update_python_line(line, version_line, version_info_line) for line in lines]
|
|
|
|
if new_lines != lines:
|
|
with init_path.open("w", encoding="utf-8") as f:
|
|
f.writelines(new_lines)
|
|
else:
|
|
print(f"Version already set to {version} in {init_path}")
|
|
|
|
|
|
def update_c_line(
|
|
line: str,
|
|
version_line: str,
|
|
version_line_major: str,
|
|
version_line_minor: str,
|
|
version_line_patch: str,
|
|
) -> str:
|
|
if line.startswith("#define RERUN_SDK_HEADER_VERSION_MAJOR"):
|
|
return version_line_major
|
|
elif line.startswith("#define RERUN_SDK_HEADER_VERSION_MINOR"):
|
|
return version_line_minor
|
|
elif line.startswith("#define RERUN_SDK_HEADER_VERSION_PATCH"):
|
|
return version_line_patch
|
|
elif line.startswith("#define RERUN_SDK_HEADER_VERSION"):
|
|
return version_line
|
|
|
|
return line
|
|
|
|
|
|
def set_rerun_c_version(init_path: Path, version: semver.VersionInfo) -> None:
|
|
version_line = f'#define RERUN_SDK_HEADER_VERSION "{version}"\n'
|
|
version_line_major = f"#define RERUN_SDK_HEADER_VERSION_MAJOR {version.major}\n"
|
|
version_line_minor = f"#define RERUN_SDK_HEADER_VERSION_MINOR {version.minor}\n"
|
|
version_line_patch = f"#define RERUN_SDK_HEADER_VERSION_PATCH {version.patch}\n"
|
|
|
|
with init_path.open(encoding="utf-8") as f:
|
|
lines = f.readlines()
|
|
|
|
new_lines = [
|
|
update_c_line(line, version_line, version_line_major, version_line_minor, version_line_patch) for line in lines
|
|
]
|
|
if new_lines != lines:
|
|
with init_path.open("w", encoding="utf-8") as f:
|
|
f.writelines(new_lines)
|
|
else:
|
|
print(f"Version already set to {version} in {init_path}")
|
|
|
|
|
|
def main() -> None:
|
|
parser = argparse.ArgumentParser(description="Update rerun_py __version__ variable & rerun_c version defines.")
|
|
parser.add_argument("VERSION", help="Version to use")
|
|
args = parser.parse_args()
|
|
|
|
# check that the version is valid
|
|
try:
|
|
semver.VersionInfo.parse(args.VERSION)
|
|
except ValueError:
|
|
print(f"Invalid semver version: {args.VERSION}", file=sys.stderr, flush=True)
|
|
sys.exit(1)
|
|
|
|
project_path = Path(__file__).parent.parent.parent.absolute()
|
|
|
|
sem_version = semver.VersionInfo.parse(args.VERSION)
|
|
set_rerun_py_version(project_path / "rerun_py" / "rerun_sdk" / "rerun" / "__init__.py", sem_version)
|
|
set_rerun_c_version(project_path / "rerun_cpp" / "src" / "rerun" / "c" / "sdk_info.h", sem_version)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|