Политики веток в SourceCraft
Политики веток — это набор правил и ограничений, которые применяются к определенным веткам и тегам в репозитории. С помощью политик вы можете контролировать процесс внесения изменений, обеспечивать ревью кода, соблюдать правильность именования и условия создания веток и тегов, а также защищать ветки от случайных коммитов или прямого пуша.
Например, можно настроить политику так, чтобы в основную ветку попадали только проверенные и одобренные изменения. Таким образом поддерживаются стабильность и качество кода, повышается прозрачность процесса разработки и минимизируется риск ошибок.
Конфигурация политик задается для конкретного репозитория и хранится в файле .sourcecraft/branches.yaml. Для всего репозитория действует конфигурация, которая размещена в основной ветке, например master или main.
Общий вид конфигурации политики в .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_deletion— нельзя удалять ветку или тег.prevent_creation— нельзя создавать ветку или тег.
Важно
Скоро перестанет поддерживаться хранение конфигурации CI/CD, правил ревью кода и политик веток в едином файле .src.ci.yaml в корне репозитория. Используйте отдельные файлы .sourcecraft/ci.yaml, .sourcecraft/review.yaml и .sourcecraft/branches.yaml.
Подробнее см. на странице Настроить политику веток в репозитории 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.
Схема политики веток в формате 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",
"type": "array",
"items": {
"type": "string",
"enum": [
"prevent_force_push",
"prevent_non_pr_changes",
"prevent_all_changes",
"prevent_deletion",
"prevent_creation"
]
}
},
"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"
]
}