Referência do branch atual no github readme.md


89

No readme.mdarquivo do meu repositório github, tenho um emblema Travis-CI. Eu uso o seguinte link:

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

O problema óbvio é que o ramo está codificado. É possível usar algum tipo de variável para que o ramo seja o que está sendo visualizado atualmente?



Também deve ser possível tornar a parte do repositório uma variável também, para que os repositórios bifurcados não relatem incorretamente o status do repositório original do qual foram bifurcados.
EoghanM

Respostas:


54

Não que eu saiba.
Apoio GitHub confirma (através OP Joe Gatt 's comentário )

A única maneira de fazer isso seria passar o link por meio do meu próprio serviço, que usaria o cabeçalho de referência http do github para determinar qual branch está sendo referenciado e, em seguida, buscar a imagem apropriada no Travis CI

Prefiro fazer um crachá Travis-CI por ramo, para o leitor escolher ou considerar o apropriado ao ver o README.md.


Atualização de 2016 (3 anos depois): embora nada tenha mudado no lado do GitHub, fedorqui relata na solução alternativa mencionada em " Obtenha o Travis Shield no Github para refletir o status do branch selecionado " por Andrie .
Basta exibir todos os ramos e seus respectivos crachás TravisCI.

Se você tiver apenas dois ou três ramos, isso pode ser o suficiente.


1
Obrigado, VonC. Entrei em contato com o suporte do github, como você sugeriu e aqui está a resposta:
Joe Gatt

1
Eles confirmaram que isso não pode ser feito. Eles disseram que a única maneira de fazer isso seria passar o link pelo meu próprio serviço, que usaria o cabeçalho de referência http do github para determinar qual branch está sendo referenciado e, em seguida, buscar a imagem apropriada no Travis CI ...
Joe Gatt,

4
Eu apenas tentei passar o link pelo meu próprio serviço, mas infelizmente não consigo entender HTTP_REFERERquando a imagem é carregada do README do GitHub. :-(
0xced

3
Bem, acho que agora é impossível de conseguir por causa de SSL Proxied Assets .
0xced

2
@fedorqui Pelo que eu sei, não está disponível.
VonC

15

Eu contornei esse problema com um gancho pré-commit do git que reescreve a linha Travis no README.md com o branch atual. Um exemplo de uso e código de pré-confirmação (Python) (para a pergunta feita) estão abaixo.

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 o código pré-confirmação

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

Obter o usuário repo e github é complicado e um tanto frágil, pois não há informações garantidas de onde o repositório vem. Você pode usar o repo-URL se estiver preparado para conviver com a fragilidade:REPOurl=subprocess.check_output(['git','config','--local', 'remote.origin.url']).decode()
DrSAR

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

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

2
Isso é legal, eu tinha pensado sobre isso, mas gostaria de ter uma variável mágica que se refere ao branch atual no github para que meu histórico de commits não seja poluído.
Andy

0

A melhor solução para mim foi criar um servidor onde eu envio uma consulta com o nome de usuário e o nome do repo e obtenho uma imagem SVG com o status de construção de todos os branches.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.