electron/.circleci/config.yml

698 lines
21 KiB
YAML
Raw Normal View History

notify-slack-failure: &notify-slack-failure
run:
name: Send a slack notification on failure
command: |
if [ "$NIGHTLY_BUILD" == "true" ]; then
export MESSAGE="Build failed for *<$CIRCLE_BUILD_URL|$CIRCLE_JOB>* nightly build."
curl -g -H "Content-Type: application/json" -X POST \
-d "{\"text\": \"$MESSAGE\", \"attachments\": [{\"color\": \"#FC5C3C\",\"title\": \"$CIRCLE_JOB nightly build results\",\"title_link\": \"$CIRCLE_BUILD_URL\"}]}" $SLACK_WEBHOOK
fi
when: on_fail
notify-slack-success: &notify-slack-success
run:
name: Send a slack notification on success
command: |
if [ "$NIGHTLY_BUILD" == "true" ]; then
export MESSAGE="Build succeeded for *<$CIRCLE_BUILD_URL|$CIRCLE_JOB>* nightly build."
curl -g -H "Content-Type: application/json" -X POST \
-d "{\"text\": \"$MESSAGE\", \"attachments\": [{\"color\": \"good\",\"title\": \"$CIRCLE_JOB nightly build results\",\"title_link\": \"$CIRCLE_BUILD_URL\"}]}" $SLACK_WEBHOOK
fi
when: on_success
build-steps: &build-steps
steps:
- checkout
2018-06-15 09:09:54 +00:00
- run:
name: Install Node.js 10 on MacOS
command: |
if [ "$INSTALL_MACOS_NODE" == "true" ]; then
echo 'Installing Node.js 10 for MacOS'
brew update
brew install node@10
fi
- run:
name: Check for release
command: |
if [ -n "${RUN_RELEASE_BUILD}" ]; then
echo 'release build triggered from api'
echo 'export ELECTRON_RELEASE=1 UPLOAD_TO_S3=1' >> $BASH_ENV
fi
- run:
name: Bootstrap
command: |
if [ "$ELECTRON_RELEASE" == "1" ]; then
echo "Bootstrapping Electron for release build for $TARGET_ARCH"
script/bootstrap.py --target_arch=$TARGET_ARCH
else
echo "Bootstrapping Electron for debug build for $TARGET_ARCH"
script/bootstrap.py --target_arch=$TARGET_ARCH --dev
fi
- run:
name: Lint
command: npm run lint
- run:
name: Build
command: |
if [ "$ELECTRON_RELEASE" == "1" ]; then
echo 'Building Electron for release'
script/build.py -c R
else
echo 'Building Electron for debug'
script/build.py -c D
fi
- run:
name: Create distribution
command: |
if [ "$ELECTRON_RELEASE" == "1" ]; then
echo 'Creating Electron release distribution'
script/create-dist.py
else
echo 'Skipping create distribution because build is not for release'
fi
- run:
name: Upload distribution
command: |
if [ "$ELECTRON_RELEASE" == "1" ] && [ "$UPLOAD_TO_S3" != "1" ]; then
echo 'Uploading Electron release distribution to github releases'
script/upload.py
elif [ "$ELECTRON_RELEASE" == "1" ] && [ "$UPLOAD_TO_S3" == "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
- run:
name: Setup for headless testing
command: |
if [ "$RUN_HEADLESS_TESTS" == "true" ]; then
echo 'Setup for headless testing'
sh -e /etc/init.d/xvfb start
else
echo 'Headless testing not needed'
fi
- run:
name: Test
environment:
MOCHA_FILE: junit/test-results.xml
MOCHA_REPORTER: mocha-junit-reporter
command: |
if [ "$RUN_TESTS" == "true" ]; then
if [ "$ELECTRON_RELEASE" != "1" ]; then
echo 'Testing Electron debug build'
mkdir junit
script/test.py --ci --rebuild_native_modules
else
if [ "$UPLOAD_TO_S3" == "1" ]; then
echo 'Testing Electron release build'
mkdir junit
script/test.py --ci --rebuild_native_modules -c R
else
echo 'Skipping tests on GitHub release'
fi
fi
else
echo 'Skipping tests due to configuration'
fi
- run:
name: Verify FFmpeg
command: |
if [ "$RUN_TESTS" == "true" ]; then
if [ "$ELECTRON_RELEASE" != "1" ]; then
echo 'Verifying ffmpeg on debug build'
script/verify-ffmpeg.py
else
echo 'Verifying ffmpeg on release build'
script/verify-ffmpeg.py -R
fi
else
echo 'Skipping tests due to configuration'
fi
- run:
name: Generate Typescript Definitions
command: |
if [ "$CREATE_TYPESCRIPT_DEFS" == "true" ]; then
npm run create-typescript-definitions
fi
- <<: *notify-slack-failure
- <<: *notify-slack-success
- persist_to_workspace:
root: out
paths:
- "*"
- store_test_results:
path: junit
- store_artifacts:
path: junit
- store_artifacts:
path: out
2018-07-31 18:18:36 +00:00
gn-build-steps: &gn-build-steps
steps:
- run:
name: Setup depot tools
command: |
git clone --depth=1 https://chromium.googlesource.com/chromium/tools/depot_tools.git
echo 'export PATH="$PATH:'"$PWD"'/depot_tools"' >> $BASH_ENV
echo 'export GIT_CACHE_PATH="$HOME/.gclient-cache"' >> $BASH_ENV
2018-07-31 18:18:36 +00:00
- checkout:
path: src/electron
- restore_cache:
paths:
- ~/.gclient-cache
keys:
- v1-gclient-cache-{{ arch }}-{{ checksum "src/electron/DEPS" }}
- v1-gclient-cache-{{ arch }}-
- run:
name: Gclient sync
command: |
gclient config \
--name "src/electron" \
--unmanaged \
2018-08-13 22:43:00 +00:00
$GCLIENT_EXTRA_ARGS \
2018-07-31 18:18:36 +00:00
"$CIRCLE_REPOSITORY_URL"
gclient sync --with_branch_heads --with_tags
- save_cache:
paths:
- ~/.gclient-cache
key: v1-gclient-cache-{{ arch }}-{{ checksum "src/electron/DEPS" }}
- run:
name: GN gen
command: |
cd src
2018-08-21 19:40:06 +00:00
SCCACHE_PATH="$PWD/electron/external_binaries/sccache"
2018-07-31 18:18:36 +00:00
echo 'export CHROMIUM_BUILDTOOLS_PATH="'"$PWD"'/buildtools"' >> $BASH_ENV
2018-08-21 19:40:06 +00:00
echo 'export SCCACHE_WRAPPER="'"$SCCACHE_PATH"'"' >> $BASH_ENV
2018-07-31 18:18:36 +00:00
source $BASH_ENV
2018-07-31 23:25:51 +00:00
gn gen out/Default --args='import("'$GN_CONFIG'") cc_wrapper="'"$SCCACHE_PATH"'"'" $GN_EXTRA_ARGS"
2018-07-31 18:18:36 +00:00
- run:
name: Ninja build
command: |
cd src
ninja -C out/Default electron:electron_app
- run:
name: Build dist.zip
command: |
cd src
ninja -C out/Default electron:electron_dist_zip
2018-07-31 18:18:36 +00:00
- run:
name: Check sccache stats after build
command: $SCCACHE_WRAPPER -s
- run:
name: Setup for headless testing
command: |
sh -e /etc/init.d/xvfb start
- run:
name: Test
environment:
MOCHA_REPORTER: mocha-junit-reporter
MOCHA_FILE: junit/test-results.xml
ELECTRON_DISABLE_SECURITY_WARNINGS: 1
command: |
2018-08-13 22:43:00 +00:00
if [ "$RUN_TESTS" != "false" ]; then
cd src
ninja -C out/Default third_party/electron_node:headers
export npm_config_nodedir="$PWD/out/Default/gen/node_headers"
(cd electron/spec && npm install)
python electron/script/lib/dbus_mock.py ./out/Default/electron electron/spec --ci --enable-logging
fi
2018-07-31 18:18:36 +00:00
- store_test_results:
path: src/junit
- store_artifacts:
path: src/junit
- store_artifacts:
path: src/out/Default/dist.zip
gn-mac-build-steps: &gn-mac-build-steps
steps:
- run:
name: Setup depot tools
command: |
git clone --depth=1 https://chromium.googlesource.com/chromium/tools/depot_tools.git
echo 'export PATH="$PATH:'"$PWD"'/depot_tools"' >> $BASH_ENV
echo 'export GIT_CACHE_PATH="$HOME/.gclient-cache"' >> $BASH_ENV
- run:
name: Install Node.js 10 on MacOS
command: |
echo 'Installing Node.js 10 for MacOS'
brew update
brew install node@10
brew install gnu-tar
echo 'export PATH="/usr/local/opt/gnu-tar/libexec/gnubin:$PATH"' >> $BASH_ENV
- checkout:
path: src/electron
- run:
name: Gclient sync
command: |
gclient config \
--name "src/electron" \
--unmanaged \
$GCLIENT_EXTRA_ARGS \
"$CIRCLE_REPOSITORY_URL"
gclient sync --with_branch_heads --with_tags
- run:
name: GN gen
command: |
cd src
SCCACHE_PATH="$PWD/libchromiumcontent/tools/sccache/aad2120/mac/sccache"
echo 'export SCCACHE_WRAPPER="'"$SCCACHE_PATH"'"' >> $BASH_ENV
echo 'export CHROMIUM_BUILDTOOLS_PATH="'"$PWD"'/buildtools"' >> $BASH_ENV
source $BASH_ENV
gn gen out/Default --args='import("'$GN_CONFIG'") cc_wrapper="'"$SCCACHE_PATH"'"'" $GN_EXTRA_ARGS"
- run:
name: Ninja build
command: |
cd src
ninja -C out/Default electron:electron_app
- run:
name: Build dist.zip
command: |
cd src
ninja -C out/Default electron:electron_dist_zip
- run:
name: Check sccache stats after build
command: $SCCACHE_WRAPPER -s
- run:
name: Test
environment:
MOCHA_REPORTER: mocha-junit-reporter
MOCHA_FILE: junit/test-results.xml
ELECTRON_DISABLE_SECURITY_WARNINGS: 1
command: |
if [ "$RUN_TESTS" != "false" ]; then
cd src
ninja -C out/Default third_party/electron_node:headers
export npm_config_nodedir="$PWD/out/Default/gen/node_headers"
(cd electron/spec && npm install)
./out/Default/Electron.app/Contents/MacOS/Electron electron/spec --ci --enable-logging
fi
- store_test_results:
path: src/junit
- store_artifacts:
path: src/junit
- store_artifacts:
path: src/out/Default/dist.zip
gn-linux-build-machine: &gn-linux-build-machine
docker:
- image: electronbuilds/electron:0.0.8
resource_class: 2xlarge
gn-mac-build-machine: &gn-mac-build-machine
macos:
xcode: "8.3.3"
resource_class: large
2018-07-31 18:18:36 +00:00
build-defaults: &build-defaults
docker:
2018-06-15 09:09:54 +00:00
- image: electronbuilds/electron:0.0.8
<<: *build-steps
2017-09-13 13:48:19 +00:00
version: 2
jobs:
electron-linux-arm:
environment:
TARGET_ARCH: arm
<<: *build-defaults
2017-11-24 02:03:02 +00:00
resource_class: 2xlarge
electron-linux-arm-test:
machine: true
steps:
- attach_workspace:
at: /tmp/workspace/project/out
- checkout
- run:
name: Test in ARM docker container
command: |
if [ "$ELECTRON_RELEASE" != "1" ]; then
docker run --rm --privileged multiarch/qemu-user-static:register --reset
docker run -it \
--mount type=bind,source=/tmp/workspace,target=/tmp/workspace \
--rm electronbuilds/electronarm7:0.0.5 > version.txt
cat version.txt
if grep -q `script/get-version.py` version.txt; then
echo "Versions match"
else
echo "Versions do not match"
exit 1
fi
else
echo "Skipping test for release build"
fi
electron-linux-arm-release-nightly:
environment:
TARGET_ARCH: arm
RUN_RELEASE_BUILD: true
NIGHTLY_BUILD: true
<<: *build-defaults
resource_class: 2xlarge
2017-09-13 13:48:19 +00:00
electron-linux-arm64:
environment:
TARGET_ARCH: arm64
<<: *build-defaults
2017-11-24 02:03:02 +00:00
resource_class: 2xlarge
electron-linux-arm64-test:
machine: true
steps:
- attach_workspace:
at: /tmp/workspace/project/out
- checkout
- run:
name: Test in ARM64 docker container
command: |
if [ "$ELECTRON_RELEASE" != "1" ]; then
docker run --rm --privileged multiarch/qemu-user-static:register --reset
docker run -it \
--mount type=bind,source=/tmp/workspace,target=/tmp/workspace \
--rm electronbuilds/electronarm64:0.0.6 > version.txt
cat version.txt
if grep -q `script/get-version.py` version.txt; then
echo "Versions match"
else
echo "Versions do not match"
exit 1
fi
else
echo "Skipping test for release build"
fi
electron-linux-arm64-release-nightly:
environment:
TARGET_ARCH: arm64
RUN_RELEASE_BUILD: true
NIGHTLY_BUILD: true
<<: *build-defaults
resource_class: 2xlarge
2017-09-13 13:48:19 +00:00
electron-linux-ia32:
environment:
TARGET_ARCH: ia32
DISPLAY: ':99.0'
RUN_TESTS: true
RUN_HEADLESS_TESTS: true
<<: *build-defaults
resource_class: xlarge
electron-linux-ia32-release-nightly:
environment:
TARGET_ARCH: ia32
RUN_RELEASE_BUILD: true
NIGHTLY_BUILD: true
<<: *build-defaults
resource_class: xlarge
electron-linux-mips64el:
environment:
TARGET_ARCH: mips64el
<<: *build-defaults
resource_class: xlarge
2017-09-13 13:48:19 +00:00
electron-linux-x64:
environment:
TARGET_ARCH: x64
DISPLAY: ':99.0'
RUN_TESTS: true
RUN_HEADLESS_TESTS: true
CREATE_TYPESCRIPT_DEFS: true
<<: *build-defaults
resource_class: xlarge
electron-linux-x64-release-nightly:
environment:
TARGET_ARCH: x64
RUN_RELEASE_BUILD: true
NIGHTLY_BUILD: true
<<: *build-defaults
resource_class: xlarge
2017-09-13 13:48:19 +00:00
2018-04-09 19:19:54 +00:00
electron-osx-x64:
environment:
TARGET_ARCH: x64
RUN_TESTS: true
2018-06-15 09:09:54 +00:00
INSTALL_MACOS_NODE: true
2018-04-09 19:19:54 +00:00
macos:
2018-06-15 09:09:54 +00:00
xcode: "8.3.3"
<<: *build-steps
electron-osx-x64-release-nightly:
environment:
TARGET_ARCH: x64
RUN_RELEASE_BUILD: true
2018-06-15 09:09:54 +00:00
INSTALL_MACOS_NODE: true
NIGHTLY_BUILD: true
macos:
2018-06-15 09:09:54 +00:00
xcode: "8.3.3"
<<: *build-steps
2018-04-09 19:19:54 +00:00
electron-mas-x64:
environment:
TARGET_ARCH: x64
MAS_BUILD: 1
RUN_TESTS: true
2018-06-15 09:09:54 +00:00
INSTALL_MACOS_NODE: true
2018-04-09 19:19:54 +00:00
macos:
2018-06-15 09:09:54 +00:00
xcode: "8.3.3"
<<: *build-steps
electron-mas-x64-release-nightly:
environment:
TARGET_ARCH: x64
MAS_BUILD: 1
RUN_RELEASE_BUILD: true
2018-06-15 09:09:54 +00:00
INSTALL_MACOS_NODE: true
NIGHTLY_BUILD: true
macos:
2018-06-15 09:09:54 +00:00
xcode: "8.3.3"
<<: *build-steps
2018-07-31 23:25:51 +00:00
electron-gn-linux-x64-debug-fyi:
2018-07-11 18:01:15 +00:00
environment:
DISPLAY: ':99.0'
2018-07-31 18:18:36 +00:00
GN_CONFIG: //electron/build/args/debug.gn
RUN_TESTS: false
<<: *gn-linux-build-machine
<<: *gn-build-steps
electron-gn-linux-x64-testing-fyi:
environment:
DISPLAY: ':99.0'
GN_CONFIG: //electron/build/args/testing.gn
<<: *gn-linux-build-machine
2018-07-31 18:18:36 +00:00
<<: *gn-build-steps
2018-07-11 18:01:15 +00:00
2018-07-31 23:25:51 +00:00
electron-gn-linux-x64-release-fyi:
2018-07-31 18:18:36 +00:00
environment:
DISPLAY: ':99.0'
GN_CONFIG: //electron/build/args/release.gn
<<: *gn-linux-build-machine
2018-07-31 18:18:36 +00:00
<<: *gn-build-steps
2018-04-09 19:19:54 +00:00
2018-07-31 23:25:51 +00:00
electron-gn-linux-ia32-debug-fyi:
environment:
DISPLAY: ':99.0'
GN_CONFIG: //electron/build/args/debug.gn
GN_EXTRA_ARGS: 'target_cpu = "x86"'
NPM_CONFIG_ARCH: ia32
RUN_TESTS: false
<<: *gn-linux-build-machine
<<: *gn-build-steps
electron-gn-linux-ia32-testing-fyi:
environment:
DISPLAY: ':99.0'
GN_CONFIG: //electron/build/args/testing.gn
GN_EXTRA_ARGS: 'target_cpu = "x86"'
NPM_CONFIG_ARCH: ia32
<<: *gn-linux-build-machine
2018-07-31 23:25:51 +00:00
<<: *gn-build-steps
electron-gn-linux-ia32-release-fyi:
environment:
DISPLAY: ':99.0'
GN_CONFIG: //electron/build/args/release.gn
GN_EXTRA_ARGS: 'target_cpu = "x86"'
NPM_CONFIG_ARCH: ia32
<<: *gn-linux-build-machine
2018-07-31 23:25:51 +00:00
<<: *gn-build-steps
2018-08-13 22:43:00 +00:00
electron-gn-linux-arm-debug-fyi:
environment:
GN_CONFIG: //electron/build/args/debug.gn
GN_EXTRA_ARGS: 'target_cpu = "arm"'
GCLIENT_EXTRA_ARGS: '--custom-var=checkout_arm=True'
RUN_TESTS: false
<<: *gn-linux-build-machine
2018-08-13 22:43:00 +00:00
<<: *gn-build-steps
electron-gn-linux-arm-testing-fyi:
environment:
GN_CONFIG: //electron/build/args/testing.gn
GN_EXTRA_ARGS: 'target_cpu = "arm"'
GCLIENT_EXTRA_ARGS: '--custom-var=checkout_arm=True'
RUN_TESTS: false
<<: *gn-linux-build-machine
<<: *gn-build-steps
2018-08-13 22:43:00 +00:00
electron-gn-linux-arm-release-fyi:
environment:
GN_CONFIG: //electron/build/args/release.gn
GN_EXTRA_ARGS: 'target_cpu = "arm"'
GCLIENT_EXTRA_ARGS: '--custom-var=checkout_arm=True'
RUN_TESTS: false
<<: *gn-linux-build-machine
2018-08-13 22:43:00 +00:00
<<: *gn-build-steps
electron-gn-linux-arm64-debug-fyi:
environment:
GN_CONFIG: //electron/build/args/debug.gn
GN_EXTRA_ARGS: 'target_cpu = "arm64" fatal_linker_warnings = false enable_linux_installer = false'
GCLIENT_EXTRA_ARGS: '--custom-var=checkout_arm64=True'
RUN_TESTS: false
<<: *gn-linux-build-machine
2018-08-13 22:43:00 +00:00
<<: *gn-build-steps
electron-gn-linux-arm64-testing-fyi:
environment:
GN_CONFIG: //electron/build/args/testing.gn
GN_EXTRA_ARGS: 'target_cpu = "arm64" fatal_linker_warnings = false enable_linux_installer = false'
GCLIENT_EXTRA_ARGS: '--custom-var=checkout_arm64=True'
RUN_TESTS: false
<<: *gn-linux-build-machine
<<: *gn-build-steps
2018-08-13 22:43:00 +00:00
electron-gn-linux-arm64-release-fyi:
environment:
GN_CONFIG: //electron/build/args/release.gn
GN_EXTRA_ARGS: 'target_cpu = "arm64" fatal_linker_warnings = false enable_linux_installer = false'
GCLIENT_EXTRA_ARGS: '--custom-var=checkout_arm64=True'
RUN_TESTS: false
<<: *gn-linux-build-machine
2018-08-13 22:43:00 +00:00
<<: *gn-build-steps
electron-gn-osx-release-fyi:
environment:
GN_CONFIG: //electron/build/args/release.gn
RUN_TESTS: true
<<: *gn-mac-build-machine
<<: *gn-mac-build-steps
electron-gn-osx-testing-fyi:
environment:
GN_CONFIG: //electron/build/args/testing.gn
RUN_TESTS: true
<<: *gn-mac-build-machine
<<: *gn-mac-build-steps
electron-gn-osx-debug-fyi:
environment:
GN_CONFIG: //electron/build/args/debug.gn
RUN_TESTS: false
<<: *gn-mac-build-machine
<<: *gn-mac-build-steps
electron-gn-mas-release-fyi:
environment:
GN_CONFIG: //electron/build/args/release.gn
RUN_TESTS: true
GN_EXTRA_ARGS: 'is_mas_build = true'
<<: *gn-mac-build-machine
<<: *gn-mac-build-steps
electron-gn-mas-testing-fyi:
environment:
GN_CONFIG: //electron/build/args/testing.gn
RUN_TESTS: true
GN_EXTRA_ARGS: 'is_mas_build = true'
<<: *gn-mac-build-machine
<<: *gn-mac-build-steps
electron-gn-mas-debug-fyi:
environment:
GN_CONFIG: //electron/build/args/debug.gn
RUN_TESTS: false
GN_EXTRA_ARGS: 'is_mas_build = true'
<<: *gn-mac-build-machine
<<: *gn-mac-build-steps
2017-09-13 13:48:19 +00:00
workflows:
version: 2
build-arm:
jobs:
- electron-linux-arm
- electron-linux-arm-test:
requires:
- electron-linux-arm
2017-09-13 13:48:19 +00:00
build-arm64:
jobs:
- electron-linux-arm64
- electron-linux-arm64-test:
requires:
- electron-linux-arm64
2017-09-13 13:48:19 +00:00
build-ia32:
jobs:
- electron-linux-ia32
build-x64:
2018-04-09 19:19:54 +00:00
jobs:
- electron-linux-x64
build-osx-x64:
jobs:
- electron-osx-x64
build-mas-x64:
jobs:
- electron-mas-x64
2018-07-11 18:01:15 +00:00
build-gn-linux:
jobs:
2018-07-31 23:25:51 +00:00
- electron-gn-linux-x64-debug-fyi
- electron-gn-linux-x64-testing-fyi
2018-07-31 23:25:51 +00:00
- electron-gn-linux-ia32-debug-fyi
- electron-gn-linux-ia32-testing-fyi
2018-08-13 22:43:00 +00:00
- electron-gn-linux-arm-debug-fyi
- electron-gn-linux-arm-testing-fyi
2018-08-13 22:43:00 +00:00
- electron-gn-linux-arm64-debug-fyi
- electron-gn-linux-arm64-testing-fyi
build-gn-mac:
jobs:
- electron-gn-mas-debug-fyi
- electron-gn-mas-testing-fyi
- electron-gn-osx-debug-fyi
- electron-gn-osx-testing-fyi
nightly-release-test:
triggers:
- schedule:
cron: "0 0 * * *"
filters:
branches:
only:
- master
- 3-0-x
- 2-0-x
- 1-8-x
- 1-7-x
jobs:
- electron-linux-arm-release-nightly
- electron-linux-arm64-release-nightly
- electron-linux-ia32-release-nightly
- electron-linux-x64-release-nightly
nightly-gn-release-test:
triggers:
- schedule:
cron: "0 0 * * *"
filters:
branches:
only:
- master
jobs:
- electron-gn-linux-x64-release-fyi
- electron-gn-linux-ia32-release-fyi
- electron-gn-linux-arm-release-fyi
- electron-gn-linux-arm64-release-fyi
- electron-gn-mas-release-fyi
- electron-gn-osx-release-fyi