From bffb0ac11fbedfe9430d1ee0d4bcf872495f5784 Mon Sep 17 00:00:00 2001 From: Timi Date: Thu, 29 Jan 2026 01:34:54 +0800 Subject: [PATCH] add node runner --- gitea_runner_node/Dockerfile | 35 ++++++++ gitea_runner_node/README.md | 166 +++++++++++++++++++++++++++++++++++ 2 files changed, 201 insertions(+) create mode 100644 gitea_runner_node/Dockerfile create mode 100644 gitea_runner_node/README.md diff --git a/gitea_runner_node/Dockerfile b/gitea_runner_node/Dockerfile new file mode 100644 index 0000000..dafc11d --- /dev/null +++ b/gitea_runner_node/Dockerfile @@ -0,0 +1,35 @@ +# syntax=docker/dockerfile:1 +# Gitea Action Runner Node.js Image +# 基于 gitea_runner_base 添加多版本 Node.js 和包管理器 + +FROM timi/gitea_runner_base:latest + +LABEL maintainer="www.imyeyu.com" +LABEL description="Gitea Action Runner with Node.js 18/20/22 and multiple package managers" + +# Node.js 安装目录 +ENV NODE_BASE=/usr/local/node + +# 安装 Node.js 多版本环境和包管理器 +RUN npm install -g n \ + && mkdir -p ${NODE_BASE} \ + && n install 18 \ + && n install 20 \ + && n install 22 \ + && n use 20 \ + && npm install -g yarn pnpm \ + && cat <<'EOF' > /usr/local/bin/use-node \ +#!/bin/bash +case "$1" in + 18|20|22) + n use "$1" > /dev/null 2>&1 + export PATH="/usr/local/n/versions/node/$1/bin:${PATH}" + echo "Switched to Node.js $1: $(node -v)" + ;; + *) + echo "Usage: source use-node [18|20|22]" + return 1 + ;; +esac +EOF + && chmod +x /usr/local/bin/use-node diff --git a/gitea_runner_node/README.md b/gitea_runner_node/README.md new file mode 100644 index 0000000..cbab211 --- /dev/null +++ b/gitea_runner_node/README.md @@ -0,0 +1,166 @@ +# Gitea Runner Node.js + +Gitea Action Runner Node.js 构建环境,基于 `gitea_runner_base` 添加多版本 Node.js 和包管理器。 + +## 基础镜像 + +- `timi/gitea_runner_base:latest` + +## 包含环境 + +| 组件 | 版本 | +|------|------| +| Node.js | 18, 20, 22 (LTS) | +| npm | 最新 (随 Node.js) | +| yarn | 最新 | +| pnpm | 最新 | + +## Node.js 版本说明 + +| 版本 | 状态 | 说明 | +|------|------|------| +| Node.js 18 | LTS | Hydrogen (维护至 2025-04) | +| Node.js 20 | LTS | Iron (推荐使用,维护至 2026-04) | +| Node.js 22 | Current | 当前活跃版本 | + +默认使用 Node.js 20。 + +## 构建 + +```bash +# 先构建基础镜像 +./rebuild.sh gitea_runner_base + +# 再构建 Node.js 镜像 +./rebuild.sh gitea_runner_node +``` + +## 切换 Node.js 版本 + +### 方式一:使用切换脚本 + +```bash +source use-node 18 # 切换到 Node.js 18 +source use-node 20 # 切换到 Node.js 20 +source use-node 22 # 切换到 Node.js 22 +``` + +### 方式二:使用 n 命令 + +```bash +n use 18 # 切换到 Node.js 18 +n use 20 # 切换到 Node.js 20 +n use 22 # 切换到 Node.js 22 +``` + +## 包管理器选择 + +镜像内置三种包管理器,可按需选择: + +```bash +npm install # 使用 npm +yarn install # 使用 yarn +pnpm install # 使用 pnpm +``` + +## Gitea Action 示例 + +### 基础构建 + +```yaml +name: Node.js Build +on: [push] + +jobs: + build: + runs-on: ubuntu-latest + container: + image: timi/gitea_runner_node:latest + steps: + - uses: actions/checkout@v4 + + - name: Install dependencies + run: npm install + + - name: Build + run: npm run build + + - name: Test + run: npm test +``` + +### 多版本测试 + +```yaml +name: Multi-version Test +on: [push] + +jobs: + test: + runs-on: ubuntu-latest + container: + image: timi/gitea_runner_node:latest + strategy: + matrix: + node-version: [18, 20, 22] + steps: + - uses: actions/checkout@v4 + + - name: Use Node.js ${{ matrix.node-version }} + run: | + source use-node ${{ matrix.node-version }} + node -v + + - name: Install and test + run: | + npm install + npm test +``` + +### 使用不同包管理器 + +```yaml +name: Build with pnpm +on: [push] + +jobs: + build: + runs-on: ubuntu-latest + container: + image: timi/gitea_runner_node:latest + steps: + - uses: actions/checkout@v4 + + - name: Install dependencies with pnpm + run: pnpm install + + - name: Build + run: pnpm build +``` + +## 环境变量 + +| 变量 | 默认值 | +|------|--------| +| `NODE_BASE` | `/usr/local/node` | +| `PATH` | 包含当前 Node.js 版本的 bin 目录 | + +## 常见问题 + +### 如何查看已安装的 Node.js 版本? + +```bash +n ls +``` + +### 如何全局安装 npm 包? + +```bash +npm install -g +``` + +### pnpm 和 yarn 的区别? + +- **pnpm**: 使用硬链接节省磁盘空间,速度快,严格依赖管理 +- **yarn**: 速度快,离线缓存,workspaces 支持好 +- **npm**: Node.js 官方包管理器,兼容性最好