build: add WOA release to list of releases (#20094)
* build: add WOA release to list of releases * Add job count info for sudowoodo * Add verification of all assets * Fix linting and add logic to wait before printing out results
This commit is contained in:
parent
c29e4b096d
commit
65ebb6e547
2 changed files with 57 additions and 17 deletions
|
@ -7,7 +7,8 @@ const vstsURL = 'https://github.visualstudio.com/electron/_apis/build'
|
||||||
|
|
||||||
const appVeyorJobs = {
|
const appVeyorJobs = {
|
||||||
'electron-x64': 'electron-x64-release',
|
'electron-x64': 'electron-x64-release',
|
||||||
'electron-ia32': 'electron-ia32-release'
|
'electron-ia32': 'electron-ia32-release',
|
||||||
|
'electron-woa': 'electron-woa-release'
|
||||||
}
|
}
|
||||||
|
|
||||||
const circleCIJobs = [
|
const circleCIJobs = [
|
||||||
|
@ -25,6 +26,9 @@ const vstsArmJobs = [
|
||||||
'electron-woa-testing'
|
'electron-woa-testing'
|
||||||
]
|
]
|
||||||
|
|
||||||
|
let jobRequestedCount = 0
|
||||||
|
let jobSuccessfulCount = 0
|
||||||
|
|
||||||
async function makeRequest (requestOptions, parseResponse) {
|
async function makeRequest (requestOptions, parseResponse) {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
request(requestOptions, (err, res, body) => {
|
request(requestOptions, (err, res, body) => {
|
||||||
|
@ -63,7 +67,7 @@ async function circleCIcall (buildUrl, targetBranch, job, options) {
|
||||||
if (!options.ghRelease) {
|
if (!options.ghRelease) {
|
||||||
buildRequest.build_parameters.UPLOAD_TO_S3 = 1
|
buildRequest.build_parameters.UPLOAD_TO_S3 = 1
|
||||||
}
|
}
|
||||||
|
jobRequestedCount++
|
||||||
const circleResponse = await makeRequest({
|
const circleResponse = await makeRequest({
|
||||||
method: 'POST',
|
method: 'POST',
|
||||||
url: buildUrl,
|
url: buildUrl,
|
||||||
|
@ -75,16 +79,19 @@ async function circleCIcall (buildUrl, targetBranch, job, options) {
|
||||||
}, true).catch(err => {
|
}, true).catch(err => {
|
||||||
console.log('Error calling CircleCI:', err)
|
console.log('Error calling CircleCI:', err)
|
||||||
})
|
})
|
||||||
|
jobSuccessfulCount++
|
||||||
console.log(`CircleCI release build request for ${job} successful. Check ${circleResponse.build_url} for status.`)
|
console.log(`CircleCI release build request for ${job} successful. Check ${circleResponse.build_url} for status.`)
|
||||||
}
|
}
|
||||||
|
|
||||||
function buildAppVeyor (targetBranch, options) {
|
async function buildAppVeyor (targetBranch, options) {
|
||||||
const validJobs = Object.keys(appVeyorJobs)
|
const validJobs = Object.keys(appVeyorJobs)
|
||||||
if (options.job) {
|
if (options.job) {
|
||||||
assert(validJobs.includes(options.job), `Unknown AppVeyor CI job name: ${options.job}. Valid values are: ${validJobs}.`)
|
assert(validJobs.includes(options.job), `Unknown AppVeyor CI job name: ${options.job}. Valid values are: ${validJobs}.`)
|
||||||
callAppVeyor(targetBranch, options.job, options)
|
await callAppVeyor(targetBranch, options.job, options)
|
||||||
} else {
|
} else {
|
||||||
validJobs.forEach((job) => callAppVeyor(targetBranch, job, options))
|
const appVeyorCalls = []
|
||||||
|
validJobs.forEach((job) => appVeyorCalls.push(callAppVeyor(targetBranch, job, options)))
|
||||||
|
await Promise.all(appVeyorCalls)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -114,20 +121,24 @@ async function callAppVeyor (targetBranch, job, options) {
|
||||||
}),
|
}),
|
||||||
method: 'POST'
|
method: 'POST'
|
||||||
}
|
}
|
||||||
|
jobRequestedCount++
|
||||||
const appVeyorResponse = await makeRequest(requestOpts, true).catch(err => {
|
const appVeyorResponse = await makeRequest(requestOpts, true).catch(err => {
|
||||||
console.log('Error calling AppVeyor:', err)
|
console.log('Error calling AppVeyor:', err)
|
||||||
})
|
})
|
||||||
|
jobSuccessfulCount++
|
||||||
const buildUrl = `https://ci.appveyor.com/project/electron-bot/${appVeyorJobs[job]}/build/${appVeyorResponse.version}`
|
const buildUrl = `https://ci.appveyor.com/project/electron-bot/${appVeyorJobs[job]}/build/${appVeyorResponse.version}`
|
||||||
console.log(`AppVeyor release build request for ${job} successful. Check build status at ${buildUrl}`)
|
console.log(`AppVeyor release build request for ${job} successful. Check build status at ${buildUrl}`)
|
||||||
}
|
}
|
||||||
|
|
||||||
function buildCircleCI (targetBranch, options) {
|
async function buildCircleCI (targetBranch, options) {
|
||||||
const circleBuildUrl = `https://circleci.com/api/v1.1/project/github/electron/electron/tree/${targetBranch}?circle-token=${process.env.CIRCLE_TOKEN}`
|
const circleBuildUrl = `https://circleci.com/api/v1.1/project/github/electron/electron/tree/${targetBranch}?circle-token=${process.env.CIRCLE_TOKEN}`
|
||||||
if (options.job) {
|
if (options.job) {
|
||||||
assert(circleCIJobs.includes(options.job), `Unknown CircleCI job name: ${options.job}. Valid values are: ${circleCIJobs}.`)
|
assert(circleCIJobs.includes(options.job), `Unknown CircleCI job name: ${options.job}. Valid values are: ${circleCIJobs}.`)
|
||||||
circleCIcall(circleBuildUrl, targetBranch, options.job, options)
|
await circleCIcall(circleBuildUrl, targetBranch, options.job, options)
|
||||||
} else {
|
} else {
|
||||||
circleCIJobs.forEach((job) => circleCIcall(circleBuildUrl, targetBranch, job, options))
|
const circleCalls = []
|
||||||
|
circleCIJobs.forEach((job) => circleCalls.push(circleCIcall(circleBuildUrl, targetBranch, job, options)))
|
||||||
|
await Promise.all(circleCalls)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -167,7 +178,9 @@ async function buildVSTS (targetBranch, options) {
|
||||||
console.log('Error calling VSTS to get build definitions:', err)
|
console.log('Error calling VSTS to get build definitions:', err)
|
||||||
})
|
})
|
||||||
const buildsToRun = vstsResponse.value.filter(build => build.name === options.job)
|
const buildsToRun = vstsResponse.value.filter(build => build.name === options.job)
|
||||||
buildsToRun.forEach((build) => callVSTSBuild(build, targetBranch, environmentVariables))
|
const vstsJobs = []
|
||||||
|
buildsToRun.forEach((build) => vstsJobs.push(callVSTSBuild(build, targetBranch, environmentVariables)))
|
||||||
|
await Promise.all(vstsJobs)
|
||||||
}
|
}
|
||||||
|
|
||||||
async function callVSTSBuild (build, targetBranch, environmentVariables) {
|
async function callVSTSBuild (build, targetBranch, environmentVariables) {
|
||||||
|
@ -191,25 +204,27 @@ async function callVSTSBuild (build, targetBranch, environmentVariables) {
|
||||||
body: JSON.stringify(buildBody),
|
body: JSON.stringify(buildBody),
|
||||||
method: 'POST'
|
method: 'POST'
|
||||||
}
|
}
|
||||||
|
jobRequestedCount++
|
||||||
const vstsResponse = await makeRequest(requestOpts, true).catch(err => {
|
const vstsResponse = await makeRequest(requestOpts, true).catch(err => {
|
||||||
console.log(`Error calling VSTS for job ${build.name}`, err)
|
console.log(`Error calling VSTS for job ${build.name}`, err)
|
||||||
})
|
})
|
||||||
|
jobSuccessfulCount++
|
||||||
console.log(`VSTS release build request for ${build.name} successful. Check ${vstsResponse._links.web.href} for status.`)
|
console.log(`VSTS release build request for ${build.name} successful. Check ${vstsResponse._links.web.href} for status.`)
|
||||||
}
|
}
|
||||||
|
|
||||||
function runRelease (targetBranch, options) {
|
async function runRelease (targetBranch, options) {
|
||||||
if (options.ci) {
|
if (options.ci) {
|
||||||
switch (options.ci) {
|
switch (options.ci) {
|
||||||
case 'CircleCI': {
|
case 'CircleCI': {
|
||||||
buildCircleCI(targetBranch, options)
|
await buildCircleCI(targetBranch, options)
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
case 'AppVeyor': {
|
case 'AppVeyor': {
|
||||||
buildAppVeyor(targetBranch, options)
|
await buildAppVeyor(targetBranch, options)
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
case 'VSTS': {
|
case 'VSTS': {
|
||||||
buildVSTS(targetBranch, options)
|
await buildVSTS(targetBranch, options)
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
default: {
|
default: {
|
||||||
|
@ -218,10 +233,13 @@ function runRelease (targetBranch, options) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
buildCircleCI(targetBranch, options)
|
const jobQueue = []
|
||||||
buildAppVeyor(targetBranch, options)
|
jobQueue.push(buildCircleCI(targetBranch, options))
|
||||||
buildVSTS(targetBranch, options)
|
jobQueue.push(buildAppVeyor(targetBranch, options))
|
||||||
|
jobQueue.push(buildVSTS(targetBranch, options))
|
||||||
|
await Promise.all(jobQueue)
|
||||||
}
|
}
|
||||||
|
console.log(`${jobRequestedCount} jobs were requested. ${jobSuccessfulCount} succeeded.`)
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = runRelease
|
module.exports = runRelease
|
||||||
|
|
|
@ -96,6 +96,15 @@ function check (condition, statement, exitIfFail = false) {
|
||||||
|
|
||||||
function assetsForVersion (version, validatingRelease) {
|
function assetsForVersion (version, validatingRelease) {
|
||||||
const patterns = [
|
const patterns = [
|
||||||
|
`chromedriver-${version}-darwin-x64.zip`,
|
||||||
|
`chromedriver-${version}-linux-arm64.zip`,
|
||||||
|
`chromedriver-${version}-linux-armv7l.zip`,
|
||||||
|
`chromedriver-${version}-linux-ia32.zip`,
|
||||||
|
`chromedriver-${version}-linux-x64.zip`,
|
||||||
|
`chromedriver-${version}-mas-x64.zip`,
|
||||||
|
`chromedriver-${version}-win32-ia32.zip`,
|
||||||
|
`chromedriver-${version}-win32-x64.zip`,
|
||||||
|
`chromedriver-${version}-win32-arm64.zip`,
|
||||||
`electron-${version}-darwin-x64-dsym.zip`,
|
`electron-${version}-darwin-x64-dsym.zip`,
|
||||||
`electron-${version}-darwin-x64-symbols.zip`,
|
`electron-${version}-darwin-x64-symbols.zip`,
|
||||||
`electron-${version}-darwin-x64.zip`,
|
`electron-${version}-darwin-x64.zip`,
|
||||||
|
@ -116,6 +125,9 @@ function assetsForVersion (version, validatingRelease) {
|
||||||
`electron-${version}-win32-x64-pdb.zip`,
|
`electron-${version}-win32-x64-pdb.zip`,
|
||||||
`electron-${version}-win32-x64-symbols.zip`,
|
`electron-${version}-win32-x64-symbols.zip`,
|
||||||
`electron-${version}-win32-x64.zip`,
|
`electron-${version}-win32-x64.zip`,
|
||||||
|
`electron-${version}-win32-arm64-pdb.zip`,
|
||||||
|
`electron-${version}-win32-arm64-symbols.zip`,
|
||||||
|
`electron-${version}-win32-arm64.zip`,
|
||||||
`electron-api.json`,
|
`electron-api.json`,
|
||||||
`electron.d.ts`,
|
`electron.d.ts`,
|
||||||
`ffmpeg-${version}-darwin-x64.zip`,
|
`ffmpeg-${version}-darwin-x64.zip`,
|
||||||
|
@ -125,7 +137,17 @@ function assetsForVersion (version, validatingRelease) {
|
||||||
`ffmpeg-${version}-linux-x64.zip`,
|
`ffmpeg-${version}-linux-x64.zip`,
|
||||||
`ffmpeg-${version}-mas-x64.zip`,
|
`ffmpeg-${version}-mas-x64.zip`,
|
||||||
`ffmpeg-${version}-win32-ia32.zip`,
|
`ffmpeg-${version}-win32-ia32.zip`,
|
||||||
`ffmpeg-${version}-win32-x64.zip`
|
`ffmpeg-${version}-win32-x64.zip`,
|
||||||
|
`ffmpeg-${version}-win32-arm64.zip`,
|
||||||
|
`mksnapshot-${version}-darwin-x64.zip`,
|
||||||
|
`mksnapshot-${version}-linux-arm64-x64.zip`,
|
||||||
|
`mksnapshot-${version}-linux-armv7l-x64.zip`,
|
||||||
|
`mksnapshot-${version}-linux-ia32.zip`,
|
||||||
|
`mksnapshot-${version}-linux-x64.zip`,
|
||||||
|
`mksnapshot-${version}-mas-x64.zip`,
|
||||||
|
`mksnapshot-${version}-win32-ia32.zip`,
|
||||||
|
`mksnapshot-${version}-win32-x64.zip`,
|
||||||
|
`mksnapshot-${version}-win32-arm64-x64.zip`
|
||||||
]
|
]
|
||||||
if (!validatingRelease) {
|
if (!validatingRelease) {
|
||||||
patterns.push('SHASUMS256.txt')
|
patterns.push('SHASUMS256.txt')
|
||||||
|
|
Loading…
Add table
Reference in a new issue