-
Notifications
You must be signed in to change notification settings - Fork 34
Expand file tree
/
Copy pathe2e_versions.py
More file actions
75 lines (56 loc) · 2.17 KB
/
Copy pathe2e_versions.py
File metadata and controls
75 lines (56 loc) · 2.17 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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
#!/usr/bin/env python3
"""Resolve PLUGIN_VER (create) and TARGET_VER (upgrade) for E2E update tests."""
from __future__ import annotations
import sys
from pathlib import Path
def _repo_root() -> Path:
return Path(__file__).resolve().parents[2]
def _ensure_import_paths() -> Path:
root = _repo_root()
for path in (root, root / "scripts"):
text = str(path)
if text not in sys.path:
sys.path.insert(0, text)
return root
def resolve_e2e_versions(repo_root: Path | None = None) -> tuple[str, str]:
"""Return (plugin_ver, target_ver) for isolated upgrade E2E tests."""
from giswater_admin.install.config import read_metadata_version
from release_lib import ReleaseError, parse_version, release_versions_from_headings
root = repo_root or _repo_root()
target = read_metadata_version(root)
if not target:
raise ReleaseError(f"metadata.txt has no version= under {root}")
changelog_path = root / "CHANGELOG.md"
if not changelog_path.is_file():
raise ReleaseError(f"CHANGELOG.md not found under {root}")
released = release_versions_from_headings(
changelog_path.read_text(encoding="utf-8")
)
if not released:
raise ReleaseError("CHANGELOG.md has no released versions")
target_v = parse_version(target)
latest_v = released[0]
target_key = (target_v.major, target_v.minor, target_v.patch)
latest_key = (latest_v.major, latest_v.minor, latest_v.patch)
if target_key > latest_key:
plugin = latest_v.text
else:
if len(released) < 2:
raise ReleaseError(
"CHANGELOG.md needs at least two released versions when "
f"metadata ({target}) is not ahead of latest release ({latest_v.text})"
)
plugin = released[1].text
return plugin, target
def main() -> int:
try:
_ensure_import_paths()
plugin, target = resolve_e2e_versions()
except Exception as exc: # noqa: BLE001 - CLI entrypoint
print(f"error: {exc}", file=sys.stderr)
return 1
print(f"TARGET_VER={target}")
print(f"PLUGIN_VER={plugin}")
return 0
if __name__ == "__main__":
sys.exit(main())