-
Notifications
You must be signed in to change notification settings - Fork 0
131 lines (109 loc) · 3.76 KB
/
ci.yml
File metadata and controls
131 lines (109 loc) · 3.76 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
# =============================================================================
# quickforge - GitHub Actions CI Workflow
# =============================================================================
# Generated by quickforge v0.1.0
#
# This workflow runs on every push and pull request to ensure code quality.
# It performs the following checks:
# - Linting with ruff
# - Formatting with ruff
# - Type checking with basedpyright
# - Testing with pytest across multiple Python versions
# =============================================================================
name: CI
on:
push:
branches: [main, master]
pull_request:
branches: [main, master]
# Allow manual triggering
workflow_dispatch:
# Cancel in-progress runs on new commits to same branch
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
env:
# Force color output in CI
FORCE_COLOR: "1"
# uv settings
UV_SYSTEM_PYTHON: "1"
jobs:
# ===========================================================================
# Quality Checks (fast, single Python version)
# ===========================================================================
quality:
name: Code Quality
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v6
- name: Set up uv
uses: astral-sh/setup-uv@v8.1.0
with:
version: "latest"
enable-cache: true
- name: Install Python 3.11
run: uv python install 3.11
- name: Install dependencies
run: uv sync --extra dev
- name: Run ruff linter
run: uv run ruff check . --output-format=github
- name: Run ruff formatter
run: uv run ruff format --check .
- name: Run type checker
run: uv run basedpyright
# ===========================================================================
# Tests (multiple Python versions)
# ===========================================================================
test:
name: Test (Python ${{ matrix.python-version }})
runs-on: ubuntu-latest
needs: quality # Only run tests if quality checks pass
strategy:
fail-fast: false
matrix:
python-version:
- "3.11"
- "3.12"
- "3.13"
steps:
- name: Checkout repository
uses: actions/checkout@v6
- name: Set up uv
uses: astral-sh/setup-uv@v8.1.0
with:
version: "latest"
enable-cache: true
- name: Install Python ${{ matrix.python-version }}
run: uv python install ${{ matrix.python-version }}
- name: Install dependencies
run: uv sync --extra dev
- name: Run tests
run: uv run pytest --cov-report=xml
- name: Upload coverage to Codecov
if: matrix.python-version == '3.11'
uses: codecov/codecov-action@v6
with:
files: ./coverage.xml
fail_ci_if_error: false
env:
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
# ===========================================================================
# All Checks Passed
# ===========================================================================
# This job is used as a required status check in branch protection rules.
# It only succeeds if all other jobs pass.
all-checks:
name: All Checks Passed
runs-on: ubuntu-latest
needs: [quality, test]
if: always()
steps:
- name: Check all jobs passed
run: |
if [[ "${{ needs.quality.result }}" != "success" ]] || \
[[ "${{ needs.test.result }}" != "success" ]]; then
echo "One or more jobs failed"
exit 1
fi
echo "All checks passed! ✅"