Odwołanie do bieżącej gałęzi w github readme.md

91

W moim readme.mdpliku repozytorium github mam odznakę Travis-CI. Korzystam z poniższego linku:

https://travis-ci.org/joegattnet/joegattnet_v3.png?branch=staging

Oczywistym problemem jest to, że gałąź jest zakodowana na stałe. Czy można użyć jakiejś zmiennej, aby gałąź była aktualnie przeglądaną?

Joe Gatt
źródło
Powinno być również możliwe uczynienie części repozytorium również zmienną, aby repozytoria rozwidlone nie zgłaszały nieprawidłowo stanu oryginalnego repozytorium, z którego są rozwidlone.
EoghanM

Odpowiedzi:

54

Nie żebym o tym wiedział.
Wsparcia GitHub potwierdza (poprzez OP Joe GATT „s komentarzu )

Jedynym sposobem, aby to zrobić, byłoby przekazanie linku przez moją własną usługę, która użyłaby nagłówka strony odsyłającej http z github, aby określić, do której gałęzi się odwołuje, a następnie pobrać odpowiedni obraz z Travis CI

Wolałbym raczej zrobić jedną plakietkę Travis-CI na oddział, aby czytelnik wybrał lub rozważył stosowny plik README.md.


Aktualizacja 2016 (3 lata później): chociaż nic się nie zmieniło po stronie GitHub, fedorqui donosi o obejściu opisanym w artykulePobierz tarczę Travisa na Github, aby odzwierciedlić stan wybranej gałęzi ” autorstwa Andrie .
Po prostu wyświetl wszystkie gałęzie i odpowiadające im odznaki TravisCI.

Jeśli masz tylko dwie lub trzy gałęzie, to może wystarczyć.

VonC
źródło
1
Dzięki, VonC. Skontaktowałem się z pomocą techniczną github, tak jak zasugerowałeś, i oto ich odpowiedź:
Joe Gatt
1
Potwierdzili, że nie da się tego zrobić. Powiedzieli, że jedynym sposobem na to byłoby przekazanie linku przez moją własną usługę, która użyłaby nagłówka odsyłającego http github do określenia, do której gałęzi się odwołuje, a następnie pobranie odpowiedniego obrazu z Travis CI ...
Joe Gatt
4
Właśnie próbowałem przekazać link przez własną usługę, ale niestety nie otrzymuję, HTTP_REFERERgdy obraz jest ładowany z pliku README na GitHub. :-(
0xced
3
Cóż, wydaje mi się, że teraz jest to niemożliwe ze względu na zasoby proxy SSL .
Wyświetlono
2
@fedorqui O ile wiem, nie jest dostępny.
VonC
15

Obejrzałem ten problem za pomocą haka git pre-commit, który ponownie zapisuje wiersz Travisa w pliku README.md z bieżącą gałęzią. Poniżej znajduje się przykład użycia i kodu pre-commit (Python) (dla zadanego pytania).

Stosowanie

dandye$ git checkout -b feature123 origin/master
Branch feature123 set up to track remote branch master from origin.
Switched to a new branch 'feature123'
dandye$ echo "* Feature123" >> README.md 
dandye$ git add README.md 
dandye$ git commit -m "Added Feature123"
Starting pre-commit hook...
Replacing:
    [![Build Status](https://travis-ci.org/joegattnet/joegattnet_v3.png?branch=master)][travis]

with:
    [![Build Status](https://travis-ci.org/joegattnet/joegattnet_v3.png?branch=feature123)][travis]

pre-commit hook complete.
[feature123 54897ee] Added Feature123
 1 file changed, 2 insertions(+), 1 deletion(-)
dandye$ cat README.md |grep "Build Status"
[![Build Status](https://travis-ci.org/joegattnet/joegattnet_v3.png?branch=feature123)][travis]
dandye$ 

Kod Pythona dla kodu przed zatwierdzeniem

dandye$ cat .git/hooks/pre-commit
#!/usr/bin/python
"""
Referencing current branch in github readme.md[1]

This pre-commit hook[2] updates the README.md file's
Travis badge with the current branch. Gist at[4].

[1] http://stackoverflow.com/questions/18673694/referencing-current-branch-in-github-readme-md
[2] http://www.git-scm.com/book/en/v2/Customizing-Git-Git-Hooks
[3] https://docs.travis-ci.com/user/status-images/
[4] https://gist.github.com/dandye/dfe0870a6a1151c89ed9
"""
import subprocess

# Hard-Coded for your repo (ToDo: get from remote?)
GITHUB_USER="joegattnet"
REPO="joegattnet_v3"

print "Starting pre-commit hook..."

BRANCH=subprocess.check_output(["git",
                                "rev-parse",
                                "--abbrev-ref",
                                "HEAD"]).strip()

# String with hard-coded values
# See Embedding Status Images[3] for alternate formats (private repos, svg, etc)

#  [![Build Status](https://travis-ci.org/
#  joegattnet/joegattnet_v3.png?
#  branch=staging)][travis]

# Output String with Variable substitution
travis="[![Build Status](https://travis-ci.org/" \
       "{GITHUB_USER}/{REPO}.png?" \
       "branch={BRANCH})][travis]\n".format(BRANCH=BRANCH,
                                            GITHUB_USER=GITHUB_USER,
                                            REPO=REPO)

sentinel_str="[![Build Status]"

readmelines=open("README.md").readlines()
with open("README.md", "w") as fh:
    for aline in readmelines:
        if sentinel_str in aline and travis != aline:
            print "Replacing:\n\t{aline}\nwith:\n\t{travis}".format(
                   aline=aline,
                   travis=travis)
            fh.write(travis)
        else:
            fh.write(aline)

subprocess.check_output(["git", "add", "README.md" ])

print "pre-commit hook complete."
Dan Dye
źródło
Uzyskanie użytkownika repozytorium i github jest trudne i nieco kruche, ponieważ nie ma gwarantowanej informacji o pochodzeniu repozytorium. Możesz użyć repo-URL, jeśli jesteś przygotowany na życie z kruchością:REPOurl=subprocess.check_output(['git','config','--local', 'remote.origin.url']).decode()
DrSAR,
GITHUB_USER=re.match('.*:([a-zA-Z0-9]*)\/', REPOurl).groups()[0]
DrSAR
REPO=re.match('.*\/([a-zA-Z0-9]*).git', REPOurl).groups()[0]
DrSAR
2
To fajne, myślałem o tym, ale chciałbym mieć magiczną zmienną, która odnosi się do bieżącej gałęzi w githubie, aby moja historia zmian nie została zanieczyszczona.
Andy
0

Najlepszym rozwiązaniem dla mnie było stworzenie serwera, na którym wysyłam zapytanie z nazwą użytkownika i nazwą repozytorium i otrzymuję obraz svg ze stanem kompilacji dla wszystkich gałęzi.

Alin Enachescu
źródło