-
Notifications
You must be signed in to change notification settings - Fork 1
145 lines (118 loc) · 3.35 KB
/
pr.yml
File metadata and controls
145 lines (118 loc) · 3.35 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
name: PR checks
on:
pull_request:
branches: [main]
jobs:
test:
name: Test
runs-on: ubuntu-latest
strategy:
matrix:
service: [api-simulation]
steps:
- uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.13'
- name: Install uv
uses: astral-sh/setup-uv@v3
with:
enable-cache: true
- name: Install dependencies
run: |
cd projects/policyengine-${{ matrix.service }}
uv sync --extra test
- name: Run tests
run: |
cd projects/policyengine-${{ matrix.service }}
uv run pytest tests/ -v
lint:
name: Lint
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.13'
- name: Install uv
uses: astral-sh/setup-uv@v3
- name: Install ruff
run: uv tool install ruff
- name: Run ruff format check
run: |
for dir in projects/*/src libs/*/src; do
if [ -d "$dir" ]; then
echo "Checking format in $dir..."
uv run ruff format --check $dir
fi
done
docker-build:
name: Docker build
needs: [test, lint] # Only run if tests and linting pass
runs-on: ubuntu-latest
strategy:
matrix:
service: [api-simulation]
steps:
- uses: actions/checkout@v4
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Build Docker image
uses: docker/build-push-action@v5
with:
context: .
file: projects/policyengine-${{ matrix.service }}/Dockerfile
push: false
tags: policyengine-${{ matrix.service }}:test
cache-from: type=gha
cache-to: type=gha,mode=max
platforms: linux/amd64
test-integration:
name: Test integration
needs: docker-build # Only run if docker builds succeed
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.13'
- name: Install uv
uses: astral-sh/setup-uv@v3
with:
enable-cache: true
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Generate API clients
run: |
./scripts/generate-clients.sh
- name: Start services
run: |
docker compose -f deployment/docker-compose.yml up -d
# Wait for services to be ready
sleep 10
# Check services are responding
for i in {1..30}; do
if curl -f http://localhost:8082/ping/alive; then
echo "Services are ready!"
break
fi
echo "Waiting for services... (attempt $i/30)"
sleep 2
done
- name: Run integration tests (local services only)
run: |
cd projects/policyengine-apis-integ
uv sync --extra test
# Run tests against local Docker services only (not Modal staging)
uv run pytest tests/ -v -m "not requires_gcp and not beta_only"
- name: Show service logs on failure
if: failure()
run: |
docker compose -f deployment/docker-compose.yml logs
- name: Stop services
if: always()
run: |
docker compose -f deployment/docker-compose.yml down