Посилання на поточну гілку в github readme.md


91

У моєму readme.mdфайлі репозиторію github я маю значок Travis-CI. Я використовую таке посилання:

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

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



Також повинна бути можливість зробити частину сховища змінною, щоб розгалужені сховища не повідомляли неправильно про стан вихідного сховища, з якого вони розгалужуються.
EoghanM

Відповіді:


54

Не те, що я знаю.
Підтримка GitHub підтверджує (через OP Joe Gatt 's коментар )

Єдиним способом зробити це було б передати посилання через мій власний сервіс, який за допомогою заголовка http-посилання github визначав, на яку гілку посилається, а потім отримував відповідне зображення з Тревіса CI

Я б скоріше зробив по одному значку Тревіса-Сі на кожну гілку, щоб читач міг вибрати або розглянути відповідне, побачивши README.md .


Оновлення 2016 року (3 роки потому): хоча з боку GitHub нічого не змінилося, Fedorqui повідомляє про обхідний шлях, згаданий у " Отримайте Travis Shield на Github для відображення вибраного статусу філії " Андрі .
Просто покажіть усі відділення та відповідні значки TravisCI.

Якщо у вас є лише дві-три гілки, цього може бути достатньо.


1
Дякую, VonC. Я зв’язався зі службою підтримки github, як ви запропонували, і ось їх відповідь:
Joe Gatt

1
Вони підтвердили, що цього зробити не можна. Вони сказали, що єдиним способом зробити це буде передати посилання через мій власний сервіс, який за допомогою заголовка http-посилання github визначатиме, на яку гілку йде посилання, а потім отримувати відповідне зображення з Тревіса CI ...
Джо Гатт,

4
Я просто спробував передати посилання через власний сервіс, але, на жаль, я не розумію, HTTP_REFERERколи зображення завантажується з README на GitHub. :-(
0x,

3
Ну, я думаю, цього зараз неможливо досягти через проксі-об'єкти SSL .
0x,

2
@fedorqui Наскільки мені відомо, він недоступний.
VonC 02

15

Я обійшов цю проблему за допомогою гачка попереднього коміту git, який перезаписує рядок Тревіса в 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 із статусом побудови для всіх гілок.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.