Repository navigation
Expand file tree
/
Copy pathfind_version.py
More file actions
57 lines (40 loc) · 1.87 KB
/
Copy pathfind_version.py
File metadata and controls
57 lines (40 loc) · 1.87 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
from pathlib import Path
import tomllib
import json
import os
def resolve_version(friendly_version: str) -> str:
"""Resolve a friendly version like '3.10t' to an exact version like '3.10.12'."""
# Strip JIT for now as it's not recognized by pyenv
is_free_threaded = friendly_version.endswith('t')
is_jit = friendly_version.endswith('j')
base_version = friendly_version.rstrip('jt')
pyenv_root = Path(os.environ.get("PYENV_ROOT", "/pyenv"))
pyenv_versions = pyenv_root / "plugins/python-build/share/python-build"
matching_versions = []
for version_file in pyenv_versions.glob(f"{base_version}.*"):
version_str = version_file.name
if version_str.endswith("-dev"):
continue
if version_str.endswith("t") and is_free_threaded:
matching_versions.append(version_str.rstrip('t'))
elif not version_str.endswith("t"):
matching_versions.append(version_str)
if not matching_versions:
raise ValueError(f"No matching versions found for base version '{base_version}'")
# Sort versions to get the latest
matching_versions.sort(key=lambda s: list(map(int, s.split('.'))))
latest_version = matching_versions[-1]
latest_version += 'j' if is_jit else ''
latest_version += 't' if is_free_threaded else ''
return latest_version
if __name__ == "__main__":
versions_toml_path = Path(os.environ.get("VERSIONS_TOML", "/versions.toml"))
if not versions_toml_path.exists():
raise FileNotFoundError(f"Could not find versions.toml at expected path: {versions_toml_path}")
with versions_toml_path.open("rb") as f:
versions_config = tomllib.load(f)
friendly_versions = set(versions_config["config"]["versions"])
resolved_versions = [
{"tag": v, "version": resolve_version(v)} for v in friendly_versions
]
print(json.dumps(resolved_versions))