@ledsun blog

無味の味は佳境に入らざればすなわち知れず

Gitlabの更新情報をChatworkに通知するアプリケーション、Syamoを作りました

Gitlabの更新情報をChatworkに通知するアプリケーション、Syamoを作りました。

Syamoとは?

Gitlabのプロジェクトが更新されたときにChartworkのチャットルームにメッセージを送ります。

Gitlabのプロジェクトの更新情報は次の三つです。*1

  1. gitブランチへのpush
  2. Issueの更新
  3. MergeReqestの更新

どうやって動かすの?

githubでソースを公開しています。 git cloneしてherokuに配置すれば動きます。

その際以下の三つの情報を設定する必要があります。

  1. Chartwork APIトークン
  2. Gitlab API URL
  3. Gitlab API トークン

これらの情報はherokuに環境変数として設定します。詳細な設定方法はgithubを見てください。

どうやって動いているの?

node.jsで実行するWebアプリケーションです。 Gitlabのwebhookに本アプリケーションのURL登録し、通知情報を取得します。 Gitlabのwebhookに含まれないプロジェクト情報(プロジェクト名とユーザ名)を取得するためにGitlab APIを使います。

命名理由

chabotを参考にしたので、メジャーな鶏の品種で軍鶏にしました。 強そう!

愚痴

  • Gitlab webhookが不便
    • 空ブランチの作成・削除とかcommit0件でもpushなのか・・・
    • issueのアサインが非同期更新で、セレクトボックスの値を変えるたびに通知が・・・
    • issueをopen/closeするたびに二回ずつ通知が・・・
    • MergeRequestは最初にマージ不可で通知して、チェック終了後にマージ可と通知するのではなく、 チェックが終わってから一回だけ通知してほしい・・・
  • chatworkの記法表現力なさ過ぎ
    • 文字色を指定したい。issueを赤とか色分けしたいです。
    • [info]とか[hr]とかブロック要素に展開される記法直後の改行は無視して欲しい。 [hr]ほげほげとテンプレートに書くのが嫌です。

悩み

frisby.jsでテスト書いたのはいいけど、テストに本物のChatworkとGilabを使っているおかげで自分の秘密情報が無いとテストが通らない。 モックを使うべきなのか、ユニットテストでカバーすべきなのか?

*1:タグプッシュには対応してません。テンプレート足せば動くと思うけど試していません。