name: CI on: push: branches: [ main, master, develop ] pull_request: branches: [ main, master, develop ] env: NODE_MIRROR: 'https://npmmirror.com/mirrors/node' jobs: build: runs-on: ubuntu-latest strategy: matrix: node-version: [18.x, 20.x] steps: - name: Checkout code uses: actions/checkout@v4 - name: Setup Node.js ${{ matrix.node-version }} uses: actions/setup-node@v4 with: node-version: ${{ matrix.node-version }} cache: 'npm' registry-url: 'https://registry.npmmirror.com' env: NODE_MIRROR: 'https://npmmirror.com/mirrors/node' - name: Install dependencies run: npm ci env: NODE_REGISTRY: 'https://registry.npmmirror.com' - name: Build run: npm run build - name: Upload build artifacts uses: actions/upload-artifact@v3 with: name: dist-${{ matrix.node-version }} path: dist/ retention-days: 7 lint: runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v4 - name: Setup Node.js uses: actions/setup-node@v4 with: node-version: '20.x' cache: 'npm' registry-url: 'https://registry.npmmirror.com' env: NODE_MIRROR: 'https://npmmirror.com/mirrors/node' - name: Install dependencies run: npm ci env: NODE_REGISTRY: 'https://registry.npmmirror.com' - name: Run ESLint run: npm run lint continue-on-error: true - name: TypeScript type check run: npx tsc --noEmit test: runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v4 - name: Setup Node.js uses: actions/setup-node@v4 with: node-version: '20.x' cache: 'npm' registry-url: 'https://registry.npmmirror.com' env: NODE_MIRROR: 'https://npmmirror.com/mirrors/node' - name: Install dependencies run: npm ci env: NODE_REGISTRY: 'https://registry.npmmirror.com' - name: Run tests run: npm run test continue-on-error: true deploy-preview: needs: [build] runs-on: ubuntu-latest if: github.event_name == 'pull_request' steps: - name: Checkout code uses: actions/checkout@v4 - name: Download build artifacts uses: actions/download-artifact@v3 with: name: dist-20.x path: dist/ - name: Deploy to preview environment run: echo "Preview deployment would happen here" # 可以添加实际的部署步骤,例如部署到 Vercel、Netlify 等 security: runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v4 - name: Setup Node.js uses: actions/setup-node@v4 with: node-version: '20.x' registry-url: 'https://registry.npmmirror.com' env: NODE_MIRROR: 'https://npmmirror.com/mirrors/node' - name: Run npm audit run: npm audit --audit-level=moderate continue-on-error: true - name: Run Snyk security scan uses: snyk/actions/node@master continue-on-error: true env: SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }}