fix(ci): fetch 用 browser_download_url 下载(assets API 返回元数据非二进制)+ 大小校验
Design Source Checks / design-source (push) Has been cancelled
Design Source Checks / design-source (push) Has been cancelled
测试发现 Gitea /releases/{id}/assets/{id} 端点返回附件元数据 JSON(260B)而非二进制。
改用 browser_download_url 直链下载,并加 <1MB 拒绝发版的完整性校验。
端到端验证:winstage-v9.9.9 → 拉到完整 25M PE32 安装器;版本不匹配硬失败。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01P9G7E3wmAYL9KeYCVZVsqu
This commit is contained in:
@@ -32,17 +32,22 @@ MSG
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 找到同名资产 id 并下载(版本已由 STAGE_TAG 精确锁定)。JSON 经 stdin 传入避免转义问题。
|
||||
aid=$(printf '%s' "$info" | python3 -c "import sys,json; print(next((a['id'] for a in json.load(sys.stdin).get('assets',[]) if a['name']=='${NAME}'), ''))")
|
||||
rid=$(printf '%s' "$info" | python3 -c "import sys,json; print(json.load(sys.stdin)['id'])")
|
||||
# 取同名资产的 browser_download_url(版本已由 STAGE_TAG 精确锁定)。JSON 经 stdin 传入避免转义。
|
||||
# 注意:API 的 /assets/{id} 端点返回的是**元数据 JSON**(非二进制),必须用 browser_download_url。
|
||||
dl=$(printf '%s' "$info" | python3 -c "import sys,json; print(next((a['browser_download_url'] for a in json.load(sys.stdin).get('assets',[]) if a['name']=='${NAME}'), ''))")
|
||||
|
||||
if [ -z "$aid" ]; then
|
||||
if [ -z "$dl" ]; then
|
||||
echo "ERROR: ${STAGE_TAG} 存在但缺少 ${NAME} 资产(GitHub 构建可能失败)。" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "==> fetch-windows-staged: 下载 asset id=${aid} → dist/${NAME}"
|
||||
curl -kfsS -H "Authorization: token ${FORGEJO_TOKEN}" \
|
||||
"${base}/releases/${rid}/assets/${aid}" -o "dist/${NAME}"
|
||||
echo "==> fetch-windows-staged: 下载 ${dl} → dist/${NAME}"
|
||||
curl -kfsSL -H "Authorization: token ${FORGEJO_TOKEN}" "$dl" -o "dist/${NAME}"
|
||||
ls -lh "dist/${NAME}"
|
||||
# 完整性校验:安装器至少应有 1MB,防重定向页/截断被当成有效包发出去。
|
||||
sz=$(wc -c < "dist/${NAME}")
|
||||
if [ "$sz" -lt 1000000 ]; then
|
||||
echo "ERROR: 下载的 ${NAME} 仅 ${sz} 字节,疑似重定向页/损坏,拒绝发版。" >&2
|
||||
exit 1
|
||||
fi
|
||||
echo "==> fetch-windows-staged: done(版本 ${VER} 匹配)"
|
||||
|
||||
Reference in New Issue
Block a user