Titanium SDK의 Continuous Builds 알림을 Slack에서 수신
아무래도 좋은 일입니다만, 저는 브라우저의 북마크를 사용하지 않는 인간이므로, 지금 필요한 정보는 브라우저의 탭으로 항상 열려있지요. 끝나면 탭을 닫고 예쁜 사파리. 그래서 이번 Appcelerator Continuous Builds라든지는 항상 항상 열리지 않고 (Chrome이므로) PC의 메모리를 계속 사용하고 있기 때문에 물론 없네요. 글쎄, 그런 어쩔 수없는 이유로 이것을 만들었습니다.
준비
$ 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 의 구현 상황을 볼 수 있습니다. 이 페이지를 알고 계셨습니까?
Reference
이 문제에 관하여(Titanium SDK의 Continuous Builds 알림을 Slack에서 수신), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/k0sukey/items/e6e51dbf26b95837b0d3텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)