Titanium SDK の Continuous Builds の通知を Slack で受け取る
Appcelerator Continuous Builds で情報を取得することはできるけれど、毎回見に行くのはしんどい。勝手に Slack へ通知して欲しいってことで、Heroku の Heroku Scheduler で毎時監視して、最新のビルドを通知させる。
どうでもよい事なんですけど、ぼくはブラウザのブックマークを使わない人間なので、今必要な情報はブラウザのタブで常に開きっぱなしなんですよね。終わったらタブを閉じて綺麗サッパリ。で、今回の Appcelerator Continuous Builds とかはいつも常に開きっぱなしで、(Chrome なので)パソコンのメモリを使い続けているから勿体ないんですね。まあ、そういうどうしようもない理由でこれを作りました。
準備
- Heroku で cedar スタックを作る
- Heroku Scheduler と Heroku Redis :: Redis アドオンをインストール
- Slack でチャンネル作って Incoming WebHooks の URL を作っておく
- プロジェクトフォルダを作って、
$ npm init
-
$ 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分毎にすると無料枠突破しちゃうかもですから、毎時ですね。毎時ならスリープすることもないですし。
通知きましたか?
初回は最新のビルドが Slack へ通知されます。アイコンとかいじっておくと良いですよ!
ちなみに、リンク先は Titanium API の実装状況を見ることができます。このページ知っていました?
Author And Source
この問題について(Titanium SDK の Continuous Builds の通知を Slack で受け取る), 我々は、より多くの情報をここで見つけました https://qiita.com/k0sukey/items/e6e51dbf26b95837b0d3著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .