Skip to content

GraphRAG+SchemaCrawler para Dev #32

GraphRAG+SchemaCrawler para Dev

GraphRAG+SchemaCrawler para Dev #32

Workflow file for this run

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