Repository navigation
165 lines (154 loc) · 6 KB
/
Copy pathci.yml
File metadata and controls
165 lines (154 loc) · 6 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
name: CI
on:
pull_request:
push:
branches: [main, dev]
workflow_dispatch:
schedule:
- cron: "0 3 * * *"
jobs:
tests-vcr:
name: Tests (VCR deterministic) - ${{ matrix.provider }} / ${{ matrix.model }}
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
include:
- provider: openai
model: gpt-4o-mini
- provider: google
model: gemini-2.5-flash
env:
TEXT_TO_INSIGHT_TEST_PROVIDER: ${{ matrix.provider }}
TEXT_TO_INSIGHT_TEST_MODEL: ${{ matrix.model }}
OPENAI_API_KEY: ${{ matrix.provider == 'openai' && 'dummy-key' || '' }}
GOOGLE_API_KEY: ${{ matrix.provider == 'google' && 'dummy-key' || '' }}
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: "3.11"
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -r requirements.txt && pip install -e .
- name: Download test database
run: |
mkdir -p data
gh release download dados-teste -p "olist_relational.db" -D data/
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Run deterministic tests
run: |
pytest tests/test_componentes.py tests/test_nodes.py \
tests/test_integracao.py tests/test_main_engine_integracao.py \
-v -s --record-mode=none -m "not real_api"
record-vcr-cassettes:
name: Record VCR cassettes - ${{ matrix.provider }} / ${{ matrix.model }}
runs-on: ubuntu-latest
if: github.event_name == 'workflow_dispatch'
strategy:
fail-fast: false
matrix:
include:
- provider: openai
model: gpt-4o-mini
- provider: google
model: gemini-2.5-flash
env:
TEXT_TO_INSIGHT_TEST_PROVIDER: ${{ matrix.provider }}
TEXT_TO_INSIGHT_TEST_MODEL: ${{ matrix.model }}
OPENAI_API_KEY: ${{ matrix.provider == 'openai' && secrets.OPENAI_API_KEY || '' }}
GOOGLE_API_KEY: ${{ matrix.provider == 'google' && secrets.GOOGLE_API_KEY || '' }}
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: "3.11"
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -r requirements.txt && pip install -e .
# Mesmo setup de banco dos outros jobs
- name: Download test database
run: |
mkdir -p data
gh release download dados-teste -p "olist_relational.db" -D data/
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
# Verificação no nível do step com saída que controla os próximos
- name: Check API key availability
id: check_key
run: |
if [[ "${{ matrix.provider }}" == "openai" && -z "${OPENAI_API_KEY}" ]]; then
echo "available=false" >> $GITHUB_OUTPUT
echo "⚠️ OPENAI_API_KEY ausente; pulando gravação."
elif [[ "${{ matrix.provider }}" == "google" && -z "${GOOGLE_API_KEY}" ]]; then
echo "available=false" >> $GITHUB_OUTPUT
echo "⚠️ GOOGLE_API_KEY ausente; pulando gravação."
else
echo "available=true" >> $GITHUB_OUTPUT
fi
- name: Record or update VCR cassettes
if: steps.check_key.outputs.available == 'true' # só roda se tiver key
run: |
pytest tests/test_nodes.py tests/test_integracao.py \
-v -s --record-mode=rewrite -m "not real_api"
# Commita os cassettes de volta no repo
- name: Commit updated cassettes
if: steps.check_key.outputs.available == 'true'
run: |
git config user.name "github-actions[bot]"
git config user.email "github-actions[bot]@users.noreply.github.com"
git add tests/cassettes
git diff --cached --quiet || git commit -m "chore: update VCR cassettes [${{ matrix.provider }}/${{ matrix.model }}]"
git push
tests-real-api:
name: Tests (real API) - ${{ matrix.provider }} / ${{ matrix.model }}
runs-on: ubuntu-latest
needs: tests-vcr
if: github.event_name == 'workflow_dispatch' || github.event_name == 'schedule'
strategy:
fail-fast: false
matrix:
include:
- provider: openai
model: gpt-4o-mini
- provider: google
model: gemini-2.5-flash
env:
TEXT_TO_INSIGHT_TEST_PROVIDER: ${{ matrix.provider }}
TEXT_TO_INSIGHT_TEST_MODEL: ${{ matrix.model }}
OPENAI_API_KEY: ${{ matrix.provider == 'openai' && secrets.OPENAI_API_KEY || '' }}
GOOGLE_API_KEY: ${{ matrix.provider == 'google' && secrets.GOOGLE_API_KEY || '' }}
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: "3.11"
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -r requirements.txt && pip install -e .
# ✅ Banco de dados presente aqui também
- name: Download test database
run: |
mkdir -p data
gh release download dados-teste -p "olist_relational.db" -D data/
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Check API key availability
id: check_key
run: |
if [[ "${{ matrix.provider }}" == "openai" && -z "${OPENAI_API_KEY}" ]]; then
echo "available=false" >> $GITHUB_OUTPUT
echo "⚠️ OPENAI_API_KEY ausente; pulando smoke test."
elif [[ "${{ matrix.provider }}" == "google" && -z "${GOOGLE_API_KEY}" ]]; then
echo "available=false" >> $GITHUB_OUTPUT
echo "⚠️ GOOGLE_API_KEY ausente; pulando smoke test."
else
echo "available=true" >> $GITHUB_OUTPUT
fi
- name: Run real API smoke tests
if: steps.check_key.outputs.available == 'true' # ✅ condição correta
run: pytest tests/test_real_api_smoke.py -v -s -m real_api