Haciendo referencia a la rama actual en github readme.md


91

En el readme.mdarchivo de mi repositorio de github tengo una insignia de Travis-CI. Utilizo el siguiente enlace:

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

El problema obvio es que la rama está codificada. ¿Es posible utilizar algún tipo de variable para que la rama sea la que se está viendo actualmente?



También debería ser posible convertir la parte del repositorio en una variable, de modo que los repositorios bifurcados no informen incorrectamente del estado del repositorio original desde el que se bifurcan.
EoghanM

Respuestas:


54

No que yo sepa.
Apoyo GitHub confirma (a través de OP Joe Gatt 's comentario )

La única forma de hacer esto sería pasar el enlace a través de mi propio servicio, que usaría el encabezado de referencia http de github para determinar a qué rama se hace referencia y luego buscar la imagen apropiada de Travis CI

Prefiero hacer una insignia de Travis-CI por rama, para que el lector elija o considere la apropiada cuando vea el README.md.


Actualización 2016 (3 años después): aunque nada ha cambiado en el lado de GitHub, fedorqui informa en la solución alternativa mencionada en " Obtener Travis Shield en Github para reflejar el estado de la rama seleccionada " por Andrie .
Simplemente muestre todas las ramas y sus respectivas insignias TravisCI.

Si solo tiene dos o tres sucursales, eso podría ser suficiente.


1
Gracias, VonC. Me comuniqué con el soporte de github, como sugirió y aquí está su respuesta:
Joe Gatt

1
Confirmaron que esto no se puede hacer. Dijeron que la única forma de hacer esto sería pasar el enlace a través de mi propio servicio, que usaría el encabezado de referencia http de github para determinar a qué rama se hace referencia y luego buscar la imagen apropiada de Travis CI ...
Joe Gatt

4
Intenté pasar el enlace a través de mi propio servicio, pero desafortunadamente no obtengo HTTP_REFERERcuando se carga la imagen desde el archivo README en GitHub. :-(
0xced

3
Bueno, supongo que ahora es imposible de lograr debido a los activos proxy SSL .
0xced

2
@fedorqui Hasta donde yo sé, no está disponible.
VonC

15

Resolví este problema con un gancho de confirmación previa de git que reescribe la línea de Travis en README.md con la rama actual. A continuación se muestra un ejemplo de uso y código de confirmación previa (Python) (para la pregunta que se hace).

Uso

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$ 

Código Python para el código de confirmación previa

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

Obtener el repositorio y el usuario de github es complicado y algo frágil, ya que no hay información garantizada de dónde proviene el repositorio. Puede usar la URL del repositorio si está preparado para vivir con la fragilidad: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
Eso es genial, había pensado en esto, pero me gustaría poder tener una variable mágica que se refiera a la rama actual en github para que mi historial de confirmaciones no se contamine.
Andy

0

La mejor solución para mí fue crear un servidor donde envío una consulta con el nombre de usuario y el nombre del repositorio y obtengo una imagen svg con el estado de compilación de todas las ramas.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.