Фильтры и паттерны в 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.