-
Notifications
You must be signed in to change notification settings - Fork 37
192 lines (166 loc) Β· 5.2 KB
/
ci.yml
File metadata and controls
192 lines (166 loc) Β· 5.2 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
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
# .github/workflows/ci.yml
name: CI - Tests and Documentation
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
permissions:
contents: read
jobs:
# Detect which files have changed to conditionally run jobs
changes:
name: "Detect Changes"
runs-on: ubuntu-latest
outputs:
agentex: ${{ steps.filter.outputs.agentex }}
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Check for agentex changes
uses: dorny/paths-filter@v3
id: filter
with:
filters: |
agentex:
- 'agentex/**'
test:
name: "Run Unit Tests"
runs-on: ubuntu-latest
needs: changes
if: needs.changes.outputs.agentex == 'true'
steps:
# Checkout the repository
- name: Checkout
uses: actions/checkout@v4
# Set up Python and uv
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.12'
- name: Install uv
uses: astral-sh/setup-uv@v4
with:
version: "0.7.3"
enable-cache: true
# Cache uv dependencies
- name: Cache uv dependencies
uses: actions/cache@v4
with:
path: ~/.cache/uv
key: ${{ runner.os }}-uv-${{ hashFiles('**/agentex/uv.lock', '**/agentex/pyproject.toml') }}
restore-keys: |
${{ runner.os }}-uv-
# Docker is needed for testcontainers
- name: Verify Docker is running
run: |
docker --version
docker info
# Install dependencies
- name: Install test dependencies
working-directory: ./agentex
run: |
echo "π¦ Installing test dependencies (pytest, testcontainers, etc.)..."
uv sync --group test
# Run Docker environment setup
- name: Setup and validate Docker environment for tests
working-directory: ./agentex
run: |
echo "π³ Setting up Docker environment for testcontainers..."
uv run python scripts/test_setup.py --check-docker
echo "β
Docker environment validated successfully"
# Run unit tests only (fast, no integration tests)
- name: Run unit tests
working-directory: ./agentex
timeout-minutes: 10
run: |
echo "π§ͺ Running unit tests (fast, isolated)..."
uv run python scripts/run_tests.py -m unit --cov=src --cov-report=xml --cov-report=term
# Clean up test containers
- name: Clean up test containers
if: always()
run: |
echo "π§Ή Cleaning up any remaining test containers..."
docker container prune -f || true
docker volume prune -f || true
# Upload coverage reports
- name: Upload coverage to Codecov
if: always()
uses: codecov/codecov-action@v4
with:
file: ./agentex/coverage.xml
flags: unittests
name: agentex-public-coverage
fail_ci_if_error: false
# Test summary
- name: Test Summary
if: always()
run: |
echo "π Unit test execution completed"
echo "β
Fast isolated tests for public contributors"
docs:
name: "Build Documentation"
runs-on: ubuntu-latest
needs: changes
if: needs.changes.outputs.agentex == 'true'
steps:
# Checkout the repository
- name: Checkout
uses: actions/checkout@v4
# Set up Python and uv
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.12'
- name: Install uv
uses: astral-sh/setup-uv@v4
with:
version: "0.7.3"
# Build documentation
- name: Build documentation
working-directory: ./agentex
run: |
echo "π Building documentation..."
# Install docs dependencies
uv sync --group docs
# Build documentation
cd docs && uv run mkdocs build
echo "β
Documentation built successfully"
# Verify docs were built
- name: Verify documentation
working-directory: ./agentex
run: |
if [ -d "docs/site" ]; then
echo "β
Documentation site directory exists"
ls -la docs/site
else
echo "β Documentation site directory not found"
exit 1
fi
# This job is used as a required status check for branch protection
# It will pass if the conditional jobs either passed or were skipped
ci-status:
name: "CI Status Check"
runs-on: ubuntu-latest
needs: [changes, test, docs]
if: always()
steps:
- name: Check CI status
run: |
# Check if agentex changes were detected
if [ "${{ needs.changes.outputs.agentex }}" == "true" ]; then
echo "Agentex changes detected - checking test and docs results"
# Both test and docs must succeed
if [ "${{ needs.test.result }}" != "success" ]; then
echo "β Unit tests failed"
exit 1
fi
if [ "${{ needs.docs.result }}" != "success" ]; then
echo "β Documentation build failed"
exit 1
fi
echo "β
All checks passed"
else
echo "No agentex changes detected - skipping tests and docs"
echo "β
CI status check passed"
fi