@@ -3,6 +3,7 @@ import {readdirSync, statSync, existsSync, mkdirSync} from 'fs';
33import { openScreenshotsCloudStorage , openFirebaseScreenshotsDatabase } from '../task_helpers' ;
44import * as path from 'path' ;
55import * as admin from 'firebase-admin' ;
6+ const request = require ( 'request' ) ;
67const imageDiff = require ( 'image-diff' ) ;
78
89const SCREENSHOT_DIR = './screenshots' ;
@@ -17,6 +18,7 @@ task('screenshots', () => {
1718 return getScreenFilenames ( database )
1819 . then ( ( filenames : string [ ] ) => downloadAllGolds ( filenames , database , prNumber ) )
1920 . then ( ( results : boolean ) => updateResult ( database , prNumber , results ) )
21+ . then ( ( result : boolean ) => updateGithubStatus ( result , prNumber ) )
2022 . then ( ( ) => setScreenFilenames ( database , prNumber ) )
2123 . then ( ( ) => uploadScreenshots ( prNumber , 'diff' ) )
2224 . then ( ( ) => uploadScreenshots ( prNumber , 'test' ) )
@@ -32,7 +34,7 @@ function updateFileResult(database: admin.database.Database, prNumber: string,
3234
3335function updateResult ( database : admin . database . Database , prNumber : string ,
3436 result : boolean ) : admin . Promise < void > {
35- return database . ref ( FIREBASE_REPORT ) . child ( `${ prNumber } /result` ) . set ( result ) ;
37+ return database . ref ( FIREBASE_REPORT ) . child ( `${ prNumber } /result` ) . set ( result ) . then ( ( ) => result ) ;
3638}
3739
3840function updateTravis ( database : admin . database . Database ,
@@ -150,3 +152,39 @@ function diffScreenshot(filename: string, database: admin.database.Database,
150152 return updateFileResult ( database , reportKey , filenameKey , false ) . then ( ( ) => false ) ;
151153 }
152154}
155+
156+ function decode ( value : string ) : string {
157+ return value . split ( '' ) . reverse ( ) . join ( '' ) ;
158+ }
159+
160+ function updateGithubStatus ( result : boolean , prNumber : string ) {
161+ let state = result ? 'success' : 'failure' ;
162+ let sha = process . env [ 'TRAVIS_PULL_REQUEST_SHA' ] ;
163+ let token = decode ( process . env [ 'MATERIAL2_GITHUB_STATUS_TOKEN' ] ) ;
164+
165+ let data = JSON . stringify ( {
166+ "state" : state ,
167+ "target_url" : `http://material2-screenshots.firebaseapp.com/${ prNumber } ` ,
168+ "context" : "screenshot-diff" ,
169+ "description" : `Screenshot test ${ state } `
170+ } ) ;
171+
172+ let headers = {
173+ 'Authorization' : `token ${ token } ` ,
174+ 'User-Agent' : 'ScreenshotDiff/1.0.0' ,
175+ 'Content-Type' : 'application/json' ,
176+ 'Content-Length' : Buffer . byteLength ( data )
177+ } ;
178+
179+ return new admin . Promise ( ( resolve , reject ) => {
180+ request ( {
181+ url : `https://api.github.com/repos/angular/material2/statuses/${ sha } ` ,
182+ method : 'POST' ,
183+ form : data ,
184+ headers : headers
185+ } , function ( error : any , response : any , body : any ) {
186+ resolve ( response . statusCode ) ;
187+ console . log ( response . statusCode ) ;
188+ } ) ;
189+ } ) ;
190+ }
0 commit comments