ci: respect GITHUB_REPOSITORY for bundle name + tolerate per-asset upload failures
release / release (push) Successful in 2s

- build_zip.sh: derive <repo>-all.zip name from $GITHUB_REPOSITORY when
  set (in Gitea Actions the toplevel basename is the worker dir, not
  the repo). Falls back to git toplevel for local invocations.
- release.yml: skip assets above MAX_BYTES (200 MiB Gitea ceiling) and
  continue on individual upload failures. Job only fails if ZERO assets
  uploaded. Previously one oversized zip would block the whole release.
This commit is contained in:
2026-05-25 12:15:02 +02:00
parent 99f71dfed1
commit 0206974be4
2 changed files with 40 additions and 7 deletions
+28 -6
View File
@@ -24,6 +24,9 @@ jobs:
REPO: ${{ github.repository }}
TAG: ${{ github.ref_name }}
API: ${{ github.server_url }}/api/v1
# Gitea attachment ceiling is 200 MiB (see roles/gitea config).
# Skip anything larger so one oversized asset doesn't fail the job.
MAX_BYTES: 209715200
run: |
set -euo pipefail
# Create the release (or reuse if it already exists for this tag).
@@ -38,12 +41,31 @@ jobs:
| jq -r '.id')
fi
echo "release id: $RID"
# Upload every dist/*.zip
# Upload every dist/*.zip. Per-asset failures don't fail the job —
# we want partial releases to still publish rather than block the
# whole pipeline on one big file.
failed=0
uploaded=0
for f in dist/*.zip; do
name=$(basename "$f")
echo "uploading $name"
curl -sf -X POST -H "Authorization: token $GITEA_TOKEN" \
-F "attachment=@$f" \
"$API/repos/$REPO/releases/$RID/assets?name=$name" \
| jq -r '" -> " + .browser_download_url'
size=$(stat -c '%s' "$f")
if [ "$size" -gt "$MAX_BYTES" ]; then
echo "::warning::skip $name (${size} B > ${MAX_BYTES} B Gitea limit; host on CDN instead)"
failed=$((failed+1))
continue
fi
echo "uploading $name ($(numfmt --to=iec "$size"))"
if curl -sf -X POST -H "Authorization: token $GITEA_TOKEN" \
-F "attachment=@$f" \
"$API/repos/$REPO/releases/$RID/assets?name=$name" \
| jq -r '" -> " + .browser_download_url'; then
uploaded=$((uploaded+1))
else
echo "::warning::upload failed for $name"
failed=$((failed+1))
fi
done
echo "release published: $uploaded uploaded, $failed skipped/failed"
# Only fail the job if NO assets uploaded — a release with zero
# attachments isn't useful to anyone.
[ "$uploaded" -gt 0 ]