-
Notifications
You must be signed in to change notification settings - Fork 0
153 lines (125 loc) · 4.14 KB
/
Copy pathci.yml
File metadata and controls
153 lines (125 loc) · 4.14 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
# =============================================================================
# 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/