fix: 修复 Gitea 发布工作流在 fork/镜像仓库中的兼容性问题 #1
@@ -149,6 +149,23 @@ api_post_json() {
|
|||||||
"$1"
|
"$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() {
|
release_id_from_json() {
|
||||||
case "$JSON_RUNTIME" in
|
case "$JSON_RUNTIME" in
|
||||||
node)
|
node)
|
||||||
@@ -185,14 +202,26 @@ fi
|
|||||||
|
|
||||||
release_url="$(api_url "releases/tags/${TAG}")"
|
release_url="$(api_url "releases/tags/${TAG}")"
|
||||||
release_json=""
|
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"
|
log "Release 已存在:$TAG"
|
||||||
else
|
else
|
||||||
log "创建 Release:$TAG"
|
log "创建 Release:$TAG"
|
||||||
title_json="$(printf '%s' "$TITLE" | json_escape)"
|
title_json="$(printf '%s' "$TITLE" | json_escape)"
|
||||||
notes_json="$(printf '%s' "$NOTES" | 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}}"
|
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
|
fi
|
||||||
|
|
||||||
release_id="$(printf '%s' "$release_json" | release_id_from_json)"
|
release_id="$(printf '%s' "$release_json" | release_id_from_json)"
|
||||||
|
|||||||
Reference in New Issue
Block a user