render_release_body.py 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. import json
  2. import os
  3. import sys
  4. from pathlib import Path
  5. PLACEHOLDERS = {
  6. "{{KSU_VERSION}}": lambda: os.environ.get("KSU_VERSION", "unknown"),
  7. "{{KSU_GIT_TAG}}": lambda: os.environ.get("KSU_GIT_TAG", "no-tag"),
  8. "{{KSUN_BRANCH}}": lambda: os.environ.get("KSUN_BRANCH", "dev"),
  9. "{{KSUN_COMMIT}}": lambda: os.environ.get("KSUN_COMMIT", "unknown"),
  10. "{{KSU_MANAGER}}": lambda: os.environ.get("KSU_MANAGER", "Placeholder"),
  11. "{{SUSFS_BRANCHES}}": lambda: os.environ.get("SUSFS_COMMIT", "latest on auto-derived gki-{version} branch"),
  12. "{{SUSFS_BRANCHS}}": lambda: os.environ.get("SUSFS_COMMIT", "latest on auto-derived gki-{version} branch"),
  13. }
  14. def render_markdown(template_path: Path):
  15. text = template_path.read_text()
  16. for placeholder, getter in PLACEHOLDERS.items():
  17. text = text.replace(placeholder, getter())
  18. print(text, end="")
  19. config_path = Path(sys.argv[1])
  20. if config_path.suffix.lower() == ".md":
  21. render_markdown(config_path)
  22. sys.exit(0)
  23. # Backward-compatible JSON renderer for older release configs.
  24. def emit(text=""):
  25. print(text)
  26. def emit_list(items):
  27. if isinstance(items, list):
  28. for item in items:
  29. emit(f"- {item}")
  30. def emit_description(value):
  31. if isinstance(value, list):
  32. for line in value:
  33. emit(line)
  34. elif value:
  35. emit(str(value))
  36. data = json.loads(config_path.read_text())
  37. emit("**IMPORTANT DISCLAIMER**")
  38. for line in data["release"]["disclaimer"]:
  39. emit(line)
  40. kernelsu = data.get("kernelsu", {})
  41. emit()
  42. emit(f"## {kernelsu.get('name', 'KernelSU-Next')}")
  43. emit(f"- Version: {os.environ.get('KSU_VERSION', kernelsu.get('version', 'unknown'))}")
  44. emit(f"- Tag: {os.environ.get('KSU_GIT_TAG', kernelsu.get('tag', 'no-tag'))}")
  45. emit(f"- Branch: {os.environ.get('KSUN_BRANCH', kernelsu.get('branch', 'dev'))}")
  46. emit(f"- Commit: {os.environ.get('KSUN_COMMIT', kernelsu.get('commit', 'unknown'))}")
  47. if kernelsu.get("url"):
  48. emit(f"- URL: {kernelsu['url']}")
  49. if kernelsu.get("manager"):
  50. emit(f"- Manager: {kernelsu['manager']}")
  51. skip_keys = {"release", "kernelsu"}
  52. for key in data.keys():
  53. if key in skip_keys:
  54. continue
  55. section = data[key]
  56. emit()
  57. emit(f"## {section.get('name', key)}")
  58. if section.get("description"):
  59. emit_description(section["description"])
  60. if section.get("version"):
  61. emit(f"- Version: {section['version']}")
  62. if section.get("tag"):
  63. emit(f"- Tag: {section['tag']}")
  64. if section.get("branch"):
  65. emit(f"- Branch: {section['branch']}")
  66. if key == "susfs":
  67. susfs_commit = os.environ.get("SUSFS_COMMIT", "")
  68. if susfs_commit:
  69. emit(f"- Commit: `{susfs_commit}`")
  70. else:
  71. emit("- Commit: latest on auto-derived gki-{version} branch")
  72. if section.get("items"):
  73. emit_list(section["items"])
  74. if section.get("url"):
  75. emit(f"- URL: {section['url']}")