Skip to content

feat(docs) Imrpove docs structure and introduce contributor guidelines #42

feat(docs) Imrpove docs structure and introduce contributor guidelines

feat(docs) Imrpove docs structure and introduce contributor guidelines #42

Workflow file for this run

# =============================================================================
# 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/