Pular para o conteúdo principal

CI e qualidade

Workflows​

WorkflowArquivoGatilhoO que faz
CI.github/workflows/ci.ymltodo push e pull requestinstala o pacote com extras [dev], roda pytest e ruff em Python 3.12
Pages.github/workflows/docs.ymlpush em main, todo pull request e workflow_dispatchconstrói a raiz com Jekyll e a documentação com Docusaurus, monta o site combinado e publica no GitHub Pages
Jekyll (legado).github/workflows/jekyll-gh-pages.ymlsó workflow_dispatchpublicação antiga, apenas da raiz; mantida para execução manual

Em pull requests o workflow de Pages roda o build completo (é o gate de links quebrados), mas pula a publicação: os passos de upload e o job deploy só rodam em push/workflow_dispatch.

# ci.yml
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with: {python-version: '3.12'}
- run: python -m pip install -e './persona_db[dev]'
- run: python -m pytest persona_db/tests
- run: python -m ruff check persona_db

:::note Um artefato, dois sites O GitHub Pages publica um único artefato por repositório. Para conviverem, docs.yml monta os dois na mesma árvore — Jekyll na raiz (/PersonaDB/) e Docusaurus em /PersonaDB/docs/ — e é o único workflow que publica automaticamente. O jekyll-gh-pages.yml ficou restrito a workflow_dispatch porque o artefato dele contém só a raiz e apagaria /docs; os dois compartilham o grupo de concorrência pages. :::

Reproduzindo a CI localmente​

python3 -m pip install -e "./persona_db[dev]"
python3 -m pytest persona_db/tests
python3 -m ruff check persona_db

Para o workflow de documentação:

cd website
npm ci
npm run build # roda gen:docs automaticamente (prebuild)
npm run serve

Gates de qualidade​

GateFerramentaBloqueia merge?
Testes unitários, de integração e estatísticospytestsim
Lintruff (linha 100, py310)sim
Build da documentaçãoDocusaurus (onBrokenLinks: 'throw')sim, no workflow de docs
Validação de consistência do datasetscripts.generate (exit 1)não é passo da CI hoje — recomendado adicionar
Tiposmypynão
Formataçãoblacknão

Sugestão: validação como passo de CI​

- name: Dataset de fumaça
run: |
python -m persona_db.scripts.generate --personas 100 --seed 7 --dry-run
python -m persona_db.validators.run_validators --personas 100 --seed 7

Ambos retornam 1 em caso de violação, o que transforma a consistência dos dados em um gate real.

O build do site está configurado com onBrokenLinks: 'throw': qualquer link interno inválido falha o build, inclusive links apontando para páginas geradas que deixaram de existir. Se você remover um módulo Python ou um arquivo DDL, rode npm run build para confirmar que nenhuma página escrita à mão ficou apontando para o vazio.

Dependências​

GrupoOndeFixação
Runtime Pythonpersona_db/pyproject.tomlsem pins — resolvem para a última versão compatível
Dev Pythonextra [dev]sem pins
Nodewebsite/package.json + package-lock.jsonlockfile versionado; a CI usa npm ci

:::note Reprodutibilidade de longo prazo Como as dependências Python não têm versões fixas, uma mudança futura no numpy pode alterar sequências do PCG64 e, com isso, os datasets. Se precisar de reprodutibilidade por anos, fixe as versões em um requirements.lock próprio. :::