---
metadata:
  - name: generator
    content: Diplodoc Platform v5.57.3
alternate:
  - https://sourcecraft.dev/portal/docs/en/sourcecraft/concepts/filters-by-paths.md
  - https://sourcecraft.dev/portal/docs/ru/sourcecraft/concepts/filters-by-paths.md
  - href: ru/sourcecraft/concepts/filters-by-paths.md
    type: text/markdown
    title: Markdown version
  - href: ../../llms.txt
    type: text/markdown
    title: llms.txt
---
> **Documentation Index:** Fetch the complete configuration index at https://sourcecraft.dev/portal/docs/ru/llms.txt

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

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

* [События-триггеры CI/CD](https://sourcecraft.dev/portal/docs/ru/sourcecraft/ci-cd-ref/on.md) — для запуска рабочих процессов при изменении определенных файлов, веток или тегов.
* [Правила ревью кода](https://sourcecraft.dev/portal/docs/ru/sourcecraft/concepts/code-review.md) — для назначения ревьюеров в зависимости от измененных файлов.
* [Политики веток](https://sourcecraft.dev/portal/docs/ru/sourcecraft/concepts/branch-policies.md) — для ограничения создания веток и тегов с определенными именами.

## Базовые паттерны {#basic-patterns}

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

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

Например:

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

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

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

{% note info %}

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

{% endnote %}

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

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

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

### Примеры с учетом порядка {#order-examples}

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

#### Пример включения всех файлов, кроме указанных {#all-except-ones}

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

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

{% note tip %}

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

{% endnote %}

#### Пример исключения с последующим включением {#exclusion-inclusion}

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

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

## Применение в разных контекстах {#contexts}

### События-триггеры CI/CD {#ci-cd-triggers}

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

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

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

Подробнее в разделе [События-триггеры (on)](https://sourcecraft.dev/portal/docs/ru/sourcecraft/ci-cd-ref/on.md).

### Правила ревью кода {#code-review-rules}

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

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

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

Подробнее в разделе [Правила ревью кода в SourceCraft](https://sourcecraft.dev/portal/docs/ru/sourcecraft/concepts/code-review.md).

### Политики веток {#branch-policies}

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

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

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

Подробнее в разделе [Политики веток в SourceCraft](https://sourcecraft.dev/portal/docs/ru/sourcecraft/concepts/branch-policies.md).

#### Полезные ссылки {#see-also}

* [События-триггеры (on)](https://sourcecraft.dev/portal/docs/ru/sourcecraft/ci-cd-ref/on.md)
* [Настроить правила ревью кода в репозитории SourceCraft](https://sourcecraft.dev/portal/docs/ru/sourcecraft/operations/code-review.md)
* [Настроить политику веток в репозитории SourceCraft](https://sourcecraft.dev/portal/docs/ru/sourcecraft/operations/branch-policies.md)