[refactor] Updating project to introduce new CIs #3
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # ============================================================================= | |
| # CI Workflow - PR 检查 | |
| # 触发条件: Pull Request 和 push 到 main 分支 | |
| # 功能: | |
| # 1. 代码格式检查 (ruff) | |
| # 2. 类型检查 (mypy) | |
| # 3. 运行测试 (pytest) | |
| # 安全模型: 本工作流不需要写权限,可安全运行 fork PR 代码 | |
| # ============================================================================= | |
| name: CI | |
| on: | |
| pull_request: | |
| types: [opened, synchronize, reopened] | |
| push: | |
| branches: [main] | |
| permissions: | |
| contents: read # 只需要读权限 | |
| jobs: | |
| # =========================================================================== | |
| # 代码质量检查 | |
| # =========================================================================== | |
| lint: | |
| name: Lint & Format Check | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v4 | |
| - name: Set up Python | |
| uses: actions/setup-python@v5 | |
| with: | |
| python-version: "3.8" | |
| - name: Install dependencies | |
| run: | | |
| python -m pip install --upgrade pip | |
| pip install ruff | |
| - name: Check code formatting | |
| run: ruff format --check src/ tests/ | |
| - name: Run linter | |
| run: ruff check src/ tests/ | |
| # =========================================================================== | |
| # 类型检查 | |
| # =========================================================================== | |
| type-check: | |
| name: Type Check | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v4 | |
| - name: Set up Python | |
| uses: actions/setup-python@v5 | |
| with: | |
| python-version: "3.8" | |
| - name: Install dependencies | |
| run: | | |
| python -m pip install --upgrade pip | |
| pip install -e ".[dev]" | |
| - name: Run mypy | |
| run: mypy src/ | |
| # =========================================================================== | |
| # 测试 | |
| # =========================================================================== | |
| test: | |
| name: Test (Python ${{ matrix.python-version }}) | |
| runs-on: ubuntu-latest | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| python-version: ["3.8", "3.9", "3.10", "3.11", "3.12"] | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v4 | |
| - name: Set up Python ${{ matrix.python-version }} | |
| uses: actions/setup-python@v5 | |
| with: | |
| python-version: ${{ matrix.python-version }} | |
| - name: Install dependencies | |
| run: | | |
| python -m pip install --upgrade pip | |
| pip install -e ".[dev]" | |
| - name: Run tests with pytest | |
| run: | | |
| pytest --junitxml=pytest-report.xml --cov=deep_solutions --cov-report=xml --cov-report=term-missing | |
| - name: Upload test results | |
| uses: actions/upload-artifact@v4 | |
| if: always() | |
| with: | |
| name: pytest-results-${{ matrix.python-version }}-${{ github.run_id }} | |
| path: pytest-report.xml | |
| retention-days: 1 | |
| - name: Upload coverage report | |
| uses: actions/upload-artifact@v4 | |
| if: always() | |
| with: | |
| name: coverage-${{ matrix.python-version }}-${{ github.run_id }} | |
| path: coverage.xml | |
| retention-days: 1 | |
| # =========================================================================== | |
| # 构建检查 | |
| # =========================================================================== | |
| build: | |
| name: Build Check | |
| runs-on: ubuntu-latest | |
| needs: [lint, type-check, test] | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 0 # setuptools-scm 需要完整的 git 历史 | |
| - name: Set up Python | |
| uses: actions/setup-python@v5 | |
| with: | |
| python-version: "3.10" | |
| - name: Install build tools | |
| run: | | |
| python -m pip install --upgrade pip | |
| pip install build twine | |
| - name: Build package | |
| run: python -m build | |
| - name: Check package | |
| run: twine check dist/* | |
| - name: Upload build artifacts | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: dist | |
| path: dist/ |