GoldenGreenFC / scripts /bump_version.py
dailyGit
dailygit: space watch redeploy
954b08f
Raw History Blame Contribute Delete
2.4 kB
#!/usr/bin/env python3
"""Bump or sync GoldenGreenFC version across VERSION, package.json, README, script.js, index.html."""
from __future__ import annotations
import argparse
import json
import re
from pathlib import Path
ROOT = Path(__file__).resolve().parents[1]
def read_version() -> str:
return (ROOT / "VERSION").read_text(encoding="utf-8").strip()
def bump(version: str, kind: str) -> str:
major, minor, patch = (int(x) for x in version.split("."))
if kind == "major":
return f"{major + 1}.0.0"
if kind == "minor":
return f"{major}.{minor + 1}.0"
return f"{major}.{minor}.{patch + 1}"
def write_version(version: str) -> None:
(ROOT / "VERSION").write_text(version + "\n", encoding="utf-8")
pkg_path = ROOT / "package.json"
pkg = json.loads(pkg_path.read_text(encoding="utf-8"))
pkg["version"] = version
pkg_path.write_text(json.dumps(pkg, indent=2) + "\n", encoding="utf-8")
readme = ROOT / "README.md"
text = readme.read_text(encoding="utf-8")
text = re.sub(r"(\*\*Version:\*\*\s*)\d+\.\d+\.\d+", rf"\g<1>{version}", text, count=1)
readme.write_text(text, encoding="utf-8")
script = ROOT / "script.js"
s = script.read_text(encoding="utf-8")
s = re.sub(r'(const VERSION = ")[^"]+(")', rf"\g<1>{version}\g<2>", s, count=1)
script.write_text(s, encoding="utf-8")
index = ROOT / "index.html"
html = index.read_text(encoding="utf-8")
html = re.sub(r"(data-version)>v?\d+\.\d+\.\d+", rf"\1>v{version}", html)
index.write_text(html, encoding="utf-8")
def main() -> None:
parser = argparse.ArgumentParser()
parser.add_argument(
"kind",
nargs="?",
default="patch",
choices=("patch", "minor", "major"),
help="Semver bump kind (ignored with --sync-only)",
)
parser.add_argument(
"--sync-only",
action="store_true",
help="Rewrite versioned files from VERSION without bumping",
)
parser.add_argument(
"--set",
metavar="X.Y.Z",
help="Set an explicit version instead of bumping",
)
args = parser.parse_args()
current = read_version()
if args.set:
next_v = args.set
elif args.sync_only:
next_v = current
else:
next_v = bump(current, args.kind)
write_version(next_v)
print(next_v)
if __name__ == "__main__":
main()