LoginSignup
15
13

More than 5 years have passed since last update.

【GitHub】バッジのブランチ名を動的解決する

Last updated at Posted at 2014-07-07

バッジ?

GitHubのREADME.mdに貼られているよく見るアレです。

brightgreen green yellowgreen yellow orange red lightgrey blue ff69b4

解決したいこと

現在参照しているブランチのバッジを表示したい。
README.mdでは、「現在のブランチ名」を解決できない。

masterブランチ以外に生存期間の長いブランチが存在する場合には、指定ブランチのステータス(バッジ、リンク)を表示したくなりませんか?

解決方法

README.mdに必要なブランチのバッジを全部貼っておくのも手ですが、なんかカッコ悪い、という方に。

OwnService

'Current Branch'を解決するサービスを起こす。
元ネタ : http://stackoverflow.com/questions/18673694/referencing-current-branch-in-github-readme-md
HTTP_REFERERを参照して、'Current Branch'を解決することができるようです。

HerokuなどのPaasの力をお借りして、サクッとサービスしちゃいましょう。

サンプルアプリコード

適当にアレンジしてください。

app.rb
require 'sinatra'

get '/' do
  # support only GitHub
  env['HTTP_REFERER'] =~ /https:\/\/github.com\/.*\/tree\/(.*)$/
  branch = $1 || "master"
  400 unless params[:redirect_url]
  redirect_url = CGI.unescape(params[:redirect_url])
  redirect redirect_url.gsub(/REPLACE_THIS/, branch)
end

README.md

埋め込みコードを修正する。
バッジURLをリダイレクトURLとして、自身のサービスへリクエストするように修正する。

サンプルコード

とあるTravis CIバッジの埋め込みコードを変換するコードサンプル。
適当にアレンジしてください。

embeded = "[![Build Status](https://travis-ci.org/arukoh/signauth.svg?branch=master)](https://travis-ci.org/arukoh/signauth)"
# => "[![Build Status](https://travis-ci.org/arukoh/signauth.svg?branch=master)](https://travis-ci.org/arukoh/signauth)" 
embeded =~ /^\[!\[.+\]\((.+)\)\]\(.+\)/
# => 0 
replace_url = $1
# => "https://travis-ci.org/arukoh/signauth.svg?branch=master" 
redirect_url = CGI.escape(redirect_url.sub(/branch=.+/, "branch=REPLACE_THIS"))
# => "https%253A%252F%252Ftravis-ci.org%252Farukoh%252Fsignauth.svg%253Fbranch%253DREPLACE_THIS" 
embeded.sub(replace_url, "https://OWN_SERVICE_HOST/?redirect_url=#{redirect_url}")
# => "[![Build Status](https://OWN_SERVICE_HOST/?redirect_url=https%253A%252F%252Ftravis-ci.org%252Farukoh%252Fsignauth.svg%253Fbranch%253DREPLACE_THIS)](https://travis-ci.org/arukoh/signauth)"

関連

15
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
13