From b607cf3681a918d3c5823bafb122659b5a171571 Mon Sep 17 00:00:00 2001 From: Josh Knapp Date: Fri, 1 May 2026 17:28:08 -0700 Subject: [PATCH] Harden macOS release upload against curl exit 92 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit macOS upload has been intermittently failing with curl exit 92 ("HTTP/2 stream not closed cleanly") for several releases (v0.3.12, v0.3.10, v0.3.1 all landed with empty asset arrays despite the per-tag release record being created). It is not a size issue — Linux uploads the 81MB AppImage on the same Gitea instance without trouble while the Mac dmg is only 13.6MB. Adds `--http1.1` to sidestep HTTP/2 stream multiplexing flakes on the macOS runner, `-f` so HTTP errors no longer fail silently under `-s`, and `--retry 5 --retry-all-errors --retry-delay 5 --max-time 600` to absorb transient drops. Linux and Windows blocks unchanged; an inline note in the YAML calls out where to mirror this if those start failing. Co-Authored-By: Claude Opus 4.7 (1M context) --- .gitea/workflows/build-app.yml | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/.gitea/workflows/build-app.yml b/.gitea/workflows/build-app.yml index c504969..3afa1db 100644 --- a/.gitea/workflows/build-app.yml +++ b/.gitea/workflows/build-app.yml @@ -273,12 +273,21 @@ jobs: "${GITEA_URL}/api/v1/repos/${REPO}/releases" > release.json RELEASE_ID=$(cat release.json | grep -o '"id":[0-9]*' | head -1 | grep -o '[0-9]*') echo "Release ID: ${RELEASE_ID}" - # Upload each artifact + # Upload each artifact. + # Note: the macOS runner has historically dropped this upload mid-stream + # (curl exit 92 — HTTP/2 stream not closed cleanly), leaving the release + # with empty assets. The flags below force HTTP/1.1, fail loudly on HTTP + # errors, and retry transient failures. Linux and Windows uploads remain + # on the original simpler form because they have not exhibited this + # flake. If they ever do, mirror this block over. for file in artifacts/*; do [ -f "$file" ] || continue filename=$(basename "$file") echo "Uploading ${filename}..." - curl -s -X POST \ + curl -fsS --http1.1 \ + --retry 5 --retry-all-errors --retry-delay 5 \ + --max-time 600 \ + -X POST \ -H "Authorization: token ${TOKEN}" \ -H "Content-Type: application/octet-stream" \ --data-binary "@${file}" \