GraphRAG+SchemaCrawler para Dev #32
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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 |