feat(docs) Imrpove docs structure and introduce contributor guidelines #42
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 Check | |
| # Trigger: Pull Request and push to main branch | |
| # Testing strategy: | |
| # - PR/push: Test only Python 3.8 (minimum version, fast feedback) | |
| # - main branch: Full matrix test Python 3.8-3.12 (complete regression) | |
| # Features: | |
| # 1. Code format check (ruff) | |
| # 2. Type check (mypy) | |
| # 3. Language check (no Chinese in source code) | |
| # 4. Run tests (pytest + tox) | |
| # Security: This workflow doesn't need write permission, safe for fork PRs | |
| # ============================================================================= | |
| name: CI | |
| on: | |
| pull_request: | |
| types: [opened, synchronize, reopened] | |
| push: | |
| branches: [main] | |
| # Auto-cancel old tasks on same branch | |
| concurrency: | |
| group: ${{ github.workflow }}-${{ github.ref }} | |
| cancel-in-progress: true | |
| permissions: | |
| contents: read # Read permission only | |
| jobs: | |
| # =========================================================================== | |
| # Code Quality Check | |
| # =========================================================================== | |
| lint: | |
| name: Lint & Format Check | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v6 | |
| - name: Set up Python | |
| uses: actions/setup-python@v6 | |
| with: | |
| python-version: "3.8" | |
| - name: Cache pip packages | |
| uses: actions/cache@v5 | |
| with: | |
| path: ~/.cache/pip | |
| key: pip-${{ runner.os }}-lint-${{ hashFiles('**/pyproject.toml') }} | |
| restore-keys: | | |
| pip-${{ runner.os }}-lint- | |
| pip-${{ runner.os }}- | |
| - 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/ | |
| # =========================================================================== | |
| # Language Check - No Chinese in source code | |
| # =========================================================================== | |
| language-check: | |
| name: Language Check | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v6 | |
| - name: Set up Python | |
| uses: actions/setup-python@v6 | |
| with: | |
| python-version: "3.8" | |
| - name: Run language check | |
| run: python scripts/check_language.py | |
| # =========================================================================== | |
| # Type Check | |
| # =========================================================================== | |
| type-check: | |
| name: Type Check | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v6 | |
| - name: Set up Python | |
| uses: actions/setup-python@v6 | |
| with: | |
| python-version: "3.8" | |
| - name: Cache pip packages | |
| uses: actions/cache@v5 | |
| with: | |
| path: ~/.cache/pip | |
| key: pip-${{ runner.os }}-type-${{ hashFiles('**/pyproject.toml') }} | |
| restore-keys: | | |
| pip-${{ runner.os }}-type- | |
| pip-${{ runner.os }}- | |
| - name: Install dependencies | |
| run: | | |
| python -m pip install --upgrade pip | |
| pip install -e ".[dev]" | |
| - name: Run mypy | |
| run: mypy src/ | |
| # =========================================================================== | |
| # Test - Differentiated Strategy | |
| # PR: Test only Python 3.8 (fast feedback) | |
| # main branch: Full matrix test Python 3.8-3.12 (complete regression) | |
| # =========================================================================== | |
| test: | |
| name: Test (Python ${{ matrix.python-version }}) | |
| runs-on: ubuntu-latest | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| # PR tests minimum version only, main branch tests full matrix | |
| python-version: ${{ github.event_name == 'push' && github.ref == 'refs/heads/main' && fromJSON('["3.8", "3.9", "3.10", "3.11", "3.12"]') || fromJSON('["3.8"]') }} | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v6 | |
| with: | |
| fetch-depth: 0 # setuptools-scm needs git history | |
| - name: Set up Python ${{ matrix.python-version }} | |
| uses: actions/setup-python@v6 | |
| with: | |
| python-version: ${{ matrix.python-version }} | |
| - name: Cache pip packages | |
| uses: actions/cache@v5 | |
| with: | |
| path: ~/.cache/pip | |
| key: pip-${{ runner.os }}-py${{ matrix.python-version }}-${{ hashFiles('**/pyproject.toml') }} | |
| restore-keys: | | |
| pip-${{ runner.os }}-py${{ matrix.python-version }}- | |
| pip-${{ runner.os }}- | |
| - 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@v6 | |
| if: always() | |
| with: | |
| name: pytest-results-${{ matrix.python-version }} | |
| path: pytest-report.xml | |
| retention-days: 7 | |
| # Upload coverage report for all Python versions | |
| - name: Upload coverage report | |
| uses: actions/upload-artifact@v6 | |
| if: always() | |
| with: | |
| name: coverage-${{ matrix.python-version }} | |
| path: coverage.xml | |
| retention-days: 7 | |
| # =========================================================================== | |
| # Build Check | |
| # =========================================================================== | |
| build: | |
| name: Build Check | |
| runs-on: ubuntu-latest | |
| needs: [lint, language-check, type-check, test] | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v6 | |
| with: | |
| fetch-depth: 0 # setuptools-scm needs full git history | |
| - name: Set up Python | |
| uses: actions/setup-python@v6 | |
| with: | |
| python-version: "3.8" | |
| - 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@v6 | |
| with: | |
| name: dist | |
| path: dist/ |