fix(ci): publish dev-latest edit-first instead of probing for existence
Some checks failed
CI / go-test (push) Has been cancelled
CI / postgres-durable-first (push) Has been cancelled
CI / codegen (push) Has been cancelled
CI / govulncheck (push) Has been cancelled
CI / race (push) Has been cancelled
CI / fuzz-smoke (push) Has been cancelled
CI / golangci (push) Has been cancelled
CI / frontend (push) Has been cancelled
CodeQL Advanced / Analyze (go) (push) Has been cancelled
CodeQL Advanced / Analyze (actions) (push) Has been cancelled
CodeQL Advanced / Analyze (javascript-typescript) (push) Has been cancelled
Docs Deploy (GitHub Pages) / build (push) Has been cancelled
Release 3X-UI / build (386) (push) Has been cancelled
Release 3X-UI / build (amd64) (push) Has been cancelled
Release 3X-UI / build (arm64) (push) Has been cancelled
Release 3X-UI / build (armv5) (push) Has been cancelled
Release 3X-UI / build (armv6) (push) Has been cancelled
Release 3X-UI / build (armv7) (push) Has been cancelled
Release 3X-UI / build (s390x) (push) Has been cancelled
Release 3X-UI / Build for Windows (push) Has been cancelled
Docs Deploy (GitHub Pages) / deploy (push) Has been cancelled
Release 3X-UI / Publish rolling dev release (push) Has been cancelled

The dev-latest publish step probed for the release with gh release
view before choosing edit or create. During the api.github.com 503
storm the probe itself failed, mis-routing an existing release into
the create path, which then died on a permanent 422 already-exists
error that no amount of retrying can fix.

The release exists on every run but the very first, so edit first and
fall back to create only when the edit fails. The retry log line now
names the gh subcommand instead of just the binary.
This commit is contained in:
MHSanaei 2026-07-17 01:34:47 +02:00
parent 455d1cd0f7
commit 2f156c8eb0
No known key found for this signature in database
GPG key ID: 7E4060F2FBE5AB7A

View file

@ -372,7 +372,7 @@ jobs:
retry() {
for i in 1 2 3 4 5; do
"$@" && return 0
echo "attempt $i failed: $1" >&2
echo "attempt $i failed: ${*:1:3}" >&2
sleep $((i * 5))
done
return 1
@ -389,10 +389,10 @@ jobs:
git tag -f dev-latest "${COMMIT}"
retry git push -f origin refs/tags/dev-latest
if gh release view dev-latest >/dev/null 2>&1; then
retry gh release edit dev-latest --prerelease --latest=false \
--title "Dev build ${short}" --notes "${notes}"
else
# The release exists on every run but the first; edit-first avoids an
# existence probe that can 503 and mis-route into create (422).
if ! retry gh release edit dev-latest --prerelease --latest=false \
--title "Dev build ${short}" --notes "${notes}"; then
retry gh release create dev-latest --prerelease --latest=false \
--target "${COMMIT}" --title "Dev build ${short}" --notes "${notes}"
fi