1
0
forked from Eeveid/lightOps

🐛 fix(release): 兼容不支持 Releases 的仓库

- 发布脚本在 Gitea Releases API 返回 404 时不再直接失败
- 对未开启 Releases 或 Token 无 Release 权限的仓库改为输出已生成的包路径并跳过上传
- 保持支持 Releases 的仓库仍按原逻辑创建 Release 并上传附件
This commit is contained in:
2026-05-26 11:26:43 +08:00
parent 100909a47f
commit a4f73c20d7

View File

@@ -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)"