11import path from 'path' ;
22import fs from 'fs-extra' ;
3- import Promise from 'bluebird' ;
43import * as tracers from '/specs/tracers' ;
54import * as randomizers from '/specs/randomizers' ;
65import { execute } from '/common/util' ;
6+ import Commander from '/languages/Commander' ;
77
8- class Builder {
8+ class Builder extends Commander {
99 constructor ( { name, commands } ) {
10- this . name = name ;
10+ super ( { name } ) ;
1111 this . commands = commands ;
1212 this . build = this . build . bind ( this ) ;
1313 }
1414
15- get cwd ( ) {
16- return path . resolve ( __dirname , this . name ) ;
17- }
18-
1915 spec ( callback , all = false ) {
2016 Object . values ( all ? { ...tracers , ...randomizers } : tracers ) . forEach ( tracer => {
2117 const { name, content } = callback ( tracer ) ;
@@ -33,23 +29,25 @@ class Builder {
3329 }
3430
3531 build ( ) {
36- const command = this . commands . join ( ' && ' ) ;
37- if ( fs . existsSync ( path . resolve ( this . cwd , 'builder' , 'Dockerfile' ) ) ) {
38- const imageTag = `${ this . name } -builder` ;
39- return execute ( `docker build -t ${ imageTag } ./builder` , this . cwd )
40- . then ( ( ) => execute ( [
41- `docker run --rm` ,
42- '-w=/usr/tracers' ,
43- `-v=$PWD/tracers:/usr/tracers:rw` ,
44- imageTag ,
45- '/bin/bash -c' ,
46- `"${ command } "` ,
47- ] . join ( ' ' ) , this . cwd ) ) ;
48- } else if ( command ) {
49- return execute ( command , path . resolve ( this . cwd , 'tracers' ) ) ;
50- } else {
51- return Promise . resolve ( ) ;
52- }
32+ return fs . pathExists ( path . resolve ( this . cwd , 'builder' , 'Dockerfile' ) )
33+ . then ( exists => {
34+ const command = this . commands . join ( ' && ' ) ;
35+ if ( exists ) {
36+ return execute ( `docker build -t ${ this . builderImageTag } ./builder` , this . cwd )
37+ . then ( ( ) => execute ( [
38+ `docker run --rm` ,
39+ '-w=/usr/tracers' ,
40+ `-v=$PWD/tracers:/usr/tracers:rw` ,
41+ this . builderImageTag ,
42+ '/bin/bash -c' ,
43+ `"${ command } "` ,
44+ ] . join ( ' ' ) , this . cwd ) ) ;
45+ } else if ( command ) {
46+ return execute ( command , path . resolve ( this . cwd , 'tracers' ) ) ;
47+ }
48+ } )
49+ . then ( ( ) => fs . pathExists ( path . resolve ( this . cwd , 'executer' , 'Dockerfile' ) ) )
50+ . then ( exists => exists && execute ( `docker build -t ${ this . executerImageTag } ./executer` , this . cwd ) ) ;
5351 }
5452}
5553
0 commit comments