107 votes

Référencement de la branche actuelle dans le readme.md de github

Dans le répertoire de mon dépôt Github readme.md fichier, 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 qui est actuellement visualisée ?

56voto

VonC Points 414372

Pas que je sache.
Support GitHub confirme (par OP Joe Gatt 's commentaire )

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

Je préférerais qu'il y ait un insigne Travis-CI par branche, pour que le lecteur puisse choisir ou considérer ce qui est approprié lorsqu'il voit l'insigne Travis-CI. README.md .


Mise à jour 2016 (3 ans plus tard) : alors que rien n'a changé du côté de GitHub, fedorqui dans la solution de contournement mentionnée dans " Obtenir que Travis Shield sur Github reflète le statut de la branche sélectionnée " par Andrie .
Il suffit d'afficher toutes les branches et leurs badges TravisCI respectifs.

Si vous n'avez que deux ou trois branches, cela peut suffire.

20voto

Dan Dye Points 617

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 courante. Un exemple d'utilisation et de code pre-commit (Python) (pour la question posée) sont ci-dessous.

Utilisation

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 pre-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."

3voto

Meuoi Points 136

J'ai mis à jour le travail de Dan Dye de sorte qu'il est maintenant capable de changer n'importe quelle variable git en un readme. Il fonctionne aussi maintenant avec python 3. Par exemple, la gestion des badges par branche pour les actions Github :

[![Integration Tests](https://github.com/{{ repository.name }}/actions/workflows/integration-tests.yaml/badge.svg?branch={{ current.branch }})](https://github.com/{{ repository.name }}/actions/workflows/integration-tests.yaml?query=branch%3A{{ current.branch }})

Et dans votre pre-commit ajout de fichiers :

.githooks/replace_by_git_vars.py readme.md README.md -v

-v affiche les variables disponibles et plus encore

https://gist.github.com/jclaveau/af2271b9fdf05f7f1983f492af5592f8

Merci beaucoup pour la solution et l'inspiration !

0voto

Alin Enachescu Points 81

La meilleure solution pour moi a été de créer un serveur où j'envoie une requête avec le nom d'utilisateur et le nom du repo et je reçois une image svg avec le statut de construction pour toutes les branches.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X