@@ -148,21 +148,25 @@ jobs:
148148 | jq -r --arg name "$1" '[.assets[] | select(.name == $name) | .id][0] // empty'
149149 }
150150
151- wait_for_asset_digest() {
152- local name="$1" expected="$2" expected_id="${3:-}"
153- local attempt asset_id digest
151+ # 下载资产回本地做 sha256 比对(不依赖 GitHub 异步计算的 digest 字段,消除时序抖动)
152+ wait_for_asset_bytes() {
153+ local name="$1" expected_hex="$2" expected_id="${3:-}"
154+ local attempt asset_id
154155 for attempt in {1..15}; do
155156 asset_id="$(asset_id_by_name "$name" 2>/dev/null || true)"
156157 if [ -n "$asset_id" ] && { [ -z "$expected_id" ] || [ "$asset_id" = "$expected_id" ]; }; then
157- digest="$(gh api "repos/$GITHUB_REPOSITORY/releases/assets/$asset_id" --jq '.digest // empty' 2>/dev/null || true)"
158- if [ "$digest" = "$expected" ]; then
158+ rm -f "$RUNNER_TEMP/asset-check.bin"
159+ gh api -H 'Accept: application/octet-stream' \
160+ "repos/$GITHUB_REPOSITORY/releases/assets/$asset_id" > "$RUNNER_TEMP/asset-check.bin" 2>/dev/null || true
161+ if [ -s "$RUNNER_TEMP/asset-check.bin" ] && \
162+ [ "$(sha256sum "$RUNNER_TEMP/asset-check.bin" | awk '{print $1}')" = "$expected_hex" ]; then
159163 printf '%s\n' "$asset_id"
160164 return 0
161165 fi
162166 fi
163167 sleep 2
164168 done
165- echo "::error::等待 Release 资产 $name 的摘要就绪超时 。" >&2
169+ echo "::error::等待 Release 资产 $name 下载校验超时 。" >&2
166170 return 1
167171 }
168172
@@ -235,10 +239,10 @@ jobs:
235239 fi
236240
237241 step gh release upload latest "$staged_zip" --repo "$GITHUB_REPOSITORY"
238- # GitHub 异步计算资产 digest,上传后留出沉降时间再轮询
242+ # 上传后短暂沉降,降低资产列表/下载端点的可见性延迟
239243 sleep 5
240- staged_id="$(wait_for_asset_digest "$staged_name" "sha256: $expected_digest")" || {
241- echo "::error::FAILED AT STEP: wait_for_asset_digest staged"
244+ staged_id="$(wait_for_asset_bytes "$staged_name" "$expected_digest")" || {
245+ echo "::error::FAILED AT STEP: wait_for_asset_bytes staged"
242246 exit 1
243247 }
244248
@@ -275,7 +279,7 @@ jobs:
275279 actual_tag="$(gh api "repos/$GITHUB_REPOSITORY/git/ref/tags/latest" --jq '.object.sha')"
276280 test "$actual_tag" = "$GITHUB_SHA"
277281
278- asset_id="$(wait_for_asset_digest "$FIXED_NAME" "sha256: $expected_digest" "$staged_id")"
282+ asset_id="$(wait_for_asset_bytes "$FIXED_NAME" "$expected_digest" "$staged_id")"
279283 test "$asset_id" = "$staged_id"
280284 gh api -H 'Accept: application/octet-stream' \
281285 "repos/$GITHUB_REPOSITORY/releases/assets/$asset_id" > "$RUNNER_TEMP/published.zip"
0 commit comments