构建状态增加平台终态只读核对,修复回调丢失后任务长期卡在构建中

工作流在脚本收尾前失败(拉取/编译/runner 异常)或 GENURL 不可达时,
结束回调会永久丢失,而等待页 30 秒轮询与列表页此前只读本地库,
任务只能等 6 小时本地超时,平台侧已失败也无法及时反映。

- GitHub/Gitea 后端新增只读 get_run(),仅在平台报告终态时返回结论,
  在途、非 200、网络异常、坏 JSON 一律返回 None;不取消、不写平台
- 等待页 30 秒轮询同步核对一次真实状态:20 秒节流、6 秒超时、异常静默
- 我的构建/后台仪表盘改为后台守护线程核对,页面渲染零等待
- 仅做非终态到终态的条件更新,回调抢先到达时不会被覆盖
- 停止/删除纯本地语义、6 小时本地超时兜底等现有逻辑保持不变
This commit is contained in:
naeeo
2026-09-30 12:46:05 +08:00
parent b0219603be
commit d78c071818
5 changed files with 203 additions and 12 deletions
+6 -4
View File
@@ -32,9 +32,10 @@ def staff_required(view_func):
@login_required
def my_builds(request):
builds = list(GithubRun.objects.filter(created_by=request.user))
# 仅做纯本地的 6 小时超时兜底,不向构建平台发起任何请求,页面秒开
from .views import mark_stale_builds
# 回调为第一状态来源;本地 6 小时超时兜底 + 后台线程只读核对平台终态(不阻塞页面)
from .views import mark_stale_builds, schedule_refresh_for_runs
mark_stale_builds(builds)
schedule_refresh_for_runs(builds)
return render(request, 'my_builds.html', {'builds': builds})
@@ -149,9 +150,10 @@ def delete_token(request, key):
@staff_required
def dashboard(request):
builds = list(GithubRun.objects.select_related('created_by').all()[:100])
# 仅做纯本地的 6 小时超时兜底,不向构建平台发起任何请求,页面秒开
from .views import mark_stale_builds
# 回调为第一状态来源;本地 6 小时超时兜底 + 后台线程只读核对平台终态(不阻塞页面)
from .views import mark_stale_builds, schedule_refresh_for_runs
mark_stale_builds(builds)
schedule_refresh_for_runs(builds)
stats = {
'total': GithubRun.objects.count(),
'in_progress': GithubRun.objects.exclude(