ifttt-webhookとCircleCIを使ってAtomのバージョンアップをトリガーにCIが実行されるようにした
[2015/05/29 追記] 連携サービスをiftttからzapierに変更しました。
Atomのパッケージ開発のあるあるネタとして、
- 自分の開発しているパッケージよりもAtom本体のバージョンアップのほうが頻繁に発生する
- Atomのバージョンアップで自分のパッケージのビルドが壊れる
というのがあります。
特に下の件は、パッケージのビルドが壊れているように見えて実際には手元の環境だけの問題で、依存するnode_modulesを最新にすれば問題なかったりするので、CIの真っさらな環境でテストしたいところでした。
そんなわけで、Atomのバージョンアップの度にCIを実行させることにしました。
全体像
詳細は後述しますが、以下の流れでgithubのAtomのreleaseのフィードからCircleCIを起動出来るようにしています。
https://github.com/atom/atom/releases.atom -> ifttt Feed Channel -> ifttt WordPress Channel -> ifttt.captnemo.in (heroku) -> CircleCI
CIの選定
CI自体はTravis CIとwerckerを既に使っていて、githubへのpushで実行されるようになっていました。 githubへのpush以外の方法でCIが実行される方法を探したのですが、Travis CIにもwerckerにも存在しないようで、色々調べたところCircleCIにありました。 Travis CIも画面からビルドの再実行はできたのですが、それ以外の方法は見つけられませんでした。
CircleCIでは、CircleCI REST API - Trigger a new Build にあるように、
curl -X POST https://circleci.com/api/v1/project/:username/:project/tree/:branch?circle-token=:token
の形式でPOSTを実行すれば良さそうです。
tokenは、http://blog.a-know.me/entry/2015/01/04/123432 にある手順で、All
のtokenを取得しました。
Atomのバージョンアップを検出
iftttのFeed Channelを使用して、https://github.com/atom/atom/releases.atom
のfeedを監視するようにしました。
iftttでPOSTを実行する
iftttでPOSTを発行する公式なChannelは存在しないのですが、それを実現するための仕組みが、https://github.com/captn3m0/ifttt-webhook で提供されていました。
ちょっとトリッキーですが、ifttt.captnemo.inというサイトのWordPressを更新するという手順をiftttに設定します。
iftttの設定は最終的に以下のようになりました。
実行結果
https://circleci.com/gh/kn1kn1/language-context-free/13
https://circleci.com/gh/kn1kn1/language-context-free/14
などが、Atomのバージョンアップで実行したCIの結果です。
分かりにくいですが、TriggerのところがGitHub push by kn1kn1
でなくEdit of the project settings
になっています。
おわりに
記事の内容の設定をしたのは4月下旬で、その後数回Atomがバージョンアップしていますが、今のところ問題なくCircleCIのビルドが実行されています。また、CircleCIのdocker buildはwerckerのdocker buildよりも早い(4分程度掛かっていたのが2分程度になった)ので、今後はCircleCIだけにしても良いかもしれないですね。