48 lines
1.3 KiB
Python
Executable File
48 lines
1.3 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
|
|
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"""(?<=<!-- START bin\/update_readme_changelog.py -->\n).*(?=<!-- END bin\/update_readme_changelog.py -->)""",
|
|
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(
|
|
[
|
|
"",
|
|
"<!-- this section was generated by bin/update_readme_changelog.py -- do not edit manually -->",
|
|
"",
|
|
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()
|