Files
astral-uv/scripts/check-trampoline-version-consistency.py

57 lines
1.5 KiB
Python

"""Check that the `windows` crate version matches between workspaces.
The uv-trampoline crate is excluded from the main workspace (it requires nightly),
so this script verifies that the `windows` crate version is kept in sync by
comparing the locked versions in both Cargo.lock files.
"""
# /// script
# requires-python = ">=3.12"
# ///
from __future__ import annotations
import sys
import tomllib
from pathlib import Path
ROOT = Path(__file__).parent.parent
def get_locked_windows_version(lockfile_path: Path) -> str | None:
"""Get the windows crate version from a Cargo.lock file."""
with open(lockfile_path, "rb") as f:
lockfile = tomllib.load(f)
for package in lockfile.get("package", []):
if package.get("name") == "windows":
return package.get("version")
return None
def main() -> int:
main_lockfile = ROOT / "Cargo.lock"
trampoline_lockfile = ROOT / "crates" / "uv-trampoline" / "Cargo.lock"
main_version = get_locked_windows_version(main_lockfile)
trampoline_version = get_locked_windows_version(trampoline_lockfile)
print(f"workspace: windows {main_version}")
print(f"uv-trampoline: windows {trampoline_version}")
if main_version != trampoline_version:
print(
f"\n::error::windows crate version mismatch! "
f"workspace uses {main_version} but uv-trampoline uses {trampoline_version}",
file=sys.stderr,
)
return 1
print("\nVersions match.")
return 0
if __name__ == "__main__":
sys.exit(main())