fix(release): poll branch readiness before .version write #22

Merged
argoyle merged 1 commits from fix-release-version-race into main 2026-05-12 13:19:02 +00:00
+48 -31
View File
@@ -158,37 +158,7 @@ jobs:
exit 1 exit 1
fi fi
# Check if .version exists on base branch # Wait for next-release branch to be indexed by Gitea before subsequent writes
VERSION_SHA=$(curl -sf --retry 3 --retry-delay 2 --retry-connrefused \
-H "Authorization: token ${TOKEN}" \
"${API_URL}/contents/.version?ref=${BASE_BRANCH}" | jq -r '.sha // empty')
if [ -n "${VERSION_SHA}" ]; then
echo "Updating .version on next-release branch..."
curl -sf --retry 3 --retry-delay 2 --retry-connrefused -X PUT \
-H "Authorization: token ${TOKEN}" \
-H "Content-Type: application/json" \
--data "$(jq -n \
--arg content "${VERSION_CONTENT}" \
--arg sha "${VERSION_SHA}" \
--arg message "${TITLE}" \
--arg branch "next-release" \
'{content: $content, sha: $sha, message: $message, branch: $branch}')" \
"${API_URL}/contents/.version"
else
echo "Creating .version on next-release branch..."
curl -sf --retry 3 --retry-delay 2 --retry-connrefused -X POST \
-H "Authorization: token ${TOKEN}" \
-H "Content-Type: application/json" \
--data "$(jq -n \
--arg content "${VERSION_CONTENT}" \
--arg message "${TITLE}" \
--arg branch "next-release" \
'{content: $content, message: $message, branch: $branch}')" \
"${API_URL}/contents/.version"
fi
echo "Creating new PR..."
echo "Waiting for next-release branch to be ready..." echo "Waiting for next-release branch to be ready..."
for i in $(seq 1 10); do for i in $(seq 1 10); do
BRANCH_STATUS=$(curl -s --retry 3 --retry-delay 2 --retry-connrefused \ BRANCH_STATUS=$(curl -s --retry 3 --retry-delay 2 --retry-connrefused \
@@ -207,6 +177,53 @@ jobs:
sleep 3 sleep 3
done done
# Check if .version exists on base branch
VERSION_SHA=$(curl -sf --retry 3 --retry-delay 2 --retry-connrefused \
-H "Authorization: token ${TOKEN}" \
"${API_URL}/contents/.version?ref=${BASE_BRANCH}" | jq -r '.sha // empty')
if [ -n "${VERSION_SHA}" ]; then
echo "Updating .version on next-release branch..."
VERSION_PAYLOAD=$(jq -n \
--arg content "${VERSION_CONTENT}" \
--arg sha "${VERSION_SHA}" \
--arg message "${TITLE}" \
--arg branch "next-release" \
'{content: $content, sha: $sha, message: $message, branch: $branch}')
VERSION_METHOD=PUT
else
echo "Creating .version on next-release branch..."
VERSION_PAYLOAD=$(jq -n \
--arg content "${VERSION_CONTENT}" \
--arg message "${TITLE}" \
--arg branch "next-release" \
'{content: $content, message: $message, branch: $branch}')
VERSION_METHOD=POST
fi
for i in $(seq 1 5); do
RESPONSE=$(curl -s --retry 3 --retry-delay 2 --retry-connrefused \
-w "\n%{http_code}" -X "${VERSION_METHOD}" \
-H "Authorization: token ${TOKEN}" \
-H "Content-Type: application/json" \
--data "${VERSION_PAYLOAD}" \
"${API_URL}/contents/.version")
HTTP_CODE=$(echo "${RESPONSE}" | tail -1)
BODY=$(echo "${RESPONSE}" | sed '$d')
if [ "${HTTP_CODE}" -lt 400 ]; then
echo ".version write succeeded"
break
fi
if [ "${i}" = "5" ]; then
echo "Error writing .version after 5 attempts (HTTP ${HTTP_CODE}): ${BODY}"
exit 1
fi
echo ".version write attempt ${i}/5 failed (HTTP ${HTTP_CODE}): ${BODY} — retrying..."
sleep 3
done
echo "Creating new PR..."
PR_DATA=$(jq -n \ PR_DATA=$(jq -n \
--arg title "${TITLE}" \ --arg title "${TITLE}" \
--arg body "${DESCRIPTION}" \ --arg body "${DESCRIPTION}" \