diff --git a/.gitea/workflows/Release.yml b/.gitea/workflows/Release.yml index c963488..352149c 100644 --- a/.gitea/workflows/Release.yml +++ b/.gitea/workflows/Release.yml @@ -175,14 +175,29 @@ jobs: sleep 2 done - # Fetch file blob SHAs from next-release (inherited from base on creation) + # Fetch file blob SHA from BASE_BRANCH. next-release was just forked + # from base so the blob SHA matches; querying base avoids racing + # Gitea's per-endpoint propagation for the new branch (the /contents + # endpoint can still 500/404 after /branches reports 200). Returns + # empty only when the file genuinely does not exist on base. fetch_sha() { local path="$1" out meta code body - out=$(api_call GET "/contents/${path}?ref=next-release") - meta=$(meta_line "${out}"); code="${meta%%|*}"; body=$(body_lines "${out}") - if [ "${code}" = "200" ]; then - printf '%s' "${body}" | jq -r '.sha // empty' - fi + for i in $(seq 1 5); do + out=$(api_call GET "/contents/${path}?ref=${BASE_BRANCH}") + meta=$(meta_line "${out}"); code="${meta%%|*}"; body=$(body_lines "${out}") + if [ "${code}" = "200" ]; then + printf '%s' "${body}" | jq -r '.sha // empty' + return 0 + fi + if [ "${code}" = "404" ]; then + return 0 + fi + if [ "${i}" = "5" ]; then + echo "fetch_sha ${path} failed after 5 attempts (${meta}): ${body}" >&2 + return 0 + fi + sleep 2 + done } CHANGELOG_SHA=$(fetch_sha "CHANGELOG.md") VERSION_SHA=$(fetch_sha ".version")