From 4e59e4d5035d7f65fd2d6b5576666b3715d09e1c Mon Sep 17 00:00:00 2001 From: stephamie7 <1223696150@qq.com> Date: Wed, 12 Aug 2026 17:28:08 +0800 Subject: [PATCH 1/4] fix(release): handle published draft flag --- .github/workflows/sync-gitee.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/sync-gitee.yml b/.github/workflows/sync-gitee.yml index d9e7e942..7e1da5c1 100644 --- a/.github/workflows/sync-gitee.yml +++ b/.github/workflows/sync-gitee.yml @@ -75,7 +75,7 @@ jobs: > "${release_metadata}" resolved_tag="$(jq -er '.tag_name' "${release_metadata}")" - is_draft="$(jq -er '.draft' "${release_metadata}")" + is_draft="$(jq -r '.draft' "${release_metadata}")" published_at="$(jq -r '.published_at // empty' "${release_metadata}")" if [[ "${resolved_tag}" != "${TAG_NAME}" ]]; then From edcef181dcd966c174ed61fbf2618d521ba83941 Mon Sep 17 00:00:00 2001 From: stephamie7 <1223696150@qq.com> Date: Wed, 12 Aug 2026 17:37:29 +0800 Subject: [PATCH 2/4] fix(release): verify Gitee release after sync --- .github/workflows/sync-gitee.yml | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/.github/workflows/sync-gitee.yml b/.github/workflows/sync-gitee.yml index 7e1da5c1..c41d97ae 100644 --- a/.github/workflows/sync-gitee.yml +++ b/.github/workflows/sync-gitee.yml @@ -266,6 +266,21 @@ jobs: exit 1 fi + verification_status="$( + curl --silent --show-error --retry 3 \ + --output "${release_response}" \ + --write-out '%{http_code}' \ + --get \ + --data-urlencode "access_token=${GITEE_TOKEN}" \ + "${GITEE_API_BASE_URL}/repos/${GITEE_OWNER}/${GITEE_REPO}/releases/tags/${encoded_tag}" + )" + + if [[ "${verification_status}" != "200" ]]; then + message="$(jq -r '.message // "unknown Gitee API error"' "${release_response}" 2>/dev/null || true)" + echo "::error title=Gitee Release verification failed::HTTP ${verification_status}: ${message}" + exit 1 + fi + synced_tag="$(jq -er '.tag_name' "${release_response}")" synced_release_id="$(jq -er '.id' "${release_response}")" if [[ "${synced_tag}" != "${TAG_NAME}" ]]; then From 5e878e41588ba9600732e4652e1c182b28d2edf7 Mon Sep 17 00:00:00 2001 From: stephamie7 <1223696150@qq.com> Date: Wed, 12 Aug 2026 17:39:31 +0800 Subject: [PATCH 3/4] fix(release): report Gitee API request failures --- .github/workflows/sync-gitee.yml | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/.github/workflows/sync-gitee.yml b/.github/workflows/sync-gitee.yml index c41d97ae..b089b029 100644 --- a/.github/workflows/sync-gitee.yml +++ b/.github/workflows/sync-gitee.yml @@ -218,14 +218,18 @@ jobs: encoded_tag="$(jq -rn --arg value "${TAG_NAME}" '$value | @uri')" release_lookup="${RUNNER_TEMP}/gitee-release-lookup.json" release_response="${RUNNER_TEMP}/gitee-release-response.json" - lookup_status="$( + if ! lookup_status="$( curl --silent --show-error --retry 3 \ --output "${release_lookup}" \ --write-out '%{http_code}' \ --get \ --data-urlencode "access_token=${GITEE_TOKEN}" \ "${GITEE_API_BASE_URL}/repos/${GITEE_OWNER}/${GITEE_REPO}/releases/tags/${encoded_tag}" - )" + )"; then + echo "::error title=Gitee Release lookup request failed::Could not query ${TAG_NAME} after retries." + exit 1 + fi + echo "Gitee Release lookup returned HTTP ${lookup_status}." common_fields=( --data-urlencode "access_token=${GITEE_TOKEN}" @@ -251,14 +255,18 @@ jobs: exit 1 fi - sync_status="$( + if ! sync_status="$( curl --silent --show-error --retry 3 \ --output "${release_response}" \ --write-out '%{http_code}' \ --request "${sync_method}" \ "${common_fields[@]}" \ "${sync_url}" - )" + )"; then + echo "::error title=Gitee Release sync request failed::Release ${sync_method} failed after retries." + exit 1 + fi + echo "Gitee Release ${sync_method} returned HTTP ${sync_status}." if [[ ! "${sync_status}" =~ ^2[0-9][0-9]$ ]]; then message="$(jq -r '.message // "unknown Gitee API error"' "${release_response}" 2>/dev/null || true)" @@ -266,14 +274,18 @@ jobs: exit 1 fi - verification_status="$( + if ! verification_status="$( curl --silent --show-error --retry 3 \ --output "${release_response}" \ --write-out '%{http_code}' \ --get \ --data-urlencode "access_token=${GITEE_TOKEN}" \ "${GITEE_API_BASE_URL}/repos/${GITEE_OWNER}/${GITEE_REPO}/releases/tags/${encoded_tag}" - )" + )"; then + echo "::error title=Gitee Release verification request failed::Could not verify ${TAG_NAME} after retries." + exit 1 + fi + echo "Gitee Release verification returned HTTP ${verification_status}." if [[ "${verification_status}" != "200" ]]; then message="$(jq -r '.message // "unknown Gitee API error"' "${release_response}" 2>/dev/null || true)" From 7fadadbaf1ae25fdb0247d31c9b8ca9f24591c04 Mon Sep 17 00:00:00 2001 From: stephamie7 <1223696150@qq.com> Date: Wed, 12 Aug 2026 17:41:35 +0800 Subject: [PATCH 4/4] fix(release): handle null Gitee lookup --- .github/workflows/sync-gitee.yml | 29 +++++++++++++++++++++-------- 1 file changed, 21 insertions(+), 8 deletions(-) diff --git a/.github/workflows/sync-gitee.yml b/.github/workflows/sync-gitee.yml index b089b029..9bcdc42f 100644 --- a/.github/workflows/sync-gitee.yml +++ b/.github/workflows/sync-gitee.yml @@ -239,22 +239,35 @@ jobs: --data-urlencode "prerelease=${prerelease}" ) + release_missing="false" if [[ "${lookup_status}" == "200" ]]; then - release_id="$(jq -er '.id' "${release_lookup}")" - sync_method="PATCH" - sync_url="${GITEE_API_BASE_URL}/repos/${GITEE_OWNER}/${GITEE_REPO}/releases/${release_id}" - echo "Gitee Release ${TAG_NAME} already exists; updating its metadata only." + release_id="$(jq -r '.id // empty' "${release_lookup}")" + if [[ -n "${release_id}" ]]; then + sync_method="PATCH" + sync_url="${GITEE_API_BASE_URL}/repos/${GITEE_OWNER}/${GITEE_REPO}/releases/${release_id}" + echo "Gitee Release ${TAG_NAME} already exists; updating its metadata only." + elif jq -e 'type == "null"' "${release_lookup}" > /dev/null; then + release_missing="true" + echo "Gitee returned HTTP 200 with null for missing Release ${TAG_NAME}." + else + echo "::error title=Unexpected Gitee Release lookup response::HTTP 200 response does not contain a Release ID." + exit 1 + fi elif [[ "${lookup_status}" == "404" ]]; then - sync_method="POST" - sync_url="${GITEE_API_BASE_URL}/repos/${GITEE_OWNER}/${GITEE_REPO}/releases" - common_fields+=(--data-urlencode "target_commitish=${VERIFIED_SHA}") - echo "Creating Gitee Release ${TAG_NAME} at verified commit ${VERIFIED_SHA}." + release_missing="true" else message="$(jq -r '.message // "unknown Gitee API error"' "${release_lookup}" 2>/dev/null || true)" echo "::error title=Gitee Release lookup failed::HTTP ${lookup_status}: ${message}" exit 1 fi + if [[ "${release_missing}" == "true" ]]; then + sync_method="POST" + sync_url="${GITEE_API_BASE_URL}/repos/${GITEE_OWNER}/${GITEE_REPO}/releases" + common_fields+=(--data-urlencode "target_commitish=${VERIFIED_SHA}") + echo "Creating Gitee Release ${TAG_NAME} at verified commit ${VERIFIED_SHA}." + fi + if ! sync_status="$( curl --silent --show-error --retry 3 \ --output "${release_response}" \