2021-11-29 15:09:07 -08:00
version : 2.1
parameters :
run-docs-only :
type : boolean
default : false
2023-02-01 12:59:16 +01:00
2022-05-09 06:34:17 -07:00
upload-to-storage :
2021-11-29 15:09:07 -08:00
type : string
default : '1'
run-build-linux :
type : boolean
default : false
2023-09-19 03:12:14 -07:00
medium-linux-executor :
type : enum
default : electronjs/aks-linux-medium
enum : [ "electronjs/aks-linux-medium" , "medium" ]
2023-09-14 08:07:11 -07:00
large-linux-executor :
type : enum
default : electronjs/aks-linux-large
enum : [ "electronjs/aks-linux-large" , "2xlarge" ]
2021-11-29 15:09:07 -08:00
# Executors
executors :
linux-docker :
parameters :
size :
description : "Docker executor size"
type : enum
2023-08-08 09:56:41 -07:00
# aks-linux-large === 32 core
2023-09-14 08:07:11 -07:00
# 2xlarge should not be used directly, use the pipeline param instead
2023-09-19 03:12:14 -07:00
enum : [ "medium" , "electronjs/aks-linux-medium" , "xlarge" , "electronjs/aks-linux-large" , "2xlarge" ]
2021-11-29 15:09:07 -08:00
docker :
2024-04-15 18:10:32 -04:00
- image : ghcr.io/electron/build:9a43c14f5c19be0359843299f79e736521373adc
2021-11-29 15:09:07 -08:00
resource_class : << parameters.size >>
# Electron Runners
linux-arm :
2024-01-10 13:12:19 +13:00
resource_class : electronjs/aks-linux-arm-test
docker :
- image : ghcr.io/electron/test:arm32v7-8e0f85b708fa58e28e4824954d6fd55adfda5e9e
2021-11-29 15:09:07 -08:00
linux-arm64 :
2024-01-10 13:12:19 +13:00
resource_class : electronjs/aks-linux-arm-test
docker :
- image : ghcr.io/electron/test:arm64v8-76d5d29e247972da3855a01c2d8cf72c5998233a
2021-11-29 15:09:07 -08:00
# The config expects the following environment variables to be set:
# - "SLACK_WEBHOOK" Slack hook URL to send notifications.
#
# CircleCI docs on variables:
# https://circleci.com/docs/2.0/env-vars/
# Build configurations options.
env-testing-build : &env-testing-build
GN_CONFIG : //electron/build/args/testing.gn
CHECK_DIST_MANIFEST : '1'
env-release-build : &env-release-build
GN_CONFIG : //electron/build/args/release.gn
STRIP_BINARIES : true
GENERATE_SYMBOLS : true
CHECK_DIST_MANIFEST : '1'
IS_RELEASE : true
env-headless-testing : &env-headless-testing
DISPLAY : ':99.0'
env-stack-dumping : &env-stack-dumping
ELECTRON_ENABLE_STACK_DUMPING : '1'
env-browsertests : &env-browsertests
GN_CONFIG : //electron/build/args/native_tests.gn
BUILD_TARGET : electron/spec:chromium_browsertests
TESTS_CONFIG : src/electron/spec/configs/browsertests.yml
env-unittests : &env-unittests
GN_CONFIG : //electron/build/args/native_tests.gn
BUILD_TARGET : electron/spec:chromium_unittests
TESTS_CONFIG : src/electron/spec/configs/unittests.yml
env-arm : &env-arm
2024-06-07 17:18:35 -04:00
GN_EXTRA_ARGS : 'target_cpu = "arm" build_tflite_with_xnnpack = false'
2021-11-29 15:09:07 -08:00
MKSNAPSHOT_TOOLCHAIN : //build/toolchain/linux:clang_arm
BUILD_NATIVE_MKSNAPSHOT : 1
TARGET_ARCH : arm
env-apple-silicon : &env-apple-silicon
2023-06-07 16:34:02 -07:00
GN_EXTRA_ARGS : 'target_cpu = "arm64"'
2021-11-29 15:09:07 -08:00
TARGET_ARCH : arm64
npm_config_arch : arm64
2022-07-11 01:04:32 -07:00
env-runner : &env-runner
IS_ELECTRON_RUNNER : 1
2021-11-29 15:09:07 -08:00
env-arm64 : &env-arm64
GN_EXTRA_ARGS : 'target_cpu = "arm64" fatal_linker_warnings = false enable_linux_installer = false'
MKSNAPSHOT_TOOLCHAIN : //build/toolchain/linux:clang_arm64
BUILD_NATIVE_MKSNAPSHOT : 1
TARGET_ARCH : arm64
env-mas : &env-mas
GN_EXTRA_ARGS : 'is_mas_build = true'
MAS_BUILD : 'true'
env-mas-apple-silicon : &env-mas-apple-silicon
2023-06-07 16:34:02 -07:00
GN_EXTRA_ARGS : 'target_cpu = "arm64" is_mas_build = true'
2021-11-29 15:09:07 -08:00
MAS_BUILD : 'true'
TARGET_ARCH : arm64
2022-11-16 10:57:09 -08:00
npm_config_arch : arm64
2021-11-29 15:09:07 -08:00
env-send-slack-notifications : &env-send-slack-notifications
NOTIFY_SLACK : true
2023-02-01 12:59:16 +01:00
2021-11-29 15:09:07 -08:00
env-global : &env-global
ELECTRON_OUT_DIR : Default
env-linux-medium : &env-linux-medium
<< : *env-global
NUMBER_OF_NINJA_PROCESSES : 3
env-linux-2xlarge : &env-linux-2xlarge
<< : *env-global
NUMBER_OF_NINJA_PROCESSES : 34
env-linux-2xlarge-release : &env-linux-2xlarge-release
<< : *env-global
NUMBER_OF_NINJA_PROCESSES : 16
env-ninja-status : &env-ninja-status
NINJA_STATUS : "[%r processes, %f/%t @ %o/s : %es] "
env-32bit-release : &env-32bit-release
# Set symbol level to 1 for 32 bit releases because of https://crbug.com/648948
GN_BUILDFLAG_ARGS : 'symbol_level = 1'
# Individual (shared) steps.
step-maybe-notify-slack-failure : &step-maybe-notify-slack-failure
run :
name : Send a Slack notification on failure
command : |
if [ "$NOTIFY_SLACK" == "true" ]; then
export MESSAGE="Build failed for *<$CIRCLE_BUILD_URL|$CIRCLE_JOB>* nightly build from *$CIRCLE_BRANCH*."
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
step-maybe-notify-slack-success : &step-maybe-notify-slack-success
run :
name : Send a Slack notification on success
command : |
if [ "$NOTIFY_SLACK" == "true" ]; then
export MESSAGE="Build succeeded for *<$CIRCLE_BUILD_URL|$CIRCLE_JOB>* nightly build from *$CIRCLE_BRANCH*."
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
step-checkout-electron : &step-checkout-electron
checkout :
path : src/electron
step-depot-tools-get : &step-depot-tools-get
run :
name : Get depot tools
command : |
git clone --depth=1 https://chromium.googlesource.com/chromium/tools/depot_tools.git
2024-07-03 18:55:23 -04:00
sed -i '/ninjalog_uploader_wrapper.py/d' ./depot_tools/autoninja
# Remove swift-format dep from cipd on macOS until we send a patch upstream.
cd depot_tools
cat > gclient.diff \<< 'EOF'
2023-05-17 20:54:26 +02:00
diff --git a/gclient.py b/gclient.py
2023-09-06 13:49:00 +02:00
index c305c248..e6e0fbdc 100755
2023-05-17 20:54:26 +02:00
--- a/gclient.py
+++ b/gclient.py
2024-06-06 22:49:59 +02:00
@@ -783,7 +783,8 @@ class Dependency(gclient_utils.WorkItem, DependencySettings) :
not condition or "non_git_source" not in condition):
continue
2023-09-06 13:49:00 +02:00
cipd_root = self.GetCipdRoot()
- for package in dep_value.get('packages', []) :
+ packages = dep_value.get('packages', [])
+ for package in (x for x in packages if "infra/3pp/tools/swift-format" not in x.get('package')):
deps_to_add.append(
CipdDependency(parent=self,
name=name,
2022-04-22 15:36:22 -07:00
EOF
2023-05-17 20:54:26 +02:00
git apply --3way gclient.diff
2022-01-20 19:58:04 -05:00
fi
2023-05-17 20:54:26 +02:00
# Ensure depot_tools does not update.
test -d depot_tools && cd depot_tools
touch .disable_auto_update
2021-11-29 15:09:07 -08:00
step-depot-tools-add-to-path : &step-depot-tools-add-to-path
run :
name : Add depot tools to PATH
command : echo 'export PATH="$PATH:'"$PWD"'/depot_tools"' >> $BASH_ENV
step-gclient-sync : &step-gclient-sync
run :
name : Gclient sync
command : |
# If we did not restore a complete sync then we need to sync for realz
if [ ! -s "src/electron/.circle-sync-done" ]; then
gclient config \
--name "src/electron" \
--unmanaged \
$GCLIENT_EXTRA_ARGS \
"$CIRCLE_REPOSITORY_URL"
ELECTRON_USE_THREE_WAY_MERGE_FOR_PATCHES=1 gclient sync --with_branch_heads --with_tags
if [ "$IS_RELEASE" != "true" ]; then
# Re-export all the patches to check if there were changes.
2023-05-15 02:06:12 -07:00
python3 src/electron/script/export_all_patches.py src/electron/patches/config.json
2021-11-29 15:09:07 -08:00
cd src/electron
git update-index --refresh || true
if ! git diff-index --quiet HEAD --; then
# There are changes to the patches. Make a git commit with the updated patches
git add patches
GIT_COMMITTER_NAME="PatchUp" GIT_COMMITTER_EMAIL="73610968+patchup[bot]@users.noreply.github.com" git commit -m "chore: update patches" --author="PatchUp <73610968+patchup[bot]@users.noreply.github.com>"
# Export it
mkdir -p ../../patches
git format-patch -1 --stdout --keep-subject --no-stat --full-index > ../../patches/update-patches.patch
if (node ./script/push-patch.js 2> /dev/null > /dev/null); then
echo
echo "======================================================================"
echo "Changes to the patches when applying, we have auto-pushed the diff to the current branch"
echo "A new CI job will kick off shortly"
echo "======================================================================"
exit 1
else
echo
echo "======================================================================"
echo "There were changes to the patches when applying."
echo "Check the CI artifacts for a patch you can apply to fix it."
echo "======================================================================"
exit 1
fi
fi
fi
fi
step-setup-env-for-build : &step-setup-env-for-build
run :
name : Setup Environment Variables
command : |
# To find `gn` executable.
echo 'export CHROMIUM_BUILDTOOLS_PATH="'"$PWD"'/src/buildtools"' >> $BASH_ENV
2024-01-10 10:19:42 +13:00
step-setup-rbe-for-build : &step-setup-rbe-for-build
2021-11-29 15:09:07 -08:00
run :
2024-01-10 10:19:42 +13:00
name : Setup RBE
2021-11-29 15:09:07 -08:00
command : |
echo 'export NUMBER_OF_NINJA_PROCESSES=300' >> $BASH_ENV
if [ "`uname`" == "Darwin" ]; then
2024-01-10 10:19:42 +13:00
echo 'export NUMBER_OF_NINJA_PROCESSES=200' >> $BASH_ENV
2021-11-29 15:09:07 -08:00
echo 'ulimit -n 10000' >> $BASH_ENV
echo 'sudo launchctl limit maxfiles 65536 200000' >> $BASH_ENV
fi
git clone https://github.com/electron/build-tools.git
cd build-tools
2024-01-10 10:19:42 +13:00
npx yarn --ignore-engines
2021-11-29 15:09:07 -08:00
mkdir third_party
2024-01-10 10:19:42 +13:00
# Pull down credential helper and print status
node -e "require('./src/utils/reclient.js').downloadAndPrepare({})"
2024-02-17 15:04:36 -08:00
HELPER=$(node -p "require('./src/utils/reclient.js').helperPath({})")
2024-01-10 10:19:42 +13:00
$HELPER login
echo 'export RBE_service='`node -e "console.log(require('./src/utils/reclient.js').serviceAddress)"` >> $BASH_ENV
2024-02-17 15:04:36 -08:00
echo 'export RBE_experimental_credentials_helper='`node -e "console.log(require('./src/utils/reclient.js').helperPath({}))"` >> $BASH_ENV
2024-01-15 19:48:10 +01:00
echo 'export RBE_experimental_credentials_helper_args="print"' >> $BASH_ENV
2021-11-29 15:09:07 -08:00
step-restore-brew-cache : &step-restore-brew-cache
restore_cache :
paths :
- /usr/local/Cellar/gnu-tar
- /usr/local/bin/gtar
keys :
2023-05-16 12:38:30 +02:00
- v6-brew-cache-{{ arch }}
2021-11-29 15:09:07 -08:00
step-save-brew-cache : &step-save-brew-cache
save_cache :
paths :
- /usr/local/Cellar/gnu-tar
- /usr/local/bin/gtar
2023-05-16 12:38:30 +02:00
key : v6-brew-cache-{{ arch }}
2021-11-29 15:09:07 -08:00
name : Persisting brew cache
2022-05-24 14:04:49 -07:00
step-install-npm-deps : &step-install-npm-deps
run :
name : Install node_modules
command : |
cd src/electron
node script/yarn install --frozen-lockfile
2021-11-29 15:09:07 -08:00
step-gn-gen-default : &step-gn-gen-default
run :
name : Default GN gen
command : |
cd src
2024-01-10 10:19:42 +13:00
gn gen out/Default --args="import(\"$GN_CONFIG\") use_remoteexec=true $GN_EXTRA_ARGS $GN_BUILDFLAG_ARGS"
2021-11-29 15:09:07 -08:00
step-gn-check : &step-gn-check
run :
name : GN check
command : |
cd src
gn check out/Default //electron:electron_lib
gn check out/Default //electron:electron_app
gn check out/Default //electron/shell/common/api:mojo
# Check the hunspell filenames
node electron/script/gen-hunspell-filenames.js --check
node electron/script/gen-libc++-filenames.js --check
step-maybe-electron-dist-strip : &step-maybe-electron-dist-strip
run :
name : Strip electron binaries
command : |
if [ "$STRIP_BINARIES" == "true" ] && [ "`uname`" == "Linux" ]; then
if [ x"$TARGET_ARCH" == x ]; then
target_cpu=x64
else
target_cpu="$TARGET_ARCH"
fi
cd src
electron/script/copy-debug-symbols.py --target-cpu="$target_cpu" --out-dir=out/Default/debug --compress
electron/script/strip-binaries.py --target-cpu="$target_cpu"
electron/script/add-debug-link.py --target-cpu="$target_cpu" --debug-dir=out/Default/debug
fi
step-electron-chromedriver-build : &step-electron-chromedriver-build
run :
name : Build chromedriver.zip
command : |
cd src
2023-06-07 16:34:02 -07:00
if [ "`uname`" != "Darwin" ] && ([ "$TARGET_ARCH" == "arm" ] || [ "$TARGET_ARCH" == "arm64" ]); then
2024-01-10 10:19:42 +13:00
gn gen out/chromedriver --args="import(\"$GN_CONFIG\") use_remoteexec=true is_component_ffmpeg=false proprietary_codecs=false $GN_EXTRA_ARGS $GN_BUILDFLAG_ARGS"
2021-11-29 15:09:07 -08:00
export CHROMEDRIVER_DIR="out/chromedriver"
else
export CHROMEDRIVER_DIR="out/Default"
fi
2024-01-10 10:19:42 +13:00
autoninja -C $CHROMEDRIVER_DIR electron:electron_chromedriver -j $NUMBER_OF_NINJA_PROCESSES
2021-11-29 15:09:07 -08:00
if [ "`uname`" == "Linux" ]; then
electron/script/strip-binaries.py --target-cpu="$TARGET_ARCH" --file $PWD/$CHROMEDRIVER_DIR/chromedriver
fi
2024-01-10 10:19:42 +13:00
autoninja -C $CHROMEDRIVER_DIR electron:electron_chromedriver_zip
2023-06-07 16:34:02 -07:00
if [ "`uname`" != "Darwin" ] && ([ "$TARGET_ARCH" == "arm" ] || [ "$TARGET_ARCH" == "arm64" ]); then
2021-11-29 15:09:07 -08:00
cp out/chromedriver/chromedriver.zip out/Default
fi
step-nodejs-headers-build : &step-nodejs-headers-build
run :
name : Build Node.js headers
command : |
cd src
2024-01-10 10:19:42 +13:00
autoninja -C out/Default electron:node_headers
2021-11-29 15:09:07 -08:00
step-electron-dist-unzip : &step-electron-dist-unzip
run :
name : Unzip dist.zip
command : |
cd src/out/Default
# -o overwrite files WITHOUT prompting
# TODO(alexeykuzmin): Remove '-o' when it's no longer needed.
# -: allows to extract archive members into locations outside
# of the current ``extraction root folder''.
# ASan builds have the llvm-symbolizer binaries listed as
# runtime_deps, with their paths as `../../third_party/...`
# unzip exits with non-zero code on such zip files unless -: is
# passed.
unzip -:o dist.zip
step-mksnapshot-unzip : &step-mksnapshot-unzip
run :
name : Unzip mksnapshot.zip
command : |
cd src/out/Default
unzip -:o mksnapshot.zip
step-chromedriver-unzip : &step-chromedriver-unzip
run :
name : Unzip chromedriver.zip
command : |
cd src/out/Default
unzip -:o chromedriver.zip
step-ffmpeg-gn-gen : &step-ffmpeg-gn-gen
run :
name : ffmpeg GN gen
command : |
cd src
2024-01-10 10:19:42 +13:00
gn gen out/ffmpeg --args="import(\"//electron/build/args/ffmpeg.gn\") use_remoteexec=true $GN_EXTRA_ARGS"
2021-11-29 15:09:07 -08:00
step-ffmpeg-build : &step-ffmpeg-build
run :
name : Non proprietary ffmpeg build
command : |
cd src
2024-01-10 10:19:42 +13:00
autoninja -C out/ffmpeg electron:electron_ffmpeg_zip -j $NUMBER_OF_NINJA_PROCESSES
2021-11-29 15:09:07 -08:00
step-verify-mksnapshot : &step-verify-mksnapshot
run :
name : Verify mksnapshot
command : |
if [ "$IS_ASAN" != "1" ]; then
cd src
2023-06-07 16:34:02 -07:00
if [ "`uname`" != "Darwin" ] && ([ "$TARGET_ARCH" == "arm" ] || [ "$TARGET_ARCH" == "arm64" ]); then
2023-05-15 02:06:12 -07:00
python3 electron/script/verify-mksnapshot.py --source-root "$PWD" --build-dir out/Default --snapshot-files-dir $PWD/cross-arch-snapshots
2021-11-29 15:09:07 -08:00
else
2023-05-15 02:06:12 -07:00
python3 electron/script/verify-mksnapshot.py --source-root "$PWD" --build-dir out/Default
2021-11-29 15:09:07 -08:00
fi
fi
step-verify-chromedriver : &step-verify-chromedriver
run :
name : Verify ChromeDriver
command : |
if [ "$IS_ASAN" != "1" ]; then
cd src
2023-05-15 02:06:12 -07:00
python3 electron/script/verify-chromedriver.py --source-root "$PWD" --build-dir out/Default
2021-11-29 15:09:07 -08:00
fi
step-setup-linux-for-headless-testing : &step-setup-linux-for-headless-testing
run :
name : Setup for headless testing
command : |
if [ "`uname`" != "Darwin" ]; then
sh -e /etc/init.d/xvfb start
fi
step-mksnapshot-build : &step-mksnapshot-build
run :
name : mksnapshot build
2022-03-22 08:31:53 -07:00
no_output_timeout : 30m
2021-11-29 15:09:07 -08:00
command : |
cd src
2024-01-10 10:19:42 +13:00
autoninja -C out/Default electron:electron_mksnapshot -j $NUMBER_OF_NINJA_PROCESSES
2023-06-07 16:34:02 -07:00
gn desc out/Default v8:run_mksnapshot_default args > out/Default/mksnapshot_args
# Remove unused args from mksnapshot_args
SEDOPTION="-i"
if [ "`uname`" == "Darwin" ]; then
SEDOPTION="-i ''"
2021-11-29 15:09:07 -08:00
fi
2023-06-07 16:34:02 -07:00
sed $SEDOPTION '/.*builtins-pgo/d' out/Default/mksnapshot_args
sed $SEDOPTION '/--turbo-profiling-input/d' out/Default/mksnapshot_args
2023-10-02 18:01:07 -04:00
sed $SEDOPTION '/The gn arg use_goma=true .*/d' out/Default/mksnapshot_args
2021-11-29 15:09:07 -08:00
if [ "`uname`" != "Darwin" ]; then
if [ "$TARGET_ARCH" == "arm" ]; then
electron/script/strip-binaries.py --file $PWD/out/Default/clang_x86_v8_arm/mksnapshot
electron/script/strip-binaries.py --file $PWD/out/Default/clang_x86_v8_arm/v8_context_snapshot_generator
elif [ "$TARGET_ARCH" == "arm64" ]; then
electron/script/strip-binaries.py --file $PWD/out/Default/clang_x64_v8_arm64/mksnapshot
electron/script/strip-binaries.py --file $PWD/out/Default/clang_x64_v8_arm64/v8_context_snapshot_generator
else
electron/script/strip-binaries.py --file $PWD/out/Default/mksnapshot
electron/script/strip-binaries.py --file $PWD/out/Default/v8_context_snapshot_generator
fi
fi
2023-06-07 16:34:02 -07:00
if [ "$SKIP_DIST_ZIP" != "1" ]; then
2024-01-10 10:19:42 +13:00
autoninja -C out/Default electron:electron_mksnapshot_zip -j $NUMBER_OF_NINJA_PROCESSES
2021-11-29 15:09:07 -08:00
(cd out/Default; zip mksnapshot.zip mksnapshot_args gen/v8/embedded.S)
fi
step-hunspell-build : &step-hunspell-build
run :
name : hunspell build
command : |
cd src
if [ "$SKIP_DIST_ZIP" != "1" ]; then
2024-01-10 10:19:42 +13:00
autoninja -C out/Default electron:hunspell_dictionaries_zip -j $NUMBER_OF_NINJA_PROCESSES
2021-11-29 15:09:07 -08:00
fi
step-maybe-generate-libcxx : &step-maybe-generate-libcxx
run :
name : maybe generate libcxx
command : |
cd src
if [ "`uname`" == "Linux" ]; then
2024-01-10 10:19:42 +13:00
autoninja -C out/Default electron:libcxx_headers_zip -j $NUMBER_OF_NINJA_PROCESSES
autoninja -C out/Default electron:libcxxabi_headers_zip -j $NUMBER_OF_NINJA_PROCESSES
autoninja -C out/Default electron:libcxx_objects_zip -j $NUMBER_OF_NINJA_PROCESSES
2021-11-29 15:09:07 -08:00
fi
step-maybe-generate-breakpad-symbols : &step-maybe-generate-breakpad-symbols
run :
name : Generate breakpad symbols
no_output_timeout : 30m
command : |
if [ "$GENERATE_SYMBOLS" == "true" ]; then
cd src
2024-01-10 10:19:42 +13:00
autoninja -C out/Default electron:electron_symbols
2021-11-29 15:09:07 -08:00
fi
step-maybe-zip-symbols : &step-maybe-zip-symbols
2022-11-16 10:57:09 -08:00
run :
name : Zip symbols
command : |
cd src
export BUILD_PATH="$PWD/out/Default"
2024-01-10 10:19:42 +13:00
autoninja -C out/Default electron:licenses
autoninja -C out/Default electron:electron_version_file
2022-11-16 10:57:09 -08:00
electron/script/zip-symbols.py -b $BUILD_PATH
step-maybe-zip-symbols-and-clean : &step-maybe-zip-symbols-and-clean
2021-11-29 15:09:07 -08:00
run :
name : Zip symbols
command : |
cd src
export BUILD_PATH="$PWD/out/Default"
2024-01-10 10:19:42 +13:00
autoninja -C out/Default electron:licenses
autoninja -C out/Default electron:electron_version_file
2021-11-29 15:09:07 -08:00
DELETE_DSYMS_AFTER_ZIP=1 electron/script/zip-symbols.py -b $BUILD_PATH
step-maybe-cross-arch-snapshot : &step-maybe-cross-arch-snapshot
run :
name : Generate cross arch snapshot (arm/arm64)
command : |
if [ "$GENERATE_CROSS_ARCH_SNAPSHOT" == "true" ] && [ -z "$CIRCLE_PR_NUMBER" ]; then
cd src
if [ "$TARGET_ARCH" == "arm" ]; then
export MKSNAPSHOT_PATH="clang_x86_v8_arm"
elif [ "$TARGET_ARCH" == "arm64" ]; then
export MKSNAPSHOT_PATH="clang_x64_v8_arm64"
fi
2023-02-01 12:59:16 +01:00
cp "out/Default/$MKSNAPSHOT_PATH/mksnapshot" out/Default
2021-11-29 15:09:07 -08:00
cp "out/Default/$MKSNAPSHOT_PATH/v8_context_snapshot_generator" out/Default
if [ "`uname`" == "Linux" ]; then
cp "out/Default/$MKSNAPSHOT_PATH/libffmpeg.so" out/Default
elif [ "`uname`" == "Darwin" ]; then
cp "out/Default/$MKSNAPSHOT_PATH/libffmpeg.dylib" out/Default
fi
2023-05-15 02:06:12 -07:00
python3 electron/script/verify-mksnapshot.py --source-root "$PWD" --build-dir out/Default --create-snapshot-only
2021-11-29 15:09:07 -08:00
mkdir cross-arch-snapshots
cp out/Default-mksnapshot-test/*.bin cross-arch-snapshots
2022-11-16 10:57:09 -08:00
# Clean up so that ninja does not get confused
if [ "`uname`" == "Linux" ]; then
rm -f out/Default/libffmpeg.so
elif [ "`uname`" == "Darwin" ]; then
rm -f out/Default/libffmpeg.dylib
fi
2021-11-29 15:09:07 -08:00
fi
step-maybe-generate-typescript-defs : &step-maybe-generate-typescript-defs
run :
name : Generate type declarations
command : |
if [ "`uname`" == "Darwin" ]; then
cd src/electron
node script/yarn create-typescript-definitions
fi
step-fix-known-hosts-linux : &step-fix-known-hosts-linux
run :
name : Fix Known Hosts on Linux
command : |
if [ "`uname`" == "Linux" ]; then
./src/electron/.circleci/fix-known-hosts.sh
fi
# Checkout Steps
step-generate-deps-hash : &step-generate-deps-hash
run :
name : Generate DEPS Hash
command : node src/electron/script/generate-deps-hash.js && cat src/electron/.depshash-target
step-touch-sync-done : &step-touch-sync-done
run :
name : Touch Sync Done
command : touch src/electron/.circle-sync-done
# Restore exact src cache based on the hash of DEPS and patches/*
# If no cache is matched EXACTLY then the .circle-sync-done file is empty
# If a cache is matched EXACTLY then the .circle-sync-done file contains "done"
step-maybe-restore-src-cache : &step-maybe-restore-src-cache
restore_cache :
keys :
2024-01-11 13:51:19 -08:00
- v17-src-cache-{{ checksum "src/electron/.depshash" }}
2021-11-29 15:09:07 -08:00
name : Restoring src cache
step-maybe-restore-src-cache-marker : &step-maybe-restore-src-cache-marker
restore_cache :
keys :
2024-01-11 13:51:19 -08:00
- v17-src-cache-marker-{{ checksum "src/electron/.depshash" }}
2021-11-29 15:09:07 -08:00
name : Restoring src cache marker
2023-09-19 03:12:14 -07:00
step-maybe-restore-src-cache-aks : &step-maybe-restore-src-cache-aks
restore_cache_aks :
step-name : Restoring src cache
2024-01-11 13:51:19 -08:00
cache_key : v17-src-cache-$(shasum src/electron/.depshash | cut -f1 -d' ')
2023-09-19 03:12:14 -07:00
cache_path : /var/portal
step-maybe-restore-src-cache-marker-aks : &step-maybe-restore-src-cache-marker-aks
restore_cache_aks :
step-name : Restoring src cache marker
2024-01-11 13:51:19 -08:00
cache_key : v17-src-cache-marker-$(shasum src/electron/.depshash | cut -f1 -d' ')
2023-09-19 03:12:14 -07:00
cache_path : "."
2024-01-11 13:51:19 -08:00
# Restore exact or closest git cache based on the hash of DEPS and .circle-sync-done
# If the src cache was restored above then this will match an empty cache
# If the src cache was not restored above then this will match a close git cache
step-maybe-restore-git-cache : &step-maybe-restore-git-cache
restore_cache :
paths :
- git-cache
keys :
- v1-git-cache-{{ checksum "src/electron/.circle-sync-done" }}-{{ checksum "src/electron/DEPS" }}
- v1-git-cache-{{ checksum "src/electron/.circle-sync-done" }}
name : Conditionally restoring git cache
step-maybe-restore-git-cache-aks : &step-maybe-restore-git-cache-aks
restore_cache_aks :
step-name : Conditionally restoring git cache (aks)
cache_key : v1-git-cache-$(shasum src/electron/.circle-sync-done | cut -f1 -d' ')-$(shasum src/electron/DEPS | cut -f1 -d' ') v1-git-cache-$(shasum src/electron/.circle-sync-done | cut -f1 -d' ')
cache_path : git-cache
2021-11-29 15:09:07 -08:00
step-set-git-cache-path : &step-set-git-cache-path
run :
name : Set GIT_CACHE_PATH to make gclient to use the cache
command : |
# CircleCI does not support interpolation when setting environment variables.
# https://circleci.com/docs/2.0/env-vars/#setting-an-environment-variable-in-a-shell-command
2022-04-21 14:34:25 -07:00
echo 'export GIT_CACHE_PATH="$PWD/git-cache"' >> $BASH_ENV
2021-11-29 15:09:07 -08:00
2024-01-11 13:51:19 -08:00
# Persist the git cache based on the hash of DEPS and .circle-sync-done
# If the src cache was restored above then this will persist an empty cache
step-save-git-cache : &step-save-git-cache
save_cache :
paths :
- git-cache
key : v1-git-cache-{{ checksum "src/electron/.circle-sync-done" }}-{{ checksum "src/electron/DEPS" }}
name : Persisting git cache
step-save-git-cache-aks : &step-save-git-cache-aks
save_cache_aks :
step-name : Persisting git cache (AKS)
cache_key : v1-git-cache-$(shasum src/electron/.circle-sync-done | cut -f1 -d' ')-$(shasum src/electron/DEPS | cut -f1 -d' ')
cache_path : git-cache
2021-11-29 15:09:07 -08:00
step-run-electron-only-hooks : &step-run-electron-only-hooks
run :
name : Run Electron Only Hooks
command : gclient runhooks --spec="solutions=[{'name':'src/electron','url':None,'deps_file':'DEPS','custom_vars':{'process_deps':False},'managed':False}]"
step-generate-deps-hash-cleanly : &step-generate-deps-hash-cleanly
run :
name : Generate DEPS Hash
command : (cd src/electron && git checkout .) && node src/electron/script/generate-deps-hash.js && cat src/electron/.depshash-target
# Mark the sync as done for future cache saving
step-mark-sync-done : &step-mark-sync-done
run :
name : Mark Sync Done
command : echo DONE > src/electron/.circle-sync-done
# Minimize the size of the cache
step-minimize-workspace-size-from-checkout : &step-minimize-workspace-size-from-checkout
run :
name : Remove some unused data to avoid storing it in the workspace/cache
command : |
rm -rf src/android_webview
rm -rf src/ios/chrome
rm -rf src/third_party/blink/web_tests
rm -rf src/third_party/blink/perf_tests
rm -rf third_party/electron_node/deps/openssl
rm -rf third_party/electron_node/deps/v8
rm -rf chrome/test/data/xr/webvr_info
2022-10-24 23:44:43 -07:00
rm -rf src/third_party/angle/third_party/VK-GL-CTS/src
2022-11-15 00:30:07 -08:00
rm -rf src/third_party/swift-toolchain
rm -rf src/third_party/swiftshader/tests/regres/testlists
2021-11-29 15:09:07 -08:00
# Save the src cache based on the deps hash
step-save-src-cache : &step-save-src-cache
save_cache :
paths :
- /var/portal
2024-01-11 13:51:19 -08:00
key : v17-src-cache-{{ checksum "/var/portal/src/electron/.depshash" }}
2021-11-29 15:09:07 -08:00
name : Persisting src cache
step-make-src-cache-marker : &step-make-src-cache-marker
run :
name : Making src cache marker
command : touch .src-cache-marker
step-save-src-cache-marker : &step-save-src-cache-marker
save_cache :
paths :
- .src-cache-marker
2024-01-11 13:51:19 -08:00
key : v17-src-cache-marker-{{ checksum "/var/portal/src/electron/.depshash" }}
2023-09-19 03:12:14 -07:00
step-save-src-cache-aks : &step-save-src-cache-aks
save_cache_aks :
step-name : Persisting src cache (aks)
2024-01-11 13:51:19 -08:00
cache_key : v17-src-cache-$(shasum /var/portal/src/electron/.depshash | cut -f1 -d' ')
2023-09-19 03:12:14 -07:00
cache_path : /var/portal
step-save-src-cache-marker-aks : &step-save-src-cache-marker-aks
save_cache_aks :
step-name : Persisting src cache marker (aks)
2024-01-11 13:51:19 -08:00
cache_key : v17-src-cache-marker-$(shasum /var/portal/src/electron/.depshash | cut -f1 -d' ')
2023-09-19 03:12:14 -07:00
cache_path : .src-cache-marker
2021-11-29 15:09:07 -08:00
step-maybe-early-exit-no-doc-change : &step-maybe-early-exit-no-doc-change
run :
name : Shortcircuit job if change is not doc only
command : |
if [ ! -s src/electron/.skip-ci-build ]; then
circleci-agent step halt
fi
step-ts-compile : &step-ts-compile
run :
name : Run TS/JS compile on doc only change
command : |
2022-05-24 14:04:49 -07:00
cd src/electron
node script/yarn create-typescript-definitions
node script/yarn tsc -p tsconfig.default_app.json --noEmit
for f in build/webpack/*.js
do
out="${f:29}"
if [ "$out" != "base.js" ]; then
2022-08-09 02:39:09 +05:30
node script/yarn webpack --config $f --output-filename=$out --output-path=./.tmp --env mode=development
2022-05-24 14:04:49 -07:00
fi
done
2021-11-29 15:09:07 -08:00
# List of all steps.
steps-electron-ts-compile-for-doc-change : &steps-electron-ts-compile-for-doc-change
steps :
# Checkout - Copied from steps-checkout
- *step-checkout-electron
2022-05-24 14:04:49 -07:00
- *step-install-npm-deps
2021-11-29 15:09:07 -08:00
#Compile ts/js to verify doc change didn't break anything
- *step-ts-compile
# Command Aliases
commands :
2023-09-19 03:12:14 -07:00
aks-specific-step :
parameters :
circle :
type : steps
aks :
type : steps
could-be-aks :
type : boolean
description : Only set this to true on linux hosts
steps :
- when :
condition :
or :
- equal : [ << parameters.could-be-aks >>, false]
2023-09-21 06:10:46 -04:00
- equal : [ << pipeline.parameters.large-linux-executor >>, 2xlarge]
2023-09-19 03:12:14 -07:00
steps : << parameters.circle >>
- when :
condition :
and :
- equal : [ << parameters.could-be-aks >>, true]
- equal : [ << pipeline.parameters.large-linux-executor >>, electronjs/aks-linux-large]
steps : << parameters.aks >>
save_cache_aks :
parameters :
step-name :
type : string
cache_key :
type : string
cache_path :
type : string
steps :
- run :
name : << parameters.step-name >>
command : |
cache_key="<< parameters.cache_key >>"
final_cache_path=/mnt/cross-instance-cache/${cache_key}.tar
echo "Using cache key: $cache_key"
echo "Checking path: $final_cache_path"
if [ ! -f "$final_cache_path" ]; then
echo "Cache key not founding, storing tarball"
tmp_container=/mnt/cross-instance-cache/tmp/$CIRCLE_WORKFLOW_JOB_ID
tmp_cache_path=$tmp_container/${cache_key}.tar
mkdir -p $tmp_container
if [ -f "<< parameters.cache_path >>" ]; then
tar -cf $tmp_cache_path -C $(dirname << parameters.cache_path >>) ./$(basename << parameters.cache_path >>)
else
tar -cf $tmp_cache_path -C << parameters.cache_path >>/ ./
fi
mv -vn $tmp_cache_path $final_cache_path
rm -rf $tmp_container
else
echo "Cache key already exists, skipping.."
fi
restore_cache_aks :
parameters :
step-name :
type : string
cache_key :
type : string
cache_path :
type : string
steps :
- run :
name : << parameters.step-name >>
command : |
df -h
for cache_key in << parameters.cache_key >>; do
cache_path=/mnt/cross-instance-cache/${cache_key}.tar
echo "Using cache key: $cache_key"
echo "Checking path: $cache_path"
if [ ! -f "$cache_path" ]; then
echo "Cache key not found, nothing to restore..."
else
echo "Cache key found, restoring to path..."
mkdir -p << parameters.cache_path >>/
tar -xf /mnt/cross-instance-cache/${cache_key}.tar -C << parameters.cache_path >>/
exit 0
fi
done
2021-11-29 15:09:07 -08:00
maybe-restore-portaled-src-cache :
parameters :
halt-if-successful :
type : boolean
default : false
2023-09-19 03:12:14 -07:00
could-be-aks :
type : boolean
2021-11-29 15:09:07 -08:00
steps :
- run :
name : Prepare for cross-OS sync restore
command : |
sudo mkdir -p /var/portal
sudo chown -R $(id -u):$(id -g) /var/portal
- when :
condition : << parameters.halt-if-successful >>
steps :
2023-09-19 03:12:14 -07:00
- aks-specific-step :
circle :
- *step-maybe-restore-src-cache-marker
aks :
- *step-maybe-restore-src-cache-marker-aks
could-be-aks : << parameters.could-be-aks >>
2021-11-29 15:09:07 -08:00
- run :
name : Halt the job early if the src cache exists
command : |
if [ -f ".src-cache-marker" ]; then
circleci-agent step halt
fi
2023-09-19 03:12:14 -07:00
- aks-specific-step :
circle :
- *step-maybe-restore-src-cache
aks :
- *step-maybe-restore-src-cache-aks
could-be-aks : << parameters.could-be-aks >>
2021-11-29 15:09:07 -08:00
- run :
2023-09-19 03:12:14 -07:00
name : Fix the src cache restore point
2021-11-29 15:09:07 -08:00
command : |
if [ -d "/var/portal/src" ]; then
echo Relocating Cache
rm -rf src
mv /var/portal/src ./
fi
2023-09-19 03:12:14 -07:00
run-gn-check :
parameters :
could-be-aks :
type : boolean
steps :
2024-01-10 10:19:42 +13:00
- *step-setup-rbe-for-build
2023-09-19 03:12:14 -07:00
- checkout-from-cache :
could-be-aks : << parameters.could-be-aks >>
- *step-setup-env-for-build
- *step-gn-gen-default
- *step-gn-check
2022-11-16 10:57:09 -08:00
build_and_save_artifacts :
parameters :
artifact-key :
type : string
2023-02-23 21:13:54 -05:00
build-type :
2023-06-08 22:40:08 +02:00
type : string
2022-11-16 10:57:09 -08:00
build-nonproprietary-ffmpeg :
type : boolean
default : true
steps :
- *step-gn-gen-default
- ninja_build_electron :
clean-prebuilt-snapshot : false
2023-02-23 21:13:54 -05:00
build-type : << parameters.build-type >>
2022-11-16 10:57:09 -08:00
- *step-maybe-electron-dist-strip
- step-electron-dist-build :
2023-10-12 20:51:59 +02:00
additional-targets : electron:node_headers third_party/electron_node:overlapped-checker electron:hunspell_dictionaries_zip
2022-11-16 10:57:09 -08:00
# mksnapshot
- *step-mksnapshot-build
- *step-maybe-cross-arch-snapshot
# chromedriver
- *step-electron-chromedriver-build
- when :
condition : << parameters.build-nonproprietary-ffmpeg >>
steps :
# ffmpeg
- *step-ffmpeg-gn-gen
- *step-ffmpeg-build
- *step-maybe-generate-breakpad-symbols
- *step-maybe-zip-symbols
- move_and_store_all_artifacts :
artifact-key : << parameters.artifact-key >>
2021-11-29 15:09:07 -08:00
move_and_store_all_artifacts :
2022-11-16 10:57:09 -08:00
parameters :
artifact-key :
type : string
2021-11-29 15:09:07 -08:00
steps :
- run :
name : Move all generated artifacts to upload folder
command : |
2022-11-16 10:57:09 -08:00
rm -rf generated_artifacts_<< parameters.artifact-key >>
mkdir generated_artifacts_<< parameters.artifact-key >>
2021-11-29 15:09:07 -08:00
mv_if_exist() {
if [ -f "$1" ] || [ -d "$1" ]; then
echo Storing $1
2022-11-16 10:57:09 -08:00
mv $1 generated_artifacts_<< parameters.artifact-key >>
else
echo Skipping $1 - It is not present on disk
fi
}
cp_if_exist() {
if [ -f "$1" ] || [ -d "$1" ]; then
echo Storing $1
cp $1 generated_artifacts_<< parameters.artifact-key >>
2021-11-29 15:09:07 -08:00
else
echo Skipping $1 - It is not present on disk
fi
}
mv_if_exist src/out/Default/dist.zip
mv_if_exist src/out/Default/gen/node_headers.tar.gz
mv_if_exist src/out/Default/symbols.zip
mv_if_exist src/out/Default/mksnapshot.zip
mv_if_exist src/out/Default/chromedriver.zip
mv_if_exist src/out/ffmpeg/ffmpeg.zip
mv_if_exist src/out/Default/hunspell_dictionaries.zip
mv_if_exist src/cross-arch-snapshots
2022-11-16 10:57:09 -08:00
cp_if_exist src/out/electron_ninja_log
cp_if_exist src/out/Default/.ninja_log
2021-11-29 15:09:07 -08:00
when : always
- store_artifacts :
2022-11-16 10:57:09 -08:00
path : generated_artifacts_<< parameters.artifact-key >>
destination : ./<< parameters.artifact-key >>
2021-11-29 15:09:07 -08:00
- store_artifacts :
2022-11-16 10:57:09 -08:00
path : generated_artifacts_<< parameters.artifact-key >>/cross-arch-snapshots
destination : << parameters.artifact-key >>/cross-arch-snapshots
restore_build_artifacts :
parameters :
artifact-key :
type : string
steps :
- attach_workspace :
at : .
- run :
name : Restore key specific artifacts
command : |
mv_if_exist() {
if [ -f "generated_artifacts_<< parameters.artifact-key >>/$1" ] || [ -d "generated_artifacts_<< parameters.artifact-key >>/$1" ]; then
echo Restoring $1 to $2
mkdir -p $2
mv generated_artifacts_<< parameters.artifact-key >>/$1 $2
else
echo Skipping $1 - It is not present on disk
fi
}
mv_if_exist dist.zip src/out/Default
mv_if_exist node_headers.tar.gz src/out/Default/gen
mv_if_exist symbols.zip src/out/Default
mv_if_exist mksnapshot.zip src/out/Default
mv_if_exist chromedriver.zip src/out/Default
mv_if_exist ffmpeg.zip src/out/ffmpeg
mv_if_exist hunspell_dictionaries.zip src/out/Default
mv_if_exist cross-arch-snapshots src
2021-11-29 15:09:07 -08:00
checkout-from-cache :
2023-09-19 03:12:14 -07:00
parameters :
could-be-aks :
type : boolean
2021-11-29 15:09:07 -08:00
steps :
- *step-checkout-electron
- *step-depot-tools-get
- *step-depot-tools-add-to-path
- *step-generate-deps-hash
2023-09-19 03:12:14 -07:00
- maybe-restore-portaled-src-cache :
could-be-aks : << parameters.could-be-aks >>
2021-11-29 15:09:07 -08:00
- run :
name : Ensure src checkout worked
command : |
if [ ! -d "src/third_party/blink" ]; then
echo src cache was not restored for some reason, idk what happened here...
exit 1
fi
- run :
name : Wipe Electron
command : rm -rf src/electron
- *step-checkout-electron
- *step-run-electron-only-hooks
- *step-generate-deps-hash-cleanly
2022-04-26 23:14:59 -07:00
step-electron-dist-build :
parameters :
additional-targets :
type : string
default : ''
steps :
- run :
name : Build dist.zip
command : |
cd src
if [ "$SKIP_DIST_ZIP" != "1" ]; then
2024-01-10 10:19:42 +13:00
autoninja -C out/Default electron:electron_dist_zip << parameters.additional-targets >> -j $NUMBER_OF_NINJA_PROCESSES
2022-04-26 23:14:59 -07:00
if [ "$CHECK_DIST_MANIFEST" == "1" ]; then
2024-07-03 18:55:23 -04:00
if [ "`uname`" == "Linux" ]; then
2022-04-26 23:14:59 -07:00
target_os=linux
if [ x"$TARGET_ARCH" == x ]; then
target_cpu=x64
else
target_cpu="$TARGET_ARCH"
fi
else
echo "Unknown system: `uname`"
exit 1
fi
electron/script/zip_manifests/check-zip-manifest.py out/Default/dist.zip electron/script/zip_manifests/dist_zip.$target_os.$target_cpu.manifest
fi
fi
2022-11-16 10:57:09 -08:00
ninja_build_electron :
parameters :
clean-prebuilt-snapshot :
type : boolean
default : true
2023-02-23 21:13:54 -05:00
build-type :
type : string
2022-11-16 10:57:09 -08:00
steps :
- run :
2023-02-23 21:13:54 -05:00
name : Electron << parameters.build-type >> build
2022-11-16 10:57:09 -08:00
no_output_timeout : 60m
command : |
cd src
NINJA_SUMMARIZE_BUILD=1 autoninja -C out/Default electron -j $NUMBER_OF_NINJA_PROCESSES
cp out/Default/.ninja_log out/electron_ninja_log
node electron/script/check-symlinks.js
2021-11-29 15:09:07 -08:00
electron-build :
parameters :
attach :
type : boolean
default : false
persist :
type : boolean
default : true
persist-checkout :
type : boolean
default : false
checkout :
type : boolean
default : true
checkout-and-assume-cache :
type : boolean
default : false
2024-01-11 13:51:19 -08:00
save-git-cache :
type : boolean
default : false
2021-11-29 15:09:07 -08:00
checkout-to-create-src-cache :
type : boolean
default : false
build :
type : boolean
default : true
restore-src-cache :
type : boolean
default : true
build-nonproprietary-ffmpeg :
type : boolean
default : true
2022-11-16 10:57:09 -08:00
artifact-key :
type : string
2023-02-23 21:13:54 -05:00
build-type :
2023-06-08 22:40:08 +02:00
type : string
2022-11-16 10:57:09 -08:00
after-build-and-save :
type : steps
default : [ ]
after-persist :
type : steps
default : [ ]
2023-09-19 03:12:14 -07:00
could-be-aks :
type : boolean
2021-11-29 15:09:07 -08:00
steps :
- when :
condition : << parameters.attach >>
steps :
- attach_workspace :
at : .
- run : rm -rf src/electron
- *step-restore-brew-cache
- *step-save-brew-cache
2022-04-26 23:14:59 -07:00
- when :
condition : << parameters.build >>
steps :
2024-01-10 10:19:42 +13:00
- *step-setup-rbe-for-build
2021-11-29 15:09:07 -08:00
- when :
condition : << parameters.checkout-and-assume-cache >>
steps :
2023-09-19 03:12:14 -07:00
- checkout-from-cache :
could-be-aks : << parameters.could-be-aks >>
2021-11-29 15:09:07 -08:00
- when :
condition : << parameters.checkout >>
steps :
# Checkout - Copied from steps-checkout
- *step-checkout-electron
- *step-depot-tools-get
- *step-depot-tools-add-to-path
- *step-generate-deps-hash
- *step-touch-sync-done
- when :
condition : << parameters.restore-src-cache >>
steps :
- maybe-restore-portaled-src-cache :
halt-if-successful : << parameters.checkout-to-create-src-cache >>
2023-09-19 03:12:14 -07:00
could-be-aks : << parameters.could-be-aks >>
2024-01-11 13:51:19 -08:00
- aks-specific-step :
circle :
- *step-maybe-restore-git-cache
aks :
- *step-maybe-restore-git-cache-aks
2023-09-19 03:12:14 -07:00
could-be-aks : << parameters.could-be-aks >>
2021-11-29 15:09:07 -08:00
- *step-set-git-cache-path
2023-09-19 03:12:14 -07:00
- *step-fix-known-hosts-linux
2021-11-29 15:09:07 -08:00
# This sync call only runs if .circle-sync-done is an EMPTY file
- *step-gclient-sync
- store_artifacts :
path : patches
# These next few steps reset Electron to the correct commit regardless of which cache was restored
- run :
name : Wipe Electron
command : rm -rf src/electron
- *step-checkout-electron
- *step-run-electron-only-hooks
- *step-generate-deps-hash-cleanly
2022-04-27 12:54:52 -07:00
- *step-touch-sync-done
2024-01-11 13:51:19 -08:00
- when :
condition : << parameters.save-git-cache >>
steps :
- aks-specific-step :
circle :
- *step-save-git-cache
aks :
- *step-save-git-cache-aks
could-be-aks : << parameters.could-be-aks >>
2022-04-21 14:34:25 -07:00
# Mark sync as done _after_ saving the git cache so that it is uploaded
# only when the src cache was not present
# Their are theoretically two cases for this cache key
# 1. `vX-git-cache-DONE-{deps_hash}
# 2. `vX-git-cache-EMPTY-{deps_hash}
#
# Case (1) occurs when the flag file has "DONE" in it
# which only occurs when "step-mark-sync-done" is run
# or when the src cache was restored successfully as that
# flag file contains "DONE" in the src cache.
#
# Case (2) occurs when the flag file is empty, this occurs
# when the src cache was not restored and "step-mark-sync-done"
# has not run yet.
#
# Notably both of these cases also have completely different
# gclient cache states.
# In (1) the git cache is completely empty as we didn't run
# "gclient sync" because the src cache was restored.
# In (2) the git cache is full as we had to run "gclient sync"
#
# This allows us to do make the follow transitive assumption:
# In cases where the src cache is restored, saving the git cache
# will save an empty cache. In cases where the src cache is built
# during this build the git cache will save a full cache.
#
# In order words if there is a src cache for a given DEPS hash
# the git cache restored will be empty. But if the src cache
# is missing we will restore a useful git cache.
- *step-mark-sync-done
2021-11-29 15:09:07 -08:00
- *step-minimize-workspace-size-from-checkout
- when :
condition : << parameters.persist-checkout >>
steps :
- persist_to_workspace :
root : .
paths :
- depot_tools
- src
- when :
condition : << parameters.checkout-to-create-src-cache >>
steps :
- run :
name : Move src folder to the cross-OS portal
command : |
sudo mkdir -p /var/portal
sudo chown -R $(id -u):$(id -g) /var/portal
mv ./src /var/portal
2023-09-19 03:12:14 -07:00
- aks-specific-step :
circle :
- *step-save-src-cache
aks :
- *step-save-src-cache-aks
could-be-aks : << parameters.could-be-aks >>
2021-11-29 15:09:07 -08:00
- *step-make-src-cache-marker
2023-09-19 03:12:14 -07:00
- aks-specific-step :
circle :
- *step-save-src-cache-marker
aks :
- *step-save-src-cache-marker-aks
could-be-aks : << parameters.could-be-aks >>
2021-11-29 15:09:07 -08:00
- when :
condition : << parameters.build >>
steps :
- *step-depot-tools-add-to-path
- *step-setup-env-for-build
- when :
condition : << parameters.build >>
steps :
2022-11-16 10:57:09 -08:00
- build_and_save_artifacts :
artifact-key : << parameters.artifact-key >>
2023-02-23 21:13:54 -05:00
build-type : << parameters.build-type >>
2022-11-16 10:57:09 -08:00
build-nonproprietary-ffmpeg : << parameters.build-nonproprietary-ffmpeg >>
- steps : << parameters.after-build-and-save >>
2023-02-01 12:59:16 +01:00
2022-11-16 10:57:09 -08:00
# Save all data needed for a further tests run.
- when :
condition : << parameters.persist >>
steps :
- *step-minimize-workspace-size-from-checkout
- run : |
rm -rf src/third_party/electron_node/deps/openssl
rm -rf src/third_party/electron_node/deps/v8
- persist_to_workspace :
root : .
paths :
# Build artifacts
- generated_artifacts_<< parameters.artifact-key >>
- src/out/Default/gen/node_headers
- src/out/Default/overlapped-checker
- src/electron
- src/third_party/electron_node
- src/third_party/nan
- src/cross-arch-snapshots
- src/third_party/llvm-build
- src/build/linux
- src/buildtools/third_party/libc++
- src/buildtools/third_party/libc++abi
2023-08-15 10:49:41 -05:00
- src/third_party/libc++
- src/third_party/libc++abi
2022-11-16 10:57:09 -08:00
- src/out/Default/obj/buildtools/third_party
- src/v8/tools/builtins-pgo
- steps : << parameters.after-persist >>
2021-11-29 15:09:07 -08:00
- when :
condition : << parameters.build >>
steps :
- *step-maybe-notify-slack-failure
2023-09-19 03:12:14 -07:00
- when :
condition : << parameters.could-be-aks >>
steps :
- run :
name : Wait for active debug sessions
command : |
while [ -f /var/.ssh-lock ]
do
sleep 60
done
no_output_timeout : 2h
when : always
2021-11-29 15:09:07 -08:00
2022-11-16 10:57:09 -08:00
electron-tests :
parameters :
artifact-key :
type : string
steps :
- restore_build_artifacts :
artifact-key : << parameters.artifact-key >>
- *step-depot-tools-add-to-path
- *step-electron-dist-unzip
- *step-mksnapshot-unzip
- *step-chromedriver-unzip
- *step-setup-linux-for-headless-testing
- *step-restore-brew-cache
- *step-fix-known-hosts-linux
- run :
name : Run Electron tests
environment :
MOCHA_REPORTER : mocha-multi-reporters
ELECTRON_TEST_RESULTS_DIR : junit
MOCHA_MULTI_REPORTERS : mocha-junit-reporter, tap
ELECTRON_DISABLE_SECURITY_WARNINGS : 1
command : |
cd src
if [ "$IS_ASAN" == "1" ]; then
ASAN_SYMBOLIZE="$PWD/tools/valgrind/asan/asan_symbolize.py --executable-path=$PWD/out/Default/electron"
export ASAN_OPTIONS="symbolize=0 handle_abort=1"
export G_SLICE=always-malloc
export NSS_DISABLE_ARENA_FREE_LIST=1
export NSS_DISABLE_UNLOAD=1
export LLVM_SYMBOLIZER_PATH=$PWD/third_party/llvm-build/Release+Asserts/bin/llvm-symbolizer
export MOCHA_TIMEOUT=180000
echo "Piping output to ASAN_SYMBOLIZE ($ASAN_SYMBOLIZE)"
2024-01-10 13:12:19 +13:00
(cd electron && (circleci tests glob "spec/*-spec.ts" | xargs -I@ -P4 bash -c "echo $(pwd)/@" | circleci tests run --command="xargs node script/yarn test --runners=main --trace-uncaught --enable-logging --files" --split-by=timings 2>&1)) | $ASAN_SYMBOLIZE
2022-11-16 10:57:09 -08:00
else
2024-01-11 01:13:36 +13:00
if [ "$TARGET_ARCH" == "arm" ] || [ "$TARGET_ARCH" == "arm64" ]; then
export ELECTRON_SKIP_NATIVE_MODULE_TESTS=true
fi
2024-01-10 13:12:19 +13:00
if [ "$TARGET_ARCH" == "ia32" ]; then
npm_config_arch=x64 node electron/node_modules/dugite/script/download-git.js
2022-11-16 10:57:09 -08:00
fi
2024-01-10 13:12:19 +13:00
(cd electron && (circleci tests glob "spec/*-spec.ts" | xargs -I@ -P4 bash -c "echo $(pwd)/@" | circleci tests run --command="xargs node script/yarn test --runners=main --trace-uncaught --enable-logging --files" --split-by=timings))
2022-11-16 10:57:09 -08:00
fi
- store_test_results :
path : src/junit
2024-02-27 20:54:20 -07:00
- store_artifacts :
path : src/electron/spec/artifacts
2022-11-16 10:57:09 -08:00
- *step-verify-mksnapshot
- *step-verify-chromedriver
- *step-maybe-notify-slack-failure
nan-tests :
parameters :
artifact-key :
type : string
steps :
- restore_build_artifacts :
artifact-key : << parameters.artifact-key >>
- *step-depot-tools-add-to-path
- *step-electron-dist-unzip
- *step-setup-linux-for-headless-testing
- *step-fix-known-hosts-linux
- run :
name : Run Nan Tests
command : |
cd src
node electron/script/nan-spec-runner.js
node-tests :
parameters :
artifact-key :
type : string
steps :
- restore_build_artifacts :
artifact-key : << parameters.artifact-key >>
- *step-depot-tools-add-to-path
- *step-electron-dist-unzip
- *step-setup-linux-for-headless-testing
- *step-fix-known-hosts-linux
- run :
name : Run Node Tests
command : |
cd src
node electron/script/node-spec-runner.js --default --jUnitDir=junit
- store_test_results :
path : src/junit
2021-11-29 15:09:07 -08:00
# List of all jobs.
jobs :
# Layer 0: Docs. Standalone.
ts-compile-doc-change :
2022-04-28 03:17:05 -07:00
executor :
name : linux-docker
size : medium
2021-11-29 15:09:07 -08:00
environment :
2022-03-03 16:57:21 -08:00
<< : *env-linux-2xlarge
2021-11-29 15:09:07 -08:00
<< : *env-testing-build
2022-01-25 15:58:24 -05:00
GCLIENT_EXTRA_ARGS : '--custom-var=checkout_arm=True --custom-var=checkout_arm64=True'
2021-11-29 15:09:07 -08:00
<< : *steps-electron-ts-compile-for-doc-change
# Layer 1: Checkout.
linux-make-src-cache :
2022-04-26 23:14:59 -07:00
executor :
name : linux-docker
2023-09-19 03:12:14 -07:00
size : << pipeline.parameters.large-linux-executor >>
2021-11-29 15:09:07 -08:00
environment :
<< : *env-linux-2xlarge
GCLIENT_EXTRA_ARGS : '--custom-var=checkout_arm=True --custom-var=checkout_arm64=True'
steps :
- electron-build :
persist : false
build : false
checkout : true
2024-01-11 13:51:19 -08:00
save-git-cache : true
2021-11-29 15:09:07 -08:00
checkout-to-create-src-cache : true
2022-11-16 10:57:09 -08:00
artifact-key : 'nil'
2023-02-23 21:13:54 -05:00
build-type : 'nil'
2023-09-19 03:12:14 -07:00
could-be-aks : true
2021-11-29 15:09:07 -08:00
# Layer 2: Builds.
linux-x64-testing :
2022-04-28 03:17:05 -07:00
executor :
name : linux-docker
2023-09-14 08:07:11 -07:00
size : << pipeline.parameters.large-linux-executor >>
2021-11-29 15:09:07 -08:00
environment :
<< : *env-global
<< : *env-testing-build
<< : *env-ninja-status
GCLIENT_EXTRA_ARGS : '--custom-var=checkout_arm=True --custom-var=checkout_arm64=True'
steps :
- electron-build :
persist : true
2022-04-26 23:14:59 -07:00
checkout : false
checkout-and-assume-cache : true
2022-11-16 10:57:09 -08:00
artifact-key : 'linux-x64'
2023-02-23 21:13:54 -05:00
build-type : 'Linux'
2023-09-19 03:12:14 -07:00
could-be-aks : true
2021-11-29 15:09:07 -08:00
linux-x64-testing-asan :
2022-04-28 03:17:05 -07:00
executor :
name : linux-docker
2023-09-14 08:07:11 -07:00
size : << pipeline.parameters.large-linux-executor >>
2021-11-29 15:09:07 -08:00
environment :
<< : *env-global
<< : *env-testing-build
<< : *env-ninja-status
CHECK_DIST_MANIFEST : '0'
GCLIENT_EXTRA_ARGS : '--custom-var=checkout_arm=True --custom-var=checkout_arm64=True'
GN_EXTRA_ARGS : 'is_asan = true'
steps :
- electron-build :
persist : true
2023-09-21 06:10:46 -04:00
checkout : false
checkout-and-assume-cache : true
2021-11-29 15:09:07 -08:00
build-nonproprietary-ffmpeg : false
2022-11-16 10:57:09 -08:00
artifact-key : 'linux-x64-asan'
2023-02-23 21:13:54 -05:00
build-type : 'Linux'
2023-09-19 03:12:14 -07:00
could-be-aks : true
2021-11-29 15:09:07 -08:00
linux-x64-testing-gn-check :
executor :
name : linux-docker
2023-09-19 03:12:14 -07:00
size : << pipeline.parameters.medium-linux-executor >>
2021-11-29 15:09:07 -08:00
environment :
<< : *env-linux-medium
<< : *env-testing-build
2022-04-26 23:14:59 -07:00
GCLIENT_EXTRA_ARGS : '--custom-var=checkout_arm=True --custom-var=checkout_arm64=True'
2023-09-19 03:12:14 -07:00
steps :
- run-gn-check :
could-be-aks : true
2021-11-29 15:09:07 -08:00
linux-arm-testing :
2022-04-28 03:17:05 -07:00
executor :
name : linux-docker
2023-09-14 08:07:11 -07:00
size : << pipeline.parameters.large-linux-executor >>
2021-11-29 15:09:07 -08:00
environment :
<< : *env-global
<< : *env-arm
<< : *env-testing-build
<< : *env-ninja-status
TRIGGER_ARM_TEST : true
GENERATE_CROSS_ARCH_SNAPSHOT : true
GCLIENT_EXTRA_ARGS : '--custom-var=checkout_arm=True --custom-var=checkout_arm64=True'
steps :
- electron-build :
persist : true
2022-04-26 23:14:59 -07:00
checkout : false
checkout-and-assume-cache : true
2022-11-16 10:57:09 -08:00
artifact-key : 'linux-arm'
2023-02-23 21:13:54 -05:00
build-type : 'Linux ARM'
2023-09-19 03:12:14 -07:00
could-be-aks : true
2021-11-29 15:09:07 -08:00
linux-arm64-testing :
2022-04-28 03:17:05 -07:00
executor :
name : linux-docker
2023-09-14 08:07:11 -07:00
size : << pipeline.parameters.large-linux-executor >>
2021-11-29 15:09:07 -08:00
environment :
<< : *env-global
<< : *env-arm64
<< : *env-testing-build
<< : *env-ninja-status
TRIGGER_ARM_TEST : true
GENERATE_CROSS_ARCH_SNAPSHOT : true
GCLIENT_EXTRA_ARGS : '--custom-var=checkout_arm=True --custom-var=checkout_arm64=True'
steps :
- electron-build :
persist : true
2022-04-26 23:14:59 -07:00
checkout : false
checkout-and-assume-cache : true
2022-11-16 10:57:09 -08:00
artifact-key : 'linux-arm64'
2023-02-23 21:13:54 -05:00
build-type : 'Linux ARM64'
2023-09-19 03:12:14 -07:00
could-be-aks : true
2021-11-29 15:09:07 -08:00
linux-arm64-testing-gn-check :
executor :
name : linux-docker
2023-09-19 03:12:14 -07:00
size : << pipeline.parameters.medium-linux-executor >>
2021-11-29 15:09:07 -08:00
environment :
<< : *env-linux-medium
<< : *env-arm64
<< : *env-testing-build
2022-04-26 23:14:59 -07:00
GCLIENT_EXTRA_ARGS : '--custom-var=checkout_arm=True --custom-var=checkout_arm64=True'
2023-09-19 03:12:14 -07:00
steps :
- run-gn-check :
could-be-aks : true
2021-11-29 15:09:07 -08:00
# Layer 3: Tests.
linux-x64-testing-tests :
executor :
name : linux-docker
size : medium
environment :
<< : *env-linux-medium
<< : *env-headless-testing
<< : *env-stack-dumping
parallelism : 3
2022-11-16 10:57:09 -08:00
steps :
- electron-tests :
artifact-key : linux-x64
2021-11-29 15:09:07 -08:00
linux-x64-testing-asan-tests :
executor :
name : linux-docker
size : xlarge
environment :
<< : *env-linux-medium
<< : *env-headless-testing
<< : *env-stack-dumping
IS_ASAN : '1'
DISABLE_CRASH_REPORTER_TESTS : '1'
parallelism : 3
2022-11-16 10:57:09 -08:00
steps :
- electron-tests :
artifact-key : linux-x64-asan
2021-11-29 15:09:07 -08:00
linux-x64-testing-nan :
executor :
name : linux-docker
size : medium
environment :
<< : *env-linux-medium
<< : *env-headless-testing
<< : *env-stack-dumping
2022-11-16 10:57:09 -08:00
steps :
- nan-tests :
artifact-key : linux-x64
2021-11-29 15:09:07 -08:00
linux-x64-testing-node :
executor :
name : linux-docker
2022-04-28 03:17:05 -07:00
size : xlarge
2021-11-29 15:09:07 -08:00
environment :
<< : *env-linux-medium
<< : *env-headless-testing
2022-04-28 03:17:05 -07:00
<< : *env-stack-dumping
2022-11-16 10:57:09 -08:00
steps :
- node-tests :
artifact-key : linux-x64
2021-11-29 15:09:07 -08:00
linux-arm-testing-tests :
executor : linux-arm
environment :
<< : *env-arm
<< : *env-global
<< : *env-headless-testing
<< : *env-stack-dumping
2024-01-10 13:12:19 +13:00
parallelism : 3
2022-11-16 10:57:09 -08:00
steps :
- electron-tests :
artifact-key : linux-arm
2021-11-29 15:09:07 -08:00
linux-arm64-testing-tests :
executor : linux-arm64
environment :
<< : *env-arm64
<< : *env-global
<< : *env-headless-testing
<< : *env-stack-dumping
2024-01-10 13:12:19 +13:00
parallelism : 3
2022-11-16 10:57:09 -08:00
steps :
- electron-tests :
artifact-key : linux-arm64
2021-11-29 15:09:07 -08:00
# List all workflows
workflows :
docs-only :
when :
and :
- equal : [ true , << pipeline.parameters.run-docs-only >>]
jobs :
- ts-compile-doc-change
build-linux :
when :
and :
- equal : [ true , << pipeline.parameters.run-build-linux >>]
jobs :
- linux-make-src-cache
2022-04-26 23:14:59 -07:00
- linux-x64-testing :
requires :
- linux-make-src-cache
- linux-x64-testing-asan :
requires :
- linux-make-src-cache
2021-11-29 15:09:07 -08:00
- linux-x64-testing-gn-check :
requires :
2022-04-26 23:14:59 -07:00
- linux-make-src-cache
2021-11-29 15:09:07 -08:00
- linux-x64-testing-tests :
requires :
- linux-x64-testing
- linux-x64-testing-asan-tests :
requires :
- linux-x64-testing-asan
- linux-x64-testing-nan :
requires :
- linux-x64-testing
- linux-x64-testing-node :
requires :
- linux-x64-testing
2022-04-26 23:14:59 -07:00
- linux-arm-testing :
requires :
- linux-make-src-cache
2021-11-29 15:09:07 -08:00
- linux-arm-testing-tests :
filters :
branches :
# Do not run this on forked pull requests
2023-02-01 12:59:16 +01:00
ignore : /pull\/[0-9]+/
2021-11-29 15:09:07 -08:00
requires :
2023-02-01 12:59:16 +01:00
- linux-arm-testing
2022-04-26 23:14:59 -07:00
- linux-arm64-testing :
requires :
- linux-make-src-cache
2021-11-29 15:09:07 -08:00
- linux-arm64-testing-tests :
filters :
branches :
# Do not run this on forked pull requests
2023-02-01 12:59:16 +01:00
ignore : /pull\/[0-9]+/
2021-11-29 15:09:07 -08:00
requires :
- linux-arm64-testing
- linux-arm64-testing-gn-check :
requires :
2022-04-26 23:14:59 -07:00
- linux-make-src-cache
2021-11-29 15:09:07 -08:00
2022-04-21 14:34:25 -07:00
lint :
jobs :
- lint