forked from ZephyrTransport/travel-diary-survey-tools
-
Notifications
You must be signed in to change notification settings - Fork 1
133 lines (112 loc) · 3.7 KB
/
ci.yml
File metadata and controls
133 lines (112 loc) · 3.7 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
name: CI
on:
push:
branches: [main, develop]
pull_request:
branches: [main, develop]
types: [opened, synchronize, reopened, ready_for_review]
jobs:
lint:
name: Lint
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Install uv
uses: astral-sh/setup-uv@v3
with:
enable-cache: true
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: "3.12"
- name: Run Ruff (lint + format check)
run: |
uv run ruff check .
uv run ruff format --check .
test:
name: Test (Python ${{ matrix.python-version }})
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
python-version: ["3.11", "3.12", "3.13", "3.14"]
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Install uv
uses: astral-sh/setup-uv@v3
with:
enable-cache: true
- name: Install Python ${{ matrix.python-version }}
run: uv python install ${{ matrix.python-version }}
- name: Sync environment
run: uv sync --group test
- name: Run pytest with coverage
run: |
uv run pytest --cov=travel_diary_survey_tools \
--cov-report=xml \
--cov-report=term-missing
- name: Upload coverage to Codecov
if: matrix.python-version == '3.12'
uses: codecov/codecov-action@v4
with:
files: ./coverage.xml
token: ${{ secrets.CODECOV_TOKEN }}
fail_ci_if_error: false
check:
name: Check Results
needs: [lint, test]
runs-on: ubuntu-latest
if: always()
steps:
- name: Aggregate results
run: |
if [ "${{ needs.lint.result }}" != "success" ] || [ "${{ needs.test.result }}" != "success" ]; then
echo "One or more checks failed."
exit 1
fi
echo "All checks passed successfully!"
column_matrix:
name: Generate Column Matrix
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
ref: ${{ github.head_ref || github.ref }}
token: ${{ secrets.GITHUB_TOKEN }}
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: "3.12"
- name: Install uv
uses: astral-sh/setup-uv@v3
with:
enable-cache: true
- name: Sync environment
run: uv sync --group dev
- name: Generate Column Matrix
run: |
uv run python scripts/generate_column_matrix.py
- name: Check for changes
id: verify_diff
run: |
git diff --quiet docs/COLUMN_REQUIREMENTS.md || echo "changed=true" >> $GITHUB_OUTPUT
- name: Verify file is up-to-date (PR only)
if: steps.verify_diff.outputs.changed == 'true' && github.event_name == 'pull_request'
run: |
echo "COLUMN_REQUIREMENTS.md is out of date!"
echo "Please run 'python scripts/generate_column_matrix.py' locally and commit the changes."
echo "Or ensure pre-commit hooks are installed: 'pre-commit install'"
exit 1
- name: Commit and push if changed (push only)
if: steps.verify_diff.outputs.changed == 'true' && github.event_name == 'push'
run: |
git config --local user.email "github-actions[bot]@users.noreply.github.com"
git config --local user.name "github-actions[bot]"
git add docs/COLUMN_REQUIREMENTS.md
git commit -m "docs: auto-update column requirements matrix [skip ci]"
git push