2025, Nov 01 12:16

Как запустить Ruff в GitHub Actions с check --select ALL

Пошагово настраиваем Ruff в GitHub Actions для максимально строгого CI: включаем все правила через args: check --select ALL и показываем готовый workflow.

При запуске Ruff в GitHub Actions стандартная конфигурация может оказаться слишком мягкой. Типичный пример — в CI проскакивают хвостовые пробелы, потому что вызов по умолчанию не включает самый жёсткий набор правил. Если вам нужна максимально строгая проверка, придётся явно выбрать каждое правило.

Базовая настройка, которой не хватает строгости

Минимальный способ использования экшена запускает Ruff в режиме по умолчанию, а он не включает самые строгие проверки:

- uses: astral-sh/ruff-action@v3
  with:
    src: >-
      path/to/file1.py
      path/to/file2.py

Что на самом деле происходит

Такая конфигурация запускает ruff check без дополнительных флагов, поэтому применяется лишь базовый набор правил. Из‑за этого мелочи вроде хвостовых пробелов могут пройти. С самим экшеном всё в порядке; он просто повторяет поведение ruff check по умолчанию, пока вы не укажете иное.

Решение: включить все правила

Чтобы включить самые жёсткие проверки, передайте экшену явные аргументы. Параметр args: "check --select ALL" говорит Ruff задействовать все категории правил:

- uses: astral-sh/ruff-action@v3
  with:
    args: "check --select ALL"
    src: >-
      path/to/file1.py
      path/to/file2.py

Если нужен полноценный workflow, который запускается при пушах в ветку master и на pull request, вот компактный пример для файла .github/workflows/lint.yml:

name: linting-pipeline
on:
  push:
    branches:
      - master
  pull_request:
jobs:
  style_audit:
    name: Ruff checks
    runs-on: ubuntu-latest
    steps:
      - name: Fetch repository
        uses: actions/checkout@v4
      - name: Execute Ruff — Python linter
        uses: astral-sh/ruff-action@v3
        with:
          version: latest
          args: "check --select ALL"
          src: >-
            path/to/file1.py
            path/to/file2.py

Зачем это нужно

Надёжность CI определяется тем уровнем требований, который вы задаёте. Если workflow работает с набором правил по умолчанию, его сигнал будет расходиться с ожиданиями от строгого линтера — в результате ревью станет непоследовательным, а лишние правки всплывут позже. Включив ALL, вы синхронизируете ожидания, заранее ловите косметические и структурные недочёты и не допускаете сюрпризов из серии «у меня локально всё работает» в pull request'ах.

Альтернативные подходы

Почему бы не использовать экшен только для установки ruff, а затем вызывать любые нужные команды? Или не настроить его так, чтобы выбранные вами правила применялись при каждом запуске — где бы он ни происходил?

Если вашей команде удобнее другая схема, оба варианта вполне рабочие. Важно лишь, чтобы запуск в CI действительно применял те правила, которые вы задумали.

Итоги

Чтобы запуск Ruff в GitHub Actions был максимально строгим, передайте экшену args: "check --select ALL". Эта небольшая правка переводит линтер из режима по умолчанию в исчерпывающий набор правил, помогая поддерживать кодовую базу в порядке и получать предсказуемую обратную связь от CI.

Статья основана на вопросе на StackOverflow от Timur Shtatland и ответе от Timur Shtatland.