@@ -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 }  ) . set ( result ) ; 
37+   return  database . ref ( FIREBASE_REPORT ) . child ( `${ prNumber }  ) . 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