Skip to content

Corrigir execução do pre-commit sobre arquivos não alterados no GitHub Actions #1464

Description

@pitangainnovare

Descrição do problema

O job linter do GitHub Actions executa o pre-commit sobre todos os arquivos do repositório, mesmo quando a pull request altera apenas um conjunto limitado de arquivos.

A action pre-commit/action@v3.0.0 utiliza --all-files por padrão. Como o repositório possui arquivos preexistentes com espaços em branco ao final das linhas e sem quebra de linha no final, os hooks trailing-whitespace e end-of-file-fixer modificam centenas de arquivos e encerram o job com erro.

Com isso, qualquer pull request pode apresentar falha no linter por problemas que não foram introduzidos por ela. As execuções recentes da própria branch main também apresentam esse comportamento.

Passos para reproduzir o problema

  1. Crie uma branch a partir do repositório.
  2. Altere somente um arquivo que já esteja de acordo com o pre-commit.
  3. Crie ou atualize uma pull request para a branch main.
  4. Aguarde a execução do workflow CI.
  5. Acesse o job linter.
  6. Observe que o pre-commit analisa e tenta modificar arquivos não alterados pela pull request.
  7. Observe a falha dos hooks trailing-whitespace e end-of-file-fixer, com alterações sugeridas em arquivos de diferentes aplicações, templates, fixtures, assets e arquivos gerados.

Exemplo observado na PR #1460:

https://github.com/scieloorg/core/actions/runs/30858328115/job/91834442803

Comportamento esperado

O linter deve verificar somente os arquivos alterados pela pull request ou pelo push que iniciou o workflow.

Em pull requests, o pre-commit deve comparar o commit-base da PR com o commit mais recente do branch de origem. Em pushes para main, deve comparar o estado anterior do branch com o novo commit.

Uma possível configuração é realizar o checkout com histórico completo:

- name: Checkout Code Repository
  uses: actions/checkout@v3
  with:
    fetch-depth: 0

E executar o pre-commit somente no intervalo correspondente ao evento:

- name: Run pre-commit
  uses: pre-commit/action@v3.0.0
  with:
    extra_args: >-
      --from-ref
      ${{ github.event.pull_request.base.sha || github.event.before }}
      --to-ref
      ${{ github.event.pull_request.head.sha || github.sha }}

Os problemas preexistentes no restante do repositório devem ser corrigidos separadamente, em uma pull request específica de normalização, sem bloquear alterações não relacionadas.

Screenshots ou vídeos

N/A

Anexos

N/A

Ambiente utilizado

  • GitHub Actions
  • Runner ubuntu-latest
  • pre-commit/action@v3.0.0
  • Python 3.9 configurado no job linter
  • Hooks que provocam a falha:
    • trailing-whitespace
    • end-of-file-fixer

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions