From 81ade84a77c2bfb292babb830b141338b104777c Mon Sep 17 00:00:00 2001 From: cc <98377878+hicccc77@users.noreply.github.com> Date: Sun, 26 Apr 2026 11:12:33 +0800 Subject: [PATCH] fix actions fixed prerelease sync --- .github/scripts/release-utils.sh | 29 ++++++++++++++++++++-- .github/workflows/dev-daily-fixed.yml | 2 +- .github/workflows/preview-nightly-main.yml | 2 +- 3 files changed, 29 insertions(+), 4 deletions(-) diff --git a/.github/scripts/release-utils.sh b/.github/scripts/release-utils.sh index 1ebfc5e..390b56a 100644 --- a/.github/scripts/release-utils.sh +++ b/.github/scripts/release-utils.sh @@ -58,12 +58,26 @@ wait_for_release_id() { local i local release_id + local release_api_url for ((i = 1; i <= attempts; i++)); do release_id="$(gh api "repos/$repo/releases/tags/$tag" --jq '.id' 2>/dev/null || true)" if [[ "$release_id" =~ ^[0-9]+$ ]]; then echo "$release_id" return 0 fi + + release_id="$(gh release view "$tag" --repo "$repo" --json databaseId --jq '.databaseId // empty' 2>/dev/null || true)" + if [[ "$release_id" =~ ^[0-9]+$ ]]; then + echo "$release_id" + return 0 + fi + + release_api_url="$(gh release view "$tag" --repo "$repo" --json apiUrl --jq '.apiUrl // empty' 2>/dev/null || true)" + if [[ "$release_api_url" =~ /releases/([0-9]+)$ ]]; then + echo "${BASH_REMATCH[1]}" + return 0 + fi + if [ "$i" -lt "$attempts" ]; then echo "Release id for tag '$tag' is not ready yet (attempt $i/$attempts), retrying in ${delay_seconds}s..." >&2 sleep "$delay_seconds" @@ -71,6 +85,7 @@ wait_for_release_id() { done echo "Unable to fetch release id for tag '$tag' after $attempts attempts." >&2 + gh release view "$tag" --repo "$repo" --json databaseId,id,isDraft,isPrerelease,url 2>/dev/null || true gh api "repos/$repo/releases/tags/$tag" --jq '{draft: .draft, prerelease: .prerelease, url: .html_url}' 2>/dev/null || true return 1 } @@ -87,9 +102,10 @@ settle_release_state() { local draft_state local prerelease_state for ((i = 1; i <= attempts; i++)); do + gh release edit "$tag" --repo "$repo" --draft=false --prerelease >/dev/null 2>&1 || true gh api --method PATCH "repos/$repo/releases/$release_id" -F draft=false -F prerelease=true >/dev/null 2>&1 || true - draft_state="$(gh api "$endpoint" --jq '.draft' 2>/dev/null || echo true)" - prerelease_state="$(gh api "$endpoint" --jq '.prerelease' 2>/dev/null || echo false)" + draft_state="$(gh api "$endpoint" --jq '.draft' 2>/dev/null || gh release view "$tag" --repo "$repo" --json isDraft --jq '.isDraft' 2>/dev/null || echo true)" + prerelease_state="$(gh api "$endpoint" --jq '.prerelease' 2>/dev/null || gh release view "$tag" --repo "$repo" --json isPrerelease --jq '.isPrerelease' 2>/dev/null || echo false)" if [ "$draft_state" = "false" ] && [ "$prerelease_state" = "true" ]; then return 0 fi @@ -100,10 +116,19 @@ settle_release_state() { done echo "Failed to settle release state for tag '$tag'." >&2 + gh release view "$tag" --repo "$repo" --json isDraft,isPrerelease,url 2>/dev/null || true gh api "$endpoint" --jq '{draft: .draft, prerelease: .prerelease, url: .html_url}' 2>/dev/null || true return 1 } +print_release_state() { + local repo="$1" + local tag="$2" + + gh api "repos/$repo/releases/tags/$tag" --jq '{isDraft: .draft, isPrerelease: .prerelease, url: .html_url}' 2>/dev/null \ + || gh release view "$tag" --repo "$repo" --json isDraft,isPrerelease,url --jq '{isDraft: .isDraft, isPrerelease: .isPrerelease, url: .url}' +} + wait_for_release_absent() { local repo="$1" local tag="$2" diff --git a/.github/workflows/dev-daily-fixed.yml b/.github/workflows/dev-daily-fixed.yml index bf65d95..67243ca 100644 --- a/.github/workflows/dev-daily-fixed.yml +++ b/.github/workflows/dev-daily-fixed.yml @@ -386,4 +386,4 @@ jobs: source .github/scripts/release-utils.sh RELEASE_REST_ID="$(wait_for_release_id "$REPO" "$TAG" 12 2)" settle_release_state "$REPO" "$RELEASE_REST_ID" "$TAG" 12 2 - gh api "repos/$REPO/releases/tags/$TAG" --jq '{isDraft: .draft, isPrerelease: .prerelease, url: .html_url}' + print_release_state "$REPO" "$TAG" diff --git a/.github/workflows/preview-nightly-main.yml b/.github/workflows/preview-nightly-main.yml index 01f7ddb..13bc270 100644 --- a/.github/workflows/preview-nightly-main.yml +++ b/.github/workflows/preview-nightly-main.yml @@ -429,4 +429,4 @@ jobs: source .github/scripts/release-utils.sh RELEASE_REST_ID="$(wait_for_release_id "$REPO" "$TAG" 12 2)" settle_release_state "$REPO" "$RELEASE_REST_ID" "$TAG" 12 2 - gh api "repos/$REPO/releases/tags/$TAG" --jq '{isDraft: .draft, isPrerelease: .prerelease, url: .html_url}' + print_release_state "$REPO" "$TAG"