2016-09-08 3 views
5

Наш проект использует защищенные филиалы и требует, чтобы базовая ветвь PR была обновлена ​​с целевой веткой для слияния. Мы также используем Jenkins для создания невостребованной главы PR, потому что плагин, который мы используем, автоматически перестраивает все открытые PR, когда изменяется целевая ветвь, которая может быстро засорить конвейер. Таким образом, в случае, когда PR открывается, не обновляясь с целевой ветвью, мы хотим иметь возможность немедленно остановить конвейер Jenkins и сообщить об этом коммиттеру, который им нужно сначала слить.Проверьте, соответствует ли PR актуальной ветке адресата

Итак, используя API GitHub, я хотел бы узнать, соответствует ли запрос на перенос актуальной ветвью. Ближайшая вещь для этого, похоже, является атрибутом «mergeable» при запросе на перенос, но похоже, что это только указывает, будет ли выполнено безопасное автоматическое слияние CAN, а не то, что ветка уже обновлена.

Есть ли прямой тег API json, на который можно смотреть? Если нет, есть ли простой способ проверить это вручную с помощью команд git?

+0

[Обязательные проверки статуса] (https://github.com/blog/2051-protected-branches-and-required-status-checks) имеют возможность «требовать, чтобы филиалы обновлялись до слияния». Хотя это не отвечает части API вашего вопроса, это может быть допустимый рабочий процесс для рассмотрения. – osowskit

ответ

5

Я не знаю, предоставляет ли GitHub эту информацию через свой API, но вы можете обнаружить это вручную с помощью команд Git. Вы хотите найти то, что известно как база слияния, и убедитесь, что это фиксация совпадает с концом master (или независимо от того, какая ваша основная ветка).

В виде сценария, это будет выглядеть примерно так:

if [ $(git merge-base @ master) == $(git rev-parse master) ] 
then 
    echo "Your branch is up to date." 
    exit 0 
else 
    echo "You need to merge/rebase." 
    exit 1 
fi 

Если включить этот скрипт в качестве шага сборки, то значения выхода должно вызывать Дженкинс провалить работу, если это необходимо.

Смежные вопросы