-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathcheck_release_workflow.py
More file actions
54 lines (40 loc) · 1.85 KB
/
check_release_workflow.py
File metadata and controls
54 lines (40 loc) · 1.85 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
#!/usr/bin/env python3
import re
import sys
from pathlib import Path
from typing import NoReturn
def fail(message: str) -> NoReturn:
print(message, file=sys.stderr)
raise SystemExit(1)
def read_version(path: str) -> str:
text = Path(path).read_text()
match = re.search(r'^version\s*=\s*"v?([^"]+)"', text, re.M)
if not match:
fail(f"version not found in {path}")
return match.group(1)
def read_compat_dependency(path: str) -> str:
text = Path(path).read_text()
match = re.search(r'^agora-agents\s*=\s*"([^"]+)"', text, re.M)
if not match:
fail(f"agora-agents dependency not found in {path}")
return match.group(1)
root_version = read_version("pyproject.toml")
compat_pyproject = "compat/agora-agent-server-sdk/pyproject.toml"
compat_version = read_version(compat_pyproject)
compat_dependency = read_compat_dependency(compat_pyproject)
if compat_version != root_version:
fail(f"Compat package version ({compat_version}) must match root package version ({root_version}).")
expected_dependency = f">={root_version},<3.0.0"
if compat_dependency != expected_dependency:
fail(f"Compat package dependency on agora-agents ({compat_dependency}) must be {expected_dependency}.")
release_workflow = Path(".github/workflows/release.yml").read_text()
required_workflow_markers = [
("contents: write", "release workflow must have contents: write so it can create GitHub releases"),
("gh release create", "release workflow must create a GitHub release when one does not exist"),
("gh release edit", "release workflow must update an existing GitHub release"),
("release_notes.md", "release workflow must generate and use a release notes file"),
]
for marker, message in required_workflow_markers:
if marker not in release_workflow:
fail(message)
print("Release metadata and workflow checks passed.")