From aaa8aec946c0c1ecc964ae806642442e96210493 Mon Sep 17 00:00:00 2001 From: Vanessa Yuen Date: Tue, 24 Oct 2017 12:42:45 -0400 Subject: [PATCH 01/11] trying out parameterized builds in circle --- .circleci/config.yml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index a43cb917fa..5841bb3931 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -19,6 +19,10 @@ jobs: case ${MESSAGE} in Bump* ) echo 'export ELECTRON_RELEASE=1' >> $BASH_ENV esac + if [ -n "${RUN_RELEASE_BUILD}" ]; then + echo 'release build triggered from api' + echo 'export ELECTRON_RELEASE=1' >> $BASH_ENV + fi - run: name: Bootstrap command: | @@ -63,7 +67,7 @@ jobs: - image: electronbuilds/electron:0.0.3 environment: TARGET_ARCH: arm64 - resource_class: xlarge + resource_class: xlarge steps: - checkout - run: From b2a735ef4f627fa0ca0e8645036ac0ab7a4aaf9c Mon Sep 17 00:00:00 2001 From: Vanessa Yuen Date: Tue, 31 Oct 2017 17:21:13 +0800 Subject: [PATCH 02/11] test build script super rough draft --- test-builds.sh | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100755 test-builds.sh diff --git a/test-builds.sh b/test-builds.sh new file mode 100755 index 0000000000..deae329a91 --- /dev/null +++ b/test-builds.sh @@ -0,0 +1,22 @@ +#!/bin/bash + +_project=$1 +_branch=$2 +_circle_token=$3 + +trigger_build_url=https://circleci.com/api/v1.1/project/github/${_project}/tree/${_branch}?circle-token=${_circle_token} + +post_data=$(cat < Date: Thu, 2 Nov 2017 15:26:37 +0800 Subject: [PATCH 03/11] make script to hit circle ci api point to build for release --- script/ci-release-build.js | 49 ++++++++++++++++++++++++++++++++++++++ test-builds.sh | 22 ----------------- 2 files changed, 49 insertions(+), 22 deletions(-) create mode 100644 script/ci-release-build.js delete mode 100755 test-builds.sh diff --git a/script/ci-release-build.js b/script/ci-release-build.js new file mode 100644 index 0000000000..8da29b3eac --- /dev/null +++ b/script/ci-release-build.js @@ -0,0 +1,49 @@ +const args = require('minimist')(process.argv.slice(2)) +const assert = require('assert') +const request = require('request') + +const ciJobs = [ + 'electron-linux-arm64', + 'electron-linux-ia32', + 'electron-linux-x64', + 'electron-linux-arm' +] + +if (args._.length < 1) { + console.log(`Trigger Circle CI to build release builds of electron. + Usage: ci-release-build.js [--branch=TARGET_BRANCH] CI_JOB_NAME + `) + process.exit(1) +} + +const targetBranch = args['branch'] || 'master' +const ciJob = args._[0] +assert(ciJobs.includes(ciJob), `Unknown ci job name: ${ciJob}.`) +assert(process.env.CIRCLE_TOKEN, 'CIRCLE_TOKEN not found in environment') + + +const circleBuildURL = `https://circleci.com/api/v1.1/project/github/electron/electron/tree/${targetBranch}?circle-token=${process.env.CIRCLE_TOKEN}` + +console.log(`Triggering CircleCI to run build job: ${ciJob} against branch: ${targetBranch} with release flag.`) + +request({ + method: 'POST', + url: circleBuildURL, + headers: { + 'Content-Type': 'application/json', + 'Accept': 'application/json' + }, + body: JSON.stringify({ + 'build_parameters': { + 'RUN_RELEASE_BUILD': 'true', + 'CIRCLE_JOB': ciJob + } + }) +}, (err, res, body) => { + if (!err && res.statusCode == 200) { + const build = JSON.parse(body) + console.log(`check ${build.build_url} for status`) + } else { + console.log('error', err) + } +}) diff --git a/test-builds.sh b/test-builds.sh deleted file mode 100755 index deae329a91..0000000000 --- a/test-builds.sh +++ /dev/null @@ -1,22 +0,0 @@ -#!/bin/bash - -_project=$1 -_branch=$2 -_circle_token=$3 - -trigger_build_url=https://circleci.com/api/v1.1/project/github/${_project}/tree/${_branch}?circle-token=${_circle_token} - -post_data=$(cat < Date: Thu, 2 Nov 2017 16:06:28 +0800 Subject: [PATCH 04/11] modify upload script to allow uploading release assets to s3 --- .circleci/config.yml | 9 ++++--- script/upload.py | 59 ++++++++++++++++++++++++++++++-------------- 2 files changed, 47 insertions(+), 21 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 5841bb3931..4a8dcb09b7 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -21,7 +21,7 @@ jobs: esac if [ -n "${RUN_RELEASE_BUILD}" ]; then echo 'release build triggered from api' - echo 'export ELECTRON_RELEASE=1' >> $BASH_ENV + echo 'export ELECTRON_RELEASE=1 TRIGGERED_BY_API=1' >> $BASH_ENV fi - run: name: Bootstrap @@ -56,9 +56,12 @@ jobs: - run: name: Upload distribution command: | - if [ "$ELECTRON_RELEASE" == "1" ]; then - echo 'Uploading Electron release distribution' + if [ "$ELECTRON_RELEASE" == "1" ] && [ "$TRIGGERED_BY_API" != "1" ]; then + echo 'Uploading Electron release distribution to github releases' script/upload.py + elif [ "$ELECTRON_RELEASE" == "1" ] && [ "$TRIGGERED_BY_API" == "1" ]; then + echo 'Uploading Electron release distribution to s3' + script/upload.py --upload_to_s3 else echo 'Skipping upload distribution because build is not for release' fi diff --git a/script/upload.py b/script/upload.py index 586a6be1eb..eb6a4409f5 100755 --- a/script/upload.py +++ b/script/upload.py @@ -56,34 +56,36 @@ def main(): tag_exists = True break - assert tag_exists == args.overwrite, \ - 'You have to pass --overwrite to overwrite a published release' - - if not args.overwrite: - release = create_or_get_release_draft(github, releases, args.version, - tag_exists) + if not args.upload_to_s3: + assert tag_exists == args.overwrite, \ + 'You have to pass --overwrite to overwrite a published release' + if not args.overwrite: + release = create_or_get_release_draft(github, releases, args.version, + tag_exists) # Upload Electron with GitHub Releases API. - upload_electron(github, release, os.path.join(DIST_DIR, DIST_NAME)) - upload_electron(github, release, os.path.join(DIST_DIR, SYMBOLS_NAME)) + upload_electron(github, release, os.path.join(DIST_DIR, DIST_NAME), args.upload_to_s3) + upload_electron(github, release, os.path.join(DIST_DIR, SYMBOLS_NAME), args.upload_to_s3) if PLATFORM == 'darwin': - upload_electron(github, release, os.path.join(DIST_DIR, + upload_electron(github, release, os.path.join(DIST_DIR, args.upload_to_s3, 'electron-api.json')) - upload_electron(github, release, os.path.join(DIST_DIR, 'electron.d.ts')) - upload_electron(github, release, os.path.join(DIST_DIR, DSYM_NAME)) + upload_electron(github, release, os.path.join(DIST_DIR, 'electron.d.ts'), args.upload_to_s3) + upload_electron(github, release, os.path.join(DIST_DIR, DSYM_NAME), args.upload_to_s3) elif PLATFORM == 'win32': - upload_electron(github, release, os.path.join(DIST_DIR, PDB_NAME)) + upload_electron(github, release, os.path.join(DIST_DIR, PDB_NAME), args.upload_to_s3) # Upload free version of ffmpeg. ffmpeg = get_zip_name('ffmpeg', ELECTRON_VERSION) - upload_electron(github, release, os.path.join(DIST_DIR, ffmpeg)) + upload_electron(github, release, os.path.join(DIST_DIR, ffmpeg), args.upload_to_s3) # Upload chromedriver and mksnapshot for minor version update. if parse_version(args.version)[2] == '0': chromedriver = get_zip_name('chromedriver', ELECTRON_VERSION) - upload_electron(github, release, os.path.join(DIST_DIR, chromedriver)) + upload_electron(github, release, os.path.join(DIST_DIR, chromedriver), args.upload_to_s3) mksnapshot = get_zip_name('mksnapshot', ELECTRON_VERSION) - upload_electron(github, release, os.path.join(DIST_DIR, mksnapshot)) + upload_electron(github, release, os.path.join(DIST_DIR, mksnapshot), args.upload_to_s3) + + # TODO: make s3 compatible if PLATFORM == 'win32' and not tag_exists: # Upload PDBs to Windows symbol server. @@ -187,7 +189,17 @@ def create_release_draft(github, tag): return r -def upload_electron(github, release, file_path): +def upload_electron(github, release, file_path, upload_to_s3): + + # if upload_to_s3 is set, skip github upload. + if upload_to_s3: + bucket, access_key, secret_key = s3_config() + key_prefix = 'electron-artifacts/{0}'.format(release['tag_name']) + s3put(bucket, access_key, secret_key, os.path.dirname(file_path), + key_prefix, [file_path]) + upload_sha256_checksum(release['tag_name'], file_path, key_prefix) + return + # Delete the original file before uploading in CI. filename = os.path.basename(file_path) if os.environ.has_key('CI'): @@ -220,9 +232,11 @@ def upload_io_to_github(release, filename, filepath): execute(['node', script_path, filepath, filename, str(release['id'])]) -def upload_sha256_checksum(version, file_path): +def upload_sha256_checksum(version, file_path, key_prefix=None): bucket, access_key, secret_key = s3_config() checksum_path = '{}.sha256sum'.format(file_path) + if key_prefix is None: + key_prefix = 'atom-shell/tmp/{0}'.format(version) sha256 = hashlib.sha256() with open(file_path, 'rb') as f: sha256.update(f.read()) @@ -231,7 +245,7 @@ def upload_sha256_checksum(version, file_path): with open(checksum_path, 'w') as checksum: checksum.write('{} *{}'.format(sha256.hexdigest(), filename)) s3put(bucket, access_key, secret_key, os.path.dirname(checksum_path), - 'atom-shell/tmp/{0}'.format(version), [checksum_path]) + key_prefix, [checksum_path]) def auth_token(): @@ -241,6 +255,15 @@ def auth_token(): assert token, message return token +def parse_args(): + parser = argparse.ArgumentParser(description='Upload Electron Assets') + parser.add_argument('-s', '--upload_to_s3', + help='Upload assets to s3 bucket', + dest='upload_to_s3', + action='store_true', + default=False, + required=False) + return parser.parse_args() if __name__ == '__main__': import sys From bf5b9e70bb94b12c9e38fae0e49c125e72355615 Mon Sep 17 00:00:00 2001 From: Vanessa Yuen Date: Thu, 2 Nov 2017 16:20:41 +0800 Subject: [PATCH 05/11] fix linting errors --- script/ci-release-build.js | 3 +-- script/upload.py | 30 +++++++++++++++++++----------- 2 files changed, 20 insertions(+), 13 deletions(-) diff --git a/script/ci-release-build.js b/script/ci-release-build.js index 8da29b3eac..cf4a2c609a 100644 --- a/script/ci-release-build.js +++ b/script/ci-release-build.js @@ -21,7 +21,6 @@ const ciJob = args._[0] assert(ciJobs.includes(ciJob), `Unknown ci job name: ${ciJob}.`) assert(process.env.CIRCLE_TOKEN, 'CIRCLE_TOKEN not found in environment') - const circleBuildURL = `https://circleci.com/api/v1.1/project/github/electron/electron/tree/${targetBranch}?circle-token=${process.env.CIRCLE_TOKEN}` console.log(`Triggering CircleCI to run build job: ${ciJob} against branch: ${targetBranch} with release flag.`) @@ -40,7 +39,7 @@ request({ } }) }, (err, res, body) => { - if (!err && res.statusCode == 200) { + if (!err && body) { const build = JSON.parse(body) console.log(`check ${build.build_url} for status`) } else { diff --git a/script/upload.py b/script/upload.py index eb6a4409f5..1d85253658 100755 --- a/script/upload.py +++ b/script/upload.py @@ -64,26 +64,34 @@ def main(): tag_exists) # Upload Electron with GitHub Releases API. - upload_electron(github, release, os.path.join(DIST_DIR, DIST_NAME), args.upload_to_s3) - upload_electron(github, release, os.path.join(DIST_DIR, SYMBOLS_NAME), args.upload_to_s3) + upload_electron(github, release, os.path.join(DIST_DIR, DIST_NAME), + args.upload_to_s3) + upload_electron(github, release, os.path.join(DIST_DIR, SYMBOLS_NAME), + args.upload_to_s3) if PLATFORM == 'darwin': - upload_electron(github, release, os.path.join(DIST_DIR, args.upload_to_s3, - 'electron-api.json')) - upload_electron(github, release, os.path.join(DIST_DIR, 'electron.d.ts'), args.upload_to_s3) - upload_electron(github, release, os.path.join(DIST_DIR, DSYM_NAME), args.upload_to_s3) + upload_electron(github, release, os.path.join(DIST_DIR, + 'electron-api.json'), args.upload_to_s3) + upload_electron(github, release, os.path.join(DIST_DIR, 'electron.d.ts'), + args.upload_to_s3) + upload_electron(github, release, os.path.join(DIST_DIR, DSYM_NAME), + args.upload_to_s3) elif PLATFORM == 'win32': - upload_electron(github, release, os.path.join(DIST_DIR, PDB_NAME), args.upload_to_s3) + upload_electron(github, release, os.path.join(DIST_DIR, PDB_NAME), + args.upload_to_s3) # Upload free version of ffmpeg. ffmpeg = get_zip_name('ffmpeg', ELECTRON_VERSION) - upload_electron(github, release, os.path.join(DIST_DIR, ffmpeg), args.upload_to_s3) + upload_electron(github, release, os.path.join(DIST_DIR, ffmpeg), + args.upload_to_s3) # Upload chromedriver and mksnapshot for minor version update. if parse_version(args.version)[2] == '0': chromedriver = get_zip_name('chromedriver', ELECTRON_VERSION) - upload_electron(github, release, os.path.join(DIST_DIR, chromedriver), args.upload_to_s3) + upload_electron(github, release, os.path.join(DIST_DIR, chromedriver), + args.upload_to_s3) mksnapshot = get_zip_name('mksnapshot', ELECTRON_VERSION) - upload_electron(github, release, os.path.join(DIST_DIR, mksnapshot), args.upload_to_s3) + upload_electron(github, release, os.path.join(DIST_DIR, mksnapshot), + args.upload_to_s3) # TODO: make s3 compatible @@ -222,7 +230,7 @@ def upload_electron(github, release, file_path, upload_to_s3): arm_filename = filename.replace('armv7l', 'arm') arm_file_path = os.path.join(os.path.dirname(file_path), arm_filename) shutil.copy2(file_path, arm_file_path) - upload_electron(github, release, arm_file_path) + upload_electron(github, release, arm_file_path, upload_to_s3) def upload_io_to_github(release, filename, filepath): From 4cc8008cfc913daff7a63ef53f01b7dd26ff517a Mon Sep 17 00:00:00 2001 From: Vanessa Yuen Date: Thu, 2 Nov 2017 16:42:09 +0800 Subject: [PATCH 06/11] derp.. why did I make a separate parse_args() --- script/upload.py | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/script/upload.py b/script/upload.py index 1d85253658..75be4edb99 100755 --- a/script/upload.py +++ b/script/upload.py @@ -114,6 +114,12 @@ def parse_args(): parser.add_argument('-p', '--publish-release', help='Publish the release', action='store_true') + parser.add_argument('-s', '--upload_to_s3', + help='Upload assets to s3 bucket', + dest='upload_to_s3', + action='store_true', + default=False, + required=False) return parser.parse_args() @@ -263,15 +269,6 @@ def auth_token(): assert token, message return token -def parse_args(): - parser = argparse.ArgumentParser(description='Upload Electron Assets') - parser.add_argument('-s', '--upload_to_s3', - help='Upload assets to s3 bucket', - dest='upload_to_s3', - action='store_true', - default=False, - required=False) - return parser.parse_args() if __name__ == '__main__': import sys From 7cb408838f48d70ce4cfd49dc59aa0368b025f07 Mon Sep 17 00:00:00 2001 From: Vanessa Yuen Date: Fri, 3 Nov 2017 08:12:54 +0800 Subject: [PATCH 07/11] skip headers and pdbs for fake release builds --- script/upload.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/script/upload.py b/script/upload.py index 75be4edb99..a1362bafb9 100755 --- a/script/upload.py +++ b/script/upload.py @@ -93,9 +93,7 @@ def main(): upload_electron(github, release, os.path.join(DIST_DIR, mksnapshot), args.upload_to_s3) - # TODO: make s3 compatible - - if PLATFORM == 'win32' and not tag_exists: + if PLATFORM == 'win32' and not tag_exists and not args.upload_to_s3: # Upload PDBs to Windows symbol server. run_python_script('upload-windows-pdb.py') From 3bd38bd1fd02b29a1ae5d3507cef4da24b6925e8 Mon Sep 17 00:00:00 2001 From: Vanessa Yuen Date: Fri, 3 Nov 2017 12:45:30 +0800 Subject: [PATCH 08/11] add API flags to all other circle jobs --- .circleci/config.yml | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/.circleci/config.yml b/.circleci/config.yml index 4a8dcb09b7..cd4a4dfb40 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -83,6 +83,10 @@ jobs: case ${MESSAGE} in Bump* ) echo 'export ELECTRON_RELEASE=1' >> $BASH_ENV esac + if [ -n "${RUN_RELEASE_BUILD}" ]; then + echo 'release build triggered from api' + echo 'export ELECTRON_RELEASE=1 TRIGGERED_BY_API=1' >> $BASH_ENV + fi - run: name: Bootstrap command: | @@ -119,6 +123,9 @@ jobs: if [ "$ELECTRON_RELEASE" == "1" ]; then echo 'Uploading Electron release distribution' script/upload.py + elif [ "$ELECTRON_RELEASE" == "1" ] && [ "$TRIGGERED_BY_API" == "1" ]; then + echo 'Uploading Electron release distribution to s3' + script/upload.py --upload_to_s3 else echo 'Skipping upload distribution because build is not for release' fi @@ -140,6 +147,10 @@ jobs: case ${MESSAGE} in Bump* ) echo 'export ELECTRON_RELEASE=1' >> $BASH_ENV esac + if [ -n "${RUN_RELEASE_BUILD}" ]; then + echo 'release build triggered from api' + echo 'export ELECTRON_RELEASE=1 TRIGGERED_BY_API=1' >> $BASH_ENV + fi - run: name: Bootstrap command: | @@ -176,6 +187,9 @@ jobs: if [ "$ELECTRON_RELEASE" == "1" ]; then echo 'Uploading Electron release distribution' script/upload.py + elif [ "$ELECTRON_RELEASE" == "1" ] && [ "$TRIGGERED_BY_API" == "1" ]; then + echo 'Uploading Electron release distribution to s3' + script/upload.py --upload_to_s3 else echo 'Skipping upload distribution because build is not for release' fi @@ -198,6 +212,10 @@ jobs: case ${MESSAGE} in Bump* ) echo 'export ELECTRON_RELEASE=1' >> $BASH_ENV esac + if [ -n "${RUN_RELEASE_BUILD}" ]; then + echo 'release build triggered from api' + echo 'export ELECTRON_RELEASE=1 TRIGGERED_BY_API=1' >> $BASH_ENV + fi - run: name: Bootstrap command: | @@ -234,6 +252,9 @@ jobs: if [ "$ELECTRON_RELEASE" == "1" ]; then echo 'Uploading Electron release distribution' script/upload.py + elif [ "$ELECTRON_RELEASE" == "1" ] && [ "$TRIGGERED_BY_API" == "1" ]; then + echo 'Uploading Electron release distribution to s3' + script/upload.py --upload_to_s3 else echo 'Skipping upload distribution because build is not for release' fi From 63632f1137f6e86472c019bb1e8a62e0918a7dbb Mon Sep 17 00:00:00 2001 From: Vanessa Yuen Date: Fri, 3 Nov 2017 14:36:25 +0800 Subject: [PATCH 09/11] fix circle config --- .circleci/config.yml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index cd4a4dfb40..edfb1c2315 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -120,8 +120,8 @@ jobs: - run: name: Upload distribution command: | - if [ "$ELECTRON_RELEASE" == "1" ]; then - echo 'Uploading Electron release distribution' + if [ "$ELECTRON_RELEASE" == "1" ] && [ "$TRIGGERED_BY_API" != "1" ]; then + echo 'Uploading Electron release distribution to github releases' script/upload.py elif [ "$ELECTRON_RELEASE" == "1" ] && [ "$TRIGGERED_BY_API" == "1" ]; then echo 'Uploading Electron release distribution to s3' @@ -184,8 +184,8 @@ jobs: - run: name: Upload distribution command: | - if [ "$ELECTRON_RELEASE" == "1" ]; then - echo 'Uploading Electron release distribution' + if [ "$ELECTRON_RELEASE" == "1" ] && [ "$TRIGGERED_BY_API" != "1" ]; then + echo 'Uploading Electron release distribution to github releases' script/upload.py elif [ "$ELECTRON_RELEASE" == "1" ] && [ "$TRIGGERED_BY_API" == "1" ]; then echo 'Uploading Electron release distribution to s3' @@ -249,8 +249,8 @@ jobs: - run: name: Upload distribution command: | - if [ "$ELECTRON_RELEASE" == "1" ]; then - echo 'Uploading Electron release distribution' + if [ "$ELECTRON_RELEASE" == "1" ] && [ "$TRIGGERED_BY_API" != "1" ]; then + echo 'Uploading Electron release distribution to github releases' script/upload.py elif [ "$ELECTRON_RELEASE" == "1" ] && [ "$TRIGGERED_BY_API" == "1" ]; then echo 'Uploading Electron release distribution to s3' From 85a811db55f4f8f2a2d796c398282c0403e79214 Mon Sep 17 00:00:00 2001 From: Vanessa Yuen Date: Fri, 3 Nov 2017 14:51:40 +0800 Subject: [PATCH 10/11] make target branch name mandatory and specific ci job optional add it as an npm script `npm run mock-release -- TARGET_BRANCH` --- package.json | 1 + script/ci-release-build.js | 64 +++++++++++++++++++++----------------- 2 files changed, 37 insertions(+), 28 deletions(-) diff --git a/package.json b/package.json index e4a1cdc519..af174d5c24 100644 --- a/package.json +++ b/package.json @@ -53,6 +53,7 @@ "create-api-json": "electron-docs-linter docs --outfile=out/electron-api.json --version=$npm_package_version", "create-typescript-definitions": "npm run create-api-json && electron-typescript-definitions --in=out/electron-api.json --out=out/electron.d.ts", "merge-release": "node ./script/merge-release.js", + "mock-release": "node ./script/ci-release-build.js", "preinstall": "node -e 'process.exit(0)'", "publish-to-npm": "node ./script/publish-to-npm.js", "prepack": "check-for-leaks", diff --git a/script/ci-release-build.js b/script/ci-release-build.js index cf4a2c609a..8fb2ff0cf2 100644 --- a/script/ci-release-build.js +++ b/script/ci-release-build.js @@ -9,40 +9,48 @@ const ciJobs = [ 'electron-linux-arm' ] +const CIcall = (buildUrl, targetBranch, job) => { + console.log(`Triggering CircleCI to run build job: ${job} on branch: ${targetBranch} with release flag.`) + + request({ + method: 'POST', + url: buildUrl, + headers: { + 'Content-Type': 'application/json', + 'Accept': 'application/json' + }, + body: JSON.stringify({ + 'build_parameters': { + 'RUN_RELEASE_BUILD': 'true', + 'CIRCLE_JOB': job + } + }) + }, (err, res, body) => { + if (!err && res.statusCode >= 200 && res.statusCode < 300) { + const build = JSON.parse(body) + console.log(`Check ${build.build_url} for status. (${job})`) + } else { + console.log('Error: ', err || JSON.parse(res.body), job) + } + }) +} + if (args._.length < 1) { console.log(`Trigger Circle CI to build release builds of electron. - Usage: ci-release-build.js [--branch=TARGET_BRANCH] CI_JOB_NAME + Usage: ci-release-build.js [--job=CI_JOB_NAME] TARGET_BRANCH `) process.exit(1) } -const targetBranch = args['branch'] || 'master' -const ciJob = args._[0] -assert(ciJobs.includes(ciJob), `Unknown ci job name: ${ciJob}.`) assert(process.env.CIRCLE_TOKEN, 'CIRCLE_TOKEN not found in environment') -const circleBuildURL = `https://circleci.com/api/v1.1/project/github/electron/electron/tree/${targetBranch}?circle-token=${process.env.CIRCLE_TOKEN}` +const targetBranch = args._[0] +const job = args['job'] +const circleBuildUrl = `https://circleci.com/api/v1.1/project/github/electron/electron/tree/${targetBranch}?circle-token=${process.env.CIRCLE_TOKEN}` -console.log(`Triggering CircleCI to run build job: ${ciJob} against branch: ${targetBranch} with release flag.`) - -request({ - method: 'POST', - url: circleBuildURL, - headers: { - 'Content-Type': 'application/json', - 'Accept': 'application/json' - }, - body: JSON.stringify({ - 'build_parameters': { - 'RUN_RELEASE_BUILD': 'true', - 'CIRCLE_JOB': ciJob - } - }) -}, (err, res, body) => { - if (!err && body) { - const build = JSON.parse(body) - console.log(`check ${build.build_url} for status`) - } else { - console.log('error', err) - } -}) +if (job) { + assert(ciJobs.includes(job), `Unknown CI job name: ${job}.`) + CIcall(circleBuildUrl, targetBranch, job) +} else { + ciJobs.forEach((job) => CIcall(circleBuildUrl, targetBranch, job)) +} From 2063af8ac6d8415824b4ad6ec847460f513f155a Mon Sep 17 00:00:00 2001 From: Vanessa Yuen Date: Sat, 4 Nov 2017 10:53:42 +0800 Subject: [PATCH 11/11] =?UTF-8?q?a=20few=20changes=20as=20per=20code=20rev?= =?UTF-8?q?iew=20comments=20=E2=9C=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- script/ci-release-build.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/script/ci-release-build.js b/script/ci-release-build.js index 8fb2ff0cf2..76eeb8e080 100644 --- a/script/ci-release-build.js +++ b/script/ci-release-build.js @@ -30,7 +30,7 @@ const CIcall = (buildUrl, targetBranch, job) => { const build = JSON.parse(body) console.log(`Check ${build.build_url} for status. (${job})`) } else { - console.log('Error: ', err || JSON.parse(res.body), job) + console.log('Error: ', `(status ${res.statusCode})`, err || JSON.parse(res.body), job) } }) } @@ -39,7 +39,7 @@ if (args._.length < 1) { console.log(`Trigger Circle CI to build release builds of electron. Usage: ci-release-build.js [--job=CI_JOB_NAME] TARGET_BRANCH `) - process.exit(1) + process.exit(0) } assert(process.env.CIRCLE_TOKEN, 'CIRCLE_TOKEN not found in environment')