Titanium SDK의 Continuous Builds 알림을 Slack에서 수신

16119 단어 슬랙Titanium
Appcelerator Continuous Builds 로 정보를 취득할 수는 있지만, 매회 보러 가는 것은 힘들다. 마음대로 Slack에 통지해 주었으면 하는 것으로, Heroku의 Heroku Scheduler로 매시 감시해, 최신의 빌드를 통지시킨다.

아무래도 좋은 일입니다만, 저는 브라우저의 북마크를 사용하지 않는 인간이므로, 지금 필요한 정보는 브라우저의 탭으로 항상 열려있지요. 끝나면 탭을 닫고 예쁜 사파리. 그래서 이번 Appcelerator Continuous Builds라든지는 항상 항상 열리지 않고 (Chrome이므로) PC의 메모리를 계속 사용하고 있기 때문에 물론 없네요. 글쎄, 그런 어쩔 수없는 이유로 이것을 만들었습니다.

준비


  • 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 의 구현 상황을 볼 수 있습니다. 이 페이지를 알고 계셨습니까?

    좋은 웹페이지 즐겨찾기