2016-09-08 25 views
5

ile güncel olup olmadığını kontrol edin. Projemiz korumalı şubeler kullanıyor ve bir PR'nin temel dalının birleştirilmesi için hedef şubeyle güncel olmasını gerektiriyor. Aynı zamanda, PR'in yayılmamış kafasını oluşturmak için Jenkins kullanıyoruz çünkü kullandığımız eklenti, hedef şube değiştiğinde tüm açık PR'leri otomatik olarak yeniden inşa edecek ve bu da bir boru hattını hızlı bir şekilde tıkayabilecektir. Yani, bir PR'nin hedef şube ile güncel olmaksızın açılması durumunda, Jenkins boru hattını hemen durdurabilmek ve komisyeni ilk olarak birleştirmek zorunda bıraktıklarını bildirmek istiyoruz.Bir PR'nın hedef şube

GitHub API'sini kullanarak, bir çekme isteğinin hedef şube ile güncel olup olmadığını anlayabilmek istiyorum. Buna en yakın şey, çekme isteğindeki "birleştirilebilir" öznitelik gibi görünmektedir, ancak bu, yalnızca şubenin güncel olup olmadığını değil, yalnızca güvenli bir otomatik birleştirme yapılıp yapılamayacağını gösterir.

Bakılabilecek bir doğrudan API json etiketi var mı? Değilse, bunu git komutlarıyla manuel olarak kontrol etmek için basit bir yol var mı?

+0

[Zorunlu Durum Denetimleri] (https://github.com/blog/2051-protected-branches-and-required-status-checks) 'Birleştirme işleminden önce şubelerin güncel olmasını isteme' seçeneğine sahiptir. Bu, sorunuzun API bölümüne cevap vermiyor olsa da, dikkate alınması gereken geçerli bir iş akışı olabilir. – osowskit

cevap

5

GitHub'un bu bilgileri API'ları aracılığıyla gösterip göstermediğini bilmiyorum, ancak bunu Git komutlarıyla el ile algılayabilirsiniz. Birleştirme tabanı olarak bilinen şeyi bulmak ve bu işlemin master (veya ana dalınız ne olursa olsun) ile aynı olmasını sağlamak istiyorsunuz. Eğer bir yapı adım olarak bu komut dosyası içeriyorsa bu, çıkış değerleri gerekirse Jenkins işi başarısız olmasına neden olmalıdır

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 

: Bir komut şeklinde

, böyle bir şey olmazdı.