Referenzieren des aktuellen Zweigs in github readme.md

88

In meinen Github-Repos readme.md Datei ich ein Travis-CI-Abzeichen. Ich benutze den folgenden Link:

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

Das offensichtliche Problem ist, dass der Zweig fest codiert ist. Ist es möglich, eine Variable zu verwenden, sodass der Zweig derjenige ist, der gerade angezeigt wird?

Joe Gatt
quelle
Es sollte auch möglich sein, das Repository-Teil auch zu einer Variablen zu machen, damit gegabelte Repositorys den Status des ursprünglichen Repositorys, aus dem sie gegabelt werden, nicht falsch melden.
EoghanM

Antworten:

54

Nicht, dass ich davon Wüste.
GitHub Unterstützung bestätigt (durch OP Joe Gatt ‚s Kommentar )

Die einzige Möglichkeit, dies zu tun, besteht darin, den Link über meinen eigenen Dienst zu leiten, der den http-Referrer-Header des Githubs verwendet, um zu bestimmen, auf welchen Zweig verwiesen wird, und dann das entsprechende Bild von Travis CI abzurufen

Ich würde lieber ein Travis-CI-Abzeichen pro Zweig erstellen, damit der Leser das geeignete auswählen oder in Betracht ziehen kann, wenn er das sieht README.md.


Update 2016 (3 Jahre später): Während sich auf der GitHub-Seite nichts geändert hat, berichtet Fedorqui in der Problemumgehung , die Andrie in " Get Travis Shield auf Github, um den Status ausgewählter Zweige widerzuspiegeln " erwähnt hat .
Zeigen Sie einfach alle Filialen und ihre jeweiligen TravisCI-Abzeichen an.

Wenn Sie nur zwei oder drei Zweige haben, könnte das ausreichen.

VonC
quelle
1
Danke, VonC. Ich habe den Github-Support kontaktiert, wie Sie vorgeschlagen haben, und hier ist ihre Antwort:
Joe Gatt
1
Sie bestätigten, dass dies nicht möglich ist. Sie sagten, der einzige Weg, dies zu tun, wäre, den Link über meinen eigenen Dienst zu leiten, der den http-Referrer-Header des Githubs verwendet, um zu bestimmen, auf welchen Zweig verwiesen wird, und dann das entsprechende Bild von Travis CI abzurufen ...
Joe Gatt
4
Ich habe gerade versucht, den Link über meinen eigenen Dienst weiterzuleiten, aber leider bekomme ich das nicht, HTTP_REFERERwenn das Bild von der README auf GitHub geladen wird. :-(
0xced
3
Nun, ich denke, es ist jetzt aufgrund von SSL Proxied Assets unmöglich zu erreichen .
0xced
2
@fedorqui Soweit ich weiß, ist es nicht verfügbar.
VonC
15

Ich habe dieses Problem mit einem Git-Pre-Commit-Hook umgangen, der die Travis-Zeile in README.md mit dem aktuellen Zweig neu schreibt. Ein Beispiel für die Verwendung und den Python-Code (für die gestellte Frage) finden Sie unten.

Verwendung

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$ 

Python-Code für den Pre-Commit-Code

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
quelle
Es ist schwierig und etwas fragil, den Repo- und Github-Benutzer zu finden, da es keine garantierten Informationen darüber gibt, woher das Repository stammt. Sie können die Repo-URL verwenden, wenn Sie bereit sind, mit der Fragilität zu leben: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
Das ist cool, ich hatte darüber nachgedacht, aber ich wünschte, ich könnte eine magische Variable haben, die sich auf den aktuellen Zweig in Github bezieht, damit mein Commit-Verlauf nicht verschmutzt wird.
Andy
0

Die beste Lösung für mich war, einen Server zu erstellen, auf dem ich eine Abfrage mit dem Benutzernamen und dem Namen des Repos sende und ein SVG-Image mit dem Build-Status für alle Zweige erhalte.

Alin Enachescu
quelle