Фильтры и паттерны в SourceCraft

С помощью паттернов фильтров в SourceCraft можно задать различные правила и ограничения, которые будут применяться в различных ситуациях к определенным файлам и директориям, а также ветками и тегам. Фильтры используются в следующих контекстах:

  • События-триггеры CI/CD — для запуска рабочих процессов при изменении определенных файлов, веток или тегов.
  • Правила ревью кода — для назначения ревьюеров в зависимости от измененных файлов.
  • Политики веток — для ограничения создания веток и тегов с определенными именами.

Базовые паттерны

Фильтры используют паттерны для сопоставления с путями файлов или именами веток и тегов:

  • * — любая последовательность символов, кроме /.
  • ** — любая последовательность символов, включая /. Рекомендуется для групповой фильтрации.
  • ? — один любой символ.

Например:

  • "**" — соответствует всем файлам в репозитории.
  • "pkg/**" — соответствует всем файлам в директории pkg.
  • "*.py" — соответствует всем файлам с расширением .py в корневой директории.
  • "**/*.py" — соответствует всем файлам с расширением .py во всех директориях.

Фильтры можно указывать с отрицанием !. В этом случае правило применяется, если путь не соответствует указанному паттерну. Например:

  • "!docs/**" — исключить директорию docs.
  • "!*.md" — исключить все Markdown-файлы.

Примечание

Используйте фильтр с отрицанием только совместно с другими фильтрами. Сам по себе фильтр с отрицанием только запрещает применение правила, но не разрешает его для остальных путей.

Порядок применения фильтров

Порядок фильтров влияет на результат следующим образом:

  • Фильтры обрабатываются сверху вниз в порядке увеличения приоритета.
  • Каждый следующий фильтр может отменить действие предыдущего. То есть фильтр без отрицания может отменить действие фильтра с отрицанием и наоборот.

Примеры с учетом порядка

Рассмотрим примеры включения фильтра или списка фильтров по путям изменившихся файлов для событий-триггеров с помощью поля paths.

Пример включения всех файлов, кроме указанных

paths:
  - "**"
  - "!pkg/**"

Фильтр применяется ко всем файлам репозитория, кроме файлов в директории pkg.

Совет

При последовательном применении паттернов выставляйте паттерн "**" самым первым.

Пример исключения с последующим включением

paths:
  - "internal/**"
  - "!internal/generated/**"
  - "internal/generated/models/auth/**"

Файл internal/generated/models/data/data.go не попадет под действие фильтра (исключен вторым правилом), а файл internal/generated/models/auth/auth.go — попадет (третье правило перекрывает второе).

Применение в разных контекстах

События-триггеры CI/CD

В событиях-триггерах фильтры определяют, при каких изменениях должен запускаться рабочий процесс.

Пример события-триггера, который запускает рабочий процесс ci-workflow при изменении содержимого директории ci/** в ветке main:

on:
  push:
    - workflows: ci-workflow
      filter:
        branches: "main"
        paths: "ci/**"

Подробнее см. в разделе События-триггеры (on).

Правила ревью кода

В правилах ревью кода фильтры определяют, для каких файлов требуется одобрение определенных ревьюеров.

Пример правила ревью кода, в котором для всех изменений, кроме изменений файлов в директории docs, требуется одобрение от пользователя senior-developer:

codereview:
  rules:
    - patterns:
        - "**"
        - "!docs/**"
      reviewers:
        usernames:
          - "senior-developer"

Подробнее см. в разделе Правила ревью кода в SourceCraft.

Политики веток

В политиках веток параметр matches использует те же правила фильтрации для ограничения создания веток и тегов с определенными именами.

Пример правила, запрещающего создание веток, имена которых имеют префикс OO-, hotfix, chore и release:

branch_protection:
  policies:
    - target: branch
      matches: ["**", "!OO-**/**", "!hotfix/**", "!chore/**", "!release/**"]
      message: "Please use proper branch naming"
      rules:
        - prevent_creation

Подробнее см. в разделе Политики веток в SourceCraft.

См. также