""" 构建后端抽象层:把 GitHub Actions / Gitea Actions 的触发、状态查询、 日志链接、连接测试收敛为统一接口,业务代码不再感知平台差异。 通过 app_settings 的 BUILD_PLATFORM(后台配置 → 环境变量 → 默认值)选择后端; 每个 GithubRun 记录自身 backend,切换平台后历史任务仍走原平台查询。 """ from .. import app_settings from .github import GitHubBackend from .gitea import GiteaBackend # 已支持的构建平台(Gitee Go 经评估不兼容,未纳入) BACKENDS = { 'github': GitHubBackend, 'gitea': GiteaBackend, } PLATFORM_CHOICES = [ ('github', 'GitHub Actions'), ('gitea', 'Gitea Actions(自建)'), ] def current_platform(): """返回当前生效的构建平台标识(非法值回退 github)。""" name = app_settings.get_value('BUILD_PLATFORM').strip().lower() return name if name in BACKENDS else 'github' def get_backend(name=None): """按名称获取后端实例;name 为空时取当前配置平台。 后端实例无状态(每次调用实时读取设置),直接新建即可, 这样后台修改配置后无需重启即可生效。 """ if not name: name = current_platform() cls = BACKENDS.get(name, GitHubBackend) return cls()