2016-09-08 106 views
5

Nasz projekt korzysta z chronionych oddziałów i wymaga oddziału podstawowego PR, aby był aktualny w oddziale docelowym w celu scalenia. Używamy również Jenkinsa do budowania niezajętych głów PR, ponieważ wtyczka, której używamy, automatycznie odbuduje wszystkie otwarte PRy, gdy zmieni się gałąź docelowa, co może szybko zatykać potok. Tak więc, w przypadku, gdy PR jest otwarty bez aktualności z docelową gałęzią, chcemy być w stanie zatrzymać rurociąg Jenkins od razu i powiadomić o tym fakcie, że muszą się najpierw scalić.Sprawdź, czy PR jest aktualny w docelowym oddziale

Korzystając z interfejsu API GitHub, chciałbym móc stwierdzić, czy żądanie pobrania jest aktualne w gałęzi docelowej. Najbliższą rzeczą wydaje się być atrybut "scalania" na żądanie ściągnięcia, ale wygląda na to, że wskazuje tylko, czy można wykonać bezpieczne automatyczne scalanie, a nie to, czy gałąź jest już aktualna.

Czy istnieje bezpośredni znacznik API Json, który można obejrzeć? Jeśli nie, czy istnieje prosty sposób sprawdzenia tego ręcznie za pomocą poleceń git?

+0

[Wymagane kontrole statusu] (https://github.com/blog/2051-protected-branches-and-required-status-checks) mają opcję "Żądaj oddziału, aby była aktualna przed scaleniem". Chociaż nie jest to odpowiedź na część dotyczącą API pytania, może to być prawidłowy przepływ pracy do rozważenia. – osowskit

Odpowiedz

5

Nie wiem, czy GitHub udostępnia te informacje za pośrednictwem interfejsu API, ale można to wykryć ręcznie za pomocą poleceń Git. Chcesz znaleźć tak zwaną bazę scalania i upewnij się, że to zatwierdzenie jest takie samo jak końcówka master (lub jakakolwiek jest twoja główna gałąź).

W formie skryptu, to będzie wyglądać mniej więcej tak:

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 

Jeśli to ten skrypt jako etapu budowy, wówczas wartości wyjściowe powinny powodować Jenkins niepowodzenie zadanie, jeśli to konieczne.