fix. harden Go review flow
ci / test (pull_request) Successful in 21s
ci / publish (pull_request) Has been skipped

Fix runner bootstrap and auth handling, preserve queued SHAs, make event/job acceptance atomic, fence stale runs, correct retries and prompts, add fake end-to-end coverage, and fix deployment defaults.

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Space-Banane
2026-07-12 22:20:48 +02:00
parent f19b271642
commit 85c0e735dc
19 changed files with 539 additions and 142 deletions
+41 -37
View File
@@ -136,7 +136,44 @@ func (s *Server) webhook(w http.ResponseWriter, r *http.Request) {
writeJSON(w, 200, map[string]any{"accepted": false, "reason": "no codex command"})
return
}
inserted, err := s.store.InsertWebhookEvent(r.Context(), event)
if cmd.IsReview() {
pr, prErr := s.gitea.GetPullRequest(r.Context(), event.Repo, event.PRNumber)
if prErr == nil {
event.HeadSHA = pr.HeadSHA
if text, configured, cfgErr := s.gitea.GetFileContent(r.Context(), event.Repo, ".codex-review.yml", event.HeadSHA); cfgErr != nil {
writeError(w, cfgErr)
return
} else if configured {
cfg, parseErr := review.ParseRepoConfig(text)
if parseErr != nil {
writeError(w, parseErr)
return
}
review.ApplyServerMaxDiff(&cfg, s.settings.MaxDiffBytes)
if !cfg.Enabled {
inserted, eventErr := s.store.InsertWebhookEvent(r.Context(), event)
if eventErr != nil {
writeError(w, eventErr)
return
}
if !inserted {
writeJSON(w, 200, map[string]any{"accepted": true, "reason": "duplicate event"})
return
}
_, _ = s.gitea.PostIssueComment(r.Context(), event.Repo, event.PRNumber, review.FormatDisabledAck())
writeJSON(w, 200, map[string]any{"accepted": true, "reason": "review disabled by repo config"})
return
}
}
}
}
cooldown := time.Duration(0)
if cmd.Name == "review" {
cooldown = time.Duration(s.settings.CooldownSeconds) * time.Second
}
job, inserted, remaining, err := s.store.EnqueueAcceptedJob(r.Context(), event, cmd, cooldown)
if err != nil {
writeError(w, err)
return
@@ -145,42 +182,9 @@ func (s *Server) webhook(w http.ResponseWriter, r *http.Request) {
writeJSON(w, 200, map[string]any{"accepted": true, "reason": "duplicate event"})
return
}
if cmd.IsReview() {
pr, prErr := s.gitea.GetPullRequest(r.Context(), event.Repo, event.PRNumber)
if prErr == nil {
event.HeadSHA = pr.HeadSHA
}
cfg := review.MissingRepoConfig()
if prErr == nil {
if text, configured, cfgErr := s.gitea.GetFileContent(r.Context(), event.Repo, ".codex-review.yml", event.HeadSHA); cfgErr == nil && configured {
cfg, err = review.ParseRepoConfig(text)
if err != nil {
writeError(w, err)
return
}
}
}
if !cfg.Enabled {
_, _ = s.gitea.PostIssueComment(r.Context(), event.Repo, event.PRNumber, review.FormatDisabledAck())
writeJSON(w, 200, map[string]any{"accepted": true, "reason": "review disabled by repo config"})
return
}
if cmd.Name != "rerun" {
remaining, err := s.store.CooldownRemaining(r.Context(), event.Repo, event.PRNumber, time.Duration(s.settings.CooldownSeconds)*time.Second)
if err != nil {
writeError(w, err)
return
}
if remaining > 0 {
_, _ = s.gitea.PostIssueComment(r.Context(), event.Repo, event.PRNumber, review.FormatCooldownAck(remaining))
writeJSON(w, 200, map[string]any{"accepted": true, "reason": "cooldown active", "cooldown_seconds_remaining": remaining})
return
}
}
}
job, err := s.store.EnqueueJob(r.Context(), event, cmd)
if err != nil {
writeError(w, err)
if remaining > 0 {
_, _ = s.gitea.PostIssueComment(r.Context(), event.Repo, event.PRNumber, review.FormatCooldownAck(remaining))
writeJSON(w, 200, map[string]any{"accepted": true, "reason": "cooldown active", "cooldown_seconds_remaining": remaining})
return
}
if cmd.IsReview() {