Pular para o conteúdo

O CI de uma biblioteca

O que só quebra fora da sua máquina — e o formato de defeito que isso sempre tem.

A suíte local não é o que o CI roda, e a diferença não é detalhe. Todo defeito desta classe tem o mesmo formato: uma decisão do ambiente que o repositório não contém.

yaml
name: ci
on: [push, pull_request]
jobs:
  testes:
    strategy:
      fail-fast: false
      matrix:
        os: [ubuntu-latest, macos-15, windows-latest]
        python: ["3.10", "3.13"]
    runs-on: ${{ matrix.os }}
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-python@v5
        with: { python-version: "${{ matrix.python }}" }
      - run: pip install dataforge-lang
      - run: dataforge check . --strict
      - run: dataforge fmt . --check
      - run: dataforge test . --cobertura --minimo=80
      - run: dataforge install && dataforge test .   # numa pasta limpa

As cinco do Windows#

SintomaCausa
[Errno 22] com o caminho mutilado"C:\temp" numa string: \t é tabulação. Em macOS e Linux é pior — o nome é válido, e o arquivo nasce em outro lugar sem erro nenhum
traceback depois de o pacote estar prontowhich é do Unix; use shutil.which, que também conhece PATHEXT
WSAEINVAL (10022)getsockname num socket ainda não ligado; no Unix devolve 0
a conexão “expira” onde devia ser recusadao firewall descarta o SYN de uma porta fechada
saída ilegível de um subprocessoa saída do Windows não é UTF-8 — declare encoding

O relatório também mente#

O quêO efeito
pytest -rf lista o que falhou, não o que deu erro11 erros invisíveis no resumo por meses — use -rfE
o resumo corta no primeiro \na anotação do job mostrou a primeira linha de um stdout de sucesso como motivo de reprovação
o que é gerado fora do repositório não existe no CItodo pacote saiu com o manifesto e zero JavaScript, porque a compilação só rodava nesta máquina

Continue em Prometer desempenho e DevOps.