From 7e1973aca7b5e035830cb9846d180db522d9896a Mon Sep 17 00:00:00 2001 From: Duncan Tourolle Date: Thu, 3 Sep 2026 20:36:09 +0200 Subject: [PATCH] fix(ci): the nightly manifest is edited on a stale master `git checkout master` after `git fetch origin master` switches to the LOCAL master -- the one actions/checkout left at this run's own SHA -- not the ref just fetched. A nightly build takes long enough that master has usually moved by the time it finishes, so the manifest gets its new entry prepended to a stale copy and the push is rejected: ! [rejected] master -> master (non-fast-forward) Run 1045 failed this way, and the log is unambiguous about it: "Your branch is behind 'origin/master' by 1 commit, and can be fast-forwarded" appears one line before the commit that could not be pushed. `checkout -B master origin/master` is the fix, and it is right rather than merely convenient. This step appends one version entry to the manifest as it stands on master, so the base it edits has to be master. Editing the copy this build happened to start from and then forcing it through would silently drop whatever landed in between. Co-Authored-By: Claude Opus 5 --- .gitea/workflows/latest.yaml | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/.gitea/workflows/latest.yaml b/.gitea/workflows/latest.yaml index b5d8339..430dc43 100644 --- a/.gitea/workflows/latest.yaml +++ b/.gitea/workflows/latest.yaml @@ -165,7 +165,18 @@ jobs: git config user.name "Gitea Actions" git config user.email "actions@gitea.tourolle.paris" git fetch origin master - git checkout master + # -B against origin/master, not a bare `checkout master`. The bare + # form switches to the LOCAL master that actions/checkout left at the + # run's own SHA, so if master moved while the build ran -- and this is + # a nightly, so it usually has -- the manifest is edited on a stale + # base and the push is rejected non-fast-forward. Run 1045 failed + # exactly this way, having already printed "Your branch is behind + # 'origin/master' by 1 commit" one line before committing anyway. + # + # Resetting is right rather than merely convenient: this step appends + # one entry to the manifest as it stands on master, so the base it + # edits must be master, not whatever this build started from. + git checkout -B master origin/master NEW_VERSION=$(cat <