tkuchikiの日記

新ブログ https://blog.tkuchiki.net

Github Webhook を受けて任意のスクリプトを実行するツール

ghooks-cmd-runner という、
Github の Webhook を受けて任意のスクリプトを実行する Go 製のツールを書きました。

Installation

https://github.com/tkuchiki/ghooks-cmd-runner/releases にバイナリがあるので、ダウンロードして解答してください。

Usage

$ ./ghooks-cmd-runner --help
usage: ghooks-cmd-runner --config=CONFIG [<flags>]

Receives Github webhooks and runs commands

Flags:
      --help              Show context-sensitive help (also try --help-long and --help-man).
  -c, --config=CONFIG     config file location
  -p, --port=18889        listen port
      --host="127.0.0.1"  listen host
  -l, --logfile=LOGFILE   log file location
      --pidfile=PIDFILE   pid file location
      --version           Show application version.

config ファイルが必要なので、以下の様な TOML ファイルを用意します。

# port = 18889 (default: 18889)
# host = "0.0.0.0 (default: 127.0.0.1)"
# secret = "your webhook secret"
# logfile = "path to logfile (default: stdout)"
# pidfile = "path to pidfile"

[[hook]]
event = "push"
command = "/path/to/script"

[[hook]]
event = "pull_request"
command = "/path/to/script"

[[hook]]eventcommand を必要な分記述して、スクリプトを用意すれば完了です。

ghooks-cmd-runnerスクリプトを実行する際、GITHUB_WEBHOOK_PAYLOAD という環境変数に payload の JSON テキストを base64エンコードした文字列を格納しますので、環境変数を読んで base64 でデコードすればお好きな言語で payload を受け取とることができます。
シェルスクリプトで書くと以下のようになると思います。

echo ${GITHUB_WEBHOOK_PAYLOAD} | base64 -d
...

daemonize の機能はないので各自で行ってください。

追記

〜 2016-05-18 17:00

以下のバージョンをリリースしています。

  • v0.1.2
    • コマンドの標準(エラー)出力を1行ずつログに書き出すように修正
  • v0.1.3
    • hook[].branch オプション追加
      • イベント毎に、正規表現にマッチした branch のみでコマンドを実行可能に
  • v0.2.0
    • イベント毎に、コマンドを直列実行するように修正