github: releases: Add step "Wait for GitHub API consistency"

This commit is contained in:
remittor
2026-01-12 22:51:52 +03:00
parent 5711c1f2d4
commit 5b331132a1

View File

@@ -5,7 +5,7 @@ on:
workflows: ["build"] workflows: ["build"]
types: [completed] types: [completed]
release: release:
types: [published, created, edited] types: [published, unpublished, created, edited, deleted, prereleased]
permissions: permissions:
contents: write contents: write
@@ -25,6 +25,62 @@ jobs:
ref: gh-pages ref: gh-pages
continue-on-error: true continue-on-error: true
- name: Wait for GitHub API consistency (release events)
if: github.event_name == 'release'
env:
REPO: ${{ github.repository }}
ACTION: ${{ github.event.action }}
TARGET_ID: ${{ github.event.release.id }}
TARGET_NAME: ${{ github.event.release.name }}
run: |
set -e
echo "Release action: $ACTION"
echo "Target release id: $TARGET_ID"
max=10
delay=6
check() {
curl -s https://api.github.com/repos/$REPO/releases
}
for iter in $(seq 1 $max); do
case "$ACTION" in
created)
echo "Release created (draft). No API wait needed."
exit 0
;;
published|prereleased)
if check | jq "any(.[]; .id == $TARGET_ID)"; then
echo "Release appeared in API"
exit 0
fi
;;
deleted)
if ! check | jq "any(.[]; .id == $TARGET_ID)"; then
echo "Release disappeared from API"
exit 0
fi
;;
unpublished)
if check | jq "any(.[]; .id == $TARGET_ID and .draft == true)"; then
echo "Release is now draft"
exit 0
fi
;;
edited)
if check | jq "any(.[]; .id == $TARGET_ID and .name == \"$TARGET_NAME\")"; then
echo "Release updated"
exit 0
fi
;;
*)
echo "No consistency wait needed for action: $ACTION"
exit 0
;;
esac
echo "Retry $iter/$max..."
sleep "$delay"
done
echo "WARNING: API consistency timeout for action $ACTION"
- name: Save FULL releases.json - name: Save FULL releases.json
env: env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}