@@ -5,15 +5,44 @@ const tar = require('tar-fs');
55
66const docker = new Docker ( ) ;
77
8- const promisifyStream = ( stream , verbose ) => new Promise ( ( resolve , reject ) => {
9- stream . on ( 'data' , ( data ) => {
10- if ( verbose ) {
11- console . log ( data . toString ( ) . replace ( '\n' , '' ) ) ;
12- }
8+ function extractStreamContents ( stream , verbose ) {
9+ return new Promise ( ( resolve , reject ) => {
10+ const streamContent = [ ] ;
11+
12+ stream . on ( 'data' , ( data ) => {
13+ const streamData = data . toString ( ) . replace ( '\n' , '' )
14+ streamContent . push ( streamData ) ;
15+
16+ if ( verbose ) {
17+ console . log ( streamData ) ;
18+ }
19+ } ) ;
20+
21+ stream . on ( 'end' , ( ) => {
22+ resolve ( streamContent ) ;
23+ } ) ;
24+ stream . on ( 'error' , reject ) ;
1325 } ) ;
14- stream . on ( 'end' , resolve ) ;
15- stream . on ( 'error' , reject ) ;
16- } ) ;
26+ }
27+
28+ function findErrorInBuildOutput ( buildOutput ) {
29+ for ( const buildStepLog of buildOutput ) {
30+ if ( buildStepLog . startsWith ( '{"errorDetail":{' ) ) {
31+ let errorDetail ;
32+ try {
33+ errorDetail = JSON . parse ( buildStepLog ) [ 'errorDetail' ] ;
34+ } catch ( err ) {
35+ return "" ;
36+ }
37+
38+ if ( errorDetail !== undefined && errorDetail [ 'message' ] !== undefined ) {
39+ return errorDetail [ 'message' ] ;
40+ }
41+
42+ return JSON . stringify ( errorDetail ) ;
43+ }
44+ }
45+ }
1746
1847module . exports = {
1948 buildAndPushContainers ( ) {
@@ -32,12 +61,18 @@ module.exports = {
3261
3362 return new Promise ( async ( resolve , reject ) => {
3463 const buildStream = await docker . buildImage ( tarStream , { t : imageName } )
35- await promisifyStream ( buildStream , this . provider . options . verbose ) ;
64+ const buildStreamEvents = await extractStreamContents ( buildStream , this . provider . options . verbose ) ;
65+
66+ const buildError = findErrorInBuildOutput ( buildStreamEvents ) ;
67+ if ( buildError !== undefined ) {
68+ reject ( `Build did not succeed, error: ${ buildError } ` ) ;
69+ return
70+ }
3671
3772 const image = docker . getImage ( imageName )
3873
3974 const inspectedImage = await image . inspect ( )
40- . catch ( ( ) => reject ( "Error during build of the image " + imageName + " : run --verbose to see the error" ) ) ;
75+ . catch ( ( ) => reject ( `Image ${ imageName } does not exist : run --verbose to see errors` ) ) ;
4176
4277 if ( inspectedImage === undefined ) {
4378 return
@@ -55,7 +90,7 @@ module.exports = {
5590 }
5691
5792 const pushStream = await image . push ( auth ) ;
58- await promisifyStream ( pushStream , this . provider . options . verbose ) ;
93+ await extractStreamContents ( pushStream , this . provider . options . verbose ) ;
5994
6095 resolve ( ) ;
6196 } ) ;
0 commit comments