ci: make macOS CI faster (#16766)
* ci: cache brew update result * ci: checkout and sync the macOS build on a linux machine for speed
This commit is contained in:
parent
fc06458038
commit
17c240a639
3 changed files with 57 additions and 5 deletions
|
@ -168,6 +168,13 @@ step-setup-env-for-build: &step-setup-env-for-build
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
step-restore-brew-cache: &step-restore-brew-cache
|
||||||
|
restore_cache:
|
||||||
|
paths:
|
||||||
|
- /usr/local/Homebrew
|
||||||
|
keys:
|
||||||
|
- v1-brew-cache-{{ arch }}
|
||||||
|
|
||||||
step-install-nodejs-on-mac: &step-install-nodejs-on-mac
|
step-install-nodejs-on-mac: &step-install-nodejs-on-mac
|
||||||
run:
|
run:
|
||||||
name: Install Node.js 10 on MacOS
|
name: Install Node.js 10 on MacOS
|
||||||
|
@ -178,6 +185,34 @@ step-install-nodejs-on-mac: &step-install-nodejs-on-mac
|
||||||
echo 'export PATH="/usr/local/opt/node@10/bin:$PATH"' >> $BASH_ENV
|
echo 'export PATH="/usr/local/opt/node@10/bin:$PATH"' >> $BASH_ENV
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# On macOS the npm install command during gclient sync was run on a linux
|
||||||
|
# machine and therefore installed a slightly different set of dependencies
|
||||||
|
# Notably "fsevents" is a macOS only dependency, we rerun npm install once
|
||||||
|
# we are on a macOS machine to get the correct state
|
||||||
|
step-install-npm-deps-on-mac: &step-install-npm-deps-on-mac
|
||||||
|
run:
|
||||||
|
name: Install NPM Dependencies on MacOS
|
||||||
|
command: |
|
||||||
|
if [ "`uname`" == "Darwin" ]; then
|
||||||
|
cd src/electron
|
||||||
|
npm install
|
||||||
|
fi
|
||||||
|
|
||||||
|
# This step handles the differences between the linux "gclient sync"
|
||||||
|
# and the expected state on macOS
|
||||||
|
step-fix-sync-on-mac: &step-fix-sync-on-mac
|
||||||
|
run:
|
||||||
|
name: Fix Sync on macOS
|
||||||
|
command: |
|
||||||
|
if [ "`uname`" == "Darwin" ]; then
|
||||||
|
# Fix Clang Install (wrong binary)
|
||||||
|
rm -rf src/third_party/llvm-build
|
||||||
|
python src/tools/clang/scripts/update.py
|
||||||
|
# Fix Framework Header Installs (symlinks not retained)
|
||||||
|
rm -rf src/electron/external_binaries
|
||||||
|
python src/electron/script/update-external-binaries.py
|
||||||
|
fi
|
||||||
|
|
||||||
step-install-gnutar-on-mac: &step-install-gnutar-on-mac
|
step-install-gnutar-on-mac: &step-install-gnutar-on-mac
|
||||||
run:
|
run:
|
||||||
name: Install gnu-tar on macos
|
name: Install gnu-tar on macos
|
||||||
|
@ -494,6 +529,7 @@ steps-checkout: &steps-checkout
|
||||||
- *step-checkout-electron
|
- *step-checkout-electron
|
||||||
- *step-depot-tools-get
|
- *step-depot-tools-get
|
||||||
- *step-depot-tools-add-to-path
|
- *step-depot-tools-add-to-path
|
||||||
|
- *step-restore-brew-cache
|
||||||
- *step-install-nodejs-on-mac
|
- *step-install-nodejs-on-mac
|
||||||
- *step-install-gnutar-on-mac
|
- *step-install-gnutar-on-mac
|
||||||
|
|
||||||
|
@ -514,6 +550,10 @@ steps-checkout: &steps-checkout
|
||||||
paths:
|
paths:
|
||||||
- ~/.gclient-cache
|
- ~/.gclient-cache
|
||||||
key: v1-gclient-cache-{{ arch }}-{{ checksum "src/electron/DEPS" }}
|
key: v1-gclient-cache-{{ arch }}-{{ checksum "src/electron/DEPS" }}
|
||||||
|
- save_cache:
|
||||||
|
paths:
|
||||||
|
- /usr/local/Homebrew
|
||||||
|
key: v1-brew-cache-{{ arch }}
|
||||||
|
|
||||||
- run:
|
- run:
|
||||||
name: Remove some unused data to avoid storing it in the workspace
|
name: Remove some unused data to avoid storing it in the workspace
|
||||||
|
@ -552,7 +592,10 @@ steps-electron-build-for-tests: &steps-electron-build-for-tests
|
||||||
at: .
|
at: .
|
||||||
- *step-depot-tools-add-to-path
|
- *step-depot-tools-add-to-path
|
||||||
- *step-setup-env-for-build
|
- *step-setup-env-for-build
|
||||||
|
- *step-restore-brew-cache
|
||||||
- *step-install-nodejs-on-mac
|
- *step-install-nodejs-on-mac
|
||||||
|
- *step-install-npm-deps-on-mac
|
||||||
|
- *step-fix-sync-on-mac
|
||||||
- *step-gn-gen-default
|
- *step-gn-gen-default
|
||||||
|
|
||||||
# Electron app
|
# Electron app
|
||||||
|
@ -599,6 +642,7 @@ steps-electron-build-for-publish: &steps-electron-build-for-publish
|
||||||
- *step-checkout-electron
|
- *step-checkout-electron
|
||||||
- *step-depot-tools-get
|
- *step-depot-tools-get
|
||||||
- *step-depot-tools-add-to-path
|
- *step-depot-tools-add-to-path
|
||||||
|
- *step-restore-brew-cache
|
||||||
- *step-install-nodejs-on-mac
|
- *step-install-nodejs-on-mac
|
||||||
- *step-gclient-sync
|
- *step-gclient-sync
|
||||||
- *step-setup-env-for-build
|
- *step-setup-env-for-build
|
||||||
|
@ -731,6 +775,7 @@ steps-tests: &steps-tests
|
||||||
- *step-electron-dist-unzip
|
- *step-electron-dist-unzip
|
||||||
- *step-mksnapshot-unzip
|
- *step-mksnapshot-unzip
|
||||||
- *step-setup-linux-for-headless-testing
|
- *step-setup-linux-for-headless-testing
|
||||||
|
- *step-restore-brew-cache
|
||||||
- *step-install-nodejs-on-mac
|
- *step-install-nodejs-on-mac
|
||||||
|
|
||||||
- run:
|
- run:
|
||||||
|
@ -795,9 +840,10 @@ jobs:
|
||||||
<<: *steps-checkout
|
<<: *steps-checkout
|
||||||
|
|
||||||
mac-checkout:
|
mac-checkout:
|
||||||
<<: *machine-mac-large
|
<<: *machine-linux-2xlarge
|
||||||
environment:
|
environment:
|
||||||
<<: *env-mac-large
|
<<: *env-linux-2xlarge
|
||||||
|
GCLIENT_EXTRA_ARGS: '--custom-var=checkout_mac=True --custom-var=host_os=mac'
|
||||||
<<: *steps-checkout
|
<<: *steps-checkout
|
||||||
|
|
||||||
# Layer 2: Builds.
|
# Layer 2: Builds.
|
||||||
|
|
|
@ -11,7 +11,6 @@ from lib.util import add_exec_bit, download, extract_zip, rm_rf, \
|
||||||
|
|
||||||
SOURCE_ROOT = os.path.abspath(os.path.dirname(os.path.dirname(__file__)))
|
SOURCE_ROOT = os.path.abspath(os.path.dirname(os.path.dirname(__file__)))
|
||||||
|
|
||||||
|
|
||||||
def parse_args():
|
def parse_args():
|
||||||
parser = argparse.ArgumentParser(
|
parser = argparse.ArgumentParser(
|
||||||
description='Download binaries for Electron build')
|
description='Download binaries for Electron build')
|
||||||
|
|
|
@ -1,8 +1,15 @@
|
||||||
const { expect } = require('chai')
|
const { expect } = require('chai')
|
||||||
|
const { remote } = require('electron')
|
||||||
const { nextVersion } = require('../script/bump-version')
|
const { nextVersion } = require('../script/bump-version')
|
||||||
const utils = require('../script/lib/version-utils')
|
const utils = require('../script/lib/version-utils')
|
||||||
|
|
||||||
describe('bump-version utils', () => {
|
const isCi = remote.getGlobal('isCi')
|
||||||
|
|
||||||
|
// On macOS Circle CI we don't have a real git environment due to running
|
||||||
|
// gclient sync on a linux machine. These tests therefore don't run as expected
|
||||||
|
const describeFn = (isCi && process.platform === 'darwin') ? describe.skip : describe
|
||||||
|
|
||||||
|
describeFn('bump-version utils', () => {
|
||||||
it('makes a version with a period delimeter', () => {
|
it('makes a version with a period delimeter', () => {
|
||||||
const components = {
|
const components = {
|
||||||
major: 2,
|
major: 2,
|
||||||
|
@ -39,7 +46,7 @@ describe('bump-version utils', () => {
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
describe('bump-version script', () => {
|
describeFn('bump-version script', () => {
|
||||||
const nightlyPattern = /[0-9.]*(-nightly.(\d{4})(\d{2})(\d{2}))$/g
|
const nightlyPattern = /[0-9.]*(-nightly.(\d{4})(\d{2})(\d{2}))$/g
|
||||||
const betaPattern = /[0-9.]*(-beta[0-9.]*)/g
|
const betaPattern = /[0-9.]*(-beta[0-9.]*)/g
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue