Compare commits

...
1 Commits
Author SHA1 Message Date
gregandClaude Opus 5.5 fc006a6bcb fix(worker): a new branch for every run, so reruns can open their PR
Validate game templates / validate (push) Successful in 20s
Validate game templates / boot-test (push) Skipped
Validate game templates / publish (push) Skipped
The draft branch was named after the job only. Rerunning a job's build
pushed to the earlier run's branch, which already had review commits, so the
push was rejected and the finished build failed at the very end. Branches
now also carry the run's time.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-25 18:13:25 -04:00
2 changed files with 16 additions and 1 deletions

No files matched your search

+7 -1
View File
@@ -360,7 +360,9 @@ func (c *workerConfig) openPR(dir string, job *builderJob, res *buildResult) (st
if len(short) > 8 { if len(short) > 8 {
short = short[:8] short = short[:8]
} }
branch := "draft/" + res.GameID + "-" + short // One branch per run: a rerun of the same job must not push onto the earlier run's branch, which
// may have gained review commits since
branch := draftBranch(res.GameID, short, time.Now())
auth := "http.extraHeader=Authorization: token " + c.botToken auth := "http.extraHeader=Authorization: token " + c.botToken
steps := []struct { steps := []struct {
name string name string
@@ -415,3 +417,7 @@ func readJSON(p string, out any) error {
} }
return json.Unmarshal(raw, out) return json.Unmarshal(raw, out)
} }
func draftBranch(gameID, job string, at time.Time) string {
return "draft/" + gameID + "-" + job + "-" + at.UTC().Format("20060102-150405")
}
+9
View File
@@ -5,6 +5,7 @@ import (
"net/http/httptest" "net/http/httptest"
"strings" "strings"
"testing" "testing"
"time"
) )
func TestCheckBotNeedsPushAccess(t *testing.T) { func TestCheckBotNeedsPushAccess(t *testing.T) {
@@ -68,3 +69,11 @@ func TestCheckBotWithRepositoryOnlyToken(t *testing.T) {
t.Errorf("identity = %s <%s>", c.botLogin, c.botEmail) t.Errorf("identity = %s <%s>", c.botLogin, c.botEmail)
} }
} }
func TestDraftBranchIsNewForEveryRun(t *testing.T) {
first := draftBranch("example", "4b174b2d", time.Date(2026, 10, 25, 21, 30, 0, 0, time.UTC))
rerun := draftBranch("example", "4b174b2d", time.Date(2026, 10, 25, 22, 5, 9, 0, time.UTC))
if first != "draft/example-4b174b2d-20261025-213000" || first == rerun {
t.Errorf("first %q, rerun %q", first, rerun)
}
}