Политики веток в SourceCraft
Политики веток — это набор правил и ограничений, которые применяются к определенным веткам и тегам в репозитории. С помощью политик вы можете контролировать процесс внесения изменений, обеспечивать ревью кода, соблюдать правильность именования и условия создания веток и тегов, а также защищать ветки от случайных коммитов или прямого пуша.
Например, можно настроить политику так, чтобы в основную ветку попадали только проверенные и одобренные изменения. Таким образом поддерживаются стабильность и качество кода, повышается прозрачность процесса разработки и минимизируется риск ошибок.
Конфигурация политик задается для конкретного репозитория и хранится в файле .sourcecraft/branches.yaml. Для всего репозитория действует конфигурация, которая размещена в основной ветке, например master или main. Вы также можете задать конфигурацию на уровне организации SourceCraft.
Общий вид конфигурации политики в .sourcecraft/branches.yaml:
branch_protection:
policies:
- target: <тип_защищаемого_ресурса>
matches: "<фильтр>"
message: "<сообщение_пользователю_при_срабатывании>"
rules:
- <правило_1>
- <правило_2>
Где:
-
target— тип защищаемого ресурса. Обязательный параметр. Возможные значения:default_branch— основная ветка, напримерmasterилиmain.branch— ветка.tag— тег.
-
matches— фильтр или список фильтров по имени защищаемого ресурса. Обязательный параметр дляtarget: branchиtarget: tag. -
message— сообщение, которое будет показываться пользователю при срабатывании политики. Обязательный параметр. -
rules— правило или список правил, которые будут применены к защищаемому ресурсу. Обязательный параметр. Возможные значения:-
prevent_force_push— нельзя переписывать историю коммитов в ветке (выполнятьforce push). -
prevent_non_pr_changes— нельзя напрямую вносить правки в ветку (выполнятьpush), только через предложение изменений. -
prevent_all_changes— нельзя выполнять любые действия с веткой или тегом.Важно
Правило
prevent_all_changesустарело. Вместо него используйте связку правилprevent_creationиprevent_update. -
prevent_deletion— нельзя удалять ветку или тег. -
prevent_creation— нельзя создавать ветку или тег. -
prevent_update— нельзя вносить изменения в ветку или тег после создания (запрещеныpush,force push, удаление и слияние через предложение изменений).
-
Подробнее на странице Настроить политику веток в репозитории SourceCraft.
Важно
Обойти правила политики веток, например чтобы поправить конфигурацию в .sourcecraft/branches.yaml, могут только пользователи с ролью Администратор репозитория.
Подробнее в разделе Включить обход политики веток для администратора репозитория.
Пример конфигурации
branch_protection:
policies:
## Запрет переписывания истории коммитов, внесения правок без
## предложения изменений, а также удаления основной ветки
- target: default_branch
message: "Direct push into main branch is forbidden, create PR first"
rules:
- prevent_force_push
- prevent_non_pr_changes
- prevent_deletion
## Запрет создания веток с названиями, соответствующими фильтрам
- target: branch
matches: ["**", "!OO-**/**", "!hotfix/**", "!chore/**", "!release/**"]
message: "Please use proper branch naming"
rules:
- prevent_creation
## Запрет создания тегов с названиями, соответствующими фильтрам
- target: tag
matches: "gitcore-**"
message: "Manual tag creation is forbidden, please use Releaser"
rules:
- prevent_creation
Также смотрите пример политики веток в репозитории SourceCraft test-serverless-cube.
Совет
Для групповой фильтрации рекомендуется использовать паттерн **, поскольку простой паттерн * не предусматривает совпадения в выражениях с /.
Совет
Настройка и просмотр конфигураций репозитория доступны в интерфейсе SourceCraft в разделе
Автоматическое удаление веток после слияния
В файле .sourcecraft/branches.yaml можно настроить правила, по которым ветка-источник предложения изменений будет автоматически удаляться после слияния с целевой веткой. Это помогает поддерживать репозиторий в чистоте и не накапливать в нем уже не используемые ветки.
Правила задаются в секции pull_request.branch_cleanup.matches с помощью фильтров по путям, например:
pull_request:
branch_cleanup:
matches: ["**", "!hotfix/**", "!chore/**", "!release/**"]
В этом примере автоматическое удаление включено для всех веток, кроме веток hotfix/**, chore/** и release/**.
Конфигурация в файле .sourcecraft/branches.yaml задает поведение по умолчанию на уровне репозитория. В отдельном предложении изменений этот параметр можно переопределить с помощью опции Удалять ветку-источник после слияния в блоке Настройки слияния. Подробнее на странице Работа с предложениями изменений в SourceCraft.
Схема политики веток в формате JSON
"branch_protection_policy": {
"type": "object",
"additionalProperties": false,
"properties": {
"target": {
"title": "Policy Target",
"description": "Type of target this policy is applied to",
"type": "string",
"enum": [
"default_branch",
"branch",
"tag"
]
},
"message": {
"title": "Error message",
"description": "Custom message that will be displayed if policy is violated",
"type": "string"
},
"rules": {
"title": "Rules",
"description": "Set of rules. The 'prevent_all_changes' value is deprecated; use 'prevent_creation' together with 'prevent_update' instead.",
"type": "array",
"items": {
"type": "string",
"enum": [
"prevent_force_push",
"prevent_non_pr_changes",
"prevent_all_changes",
"prevent_deletion",
"prevent_creation",
"prevent_update"
]
}
},
"matches": {
"title": "Glob Match",
"description": "For tag and branch target, pattern matcher. See globstar patterns for the details",
"oneOf": [
{
"type": "string"
},
{
"type": "array",
"items": {
"type": "string"
}
}
]
}
},
"required": [
"target",
"message",
"rules"
]
}
Важно
Правило prevent_all_changes устарело. Вместо него используйте связку правил prevent_creation и prevent_update.