From c5062278a37f858b32d5efd34bc69eabac207e26 Mon Sep 17 00:00:00 2001 From: shanshanzhong Date: Sun, 4 Jan 2026 01:08:10 -0800 Subject: [PATCH] =?UTF-8?q?ci(docker):=20=E4=BC=98=E5=8C=96=E6=9E=84?= =?UTF-8?q?=E5=BB=BA=E6=B5=81=E7=A8=8B=EF=BC=8C=E4=BD=BF=E7=94=A8=E5=AE=98?= =?UTF-8?q?=E6=96=B9Node=E4=BA=8C=E8=BF=9B=E5=88=B6=E6=9B=BF=E4=BB=A3nvm?= =?UTF-8?q?=E5=AE=89=E8=A3=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 重构Docker工作流中的Node安装步骤,将nvm安装方式替换为直接下载官方二进制包。 新增通用包安装函数支持多种包管理器,并确保构建环境具备必要工具。 --- .gitea/workflows/docker.yml | 51 ++++++++++++++++++++++++------------- 1 file changed, 34 insertions(+), 17 deletions(-) diff --git a/.gitea/workflows/docker.yml b/.gitea/workflows/docker.yml index 3cbfc8f..1372bd3 100644 --- a/.gitea/workflows/docker.yml +++ b/.gitea/workflows/docker.yml @@ -40,32 +40,49 @@ jobs: - name: Build dist in Node container run: | set -e - # ensure curl available - if ! command -v curl >/dev/null 2>&1; then + # ensure tools + install_pkgs() { + PKGS="$*" if command -v apt-get >/dev/null 2>&1; then apt-get update -y - apt-get install -y curl ca-certificates + apt-get install -y $PKGS elif command -v yum >/dev/null 2>&1; then - yum install -y curl ca-certificates + yum install -y $PKGS elif command -v dnf >/dev/null 2>&1; then - dnf install -y curl ca-certificates + dnf install -y $PKGS elif command -v apk >/dev/null 2>&1; then - apk add --no-cache curl ca-certificates + apk add --no-cache $PKGS elif command -v zypper >/dev/null 2>&1; then - zypper install -y curl ca-certificates + zypper install -y $PKGS else - echo "No known package manager found to install curl"; exit 1 + echo "No known package manager found to install: $PKGS"; exit 1 fi + } + if ! command -v curl >/dev/null 2>&1; then install_pkgs curl ca-certificates; fi + if ! command -v tar >/dev/null 2>&1; then install_pkgs tar; fi + # xz is needed to extract Node tar.xz + if ! command -v xz >/dev/null 2>&1 && ! command -v unxz >/dev/null 2>&1; then install_pkgs xz-utils || install_pkgs xz; fi + + # install Node by downloading official binary (avoid building from source) + if ! command -v node >/dev/null 2>&1; then + NODE_VER="v20.19.6" + ARCH="$(uname -m)" + case "$ARCH" in + x86_64) NODE_ARCH="linux-x64" ;; + aarch64) NODE_ARCH="linux-arm64" ;; + arm64) NODE_ARCH="linux-arm64" ;; + *) echo "Unsupported arch: $ARCH"; exit 1 ;; + esac + NODE_TARBALL="node-${NODE_VER}-${NODE_ARCH}.tar.xz" + URL="https://nodejs.org/dist/${NODE_VER}/${NODE_TARBALL}" + echo "Downloading Node from $URL" + curl -fsSL "$URL" -o "/tmp/${NODE_TARBALL}" + mkdir -p "$HOME/node" + tar -xJf "/tmp/${NODE_TARBALL}" -C "$HOME/node" + NODE_DIR="$HOME/node/node-${NODE_VER}-${NODE_ARCH}" + export PATH="$NODE_DIR/bin:$PATH" fi - export NVM_DIR="$HOME/.nvm" - if [ ! -d "$NVM_DIR" ]; then - curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash - fi - . "$NVM_DIR/nvm.sh" - nvm install 20 - nvm use 20 - node -v - npm -v + node -v && npm -v npm ci echo "VITE_APP_BASE_URL=${VITE_APP_BASE_URL}" > .env.pord npm run build:prod