Github のコミットにHookしてTracのチケットをクローズしたり
最近Githubをようやく使い始めたsotarokです。
普段は、Subversionを使っているし、nequalの開発も主にSubversionを使っていて、BTSというかTODO管理というかにTracを使ってる。で、Tracの便利なところはSubversionと連携してくれるから、コミットログに「fixed #123」とか書けばチケットの#123をクローズしてくれたりするところなんだけど、Githubにソースを移行して相変わらずチケット管理をTracに任せているとこのHookが使えなくて不便。
そんなわけでGithubのコミット(push)にHookしてTracのチケット更新できるようにする。
GithubPluginをインストール
コレ。
gitからもってきてsetup.py。
% git clone git://github.com/davglass/github-trac.git % cd github-trac
simplejsonが入ってない場合は、easy_installで入れてから。入ってるならいらないけど。
% easy_install simplejson % sudo python setup.py install
trac.ini いじる
[components] github.* = enabled [github] apitoken = tekitounamojiretsu
apitoken のとこは適当な文字列入れる。
で、Apache再起動などさせると(mod_pythonで動かしてる場合)、管理コンソールのプラグインってとこに、
な感じの表示が。
Service Hooks に URLを設定
これはGithub側の設定。リポジトリの、Admin->Service Hooksに色々ある。
で、最初はTracのほうに入れるのかとおもって試してたけどうまくいかないから(後述)、davglass/github-trac · GitHub の説明に書いてある通り、一番上の Post-Receive URLs に、
http://trac.nequal.jp/github/tekitounamojiretsu
みたいなカンジで、tracのURL+ /github/ + apitokenに設定した文字列、を入力。
実際にコミットする
git commit -a -m "fixed #123" とかして、 git push origin master などしてgithubにpushしたタイミングで、Hookが動きますめでたしめでたし。
pullとかは試してないなあ。きっとなるんじゃないかな(てきと
Service HooksのTracんとこに入力したときはデータが来てないぽい
一応調べてみたんですが。GithubPlugin-0.4-py2.4.egg の github/github.py に
def processCommitHook(self, req): self.env.log.debug("processCommitHook") status = self.closestatus if not status: status = 'closed' data = req.args.get('payload') self.env.log.debug("data: %s" % data) # これ足した if data: jsondata = simplejson.loads(data) for i in jsondata['commits']: self.env.log.debug("status: %s" % status) self.hook.process(i, status) if self.autofetch: repo = Git(self.repo) try: repo.execute(['git', 'fetch']) except: self.env.log.debug("git fetch failed!")
で、Tracのログをdebugに設定して動かしてみてたら、Post-Receive URLsに入れたほうでHookが動いたときは、JSONで色々情報が渡されてるけど、TracのほうにURLとTokenを入力しても、それはどうやらきてなかった。だから当然Hookは動かないんだけど。でもちゃんと tracurl/github/token文字列 ってURLにアクセスはきてるんだけどね。
なんでだろ?このTracって何に使うんだろう? github 側の対応ミスとか?どなたか知ってたら教えてください。
まぁいいやとりあえずPost-Receive URLsで運用しちゃお。
というかんじでした。