leptos-use/docs/add_version_to_docs.py

85 lines
2.9 KiB
Python
Raw Normal View History

2023-07-24 23:16:16 +01:00
import os
import re
import sys
from datetime import datetime
def main():
with open("Cargo.toml", "r") as f:
cargo_text = f.read()
m = re.search(r'leptos = "([^"]+)"', cargo_text)
leptos_version = m.group(1)
m = re.search(r'version = "(\d+)\.(\d+)\.(\d+)"', cargo_text)
crate_version_short = f"{m.group(1)}.{m.group(2)}"
crate_version_long = f"{m.group(1)}.{m.group(2)}.{m.group(3)}"
print("Found crate version", crate_version_short, "and leptos version", leptos_version)
with open("README.md", "r") as f:
original_text = f.read()
text = add_to_compat_table(leptos_version, crate_version_short, original_text)
if len(sys.argv) > 1 and sys.argv[1] == "--check":
if original_text != text:
print("[Failed] README.md doesn't contain the current crate version in the compatibility table",
file=sys.stderr)
print(" * Run `python3 docs/add_version_to_docs.py` to fix", file=sys.stderr)
quit(1)
else:
print("[OK] README.md does contain the current crate version in the compatibility table")
if len(sys.argv) == 1:
with open("README.md", "w") as f:
f.write(text)
with open("CHANGELOG.md", "r") as f:
original_text = f.read()
text = replace_in_changelog(crate_version_long, original_text)
if len(sys.argv) > 1 and sys.argv[1] == "--check":
if original_text != text:
print("[Failed] CHANGELOG.md still contains an [Unreleased] header",
file=sys.stderr)
print(" * Run `python3 docs/add_version_to_docs.py` to fix", file=sys.stderr)
quit(1)
else:
print("[OK] CHANGELOG.md doesn't contain an [Unreleased] header")
if len(sys.argv) == 1:
with open("CHANGELOG.md", "w") as f:
f.write(text)
def add_to_compat_table(leptos_version: str, crate_version: str, original_text: str):
lines = original_text.splitlines()
table_row = None
if re.search(rf"^\|[^|]+\| {leptos_version}", lines[-1]) is not None:
table_row = lines[-1]
if table_row is None:
lines.append(f"| {crate_version} | {leptos_version} |")
elif re.search(rf"^\| .*? {crate_version}\s*\| {leptos_version}", table_row) is not None:
return original_text
else:
index = table_row.index("|", 1)
while index > 2 and table_row[index - 1] == " ":
index -= 1
lines[-1] = f"{table_row[:index]}, {crate_version}{table_row[index:]}"
return "\n".join(lines) + '\n'
def replace_in_changelog(crate_version: str, original_text: str):
today = datetime.today().strftime("%Y-%m-%d")
return original_text.replace("## [Unreleased] -", f"## [{crate_version}] - {today}")
if __name__ == '__main__':
main()