@@ -3,6 +3,7 @@ import {readdirSync, statSync, existsSync, mkdirSync} from 'fs';
3
3
import { openScreenshotsCloudStorage , openFirebaseScreenshotsDatabase } from '../task_helpers' ;
4
4
import * as path from 'path' ;
5
5
import * as admin from 'firebase-admin' ;
6
+ const request = require ( 'request' ) ;
6
7
const imageDiff = require ( 'image-diff' ) ;
7
8
8
9
const SCREENSHOT_DIR = './screenshots' ;
@@ -17,6 +18,7 @@ task('screenshots', () => {
17
18
return getScreenFilenames ( database )
18
19
. then ( ( filenames : string [ ] ) => downloadAllGolds ( filenames , database , prNumber ) )
19
20
. then ( ( results : boolean ) => updateResult ( database , prNumber , results ) )
21
+ . then ( ( result : boolean ) => updateGithubStatus ( result , prNumber ) )
20
22
. then ( ( ) => setScreenFilenames ( database , prNumber ) )
21
23
. then ( ( ) => uploadScreenshots ( prNumber , 'diff' ) )
22
24
. then ( ( ) => uploadScreenshots ( prNumber , 'test' ) )
@@ -32,7 +34,7 @@ function updateFileResult(database: admin.database.Database, prNumber: string,
32
34
33
35
function updateResult ( database : admin . database . Database , prNumber : string ,
34
36
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 ) ;
36
38
}
37
39
38
40
function updateTravis ( database : admin . database . Database ,
@@ -150,3 +152,39 @@ function diffScreenshot(filename: string, database: admin.database.Database,
150
152
return updateFileResult ( database , reportKey , filenameKey , false ) . then ( ( ) => false ) ;
151
153
}
152
154
}
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