Files
2026-07-13 12:35:20 +08:00

122 lines
2.8 KiB
YAML
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
name: CI Pipeline
# 触发条件:只在PR到main分支时运行CI
on:
pull_request:
branches: [ main ]
push:
branches: [ main ]
jobs:
# CI 阶段 - 完整的代码质量和测试检查
ci:
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, windows-latest, macos-latest]
steps:
- name: 检出代码
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: 启用 Corepack
run: corepack enable
- name: 安装 pnpm
uses: pnpm/action-setup@v4
with:
version: 10.30.3
- name: 设置 Node.js
uses: actions/setup-node@v4
with:
node-version-file: ".node-version"
cache: 'pnpm'
- name: 安装依赖
uses: nick-invision/retry@v3
with:
timeout_minutes: 5
max_attempts: 2
retry_on: error
command: pnpm install --frozen-lockfile
# 代码质量检查
- name: Nx Lint
run: pnpm run lint
# 构建(必须在类型检查之前,因为类型定义文件需要通过构建生成)
- name: Nx Build
uses: nick-invision/retry@v3
with:
timeout_minutes: 10
max_attempts: 2
retry_on: error
command: pnpm run build
- name: Nx Type Check
run: pnpm run typecheck
- name: Docs Type Check
working-directory: ./docs
run: npx tsc --noEmit
- name: 拼写检查 (根目录)
run: pnpm run spellcheck
- name: 代码重复率检查 (monorepo)
run: pnpm run check:cpd
# 测试(构建已在类型检查之前完成)
- name: Nx Test
uses: nick-invision/retry@v3
with:
timeout_minutes: 10
max_attempts: 2
retry_on: error
command: pnpm run test:coverage
# 上传覆盖率(仅 UbuntuNode 版本由 .nvmrc 决定)
- name: 上传覆盖率报告
uses: codecov/codecov-action@v4
if: matrix.os == 'ubuntu-latest'
with:
token: ${{ secrets.CODECOV_TOKEN }}
files: |
./coverage/lcov.info
flags: unittests
name: codecov-${{ matrix.os }}
fail_ci_if_error: true
verbose: true
# CLI 功能测试
- name: CLI 功能测试
run: |
echo "开始 CLI 功能测试..."
node dist/cli/index.js -v
node dist/cli/index.js --help
echo "✅ CLI 功能测试完成"
# 上传构建产物
- name: 上传覆盖率报告
uses: actions/upload-artifact@v4
if: always() && matrix.os == 'ubuntu-latest'
with:
name: coverage-report-${{ matrix.os }}
path: |
coverage/
retention-days: 30
- name: 上传构建产物
uses: actions/upload-artifact@v4
if: success()
with:
name: build-artifacts-${{ matrix.os }}
path: |
dist/
retention-days: 7