From f9914a3edbf5c539cab4d5480adf437bd16324e9 Mon Sep 17 00:00:00 2001 From: ThomasTDS Date: Sat, 19 Sep 2026 15:33:16 -0300 Subject: [PATCH] =?UTF-8?q?Adiciona=20auditoria=20de=20depend=C3=AAncias?= =?UTF-8?q?=20vulner=C3=A1veis=20com=20pip-audit?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit pip-audit roda no CI logo após os checks de tipo/lint/formatação, antes dos testes, e quebra o build se achar alguma vulnerabilidade conhecida nas dependências instaladas. Também adiciona um upgrade explícito do pip antes de instalar as dependências, já que o próprio pip é auditado e uma versão desatualizada dele bloquearia o build por um motivo fora do controle do projeto. --- .github/workflows/tests.yml | 7 ++++++- README.md | 4 +++- pyproject.toml | 1 + 3 files changed, 10 insertions(+), 2 deletions(-) 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 142f869..9eebc83 100644 --- a/README.md +++ b/README.md @@ -74,9 +74,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. @@ -126,6 +127,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 8e828b5..d017e1e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -15,6 +15,7 @@ dev = [ "pytest-rerunfailures>=15.0", "pytest-html>=4.1", "pytest-cov>=6.0", + "pip-audit>=2.7", "ruff>=0.14", "mypy>=1.14", "types-requests>=2.32",