diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index c054689..aac1f81 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -26,7 +26,9 @@ jobs: cache: 'pip' - name: Instalar dependências - run: pip install -e ".[dev]" + run: | + pip install --upgrade pip + pip install -e ".[dev]" - name: Checar tipos run: mypy . @@ -37,6 +39,9 @@ jobs: - name: Verificar formatação run: ruff format --check . + - name: Auditar dependências + run: pip-audit + - name: Rodar testes run: pytest diff --git a/README.md b/README.md index 6b86341..6400368 100644 --- a/README.md +++ b/README.md @@ -84,9 +84,10 @@ mypy . # typecheck ruff check . # lint ruff format --check . # formatação, só verifica ruff format . # formatação, aplica as correções +pip-audit # checa dependências instaladas contra vulnerabilidades conhecidas ``` -O CI roda `mypy`, `ruff check` e `ruff format --check` antes dos testes, então mudanças com problema de tipo ou estilo falham rápido, sem gastar tempo batendo na API pública. +O CI roda `mypy`, `ruff check`, `ruff format --check` e `pip-audit` antes dos testes, então mudanças com problema de tipo, estilo ou uma dependência vulnerável falham rápido, sem gastar tempo batendo na API pública. Uma vulnerabilidade encontrada pelo `pip-audit` quebra o CI — não tem como mergear sem resolver ou avaliar o caso pontualmente. Cada execução de `pytest` já gera cobertura de `api/` e `models/` (código dos API Clients e dos schemas), impressa no terminal e também em `reports/coverage.xml` (não versionado). No CI esse arquivo é enviado para o [Codecov](https://codecov.io/gh/ThomasTDS/qa-api-python), que mantém o histórico e mostra o badge no topo deste README. @@ -137,6 +138,7 @@ Autenticação: `POST /auth` com `{ "username": "admin", "password": "password12 - Retry automático (`pytest-rerunfailures`, `--reruns 1`): um cenário que falha roda uma segunda vez antes de ser reportado como falha, amortecendo instabilidade transitória da API pública de demonstração. - Integração contínua via GitHub Actions: os testes rodam automaticamente a cada push e pull request para `master`, e também diariamente às 06:00 UTC (ver [.github/workflows/tests.yml](.github/workflows/tests.yml)) para detectar quebras causadas pela própria API pública, com o relatório HTML publicado como artifact do workflow. - Dependências atualizadas automaticamente pelo Dependabot (pip e GitHub Actions, semanal — ver [.github/dependabot.yml](.github/dependabot.yml)). PRs de patch/minor com CI verde são mergeados automaticamente ([.github/workflows/dependabot-auto-merge.yml](.github/workflows/dependabot-auto-merge.yml)); bumps de major exigem revisão manual. +- Auditoria de vulnerabilidades conhecidas nas dependências instaladas a cada execução do CI, via [`pip-audit`](https://github.com/pypa/pip-audit); encontrar uma vulnerabilidade quebra o build. - Rastreabilidade de QA: matriz de test cases em [docs/test-cases.md](docs/test-cases.md), com tags `@TC-XXX` em cada `Scenario` e um subconjunto `@smoke` (`pytest -m smoke`) cobrindo os fluxos ponta-a-ponta mais críticos. Bugs reais encontrados são documentados como GitHub Issues usando o template em [.github/ISSUE_TEMPLATE/bug_report.md](.github/ISSUE_TEMPLATE/bug_report.md). --- diff --git a/pyproject.toml b/pyproject.toml index d2e28d0..1289c76 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -16,6 +16,7 @@ dev = [ "pytest-html>=4.1", "pytest-cov>=6.0", "requests-mock>=1.12", + "pip-audit>=2.7", "ruff>=0.14", "mypy>=1.14", "types-requests>=2.32",