Files
carbon-lang/scripts/query_module_versions.py
T
Chandler Carruth b344f3af12 Switch a few stragglers to uv and update python to 3.12 (#7296)
Not sure how these got missed when moving other things to `uv`, but this
should clean them up.

The bump to Python 3.12 is so that we can use `@override` with the
simple import from `typing`. This is needed by the newest versions of
`ty` to do type checking. Added the relevant `@override` annotations.

Assisted-by: Antigravity with Gemini
2026-06-03 05:34:44 +00:00

72 lines
2.0 KiB
Python
Executable File

#!/usr/bin/env -S uv run --script
# /// script
# requires-python = ">=3.12"
# ///
"""Queries latest module versions from MODULE.bazel."""
__copyright__ = """
Part of the Carbon Language project, under the Apache License v2.0 with LLVM
Exceptions. See /LICENSE for license information.
SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
"""
import json
import re
import subprocess
import urllib.error
import urllib.request
def _query_bazel_deps(module_text: str) -> None:
"""Query BCR for `bazel_dep` rule versions."""
bazel_dep_re = re.compile(
r'bazel_dep\([^)]*name\s*=\s*"([^"]+)"[^)]*version\s*='
)
packages = sorted([m[1] for m in bazel_dep_re.finditer(module_text)])
print("- BCR:")
for pkg in packages:
try:
url = f"https://bcr.bazel.build/modules/{pkg}/metadata.json"
with urllib.request.urlopen(url) as response:
data = json.loads(response.read().decode())
versions = data.get("versions", [])
print(f" - {pkg}: {versions[-1] if versions else 'Unknown'}")
except Exception as e:
print(f" - {pkg}: Error {e}")
def _query_git_overrides(module_text: str) -> None:
"""Query GitHub for `git_override` rule versions."""
git_re = re.compile(
r"git_override\(\s*"
r'module_name\s*=\s*"([^"]+)".*?'
r'remote\s*=\s*"([^"]+)"',
re.DOTALL,
)
git_repos = sorted([(m[1], m[2]) for m in git_re.finditer(module_text)])
print("- Git HEAD:")
for pkg, url in git_repos:
try:
output = subprocess.check_output(
["git", "ls-remote", url, "HEAD"], text=True
)
commit = output.split()[0]
print(f" - {pkg}: {commit}")
except Exception as e:
print(f" - {pkg}: Error {e}")
def main() -> None:
with open("MODULE.bazel", "r") as f:
module_text = f.read()
_query_bazel_deps(module_text)
_query_git_overrides(module_text)
if __name__ == "__main__":
main()