@@ -6,8 +6,7 @@ const request = require('request')
6
6
const BUILD_APPVEYOR_URL = 'https://ci.appveyor.com/api/builds'
7
7
const CIRCLECI_PIPELINE_URL = 'https://circleci.com/api/v2/project/gh/electron/electron/pipeline'
8
8
const VSTS_URL = 'https://github.visualstudio.com/electron/_apis/build'
9
- const CIRCLECI_RETRY_LIMIT = 10
10
- const CIRCLECI_WAIT_TIME = 10000
9
+ const CIRCLECI_WAIT_TIME = process . env . CIRCLECI_WAIT_TIME || 30000
11
10
12
11
const appVeyorJobs = {
13
12
'electron-x64' : 'electron-x64-release' ,
@@ -102,57 +101,67 @@ async function circleCIcall (targetBranch, job, options) {
102
101
103
102
async function getCircleCIWorkflowId ( pipelineId ) {
104
103
const pipelineInfoUrl = `https://circleci.com/api/v2/pipeline/${ pipelineId } `
105
- for ( let i = 0 ; i < CIRCLECI_RETRY_LIMIT ; i ++ ) {
104
+ let workflowId = 0
105
+ while ( workflowId === 0 ) {
106
106
const pipelineInfo = await circleCIRequest ( pipelineInfoUrl , 'GET' )
107
107
switch ( pipelineInfo . state ) {
108
108
case 'created' : {
109
109
if ( pipelineInfo . workflows . length === 1 ) {
110
- return pipelineInfo . workflows [ 0 ] . id
110
+ workflowId = pipelineInfo . workflows [ 0 ] . id
111
+ break
111
112
}
112
113
console . log ( 'Unxpected number of workflows, response was:' , pipelineInfo )
113
- return - 1
114
+ workflowId = - 1
115
+ break
114
116
}
115
117
case 'error' : {
116
118
console . log ( 'Error retrieving workflows, response was:' , pipelineInfo )
117
- return - 1
119
+ workflowId = - 1
120
+ break
118
121
}
119
122
}
120
123
await new Promise ( resolve => setTimeout ( resolve , CIRCLECI_WAIT_TIME ) )
121
124
}
122
- console . log ( `Error: could not get CircleCI WorkflowId for ${ pipelineId } after ${ CIRCLECI_RETRY_LIMIT } times.` )
123
- return - 1
125
+ return workflowId
124
126
}
125
127
126
128
async function getCircleCIJobNumber ( workflowId ) {
127
129
const jobInfoUrl = `https://circleci.com/api/v2/workflow/${ workflowId } /jobs`
128
- for ( let i = 0 ; i < CIRCLECI_RETRY_LIMIT ; i ++ ) {
130
+ let jobNumber = 0
131
+ while ( jobNumber === 0 ) {
129
132
const jobInfo = await circleCIRequest ( jobInfoUrl , 'GET' )
130
133
if ( ! jobInfo . items ) {
131
134
continue
132
135
}
133
136
if ( jobInfo . items . length !== 1 ) {
134
137
console . log ( 'Unxpected number of jobs, response was:' , jobInfo )
135
- return - 1
138
+ jobNumber = - 1
139
+ break
136
140
}
137
141
138
142
switch ( jobInfo . items [ 0 ] . status ) {
139
143
case 'not_running' :
140
144
case 'queued' :
141
145
case 'running' : {
142
146
if ( jobInfo . items [ 0 ] . job_number && ! isNaN ( jobInfo . items [ 0 ] . job_number ) ) {
143
- return jobInfo . items [ 0 ] . job_number
147
+ jobNumber = jobInfo . items [ 0 ] . job_number
144
148
}
145
149
break
146
150
}
147
- case 'error' : {
148
- console . log ( 'Error retrieving jobs, response was:' , jobInfo )
149
- return - 1
151
+ case 'canceled' :
152
+ case 'error' :
153
+ case 'infrastructure_fail' :
154
+ case 'timedout' :
155
+ case 'not_run' :
156
+ case 'failed' : {
157
+ console . log ( `Error job returned a status of ${ jobInfo . items [ 0 ] . status } , response was:` , jobInfo )
158
+ jobNumber = - 1
159
+ break
150
160
}
151
161
}
152
162
await new Promise ( resolve => setTimeout ( resolve , CIRCLECI_WAIT_TIME ) )
153
163
}
154
- console . log ( `Error: could not get CircleCI Job Number for ${ workflowId } after ${ CIRCLECI_RETRY_LIMIT } times.` )
155
- return - 1
164
+ return jobNumber
156
165
}
157
166
158
167
async function circleCIRequest ( url , method , requestBody ) {
0 commit comments