diff --git a/.gitea/workflows/miniapp-preview.yml b/.gitea/workflows/miniapp-preview.yml index b8556bc..5ea2c00 100644 --- a/.gitea/workflows/miniapp-preview.yml +++ b/.gitea/workflows/miniapp-preview.yml @@ -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