fix(ci): Node下载增加npmmirror镜像源+gzip校验+二进制验证
Publish Mini Program Dev Version / publish (push) Failing after 11s
Publish Mini Program Dev Version / publish (push) Failing after 11s
1826/1827连续失败:hk runner下载musl版node时拿到错误产物 (glibc版node在musl环境报libstdc++.so.6缺失)。 加固:musl下载增加npmmirror镜像fallback;下载后校验gzip魔数; 解压后验证node可执行,失败则清除缓存避免污染后续run
This commit is contained in:
@@ -41,8 +41,11 @@ jobs:
|
||||
# 探测 libc:Alpine(musl) 用 unofficial musl 构建,其余用官方 glibc 构建(tar.gz,busybox tar 不支持 xz)
|
||||
if ldd --version 2>&1 | grep -qi musl || [ ! -e /lib/x86_64-linux-gnu/ld-linux-x86-64.so.2 ]; then
|
||||
NODE_DIST="node-v22.12.0-linux-x64-musl"
|
||||
# 多源下载:unofficial-builds 海外源 + npmmirror 镜像(busybox wget 自动跟随 302)
|
||||
wget -q --tries=2 --timeout=120 -O "$TOOLDIR/node.tgz" \
|
||||
"https://unofficial-builds.nodejs.org/download/release/v22.12.0/$NODE_DIST.tar.gz"
|
||||
"https://unofficial-builds.nodejs.org/download/release/v22.12.0/$NODE_DIST.tar.gz" \
|
||||
|| wget -q --tries=2 --timeout=120 -O "$TOOLDIR/node.tgz" \
|
||||
"https://registry.npmmirror.com/-/binary/node-unofficial-builds/v22.12.0/$NODE_DIST.tar.gz"
|
||||
else
|
||||
NODE_DIST="node-v22.12.0-linux-x64"
|
||||
wget -q --tries=2 --timeout=120 -O "$TOOLDIR/node.tgz" \
|
||||
@@ -50,11 +53,19 @@ jobs:
|
||||
|| wget -q --tries=2 --timeout=120 -O "$TOOLDIR/node.tgz" \
|
||||
"https://mirrors.aliyun.com/nodejs-release/v22.12.0/$NODE_DIST.tar.gz"
|
||||
fi
|
||||
# 校验下载结果:文件存在且是 gzip 格式(防止半截下载/错误页残留污染缓存)
|
||||
test -s "$TOOLDIR/node.tgz"
|
||||
head -c 2 "$TOOLDIR/node.tgz" | od -An -tx1 | grep -q "1f 8b"
|
||||
tar -C "$TOOLDIR" -xzf "$TOOLDIR/node.tgz"
|
||||
mv "$TOOLDIR/$NODE_DIST" "$TOOLDIR/node"
|
||||
rm -f "$TOOLDIR/node.tgz"
|
||||
fi
|
||||
"$TOOLDIR/node/bin/node" --version
|
||||
# 验证二进制可执行,失败则清缓存并报错(避免坏缓存被后续 run 复用)
|
||||
if ! "$TOOLDIR/node/bin/node" --version; then
|
||||
echo "::error::Node 二进制无法执行,请检查下载源与 libc 匹配"
|
||||
rm -rf "$TOOLDIR"
|
||||
exit 1
|
||||
fi
|
||||
echo "PATH=$TOOLDIR/node/bin:$PATH" >> "$GITEA_ENV"
|
||||
|
||||
- name: Verify Node runtime
|
||||
|
||||
Reference in New Issue
Block a user