40 lines
1.3 KiB
Python
40 lines
1.3 KiB
Python
"""
|
|
构建后端抽象层:把 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()
|