From a30ce4e34816a153e638dd8cf39d06505405975b Mon Sep 17 00:00:00 2001 From: John Kleinschmidt Date: Tue, 3 Sep 2019 14:28:49 -0400 Subject: [PATCH 1/4] build: add WOA release to list of releases --- script/release/ci-release-build.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/script/release/ci-release-build.js b/script/release/ci-release-build.js index 74e7f968f1450..edc38ae73d780 100644 --- a/script/release/ci-release-build.js +++ b/script/release/ci-release-build.js @@ -7,7 +7,8 @@ const vstsURL = 'https://github.visualstudio.com/electron/_apis/build' const appVeyorJobs = { 'electron-x64': 'electron-x64-release', - 'electron-ia32': 'electron-ia32-release' + 'electron-ia32': 'electron-ia32-release', + 'electron-woa': 'electron-woa-release' } const circleCIJobs = [ From 944c7a2dc7d602794ffeb6a5e9f62d7875aeedac Mon Sep 17 00:00:00 2001 From: John Kleinschmidt Date: Tue, 3 Sep 2019 15:38:20 -0400 Subject: [PATCH 2/4] Add job count info for sudowoodo --- script/release/ci-release-build.js | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/script/release/ci-release-build.js b/script/release/ci-release-build.js index edc38ae73d780..5b64ee838c7b8 100644 --- a/script/release/ci-release-build.js +++ b/script/release/ci-release-build.js @@ -26,6 +26,9 @@ const vstsArmJobs = [ 'electron-woa-testing' ] +let jobRequestedCount = 0 +let jobSuccessfulCount = 0 + async function makeRequest (requestOptions, parseResponse) { return new Promise((resolve, reject) => { request(requestOptions, (err, res, body) => { @@ -64,7 +67,7 @@ async function circleCIcall (buildUrl, targetBranch, job, options) { if (!options.ghRelease) { buildRequest.build_parameters.UPLOAD_TO_S3 = 1 } - + jobRequestedCount++ const circleResponse = await makeRequest({ method: 'POST', url: buildUrl, @@ -76,6 +79,7 @@ async function circleCIcall (buildUrl, targetBranch, job, options) { }, true).catch(err => { console.log('Error calling CircleCI:', err) }) + jobSuccessfulCount++ console.log(`CircleCI release build request for ${job} successful. Check ${circleResponse.build_url} for status.`) } @@ -115,9 +119,11 @@ async function callAppVeyor (targetBranch, job, options) { }), method: 'POST' } + jobRequestedCount++ const appVeyorResponse = await makeRequest(requestOpts, true).catch(err => { console.log('Error calling AppVeyor:', err) }) + jobSuccessfulCount++ 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}`) } @@ -192,9 +198,11 @@ async function callVSTSBuild (build, targetBranch, environmentVariables) { body: JSON.stringify(buildBody), method: 'POST' } + jobRequestedCount++ const vstsResponse = await makeRequest(requestOpts, true).catch(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.`) } @@ -223,6 +231,7 @@ function runRelease (targetBranch, options) { buildAppVeyor(targetBranch, options) buildVSTS(targetBranch, options) } + console.log(`${jobRequestedCount} jobs were requested. ${jobSuccessfulCount} succeeded.`) } module.exports = runRelease From 3e3cdcac77ff96f57e5b1cd53d11ff84573d7b7c Mon Sep 17 00:00:00 2001 From: John Kleinschmidt Date: Wed, 4 Sep 2019 11:39:44 -0400 Subject: [PATCH 3/4] Add verification of all assets --- script/release/release.js | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/script/release/release.js b/script/release/release.js index c58c710fe3c99..6d4f4fe157bf6 100755 --- a/script/release/release.js +++ b/script/release/release.js @@ -96,6 +96,15 @@ function check (condition, statement, exitIfFail = false) { function assetsForVersion (version, validatingRelease) { 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-symbols.zip`, `electron-${version}-darwin-x64.zip`, @@ -116,6 +125,9 @@ function assetsForVersion (version, validatingRelease) { `electron-${version}-win32-x64-pdb.zip`, `electron-${version}-win32-x64-symbols.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.d.ts`, `ffmpeg-${version}-darwin-x64.zip`, @@ -125,7 +137,17 @@ function assetsForVersion (version, validatingRelease) { `ffmpeg-${version}-linux-x64.zip`, `ffmpeg-${version}-mas-x64.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) { patterns.push('SHASUMS256.txt') From f351ecc3279071118f224c0170e18d26812fdba4 Mon Sep 17 00:00:00 2001 From: John Kleinschmidt Date: Wed, 4 Sep 2019 12:01:51 -0400 Subject: [PATCH 4/4] Fix linting and add logic to wait before printing out results --- script/release/ci-release-build.js | 36 ++++++++++++++++++------------ script/release/release.js | 2 +- 2 files changed, 23 insertions(+), 15 deletions(-) diff --git a/script/release/ci-release-build.js b/script/release/ci-release-build.js index 5b64ee838c7b8..532ab460a8a73 100644 --- a/script/release/ci-release-build.js +++ b/script/release/ci-release-build.js @@ -83,13 +83,15 @@ async function circleCIcall (buildUrl, targetBranch, job, options) { 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) if (options.job) { 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 { - validJobs.forEach((job) => callAppVeyor(targetBranch, job, options)) + const appVeyorCalls = [] + validJobs.forEach((job) => appVeyorCalls.push(callAppVeyor(targetBranch, job, options))) + await Promise.all(appVeyorCalls) } } @@ -128,13 +130,15 @@ async function callAppVeyor (targetBranch, job, options) { 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}` if (options.job) { 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 { - circleCIJobs.forEach((job) => circleCIcall(circleBuildUrl, targetBranch, job, options)) + const circleCalls = [] + circleCIJobs.forEach((job) => circleCalls.push(circleCIcall(circleBuildUrl, targetBranch, job, options))) + await Promise.all(circleCalls) } } @@ -174,7 +178,9 @@ async function buildVSTS (targetBranch, options) { console.log('Error calling VSTS to get build definitions:', err) }) 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) { @@ -206,19 +212,19 @@ async function callVSTSBuild (build, targetBranch, environmentVariables) { 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) { switch (options.ci) { case 'CircleCI': { - buildCircleCI(targetBranch, options) + await buildCircleCI(targetBranch, options) break } case 'AppVeyor': { - buildAppVeyor(targetBranch, options) + await buildAppVeyor(targetBranch, options) break } case 'VSTS': { - buildVSTS(targetBranch, options) + await buildVSTS(targetBranch, options) break } default: { @@ -227,9 +233,11 @@ function runRelease (targetBranch, options) { } } } else { - buildCircleCI(targetBranch, options) - buildAppVeyor(targetBranch, options) - buildVSTS(targetBranch, options) + const jobQueue = [] + jobQueue.push(buildCircleCI(targetBranch, options)) + jobQueue.push(buildAppVeyor(targetBranch, options)) + jobQueue.push(buildVSTS(targetBranch, options)) + await Promise.all(jobQueue) } console.log(`${jobRequestedCount} jobs were requested. ${jobSuccessfulCount} succeeded.`) } diff --git a/script/release/release.js b/script/release/release.js index 6d4f4fe157bf6..43f0e647ca169 100755 --- a/script/release/release.js +++ b/script/release/release.js @@ -96,7 +96,7 @@ function check (condition, statement, exitIfFail = false) { function assetsForVersion (version, validatingRelease) { const patterns = [ - `chromedriver-${version}-darwin-x64.zip` + `chromedriver-${version}-darwin-x64.zip`, `chromedriver-${version}-linux-arm64.zip`, `chromedriver-${version}-linux-armv7l.zip`, `chromedriver-${version}-linux-ia32.zip`,