#!/usr/bin/env python3 from __future__ import annotations import re import sys from pathlib import Path PROJECT_ROOT = Path(__file__).parent / ".." CHANGELOG_FILE = PROJECT_ROOT / "docs" / "changelog.md" README_FILE = PROJECT_ROOT / "README.md" # https://regexr.com/622ds FIRST_5_CHANGELOG_ENTRIES_REGEX = re.compile(r"""(^###.*?(?=###)){5}""", re.DOTALL | re.MULTILINE) # https://regexr.com/622e5 README_CHANGELOG_SECTION = re.compile( r"""(?<=\n).*(?=)""", re.DOTALL, ) def main(): changelog_text = CHANGELOG_FILE.read_text() readme_text = README_FILE.read_text() mini_changelog_match = FIRST_5_CHANGELOG_ENTRIES_REGEX.search(changelog_text) assert mini_changelog_match, "Failed to find the first few changelog entries" mini_changelog = "\n".join( [ "", "", "", mini_changelog_match.group(0).strip(), "", "", ] ) if not re.search(README_CHANGELOG_SECTION, readme_text): sys.exit("Changelog section not found in README") readme_text = re.sub(README_CHANGELOG_SECTION, mini_changelog, readme_text) README_FILE.write_text(readme_text) if __name__ == "__main__": main()