Ссылка на текущую ветку в github readme.md

91

В моем readme.mdфайле репозитория github у меня есть значок Travis-CI. Я использую следующую ссылку:

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

Очевидная проблема в том, что ветка жестко запрограммирована. Можно ли использовать какую-то переменную, чтобы ветка была той, которая просматривается в данный момент?

Джо Гатт
источник
Также должна быть возможность сделать часть репозитория переменной, чтобы разветвленные репозитории не сообщали неверно о состоянии исходного репозитория, из которого они были разветвлены.
EoghanM

Ответы:

54

Не то, что я знаю из.
Поддержка GitHub подтверждает (через OP Джо Gatt «S комментарий )

Единственный способ сделать это - передать ссылку через мою собственную службу, которая будет использовать заголовок HTTP-реферера github, чтобы определить, на какую ветку ссылается, а затем получить соответствующее изображение из Travis CI.

Я бы предпочел сделать один значок Travis-CI на ветку, чтобы читатель мог выбрать или подумать о подходящем при просмотре README.md.


Обновление 2016 (3 года спустя): хотя на стороне GitHub ничего не изменилось, fedorqui сообщает об обходном пути, упомянутом в статье Андри « Получите Travis Shield на Github для отражения статуса выбранной ветки » .
Просто отобразите все ветки и соответствующие значки TravisCI.

Если у вас всего две или три ветки, этого может быть достаточно.

VonC
источник
1
Спасибо, VonC. Я связался со службой поддержки github, как вы предложили, и вот их ответ:
Джо Гатт
1
Они подтвердили, что это невозможно. Они сказали, что единственный способ сделать это - передать ссылку через мою собственную службу, которая будет использовать заголовок HTTP-реферера github, чтобы определить, на какую ветку ссылается, а затем получить соответствующее изображение из Travis CI ...
Джо Гатт,
4
Я просто попытался передать ссылку через свой собственный сервис, но, к сожалению, я не получаю сообщение о HTTP_REFERERзагрузке изображения из README на GitHub. :-(
0xced
3
Что ж, я думаю, что сейчас этого невозможно достичь из-за SSL Proxied Assets .
0xced
2
@fedorqui Насколько я знаю, он недоступен.
VonC
15

Я обошел эту проблему с помощью ловушки git pre-commit, которая перезаписывает строку Travis в README.md с текущей веткой. Ниже приведены пример использования и код предварительной фиксации (Python) (на заданный вопрос).

Применение

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$ 

Код Python для кода предварительной фиксации

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."
Дэн Дай
источник
Получить пользователя репо и github сложно и несколько хрупко, поскольку нет гарантированной информации о том, откуда взялся репозиторий. Вы можете использовать репо-URL, если готовы жить в условиях уязвимости: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
Это круто, я думал об этом, но мне хотелось бы иметь волшебную переменную, которая ссылается на текущую ветку в github, чтобы моя история коммитов не загрязнялась.
Энди
0

Лучшим решением для меня было создание сервера, на котором я отправляю запрос с именем пользователя и именем репо и получаю образ svg со статусом сборки для всех веток.

Алин Эначеску
источник