githubreadme.mdの現在のブランチを参照しています


91

githubリポジトリのreadme.mdファイルには、Travis-CIバッジがあります。私は次のリンクを使用します:

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

明らかな問題は、ブランチがハードコーディングされていることです。ブランチが現在表示されているものになるように、ある種の変数を使用することは可能ですか?



フォークされたリポジトリがフォーク元の元のリポジトリのステータスを誤って報告しないように、リポジトリ部分を変数にすることも可能である必要があります。
EoghanM

回答:


54

私が知っていることではありません。
GitHubサポートが確認します(OP Joe Gattコメントを通じて)

これを行う唯一の方法は、githubのhttpリファラーヘッダーを使用して参照されているブランチを判別し、TravisCIから適切な画像をフェッチする独自のサービスにリンクを渡すことです。

読者がを表示するときに適切なものを選択または検討できるように、ブランチごとに1つのTravis-CIバッジを作成したいと思いますREADME.md


更新2016年(3年後):何もGitHubの側に変化しなかったが、fedorqui回避策のレポートは「に記載のGithub上トラヴィスシールドをゲットは支店ステータスを選択反映することにより、」Andrie
すべてのブランチとそれぞれのTravisCIバッジを表示するだけです。

ブランチが2つか3つしかない場合は、それで十分です。


1
ありがとう、VonC。あなたが提案したように、私はgithubサポートに連絡しました、そしてここに彼らの返事があります:
Joe Gatt 2013

1
彼らはこれができないことを確認した。彼らは...これを行うための唯一の方法は、分岐が参照され、その後、トラヴィスCIから適切な画像を取得されているかを決定するためにgithubののHTTPリファラヘッダを使用することになり、私自身のサービスを経由してリンクを渡すことであろうと述べた
ジョー・ガット

4
自分のサービスを介してリンクを渡そうとしましたが、残念ながらHTTP_REFERER、GitHubのREADMEから画像を読み込んだときにが取得されません。:-(
0xced 2014年

3
そうですね、SSLプロキシ資産のために今では達成することは不可能だと思います。
0xced 2014年

2
@fedorqui私の知る限り、それは利用できません。
vonC 2016

15

この問題を回避するには、現在のブランチでREADME.mdのTravis行を書き換えるgitpre-commitフックを使用しました。使用法と事前コミット(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 2016年

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

2
かっこいいです。これについて考えていましたが、コミット履歴が汚染されないように、githubの現在のブランチを参照する魔法の変数があればいいのにと思います。
アンディ

0

私にとって最善の解決策は、ユーザー名とリポジトリの名前を使用してクエリを送信し、すべてのブランチのビルドステータスを含むsvgイメージを取得するサーバーを作成することでした。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.