Mereferensikan cabang saat ini di github readme.md

91

Di readme.mdfile repo github saya, saya memiliki badge Travis-CI. Saya menggunakan tautan berikut:

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

Masalah yang jelas adalah bahwa cabang tersebut di-hardcode. Apakah mungkin untuk menggunakan semacam variabel sehingga cabang yang sedang dilihat?

Joe Gatt
sumber
Ini juga harus memungkinkan untuk membuat bagian repositori menjadi variabel juga, sehingga repositori bercabang tidak salah melaporkan status dari repositori asli tempat mereka bercabang.
EoghanM

Jawaban:

54

Tidak yang saya tahu.
Dukungan GitHub menegaskan (melalui OP Joe Gatt 's komentar )

Satu-satunya cara untuk melakukan ini adalah dengan melewatkan tautan melalui layanan saya sendiri yang akan menggunakan header pengarah http github untuk menentukan cabang mana yang dirujuk dan kemudian mengambil gambar yang sesuai dari Travis CI

Saya lebih suka membuat satu lencana Travis-CI per cabang, agar pembaca dapat memilih atau mempertimbangkan yang sesuai saat melihat README.md.


Pembaruan 2016 (3 tahun kemudian): meskipun tidak ada yang berubah di sisi GitHub, laporan fedorqui dalam solusi yang disebutkan dalam " Dapatkan Travis Shield di Github untuk Merefleksikan Status Cabang yang Dipilih " oleh Andrie .
Cukup tunjukkan semua cabang dan lencana TravisCI masing-masing.

Jika Anda hanya memiliki dua atau tiga cabang, itu sudah cukup.

VonC
sumber
1
Terima kasih, VonC. Saya menghubungi dukungan github, seperti yang Anda sarankan dan berikut ini balasannya:
Joe Gatt
1
Mereka menegaskan bahwa ini tidak dapat dilakukan. Mereka mengatakan satu-satunya cara untuk melakukan ini adalah dengan mengirimkan tautan melalui layanan saya sendiri yang akan menggunakan tajuk pengarah http github untuk menentukan cabang mana yang direferensikan dan kemudian mengambil gambar yang sesuai dari Travis CI ...
Joe Gatt
4
Saya baru saja mencoba meneruskan tautan melalui layanan saya sendiri tetapi sayangnya saya tidak mendapatkan HTTP_REFERERsaat gambar dimuat dari README di GitHub. :-(
0xced
3
Yah, saya kira sekarang tidak mungkin tercapai karena Aset yang Diproksikan SSL .
0xced
2
@fedorqui Sejauh yang saya tahu, itu tidak tersedia.
VonC
15

Saya mengatasi masalah ini dengan hook pra-commit git yang menulis ulang baris Travis di README.md dengan cabang saat ini. Contoh penggunaan dan kode pra-komit (Python) (untuk pertanyaan seperti yang ditanyakan) ada di bawah ini.

Pemakaian

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$ 

Kode Python untuk kode pra-komit

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."
Dan Dye
sumber
Mendapatkan pengguna repo dan github itu rumit dan agak rapuh karena tidak ada informasi yang dijamin tentang dari mana repositori itu berasal. Anda dapat menggunakan repo-URL jika Anda siap untuk hidup dengan kerapuhan: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
Itu keren, saya telah memikirkan hal ini tetapi saya berharap saya dapat memiliki variabel ajaib yang mengacu pada cabang saat ini di github sehingga riwayat komit saya tidak tercemar.
Andy
0

Solusi terbaik bagi saya adalah membuat server tempat saya mengirim kueri dengan nama pengguna dan nama repo dan mendapatkan gambar svg dengan status build untuk semua cabang.

Alin Enachescu
sumber