ローファイ日記

出てくるコード片、ぼくが書いたものは断りがない場合 MIT License としています http://udzura.mit-license.org/

octochanという、ikachan感覚でGitHubのPRやIssueにコメントするやつを書いた

書いたのはだいぶ昔なんだけど、ふと思い出すきっかけがあったので紹介します。

何者か

デプロイして、curlなりなんなりでURLを叩くと権限のある任意のIssueにコメントしてくれます。

Sinatraベースです。

cat <<EOF | curl -F body=@- http://localhost:9292/udzura/sample/6/comments
This is a sample comment
Enjoy! :sushi:

[![LGTM](http://lgtm.in/p/QKEiqJUVp)](http://lgtm.in/i/QKEiqJUVp)
EOF

こういうのを送ると

f:id:udzura:20150605170011p:plain

コメントがつきます。よかったです。

インストールとデプロイ

Gemfileなりに gem "octochan" ってかいたのち、

こういう感じの config.ru を書いてラックアップすればいいと思います。

require 'octochan'

Octochan::App.set :access_token, 'GitHubのトークン'
run Octochan::App

トークンはデフォルトの、「repo」とか「public_repo」とかその辺の権限があれば良いかと思います。

IP制限なり認証は前段にプロクシを置く、Rack Middlewareを使う、等考えられます。octochanとしては何もしないのでご注意を。

たとえば、サブディレクトリによってGitHubへの投稿とGitHub Enterpriseへの投稿を振り分けることも出来たりします。以下は例です。

require 'octochan'

module PB
  class GitHub < Octochan::App
    set :access_token, 'XXXXXXXXXXXXXXXXXX'
  end

  class GHE < Octochan::App
    set :access_token, 'YYYYYYYYYYYYYYYYYY'
    set :api_root,     'https://githubenterprise.local/api/v3'
  end
end

map '/github' do
  run PB::GitHub
end

map '/ghe' do
  run PB::GHE
end

run lambda {|e| [404, {'Content-Type' => 'text/plain'}, ["Please Access /github or /ghe"]] }

Rack最高!!1

バックデータもないため、Herokuその他パースへのデプロイも簡単です。実際某ペパボ社?パペボ社?では社内に立てた Dokku にデプロイして手軽に使っているようです。

APIの仕様

基本的に使うエンドポイントは一つです。

POST http://localhost:9292/#{org name}/#{repo name}/#{issue or PR ID}/comments
  • body=コメントのメッセージ というリクエストボディを送るか、
    • もしくはbody=という名前でテキストファイルを送るとコメントの内容として解釈します

詳細は octochan/octochan.rb at master · udzura/octochan · GitHub というサイトにドキュメントを書きました。

ご利用ください

せっかく作ったのでご利用してくれ!!
運用上はスパムにくれぐれもご注意を。

github.com