render_release_body.py 2.9 KB

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