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>
This commit is contained in:
gregandClaude Opus 5.5 committed 2026-10-25 18:13:25 -04:00
1 parent f1d074bb11
commit fc006a6bcb
2 files changed
+16 -1

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 {
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
steps := []struct {
name string
@@ -415,3 +417,7 @@ func readJSON(p string, out any) error {
}
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"
"strings"
"testing"
"time"
)
func TestCheckBotNeedsPushAccess(t *testing.T) {
@@ -68,3 +69,11 @@ func TestCheckBotWithRepositoryOnlyToken(t *testing.T) {
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)
}
}