# ========================================== # GitHub Actions Workflow: Continuous Integration # ========================================== # # 功能:持续集成测试和代码质量检查 # # 触发条件: # - Pull Request 创建或更新 # - 推送到 main 分支 # # 工作流程: # 1. 依赖安装和缓存 # 2. 运行测试套件 # 3. TypeScript 类型检查 # 4. ESLint 代码检查 # 5. 验证构建成功 # # 目的: # - 确保所有代码变更通过质量检查 # - 在合并前发现潜在问题 # - 保持代码库健康 # # ========================================== name: CI # 触发条件 on: push: branches: - main pull_request: branches: - main # 取消正在运行的相同工作流 concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true # 环境变量 env: NODE_VERSION: '20' jobs: # ========================================== # Job: 质量检查 # ========================================== quality-check: name: Quality Check runs-on: ubuntu-latest steps: # ------------------------------------------ # 步骤 1: 检出代码 # ------------------------------------------ - name: 📥 Checkout repository uses: actions/checkout@v4 # ------------------------------------------ # 步骤 2: 设置 pnpm # ------------------------------------------ - name: 📦 Setup pnpm uses: pnpm/action-setup@v4 with: version: 9.15.4 # ------------------------------------------ # 步骤 3: 设置 Node.js # ------------------------------------------ - name: 🔧 Setup Node.js uses: actions/setup-node@v4 with: node-version: ${{ env.NODE_VERSION }} cache: 'pnpm' # ------------------------------------------ # 步骤 4: 安装依赖 # ------------------------------------------ - name: 📦 Install dependencies run: pnpm install --frozen-lockfile # ------------------------------------------ # 步骤 5: 运行完整 CI 流程(质量检查 + 构建) # ------------------------------------------ - name: 🚀 Run CI pipeline run: pnpm run ci continue-on-error: false timeout-minutes: 5 # ------------------------------------------ # 步骤 5: 上传测试覆盖率报告 # ------------------------------------------ - name: 📊 Upload coverage reports uses: actions/upload-artifact@v4 if: always() with: name: coverage-report path: coverage/ retention-days: 7 # ------------------------------------------ # 步骤 6: 验证构建产物 # ------------------------------------------ - name: ✅ Verify build artifacts run: | echo "📋 Verifying build artifacts..." # 检查关键文件 required_files=( "dist/manifest.json" "dist/icons/icon16.png" "dist/icons/icon48.png" "dist/icons/icon128.png" ) all_ok=true for file in "${required_files[@]}"; do if test -f "$file"; then echo "✅ $file exists" else echo "❌ $file NOT FOUND" all_ok=false fi done if [ "$all_ok" = true ]; then echo "✅ Build verification passed" exit 0 else echo "❌ Build verification FAILED" exit 1 fi # ------------------------------------------ # 步骤 7: CI 总结 # ------------------------------------------ - name: 📣 CI Summary if: success() run: | echo "## ✅ CI Checks Completed" >> $GITHUB_STEP_SUMMARY echo "" >> $GITHUB_STEP_SUMMARY echo "All quality checks passed successfully:" >> $GITHUB_STEP_SUMMARY echo "- ✅ Code linting (ESLint)" >> $GITHUB_STEP_SUMMARY echo "- ✅ Type checking (TypeScript)" >> $GITHUB_STEP_SUMMARY echo "- ✅ Unit tests with coverage" >> $GITHUB_STEP_SUMMARY echo "- ✅ Build succeeded and verified" >> $GITHUB_STEP_SUMMARY echo "" >> $GITHUB_STEP_SUMMARY echo "### 📊 Performance" >> $GITHUB_STEP_SUMMARY echo "- Single command execution (no redundant checks)" >> $GITHUB_STEP_SUMMARY echo "- Optimized CI pipeline" >> $GITHUB_STEP_SUMMARY