From a4f73c20d75bc79d1fd75304226732844e7e8bb9 Mon Sep 17 00:00:00 2001 From: zhilv Date: Tue, 26 May 2026 11:26:43 +0800 Subject: [PATCH] =?UTF-8?q?=F0=9F=90=9B=20fix(release):=20=E5=85=BC?= =?UTF-8?q?=E5=AE=B9=E4=B8=8D=E6=94=AF=E6=8C=81=20Releases=20=E7=9A=84?= =?UTF-8?q?=E4=BB=93=E5=BA=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 发布脚本在 Gitea Releases API 返回 404 时不再直接失败 - 对未开启 Releases 或 Token 无 Release 权限的仓库改为输出已生成的包路径并跳过上传 - 保持支持 Releases 的仓库仍按原逻辑创建 Release 并上传附件 --- scripts/publish-gitea-release.sh | 33 ++++++++++++++++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) diff --git a/scripts/publish-gitea-release.sh b/scripts/publish-gitea-release.sh index 42406d6..4e85c3b 100755 --- a/scripts/publish-gitea-release.sh +++ b/scripts/publish-gitea-release.sh @@ -149,6 +149,23 @@ api_post_json() { "$1" } +api_post_json_with_status() { + local output_file status + output_file="$(mktemp)" + status="$(curl -sS -o "$output_file" -w '%{http_code}' -X POST \ + -H "Authorization: token ${GITEA_TOKEN}" \ + -H "Content-Type: application/json" \ + -d "$2" \ + "$1")" || { + cat "$output_file" >&2 || true + rm -f "$output_file" + return 1 + } + cat "$output_file" + rm -f "$output_file" + printf '\n%s' "$status" +} + release_id_from_json() { case "$JSON_RUNTIME" in node) @@ -185,14 +202,26 @@ fi release_url="$(api_url "releases/tags/${TAG}")" release_json="" -if release_json="$(api_get "$release_url" 2>/dev/null)"; then +release_status="$(curl -sS -o /dev/null -w '%{http_code}' -H "Authorization: token ${GITEA_TOKEN}" "$release_url" || true)" +if [[ "$release_status" == "200" ]] && release_json="$(api_get "$release_url" 2>/dev/null)"; then log "Release 已存在:$TAG" else log "创建 Release:$TAG" title_json="$(printf '%s' "$TITLE" | json_escape)" notes_json="$(printf '%s' "$NOTES" | json_escape)" payload="{\"tag_name\":\"${TAG}\",\"target_commitish\":\"${TARGET}\",\"name\":${title_json},\"body\":${notes_json},\"draft\":false,\"prerelease\":${PRERELEASE}}" - release_json="$(api_post_json "$(api_url releases)" "$payload")" + create_result="$(api_post_json_with_status "$(api_url releases)" "$payload")" || fail "创建 Release 请求失败" + create_status="${create_result##*$'\n'}" + release_json="${create_result%$'\n'*}" + if [[ "$create_status" == "404" ]]; then + log "当前仓库不支持 Releases 或 Token 无 Release 权限,跳过发布" + printf '\n发布包已生成但未上传 Release:\n' + for package in "${PACKAGES[@]}"; do + printf '%s\n' "$package" + done + exit 0 + fi + [[ "$create_status" == "201" || "$create_status" == "200" ]] || fail "创建 Release 失败,HTTP 状态码:$create_status" fi release_id="$(printf '%s' "$release_json" | release_id_from_json)"