check_branch_versions.py 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165
  1. #!/usr/bin/env python3
  2. # -*- coding: utf-8 -*-
  3. """
  4. 分支版本检查脚本
  5. 检查当前分支是否在版本列表中,并验证分支版本映射关系
  6. """
  7. import os
  8. import sys
  9. import subprocess
  10. from pathlib import Path
  11. def get_current_branch():
  12. """获取当前分支名称"""
  13. try:
  14. result = subprocess.run(
  15. ['git', 'rev-parse', '--abbrev-ref', 'HEAD'],
  16. capture_output=True, text=True, check=True
  17. )
  18. return result.stdout.strip()
  19. except subprocess.CalledProcessError:
  20. print("错误: 无法获取当前分支名称")
  21. return None
  22. def get_all_branches():
  23. """获取所有本地分支"""
  24. try:
  25. result = subprocess.run(
  26. ['git', 'branch', '--format=%(refname:short)'],
  27. capture_output=True, text=True, check=True
  28. )
  29. return [branch.strip() for branch in result.stdout.splitlines() if branch.strip()]
  30. except subprocess.CalledProcessError:
  31. print("错误: 无法获取分支列表")
  32. return []
  33. def load_versions():
  34. """从 versions.list 文件加载版本列表"""
  35. versions_file = Path("../.github/versions.list")
  36. if not versions_file.exists():
  37. print(f"错误: 版本文件不存在: {versions_file}")
  38. return []
  39. versions = []
  40. with open(versions_file, 'r', encoding='utf-8') as f:
  41. for line in f:
  42. line = line.strip()
  43. if line and not line.startswith('#'):
  44. version = line.split('#')[0].strip()
  45. if version:
  46. versions.append(version)
  47. return versions
  48. def check_branch_version_mapping():
  49. """检查分支版本映射关系"""
  50. print("=" * 60)
  51. print("分支版本映射检查")
  52. print("=" * 60)
  53. # 获取当前分支
  54. current_branch = get_current_branch()
  55. if not current_branch:
  56. return False
  57. print(f"当前分支: {current_branch}")
  58. # 获取所有分支
  59. all_branches = get_all_branches()
  60. print(f"本地分支: {', '.join(all_branches)}")
  61. # 加载版本列表
  62. versions = load_versions()
  63. if not versions:
  64. print("错误: 没有找到有效的版本配置")
  65. return False
  66. print(f"版本列表: {', '.join(versions)}")
  67. print()
  68. # 检查映射关系
  69. print("分支版本映射关系:")
  70. print("-" * 40)
  71. mapping_found = False
  72. for version in versions:
  73. if version in all_branches:
  74. status = "✓" if version == current_branch else " "
  75. current_marker = " (当前)" if version == current_branch else ""
  76. print(f"{status} {version} -> {version}{current_marker}")
  77. mapping_found = True
  78. else:
  79. print(f"✗ {version} -> {version} (分支不存在)")
  80. print()
  81. # 检查当前分支是否在版本列表中
  82. if current_branch in versions:
  83. print(f"✓ 当前分支 '{current_branch}' 在版本列表中")
  84. return True
  85. else:
  86. print(f"⚠️ 当前分支 '{current_branch}' 不在版本列表中")
  87. print("建议:")
  88. print(f" 1. 将分支 '{current_branch}' 添加到 .github/versions.list")
  89. print(f" 2. 或者切换到版本列表中的分支")
  90. return False
  91. def check_github_actions_ready():
  92. """检查GitHub Actions是否准备就绪"""
  93. print("\n" + "=" * 60)
  94. print("GitHub Actions 准备状态检查")
  95. print("=" * 60)
  96. # 检查必要文件
  97. required_files = [
  98. ".github/workflows/gh-pages.yml",
  99. ".github/versions.list",
  100. "source/version_generator.py",
  101. "source/config.yaml"
  102. ]
  103. all_ready = True
  104. for file_path in required_files:
  105. if Path(file_path).exists():
  106. print(f"✓ {file_path}")
  107. else:
  108. print(f"✗ {file_path} (缺失)")
  109. all_ready = False
  110. print()
  111. if all_ready:
  112. print("✓ GitHub Actions 配置完整")
  113. return True
  114. else:
  115. print("⚠️ GitHub Actions 配置不完整")
  116. return False
  117. def main():
  118. """主函数"""
  119. print("开始检查分支版本映射...")
  120. # 检查分支版本映射
  121. mapping_ok = check_branch_version_mapping()
  122. # 检查GitHub Actions准备状态
  123. actions_ready = check_github_actions_ready()
  124. print("\n" + "=" * 60)
  125. print("检查结果总结")
  126. print("=" * 60)
  127. if mapping_ok and actions_ready:
  128. print("🎉 所有检查通过!")
  129. print("✅ 分支版本映射正确")
  130. print("✅ GitHub Actions 配置完整")
  131. print("\n可以运行以下命令构建文档:")
  132. print(" python build_local.py")
  133. return 0
  134. else:
  135. print("⚠️ 发现问题,请根据上述建议进行修复")
  136. return 1
  137. if __name__ == "__main__":
  138. sys.exit(main())