55 lines
1.4 KiB
Python
Executable File
55 lines
1.4 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
"""
|
|
Extract changelog entries for a specific version from CHANGELOG.md.
|
|
|
|
Usage:
|
|
python extract_changelog.py VERSION
|
|
"""
|
|
|
|
import sys
|
|
import re
|
|
from pathlib import Path
|
|
|
|
|
|
def extract_version_content(content: str, version: str) -> str:
|
|
"""Extract content for specified version from changelog text."""
|
|
# Escape version for regex pattern
|
|
version_escaped = re.escape(version)
|
|
pattern = rf"## \[{version_escaped}\].*?(?=## \[|$)"
|
|
|
|
match = re.search(pattern, content, re.DOTALL)
|
|
if not match:
|
|
raise ValueError(f"Version {version} not found in changelog")
|
|
|
|
return match.group(0).strip()
|
|
|
|
|
|
def main():
|
|
"""Main entry point for the script."""
|
|
if len(sys.argv) != 2:
|
|
print("Usage: python extract_changelog.py VERSION", file=sys.stderr)
|
|
sys.exit(1)
|
|
|
|
version = sys.argv[1]
|
|
changelog_path = Path(__file__).parent.parent / "CHANGELOG.md"
|
|
|
|
try:
|
|
content = changelog_path.read_text()
|
|
except FileNotFoundError:
|
|
print(f"Error: Could not find {changelog_path}", file=sys.stderr)
|
|
sys.exit(1)
|
|
except Exception as e:
|
|
print(f"Error reading changelog: {e}", file=sys.stderr)
|
|
sys.exit(1)
|
|
|
|
try:
|
|
version_content = extract_version_content(content, version)
|
|
print(version_content)
|
|
except ValueError as e:
|
|
print(f"Error: {e}", file=sys.stderr)
|
|
sys.exit(1)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|