LoginSignup
4
4

More than 5 years have passed since last update.

Titanium SDK の Continuous Builds の通知を Slack で受け取る

Last updated at Posted at 2015-09-02

Appcelerator Continuous Builds で情報を取得することはできるけれど、毎回見に行くのはしんどい。勝手に Slack へ通知して欲しいってことで、Heroku の Heroku Scheduler で毎時監視して、最新のビルドを通知させる。

どうでもよい事なんですけど、ぼくはブラウザのブックマークを使わない人間なので、今必要な情報はブラウザのタブで常に開きっぱなしなんですよね。終わったらタブを閉じて綺麗サッパリ。で、今回の Appcelerator Continuous Builds とかはいつも常に開きっぱなしで、(Chrome なので)パソコンのメモリを使い続けているから勿体ないんですね。まあ、そういうどうしようもない理由でこれを作りました。

準備

  1. Heroku で cedar スタックを作る
  2. Heroku Scheduler と Heroku Redis :: Redis アドオンをインストール
  3. Slack でチャンネル作って Incoming WebHooks の URL を作っておく
  4. プロジェクトフォルダを作って、$ npm init
  5. $ npm install lodash node-slack redis request --save で必要なパッケージをインストール

ソースコード

どこかのテストフレームワークで見たようなファイル名ですが...。テキトーに書いちゃったので、修正したい所があればご自由にどうぞ。

bin/drillbit

#!/usr/bin/env node
require('../src/drillbit');

src/drillbit.js

var _ = require('lodash'),
    redis = require('redis'),
    request = require('request'),
    slack = require('node-slack'),
    url = require('url');

var client;

function send(latest) {
    var webhook = new slack('※※※※※ Slack の Incoming WebHooks URL ※※※※※');

    webhook.send({
        text: '*Incoming the new version <http://builds.appcelerator.com/mobile/master/mobilesdk-' + latest + '-parity.html>*\n' +
            '```$ ti sdk install --branch master ' + latest + '```',
        channel: '※※※※※ 通知を受けたい Slack のチャンネル名 ※※※※※',
        username: 'Titanium SDK'
    });
}

function fetch(latest) {
    request.get('http://builds.appcelerator.com/mobile/master/index.json', function(error, response, body){
        if (error) {
            return;
        }

        var json = JSON.parse(body),
            versions = [],
            notifies = [],
            detect = false;

        _.each(json, function(item){
            var version = item.filename.split('-')[1],
                timestamp = parseInt(version.split('.')[3].replace('v', ''), 10);

            if (_.indexOf(versions, timestamp) === -1) {
                versions.push(version);
            }
        });

        versions.sort(function(a, b){
            return parseInt(b.split('.')[3].replace('v', ''), 10) - parseInt(a.split('.')[3].replace('v', ''), 10);
        });

        if (latest) {
            if (parseInt(versions[0].split('.')[3].replace('v', ''), 10) >
                parseInt(latest.split('.')[3].replace('v', ''), 10)) {
                detect = true;
            }
        } else {
            detect = true;
        }

        if (detect) {
            if (client) {
                client.set('version', versions[0], function(error, data){
                    if (error) {
                        return;
                    }

                    send(versions[0]);
                });
            } else {
                send(versions[0]);
            }
        }
    });
}

if (process.env.REDIS_URL) {
    var parsedurl = url.parse(process.env.REDIS_URL);

    client = redis.createClient(parsedurl.port, parsedurl.hostname);
    client.auth(parsedurl.auth.split(':')[1]);

    client.get('version', function(error, latest){
        if (error) {
            return;
        }

        fetch(latest);
    });
} else {
    fetch(null);
}

テストしておきましょう

ローカルでテストできます。その場合 Redis の箇所が無視されるので、常に最新のビルドが Slack へ通知されます。

$ node bin/drillbit

スケジューラの設定

Heroku へプッシュしたら、Heroku Scheduler の設定をします。スケジューラのダッシュボードで、こんな感じでどうぞ。10分毎にすると無料枠突破しちゃうかもですから、毎時ですね。毎時ならスリープすることもないですし。

スクリーンショット 2015-09-02 8.50.41.png

通知きましたか?

初回は最新のビルドが Slack へ通知されます。アイコンとかいじっておくと良いですよ!

スクリーンショット 2015-09-02 8.53.53.png

ちなみに、リンク先は Titanium API の実装状況を見ることができます。このページ知っていました?

4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4