@@ -7,10 +7,10 @@ import {Parser} from "./parser";
7
7
import * as state from "./state" ;
8
8
import prettyHrtime from "pretty-hrtime" ;
9
9
import { WriteStreams } from "./write-streams" ;
10
- import { Job } from "./job" ;
10
+ import { cleanupJobResources , Job } from "./job" ;
11
11
import { Utils } from "./utils" ;
12
12
import { Argv } from "./argv" ;
13
- import assert , { AssertionError } from "assert" ;
13
+ import assert from "assert" ;
14
14
15
15
const generateGitIgnore = ( cwd : string , stateDir : string ) => {
16
16
const gitIgnoreFilePath = `${ cwd } /${ stateDir } /.gitignore` ;
@@ -20,47 +20,13 @@ const generateGitIgnore = (cwd: string, stateDir: string) => {
20
20
}
21
21
} ;
22
22
23
- const cleanupResources = async ( parser : Parser | null ) => {
24
- if ( ! parser ) {
25
- return ;
26
- }
27
- const promises = [ ] ;
28
- for ( const job of parser . jobs . values ( ) ) {
29
- promises . push ( job . cleanupResources ( ) ) ;
30
- }
31
- await Promise . all ( promises ) ;
32
- } ;
33
-
34
- export async function handler ( args : any , writeStreams : WriteStreams ) : Promise < ReadonlyArray < Job > > {
23
+ export async function handler ( args : any , writeStreams : WriteStreams , jobs : Job [ ] = [ ] ) {
35
24
const argv = new Argv ( args ) ;
36
25
const cwd = argv . cwd ;
37
26
const stateDir = argv . stateDir ;
38
27
const file = argv . file ;
39
28
let parser : Parser | null = null ;
40
29
41
- process . on ( "unhandledRejection" , ( e ) => {
42
- if ( e instanceof AssertionError ) {
43
- process . stderr . write ( chalk `{red ${ e . message . trim ( ) } }\n` ) ;
44
- } else if ( e instanceof Error ) {
45
- process . stderr . write ( chalk `{red ${ e . stack ?. trim ( ) ?? e . message . trim ( ) } }\n` ) ;
46
- } else if ( e ) {
47
- process . stderr . write ( chalk `{red ${ e . toString ( ) . trim ( ) } }\n` ) ;
48
- }
49
- if ( parser ) {
50
- cleanupResources ( parser ) . finally ( process . exit ( 1 ) ) ;
51
- } else {
52
- process . exit ( 1 ) ;
53
- }
54
- } ) ;
55
-
56
- process . on ( "exit" , ( _ : string , code : number ) => {
57
- cleanupResources ( parser ) . finally ( process . exit ( code ) ) ;
58
- } ) ;
59
-
60
- process . on ( "SIGINT" , ( _ : string , code : number ) => {
61
- cleanupResources ( parser ) . finally ( process . exit ( code ) ) ;
62
- } ) ;
63
-
64
30
if ( argv . completion ) {
65
31
yargs . showCompletionScript ( ) ;
66
32
return [ ] ;
@@ -69,13 +35,13 @@ export async function handler (args: any, writeStreams: WriteStreams): Promise<R
69
35
assert ( fs . existsSync ( `${ cwd } /${ file } ` ) , `${ cwd } /${ file } could not be found` ) ;
70
36
71
37
if ( argv . fetchIncludes ) {
72
- parser = await Parser . create ( argv , writeStreams , 0 ) ;
38
+ await Parser . create ( argv , writeStreams , 0 , jobs ) ;
73
39
return [ ] ;
74
40
}
75
41
76
42
if ( argv . preview ) {
77
43
const pipelineIid = await state . getPipelineIid ( cwd , stateDir ) ;
78
- parser = await Parser . create ( argv , writeStreams , pipelineIid ) ;
44
+ parser = await Parser . create ( argv , writeStreams , pipelineIid , jobs ) ;
79
45
const gitlabData = parser . gitlabData ;
80
46
for ( const jobName of Object . keys ( gitlabData ) ) {
81
47
if ( jobName === "stages" ) {
@@ -88,15 +54,15 @@ export async function handler (args: any, writeStreams: WriteStreams): Promise<R
88
54
writeStreams . stdout ( `---\n${ yaml . dump ( gitlabData , { lineWidth : 160 } ) } ` ) ;
89
55
} else if ( argv . list || argv . listAll ) {
90
56
const pipelineIid = await state . getPipelineIid ( cwd , stateDir ) ;
91
- parser = await Parser . create ( argv , writeStreams , pipelineIid ) ;
57
+ parser = await Parser . create ( argv , writeStreams , pipelineIid , jobs ) ;
92
58
Commander . runList ( parser , writeStreams , argv . listAll ) ;
93
59
} else if ( argv . listJson ) {
94
60
const pipelineIid = await state . getPipelineIid ( cwd , stateDir ) ;
95
- parser = await Parser . create ( argv , writeStreams , pipelineIid ) ;
61
+ parser = await Parser . create ( argv , writeStreams , pipelineIid , jobs ) ;
96
62
Commander . runJson ( parser , writeStreams ) ;
97
63
} else if ( argv . listCsv || argv . listCsvAll ) {
98
64
const pipelineIid = await state . getPipelineIid ( cwd , stateDir ) ;
99
- parser = await Parser . create ( argv , writeStreams , pipelineIid ) ;
65
+ parser = await Parser . create ( argv , writeStreams , pipelineIid , jobs ) ;
100
66
Commander . runCsv ( parser , writeStreams , argv . listCsvAll ) ;
101
67
} else if ( argv . job . length > 0 ) {
102
68
assert ( argv . stage == null , "You cannot use --stage when starting individual jobs" ) ;
@@ -107,7 +73,7 @@ export async function handler (args: any, writeStreams: WriteStreams): Promise<R
107
73
await state . incrementPipelineIid ( cwd , stateDir ) ;
108
74
}
109
75
const pipelineIid = await state . getPipelineIid ( cwd , stateDir ) ;
110
- parser = await Parser . create ( argv , writeStreams , pipelineIid ) ;
76
+ parser = await Parser . create ( argv , writeStreams , pipelineIid , jobs ) ;
111
77
await Utils . rsyncTrackedFiles ( cwd , stateDir , ".docker" ) ;
112
78
await Commander . runJobs ( argv , parser , writeStreams ) ;
113
79
if ( argv . needs || argv . onlyNeeds ) {
@@ -117,7 +83,7 @@ export async function handler (args: any, writeStreams: WriteStreams): Promise<R
117
83
generateGitIgnore ( cwd , stateDir ) ;
118
84
const time = process . hrtime ( ) ;
119
85
const pipelineIid = await state . getPipelineIid ( cwd , stateDir ) ;
120
- parser = await Parser . create ( argv , writeStreams , pipelineIid ) ;
86
+ parser = await Parser . create ( argv , writeStreams , pipelineIid , jobs ) ;
121
87
await Utils . rsyncTrackedFiles ( cwd , stateDir , ".docker" ) ;
122
88
await Commander . runJobsInStage ( argv , parser , writeStreams ) ;
123
89
writeStreams . stderr ( chalk `{grey pipeline finished} in {grey ${ prettyHrtime ( process . hrtime ( time ) ) } }\n` ) ;
@@ -127,14 +93,13 @@ export async function handler (args: any, writeStreams: WriteStreams): Promise<R
127
93
await fs . remove ( `${ cwd } /${ stateDir } /artifacts` ) ;
128
94
await state . incrementPipelineIid ( cwd , stateDir ) ;
129
95
const pipelineIid = await state . getPipelineIid ( cwd , stateDir ) ;
130
- parser = await Parser . create ( argv , writeStreams , pipelineIid ) ;
96
+ parser = await Parser . create ( argv , writeStreams , pipelineIid , jobs ) ;
131
97
await Utils . rsyncTrackedFiles ( cwd , stateDir , ".docker" ) ;
132
98
await Commander . runPipeline ( argv , parser , writeStreams ) ;
133
99
writeStreams . stderr ( chalk `{grey pipeline finished} in {grey ${ prettyHrtime ( process . hrtime ( time ) ) } }\n` ) ;
134
100
}
135
101
writeStreams . flush ( ) ;
136
102
137
- await cleanupResources ( parser ) ;
138
- return parser . jobs ;
103
+ return cleanupJobResources ( jobs ) ;
139
104
}
140
105
0 commit comments