diff --git a/.gitea/workflows/ci.yml b/.gitea/workflows/ci.yml new file mode 100644 index 0000000..8530b36 --- /dev/null +++ b/.gitea/workflows/ci.yml @@ -0,0 +1,84 @@ +name: CI + +on: + push: + branches: [dev, release, master] + pull_request: + branches: [dev, release, master] + +jobs: + test: + runs-on: ubuntu-latest + name: 测试 + + steps: + - name: 准备 | 签出代码 + uses: actions/checkout@v4 + + - name: 准备 | 配置开发环境 + uses: actions/setup-node@v4 + with: + node-version: "20" + + - name: 准备 | 获取包管理器版本 + run: | + PNPM_VERSION=$(grep -o '"packageManager": "[^"]*"' package.json | cut -d'@' -f2 | tr -d '"') + echo "PNPM_VERSION=$PNPM_VERSION" >> $GITHUB_ENV + echo "✅ 包管理器版本为 pnpm@$PNPM_VERSION" + + - name: 准备 | 配置全局缓存 + uses: actions/cache@v3 + with: + path: ~/.npm + key: ${{ runner.os }}-npm-pnpm-${{ env.PNPM_VERSION }} + restore-keys: | + ${{ runner.os }}-npm-pnpm- + + - name: 准备 | 安装包管理器 + run: | + npm install -g pnpm + pnpm --version + echo "✅ 包管理器安装成功" + + - name: 准备 | 获取项目依赖哈希 + id: files-hash + uses: ./ + with: + files: "**/pnpm-lock.yaml" + + - name: 准备 | 配置依赖缓存 + uses: actions/cache@v3 + with: + path: ~/.pnpm-store + key: ${{ runner.os }}-pnpm-store-${{ steps.files-hash.outputs.hash }} + restore-keys: | + ${{ runner.os }}-pnpm-store- + + - name: 准备 | 安装依赖 + run: | + pnpm install --frozen-lockfile + echo "✅ 依赖安装完成" + + - name: 测试 | 执行语法检查 + run: | + echo "🔍 执行 JavaScript 语法检查..." + node -c src/index.js + echo "✅ 语法检查通过" + + - name: 测试 | 执行 Lint 检查 + run: | + echo "🔍 执行 Lint 检查..." + pnpm run lint + echo "✅ Lint 检查通过" + + - name: 测试 | 执行格式化检查 + run: | + echo "🔍 执行格式化检查..." + pnpm run format:check + echo "✅ 格式化检查通过" + + - name: 测试 | 执行测试 + run: | + echo "🧪 执行测试..." + pnpm run test + echo "✅ 测试通过" diff --git a/.nvmrc b/.nvmrc new file mode 100644 index 0000000..0946473 --- /dev/null +++ b/.nvmrc @@ -0,0 +1 @@ +20.19 diff --git a/package.json b/package.json index 5e43459..993c204 100644 --- a/package.json +++ b/package.json @@ -28,6 +28,7 @@ "engines": { "node": ">=20.0.0" }, + "packageManager": "pnpm@10.18.3", "devDependencies": { "@eslint/js": "^9.37.0", "@vitest/coverage-v8": "^3.2.4",