Политики веток в 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"
          ]
        }