Riferimento al ramo corrente in github readme.md


91

Nel readme.mdfile del mio repository GitHub ho un badge Travis-CI. Uso il seguente link:

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

Il problema ovvio è che il ramo è hardcoded. È possibile utilizzare una sorta di variabile in modo che il ramo sia quello attualmente visualizzato?



Dovrebbe anche essere possibile rendere la parte del repository anche una variabile, in modo che i repository biforcati non riportino erroneamente lo stato del repository originale da cui provengono.
EoghanM

Risposte:


54

Non che io sappia.
Il supporto di GitHub conferma (tramite il commento di OP Joe Gatt )

L'unico modo per farlo sarebbe passare il collegamento attraverso il mio servizio che userebbe l'intestazione del referrer http di GitHub per determinare a quale ramo si fa riferimento e quindi recuperare l'immagine appropriata da Travis CI

Preferirei creare un badge Travis-CI per filiale, affinché il lettore scelga o consideri appropriato quando vede il README.md.


Aggiornamento 2016 (3 anni dopo): sebbene nulla sia cambiato dal lato GitHub, fedorqui riporta la soluzione alternativa menzionata in " Ottieni Travis Shield su Github per riflettere lo stato del ramo selezionato " di Andrie .
Visualizza semplicemente tutte le filiali e i rispettivi badge TravisCI.

Se hai solo due o tre rami, potrebbe essere sufficiente.


1
Grazie, VonC. Ho contattato l'assistenza di GitHub, come suggerito ed ecco la loro risposta:
Joe Gatt

1
Hanno confermato che questo non può essere fatto. Hanno detto che l'unico modo per farlo sarebbe passare il collegamento attraverso il mio servizio che userebbe l'intestazione del referrer http di GitHub per determinare a quale ramo si fa riferimento e quindi recuperare l'immagine appropriata da Travis CI ...
Joe Gatt

4
Ho appena provato a passare il collegamento tramite il mio servizio, ma sfortunatamente non ottengo il messaggio HTTP_REFERERquando l'immagine viene caricata dal README su GitHub. :-(
0xced

3
Bene, immagino che ora sia impossibile da ottenere a causa delle risorse proxy SSL .
0xced

2
@fedorqui Per quanto ne so, non è disponibile.
VonC

15

Ho aggirato questo problema con un hook pre-commit git che riscrive la riga di Travis nel README.md con il ramo corrente. Di seguito sono riportati un esempio di utilizzo e codice pre-commit (Python) (per la domanda posta).

Utilizzo

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$ 

Codice Python per il codice 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."

Ottenere l'utente repo e github è complicato e alquanto fragile poiché non ci sono informazioni garantite sulla provenienza del repository. Puoi utilizzare l'URL del repository se sei pronto a convivere con 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

REPO=re.match('.*\/([a-zA-Z0-9]*).git', REPOurl).groups()[0]
DrSAR

2
È bello, ci avevo pensato ma vorrei poter avere una variabile magica che si riferisce al ramo corrente in GitHub in modo che la mia cronologia dei commit non venga inquinata.
Andy

0

La soluzione migliore per me era creare un server in cui invio una query con nome utente e nome del repository e ottenere un'immagine svg con lo stato di compilazione per tutti i rami.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.