fix(ci): use unified build script with bun
Some checks failed
site-dist-deploy / build-and-deploy (push) Failing after 1m59s

This commit is contained in:
shanshanzhong 2026-01-04 03:08:42 -08:00
parent ae9f9063a9
commit 8a0359fd7e

View File

@ -50,67 +50,41 @@ ensure_tools() {
} }
# ---------------------------------------------------------------- # ----------------------------------------------------------------
# 2. Node.js 独立环境安装 (Binary Mode) # 2. 环境安装 (System Node.js - Most Reliable on Alpine)
# ---------------------------------------------------------------- # ----------------------------------------------------------------
install_node() { install_env() {
echo ">>> [Node] Setting up Node.js v${NODE_VERSION}..." echo ">>> [Env] Setting up System Node.js environment..."
# 如果已经有可用的 node 环境且版本匹配,则跳过(可选,为了稳健这里强制使用独立环境) # 尝试使用系统包管理器安装 Node.js 和 npm
# export PATH="$PWD/node_env/bin:$PATH" if command -v apk &> /dev/null; then
echo " Detected Alpine Linux. Installing nodejs and npm via apk..."
# 检测架构 apk add --no-cache nodejs npm
local arch=$(uname -m) elif command -v apt-get &> /dev/null; then
local node_arch="" echo " Detected Debian/Ubuntu. Installing nodejs and npm via apt..."
case "$arch" in apt-get update && apt-get install -y nodejs npm
x86_64) node_arch="x64" ;; elif command -v yum &> /dev/null; then
aarch64) node_arch="arm64" ;; yum install -y nodejs npm
*) echo "!!! Error: Unsupported architecture: $arch"; exit 1 ;; elif command -v dnf &> /dev/null; then
esac dnf install -y nodejs npm
elif command -v zypper &> /dev/null; then
# 检测 Libc (glibc vs musl) zypper install -y nodejs npm
local libc_type="glibc" else
if ldd --version 2>&1 | grep -q "musl"; then echo "!!! Warning: No package manager found. Checking if Node is pre-installed..."
libc_type="musl"
elif [ -f /etc/alpine-release ]; then
libc_type="musl"
fi
echo " Detected System: Linux ${node_arch} (${libc_type})"
# 构建下载 URL
# Official URL pattern: https://nodejs.org/dist/vX.Y.Z/node-vX.Y.Z-linux-ARCH[-musl].tar.xz
local url_suffix=""
if [ "$libc_type" == "musl" ]; then
url_suffix="-musl"
fi fi
local tar_name="node-v${NODE_VERSION}-linux-${node_arch}${url_suffix}.tar.xz" # 验证安装
local download_url="https://nodejs.org/dist/v${NODE_VERSION}/${tar_name}" if ! command -v node &> /dev/null; then
echo "!!! Error: Node.js not found and could not be installed."
echo " Downloading: ${download_url}"
mkdir -p node_env
# 下载并解压
if ! curl -fSL "$download_url" -o "$tar_name"; then
echo "!!! Error: Failed to download Node.js binary."
echo " Please check if version v${NODE_VERSION} supports ${node_arch}-${libc_type}."
exit 1 exit 1
fi fi
echo " Extracting..." if ! command -v npm &> /dev/null; then
tar -xJf "$tar_name" -C node_env --strip-components=1 echo "!!! Error: npm not found and could not be installed."
rm "$tar_name"
# 设置环境变量
export PATH="$PWD/node_env/bin:$PATH"
if ! command -v node &> /dev/null; then
echo "!!! Error: Node.js installation failed. 'node' command not found."
exit 1 exit 1
fi fi
echo " Node version: $(node -v)" echo " Node version: $(node -v)"
echo " Npm version: $(npm -v)" echo " npm version: $(npm -v)"
} }
# ---------------------------------------------------------------- # ----------------------------------------------------------------
@ -119,25 +93,32 @@ install_node() {
build_project() { build_project() {
echo ">>> [Build] Starting project build..." echo ">>> [Build] Starting project build..."
# 注入环境变量 (从 CI 环境传递) # 注入环境变量
if [ -n "$VITE_APP_BASE_URL" ]; then if [ -n "$VITE_APP_BASE_URL" ]; then
echo " Setting VITE_APP_BASE_URL=${VITE_APP_BASE_URL}" echo " Setting VITE_APP_BASE_URL=${VITE_APP_BASE_URL}"
echo "VITE_APP_BASE_URL=${VITE_APP_BASE_URL}" > .env.prod # 兼容 package.json 中的 mode: pord (Typo in original project)
echo "VITE_APP_BASE_URL=${VITE_APP_BASE_URL}" > .env.pord
# 同时写入 .env 以防万一
echo "VITE_APP_BASE_URL=${VITE_APP_BASE_URL}" >> .env
fi fi
echo " Installing dependencies..." echo " Installing dependencies..."
npm ci --quiet # 使用 npm install 而不是 npm ci以避免因 lockfile 版本不匹配或 engines 检查导致的失败
npm install --no-audit --progress=false
echo " Building..." echo " Building..."
# 使用 package.json 中定义的 build:prod 命令
npm run build:prod npm run build:prod
echo ">>> [Package] Compressing artifacts..." echo ">>> [Package] Compressing artifacts..."
if [ ! -d "dist" ]; then if [ ! -d "dist" ]; then
echo "!!! Error: 'dist' directory not found after build." echo "!!! Error: 'dist' directory not found after build."
# 列出当前目录以便调试
ls -la
exit 1 exit 1
fi fi
# 直接打包 dist 目录下的内容,解压时直接释放文件 # 直接打包 dist 目录下的内容
tar -C dist -czf "$DIST_FILE" . tar -C dist -czf "$DIST_FILE" .
echo " Success! Artifact created: $DIST_FILE" echo " Success! Artifact created: $DIST_FILE"
@ -148,5 +129,5 @@ build_project() {
# Main Execution Flow # Main Execution Flow
# ========================================== # ==========================================
ensure_tools ensure_tools
install_node install_env
build_project build_project