Как применить формат для сообщения о фиксации слияния (запрос на извлечение) в BitBucket

#bitbucket

#bitbucket

Вопрос:

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

У каждого разработчика есть один (или несколько) форк (ов). Наш рабочий процесс заключается в том, чтобы отправить ветку функций / ошибок в fork и создать запрос на извлечение из этой ветки. Два других разработчика должны просмотреть и 1 запрос на извлечение, прежде чем его можно будет объединить.

Когда кто-то нажимает кнопку Объединить, BitBucket отображает диалоговое окно с заголовком «Запрос на извлечение слияния». На этом этапе разработчик может отредактировать текстовое сообщение, которое зарегистрировано для слияния, прежде чем нажать вторую кнопку слияния. Это сообщение, которое должно соответствовать определенному формату.

Я прочитал документацию здесь: https://scriptrunner.adaptavist.com/latest/bitbucket/StashMergeChecks.html В нем есть несколько очень конкретных примеров, но ничего, что относится к нашему варианту использования. Мне не удалось найти хорошую ссылку общего назначения для создания проверок слияния.

Я могу написать условие, которое проверяет наличие определенного строкового значения:

 mergeRequest.message == "My Message"
  

Но мне это нужно для проверки на соответствие регулярному выражению.
Как я могу написать перехват перед слиянием, чтобы отклонить слияние, если сообщение не соответствует регулярному выражению?

Добавление

Из документации кажется, что код сценария проверки условий будет подходящим местом для обеспечения выполнения этого условия. Скрипт может быть добавлен Repository Settings > SCRIPTRUNNER > Script Merge Checks > Conditional merge check . Для проверки условного слияния показан длинный список примеров, включая такие вещи, как:

  • Текущий пользователь в определенной группе
  • Измененные файлы содержат файлы .XYZ
  • Измененные файлы в конфиденциальном каталоге
  • Целевая ветвь — release

После некоторого поиска и эксперимента я обнаружил, что могу блокировать слияния на основе сообщения о фиксации. Но пока я нашел только примеры сравнения целых строк с постоянными строковыми выражениями. Я не нашел, как использовать регулярное выражение в этом сравнении.

Ответ №1:

OP здесь после того, как на несколько недель отодвинул эту проблему на задний план. Проблема решена. Вы можете сверить свои сообщения о фиксации слияния с регулярным выражением без использования плагина. Решение здесь для тех, кто ищет с той же проблемой.

Во-первых, было сложнее, чем должно было быть, найти документацию для объектов, которые наиболее важны для написания сценария проверки слияния. Итак, вот несколько ссылок для текущего API 6.3.0:

  • PullRequest — В конце концов, мой скрипт не использовал этот объект, но запрос на извлечение тесно связан с запросом на слияние, и другим может понадобиться документация.

  • MergeRequest — у этого объекта есть метод для определения контекста (см. Ниже).

Во-вторых, сценарий проверки слияния запускается в двух разных контекстах: (1) когда bitbucket пытается определить, следует ли включать / отключать кнопку слияния на странице запроса на извлечение, и (2) когда кто-то нажимает кнопку слияния в диалоговом окне запроса на извлечение слияния. В первом контексте сообщение о слиянии равно нулю, поэтому оно не может соответствовать регулярному выражению. И в любом случае нет смысла отключать кнопку в этом случае. Я действительно хотел, чтобы проверка выполнялась только во втором контексте. Итак, сценарию нужен способ различать контексты.

В-третьих, объект message представляет собой строку Java, поэтому скрипт может вызвать matches() метод, чтобы проверить, соответствует ли сообщение регулярному выражению.

После того, как у вас под рукой будет вся информация, написать сценарий довольно просто:

 // the message regex
String pattern = "(PATTERN1|PATTERN2|etc)"
// reject if not dry-run and
//           message doesn't match regex
! mergeRequest.isDryRun() amp;amp;
    ! mergeRequest.message.matches(pattern)
  

Ответ №2:

Вы можете попробовать некоторые плагины для Bitbucket, такие как YACC:

https://marketplace.atlassian.com/apps/1211854/yet-another-commit-checker ?хостинг = сервер и вкладка = обзор

Если это не соответствует вашим требованиям, вы можете написать свой собственный: https://developer.atlassian.com/server/bitbucket/how-tos/hooks-merge-checks-guide /

Комментарии:

1. Итак, вы говорите, что необходимо использовать плагин для проверки соответствия сообщения о фиксации слияния регулярному выражению? Написание плагина кажется более сложным решением, чем я ожидал.

2. Надеюсь, до этого не дойдет. Вы могли бы открыть проблему с сопровождающим YACC: github.com/sford/yet-another-commit-checker Я использую плагин File Hooks, и он больше не поддерживается, поэтому мне пришлось обновить плагин из-за устаревших API. Это случай, когда нужно заплатить третьей стороне много денег, обратиться к существующему разработчику плагина или сделать это самостоятельно.

3. @LeeJenkins, вы, кажется, не понимаете, что уже используете плагин. » ScriptRunner для Bitbucket » — это сторонний платный плагин от Adaptivist. YACC — это еще один плагин, и в него встроена проверка слияния регулярных выражений. Для этого гораздо проще использовать YACC, чем писать скрипт для плагина ScriptRunner.