Référencer la branche actuelle dans github readme.md

91

Dans le readme.mdfichier de mon dépôt github, j'ai un badge Travis-CI. J'utilise le lien suivant:

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

Le problème évident est que la branche est codée en dur. Est-il possible d'utiliser une sorte de variable pour que la branche soit celle actuellement visualisée?

Joe Gatt
la source
Il devrait également être possible de faire de la partie référentiel une variable également, afin que les référentiels fourchus ne signalent pas de manière incorrecte l'état du référentiel d'origine dont ils sont issus.
EoghanM

Réponses:

54

Pas que je sache de.
Le support GitHub confirme (via le commentaire de OP Joe Gatt )

La seule façon de le faire serait de passer le lien via mon propre service qui utiliserait l'en-tête de référence http de github pour déterminer quelle branche est référencée, puis récupérer l'image appropriée de Travis CI

Je préférerais créer un badge Travis-CI par succursale, que le lecteur choisisse ou considère comme approprié lorsqu'il voit le README.md.


Mise à jour 2016 (3 ans plus tard): alors que rien n'a changé du côté de GitHub, fedorqui signale la solution de contournement mentionnée dans « Obtenez Travis Shield sur Github pour refléter l' état de la branche sélectionnée » par Andrie .
Affichez simplement toutes les succursales et leurs badges TravisCI respectifs.

Si vous n'avez que deux ou trois succursales, cela pourrait suffire.

VonC
la source
1
Merci, VonC. J'ai contacté le support github, comme vous l'avez suggéré et voici leur réponse:
Joe Gatt
1
Ils ont confirmé que cela ne pouvait pas être fait. Ils ont dit que le seul moyen de le faire serait de passer le lien via mon propre service qui utiliserait l'en-tête de référence http de github pour déterminer quelle branche est référencée, puis récupérer l'image appropriée de Travis CI ...
Joe Gatt
4
J'ai juste essayé de passer le lien via mon propre service mais malheureusement je ne reçois pas le HTTP_REFERERquand l'image est chargée à partir du README sur GitHub. :-(
0xcédé
3
Eh bien, je suppose que c'est maintenant impossible à réaliser à cause des actifs proxy SSL .
0xced
2
@fedorqui Autant que je sache, il n'est pas disponible.
VonC le
15

J'ai contourné ce problème avec un hook git pre-commit qui réécrit la ligne Travis dans le README.md avec la branche actuelle. Un exemple d'utilisation et de code de pré-validation (Python) (pour la question posée) est ci-dessous.

Usage

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$ 

Code Python pour le code pré-commit

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
la source
Obtenir l'utilisateur du référentiel et de github est délicat et quelque peu fragile car il n'y a aucune information garantie sur l'origine du référentiel. Vous pouvez utiliser le repo-URL si vous êtes prêt à vivre avec la fragilité:REPOurl=subprocess.check_output(['git','config','--local', 'remote.origin.url']).decode()
DrSAR
GITHUB_USER=re.match('.*:([a-zA-Z0-9]*)\/', REPOurl).groups()[0]
DrSAR du
REPO=re.match('.*\/([a-zA-Z0-9]*).git', REPOurl).groups()[0]
DrSAR du
2
C'est cool, j'avais pensé à cela mais j'aurais aimé pouvoir avoir une variable magique qui se réfère à la branche actuelle dans github afin que mon historique de commit ne soit pas pollué.
Andy
0

La meilleure solution pour moi était de créer un serveur sur lequel j'envoie une requête avec le nom d'utilisateur et le nom du dépôt et d'obtenir une image svg avec l'état de construction pour toutes les branches.

Alin Enachescu
la source