Настроить политику веток в репозитории SourceCraft

Политики веток — это набор правил и ограничений, которые применяются к определенным веткам и тегам в репозитории. С помощью политик вы можете контролировать процесс внесения изменений, обеспечивать ревью кода, соблюдать правильность именования и условия создания веток и тегов, а также защищать ветки от случайных коммитов или прямого пуша.

Подробнее см. на странице Политики веток в 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_deletion — нельзя удалять ветку или тег.
    • prevent_creation — нельзя создавать ветку или тег.

Полную схему см. в подразделе Схема политики веток в формате JSON.

Чтобы настроить политики веток в репозитории:

  1. Склонируйте репозиторий:

    1. Установите Git.

    2. Откройте главную страницу SourceCraft.

    3. На вкладке Домой в секции Ваша мастерская перейдите в раздел Репозитории и выберите репозиторий.

      Также вы можете открыть любой публичный репозиторий.

    4. На странице репозитория в правом верхнем углу нажмите кнопку Клонировать.

    5. Из поля HTTPS или SSH скопируйте ссылку для клонирования репозитория.

      В зависимости от протокола подключения для клонирования используются разные домены:

      Протокол

      Домен

      Ссылка для клонирования

      HTTPS

      git.sourcecraft.dev

      https://git@git.sourcecraft.dev/<слаг_организации>/<слаг_репозитория>.git

      SSH

      ssh.sourcecraft.dev

      ssh://ssh.sourcecraft.dev/<слаг_организации>/<слаг_репозитория>.git

    6. В терминале выполните команду:

      git clone <ссылка_для_клонирования_репозитория>
      
      Пример команды для клонирования репозитория с документацией SourceCraft
      git clone https://git@git.sourcecraft.dev/sourcecraft/documentation.git
      

      Важно

      Чтобы склонировать приватный или внутренний репозиторий, аутентифицируйтесь с помощью персонального токена (PAT) или SSH-ключа.

    7. Перейдите в склонированный репозиторий:

      cd <имя_репозитория>
      
  2. Сформируйте файл конфигурации политики веток .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.

    Совет

    Для групповой фильтрации рекомендуется использовать паттерн **, поскольку простой паттерн * не предусматривает совпадения в выражениях с /.

  3. Добавьте файл конфигурации политики веток в индекс git, сделайте коммит и отправьте изменения в удаленную ветку main:

    git add .sourcecraft/branches.yaml
    git commit -m "Added branch policies configuration"
    git push -u origin main
    
  4. Чтобы проверить срабатывание политики веток, внесите изменения в файлы в основной ветке, сделайте коммит и попробуйте отправить изменения в удаленный репозиторий:

    git add .
    git commit -m "Test changes"
    git push -u origin main
    

    В результате вы получите ошибку с сообщением Direct push into main branch is forbidden, create PR first.

Включить обход политики веток для администратора репозитория

Важно

Обойти правила политики веток, например чтобы поправить конфигурацию в .sourcecraft/branches.yaml, могут только пользователи с ролью Администратор репозитория.

  1. Откройте главную страницу SourceCraft.
  2. На вкладке Домой в секции Ваша мастерская перейдите в раздел Репозитории.
  3. Выберите репозиторий.
  4. На странице репозитория в разделе Настройки репозитория перейдите в секцию Общее.
  5. В блоке Политика защиты веток включите опцию Разрешить переопределение.
  6. Нажмите Обновить настройки.

См. также