Compare commits

...

84 Commits

Author SHA1 Message Date
Keeley Hammond
acb41e76aa build: use inputs for release variables 2024-04-24 12:07:49 -07:00
Keeley Hammond
96120a6f4d build: modify uploads to point to different directories 2024-04-23 17:16:00 -07:00
Keeley Hammond
65bd2db0f5 build: reuse build job with publish secrets 2024-04-10 15:53:27 -07:00
Keeley Hammond
d2c390983b build: do not disable CircleCI config 2024-04-09 20:13:41 +02:00
Keeley Hammond
ff6d7c2564 chore: remove SSH debugging using action-tmate 2024-04-09 20:11:29 +02:00
Keeley Hammond
7f2ba4ba80 build: change action to trigger on publish workflow dispatch 2024-04-09 20:06:41 +02:00
Keeley Hammond
2a7a61dcf5 build: remove macos-publish.yml 2024-04-09 20:06:41 +02:00
Keeley Hammond
c001d8b130 build: tweak release script 2024-04-09 20:06:38 +02:00
Shelley Vohr
1e376d2aa7 Don't fail-fast in tests 2024-04-09 20:06:20 +02:00
Shelley Vohr
84b0beaa47 chore: use Node.js 20.11.x 2024-04-09 20:06:20 +02:00
Shelley Vohr
0e297a3903 chore: move to script/actions 2024-04-09 20:06:20 +02:00
Shelley Vohr
af90e37cae refactor: build MAS after darwin 2024-04-09 20:06:20 +02:00
Shelley Vohr
636ed1a0c5 refactor: extract artifact logic to bash scripts 2024-04-09 20:06:20 +02:00
Shelley Vohr
238f815c5c Use mas JSON config 2024-04-09 20:06:20 +02:00
Shelley Vohr
a7ff541de3 Re-enable darwin build 2024-04-09 20:06:20 +02:00
Keeley Hammond
ec4d5a715f chore: Testing -> Default 2024-04-09 20:06:20 +02:00
Shelley Vohr
62a46d46e1 fix: switch to mas config 2024-04-09 20:06:19 +02:00
Shelley Vohr
674242f4ef chore: try setting directly 2024-04-09 20:06:19 +02:00
Keeley Hammond
7e31c0f7a2 ci: fix helperPath calls in action configs 2024-04-09 20:06:19 +02:00
Keeley Hammond
60a458c455 chore: rename yml to match convention 2024-04-09 20:06:19 +02:00
Shelley Vohr
2dd31e1682 Move GN_EXTRA_ARGS to gn gen step 2024-04-09 20:06:19 +02:00
Shelley Vohr
2a48ecca1d Ensure env vars escaped 2024-04-09 20:06:19 +02:00
Keeley Hammond
7fd77bbb50 build: oops 2024-04-09 20:06:19 +02:00
Keeley Hammond
4813397cc4 build: force trigger the first workflow 2024-04-09 20:06:18 +02:00
Keeley Hammond
f79037cfcc feat: add publish config, alter release-build script 2024-04-09 20:06:16 +02:00
Shelley Vohr
43d29911d1 Use matrix in test correctly 2024-04-09 20:03:09 +02:00
Shelley Vohr
a501abb69c Fix BUILD_TYPE interpolation 2024-04-09 20:03:09 +02:00
Shelley Vohr
b221c14d6f Fix GN_EXTRA_ARGS generation syntax 2024-04-09 20:03:09 +02:00
Shelley Vohr
451c419fed Add initial matrix for mas build 2024-04-09 20:03:09 +02:00
Shelley Vohr
2ea4e696d0 Build Node.js Headers for caching 2024-04-09 20:03:09 +02:00
Shelley Vohr
5031384ec4 chore: use script/yarn test directly 2024-04-09 20:03:09 +02:00
Shelley Vohr
3b43ec9f63 Persist src/buildtools/mac 2024-04-09 20:03:08 +02:00
Shelley Vohr
05b902fc93 Add depot_tools to PATH in test 2024-04-09 20:03:08 +02:00
Shelley Vohr
0004836b2b Try without codesigning just to get tests running 2024-04-09 20:03:08 +02:00
Shelley Vohr
ca329e167b Add Test Step 2024-04-09 20:03:08 +02:00
Shelley Vohr
bc36c67fa0 Add codesigning certificate step 2024-04-09 20:03:08 +02:00
Shelley Vohr
a320436ead chore: load-xcode is called by e build 2024-04-09 20:03:08 +02:00
Shelley Vohr
64389c34d6 chore: set download path explicitly 2024-04-09 20:03:08 +02:00
Shelley Vohr
a2e042a278 Cache non-generated build artifacts 2024-04-09 20:03:07 +02:00
Keeley Hammond
9c283e7acd build: add test job, download artifacts 2024-04-09 20:03:07 +02:00
Keeley Hammond
f3cfa779d4 build: add dist, chromedriver & mksnapshot 2024-04-09 20:03:07 +02:00
Keeley Hammond
0d91db25ec build: load build-tools & xcode 2024-04-09 20:03:07 +02:00
Shelley Vohr
0a64d90670 fix: we need electron_node/deps/openssl too 2024-04-09 20:03:07 +02:00
Shelley Vohr
c0145cb127 chore: whoops we need electron_node/deps/v8 actually 2024-04-09 20:03:07 +02:00
Shelley Vohr
8962cde240 fix: add RBE_experimental_credentials_helper_args 2024-04-09 20:03:07 +02:00
Shelley Vohr
f904225b02 fix: call pack refs manually 2024-04-09 20:03:06 +02:00
Shelley Vohr
0fd69734d0 chore: remove GIT_CACHE env var 2024-04-09 20:03:06 +02:00
Shelley Vohr
eb806b2f8f chore: fixup PATH usage 2024-04-09 20:03:06 +02:00
Shelley Vohr
7085243476 fix: workaround packed-refs issue 2024-04-09 20:03:06 +02:00
Shelley Vohr
ebfde8007e fix: missing GN gen env vars 2024-04-09 20:03:06 +02:00
Shelley Vohr
82739863be chore: move ulimit setting 2024-04-09 20:03:06 +02:00
Shelley Vohr
eb6423a713 chore: run tmate if debug logging enabled 2024-04-09 20:03:06 +02:00
Shelley Vohr
cbdbef48c5 fix: grab ELECTRON_RBE_JWT from secrets 2024-04-09 20:03:05 +02:00
Shelley Vohr
e2e4636deb chore: clean up reclient round 1 2024-04-09 20:03:05 +02:00
Keeley Hammond
fd399bee29 build: add reclient support & ninja build step 2024-04-09 20:03:05 +02:00
Keeley Hammond
b2178f6eae fix: fix tar pack/unpack 2024-04-09 20:03:05 +02:00
Keeley Hammond
3e016b2381 ci: fix cache prefix, add check for ssh debug 2024-04-09 20:03:05 +02:00
Keeley Hammond
8226449304 build: set GIT_CACHE_PATH outside of src 2024-04-09 20:03:05 +02:00
Keeley Hammond
e725c30686 build: use tar file, strip .git dirs 2024-04-09 20:03:05 +02:00
Shelley Vohr
75f4c272c9 chore: add fix sync step 2024-04-09 20:03:04 +02:00
Shelley Vohr
e61370b29e chore: misc cleanup of env steps 2024-04-09 20:03:04 +02:00
Shelley Vohr
244d1a0e80 chore: move to patch file in build as well 2024-04-09 20:03:04 +02:00
Shelley Vohr
fbc0668fcd fix: add infra/3pp/tools/swift-format handling 2024-04-09 20:03:04 +02:00
Shelley Vohr
86665a509a fix: depot_tools get on Linux 2024-04-09 20:03:04 +02:00
Shelley Vohr
b02af910c4 refactor: split checkout to Linux runner 2024-04-09 20:03:04 +02:00
Shelley Vohr
4d53d5b6d9 chore: rework depshash state and delete more 2024-04-09 20:03:04 +02:00
Shelley Vohr
07df2170b0 chore: use depshash and fix output syntax 2024-04-09 20:03:04 +02:00
Shelley Vohr
b70ac5d2b9 fix: correct json parsing 2024-04-09 20:03:03 +02:00
Shelley Vohr
dce0376527 ci: add cache downloading wip 2024-04-09 20:03:03 +02:00
Keeley Hammond
652943a5ae build: lets try it again, lads 2024-04-09 20:03:03 +02:00
Keeley Hammond
1411101adc build: remove sync, try disk space prune 2024-04-09 20:03:03 +02:00
Keeley Hammond
f0313adced build (WIP): mock out download logic 2024-04-09 20:03:03 +02:00
Keeley Hammond
2688204d08 build: full sync and cache upload test 2024-04-09 20:03:03 +02:00
Keeley Hammond
6a3b713201 build: test azure upload without full sync 2024-04-09 20:03:03 +02:00
Shelley Vohr
29558326d0 build: enable ssh access to runners 2024-04-09 20:03:02 +02:00
Keeley Hammond
a2de07ad8a build: add psuedocode for Azure workflow, add workflow_dispatch 2024-04-09 20:03:02 +02:00
VerteDinde
541fbc7264 debug: add logging for mtime cache 2024-04-09 20:02:59 +02:00
VerteDinde
2c9e55af1b build: gclient sync with --verbose 2024-04-09 20:02:18 +02:00
Keeley Hammond
2571bf10f3 build: pass different URL for sync 2024-04-09 20:02:18 +02:00
Keeley Hammond
d22bd05d68 build: fix path 2024-04-09 20:02:18 +02:00
Keeley Hammond
3d8e477522 build: try a sync 2024-04-09 20:02:18 +02:00
Keeley Hammond
9a3b05de7b chore: simplify depot-tools 2024-04-09 20:02:18 +02:00
Keeley Hammond
8720664dac build: baby steps, super basic checkout 2024-04-09 20:02:18 +02:00
Keeley Hammond
83a0ead9ee build: test the Mac runner space 2024-04-09 20:02:17 +02:00
10 changed files with 794 additions and 25 deletions

View File

@@ -49,28 +49,30 @@ jobs:
docker:
- image: cimg/node:16.14
steps:
- checkout
- path-filtering/set-parameters:
base-revision: main
mapping: |
^((?!docs/).)*$ run-build-mac true
^((?!docs/).)*$ run-build-linux true
docs/.* run-docs-only true
^((?!docs/).)*$ run-docs-only false
- run:
command: |
cd .circleci/config
yarn
export CIRCLECI_BINARY="$HOME/circleci"
curl -fLSs https://raw.githubusercontent.com/CircleCI-Public/circleci-cli/main/install.sh | DESTDIR=$CIRCLECI_BINARY bash
node build.js
name: Pack config.yml
- run:
name: Set params
command: node .circleci/config/params.js
- continuation/continue:
configuration_path: .circleci/config-staging/built.yml
parameters: /tmp/pipeline-parameters.json
command: echo "CircleCI disabled."
# - checkout
# - path-filtering/set-parameters:
# base-revision: main
# mapping: |
# ^((?!docs/).)*$ run-build-mac true
# ^((?!docs/).)*$ run-build-linux true
# docs/.* run-docs-only true
# ^((?!docs/).)*$ run-docs-only false
# - run:
# command: |
# cd .circleci/config
# yarn
# export CIRCLECI_BINARY="$HOME/circleci"
# curl -fLSs https://raw.githubusercontent.com/CircleCI-Public/circleci-cli/main/install.sh | DESTDIR=$CIRCLECI_BINARY bash
# node build.js
# name: Pack config.yml
# - run:
# name: Set params
# command: node .circleci/config/params.js
# - continuation/continue:
# configuration_path: .circleci/config-staging/built.yml
# parameters: /tmp/pipeline-parameters.json
# Initial setup workflow
workflows:

14
.github/workflows/config/gclient.diff vendored Normal file
View File

@@ -0,0 +1,14 @@
diff --git a/gclient.py b/gclient.py
index 59e2b4c5197928bdba1ef69bdbe637d7dfe471c1..b4bae5e48c83c84bd867187afaf40eed16e69851 100755
--- a/gclient.py
+++ b/gclient.py
@@ -739,7 +739,8 @@ class Dependency(gclient_utils.WorkItem, DependencySettings):
if dep_type == 'cipd':
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,

623
.github/workflows/macos-build.yml vendored Normal file
View File

@@ -0,0 +1,623 @@
name: Build MacOS
on:
workflow_call:
inputs:
IS_RELEASE:
required: true
type: boolean
default: false
GN_CONFIG:
required: false
type: string
default: false//electron/build/args/testing.gn
GN_BUILD_TYPE:
required: false
type: string
default: testing
GENERATE_SYMBOLS:
required: false
type: boolean
default: false
UPLOAD_TO_STORAGE:
required: false
type: string
default: '0'
env:
AZURE_STORAGE_ACCOUNT: ${{ secrets.AZURE_STORAGE_ACCOUNT }}
AZURE_STORAGE_KEY: ${{ secrets.AZURE_STORAGE_KEY }}
AZURE_STORAGE_CONTAINER_NAME: ${{ secrets.AZURE_STORAGE_CONTAINER_NAME }}
ELECTRON_RBE_JWT: ${{ secrets.ELECTRON_RBE_JWT }}
# Disable pre-compiled headers to reduce out size - only useful for rebuilds
GN_BUILDFLAG_ARGS: 'enable_precompiled_headers = false'
GCLIENT_EXTRA_ARGS: '--custom-var=checkout_mac=True --custom-var=host_os=mac --custom-var=host_cpu=arm64'
CHECK_DIST_MANIFEST: '1'
jobs:
checkout:
runs-on: LargeLinuxRunner
steps:
- name: Checkout Electron
uses: actions/checkout@v4
with:
path: src/electron
- name: Install Azure CLI
run: |
curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash
- name: Set GIT_CACHE_PATH to make gclient to use the cache
run: |
echo "GIT_CACHE_PATH=$(pwd)/git-cache" >> $GITHUB_ENV
- name: Setup Node.js/npm
uses: actions/setup-node@v3
with:
node-version: 20.11.x
cache: yarn
cache-dependency-path: src/electron/yarn.lock
- name: Install Dependencies
run: |
cd src/electron
node script/yarn install
- name: Get Depot Tools
timeout-minutes: 5
run: |
git clone --depth=1 https://chromium.googlesource.com/chromium/tools/depot_tools.git
if [ "`uname`" == "Darwin" ]; then
# remove ninjalog_uploader_wrapper.py from autoninja since we don't use it and it causes problems
sed -i '' '/ninjalog_uploader_wrapper.py/d' ./depot_tools/autoninja
else
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
git apply --3way ../src/electron/.github/workflows/config/gclient.diff
fi
# Ensure depot_tools does not update.
test -d depot_tools && cd depot_tools
touch .disable_auto_update
- name: Add Depot Tools to PATH
run: echo "$(pwd)/depot_tools" >> $GITHUB_PATH
- name: Generate DEPS Hash
run: |
node src/electron/script/generate-deps-hash.js && cat src/electron/.depshash-target
echo "DEPSHASH=v1-src-cache-$(shasum src/electron/.depshash | cut -f1 -d' ')" >> $GITHUB_ENV
- name: Check If Cache Exists
id: check-cache
run: |
exists_json=$(az storage blob exists \
--account-name $AZURE_STORAGE_ACCOUNT \
--account-key $AZURE_STORAGE_KEY \
--container-name $AZURE_STORAGE_CONTAINER_NAME \
--name $DEPSHASH)
cache_exists=$(echo $exists_json | jq -r '.exists')
echo "cache_exists=$cache_exists" >> $GITHUB_OUTPUT
if (test "$cache_exists" = "true"); then
echo "Cache Exists for $DEPSHASH"
else
echo "Cache Does Not Exist for $DEPSHASH"
fi
- name: Gclient Sync
# If there is no existing src cache, we need to do a full gclient sync.
# TODO(codebytere): Add stale patch handling for non-release builds.
if: steps.check-cache.outputs.cache_exists == 'false'
run: |
gclient config \
--name "src/electron" \
--unmanaged \
${GCLIENT_EXTRA_ARGS} \
"$GITHUB_SERVER_URL/$GITHUB_REPOSITORY"
ELECTRON_USE_THREE_WAY_MERGE_FOR_PATCHES=1 gclient sync --with_branch_heads --with_tags -vvvvv
# delete all .git directories under src/ except for
# third_party/angle/ and third_party/dawn/ because of build time generation of files
# gen/angle/commit.h depends on third_party/angle/.git/HEAD
# https://chromium-review.googlesource.com/c/angle/angle/+/2074924
# and dawn/common/Version_autogen.h depends on third_party/dawn/.git/HEAD
# https://dawn-review.googlesource.com/c/dawn/+/83901
# TODO: maybe better to always leave out */.git/HEAD file for all targets ?
- name: Delete .git directories under src to free space
if: steps.check-cache.outputs.cache_exists == 'false'
run: |
cd src
( find . -type d -name ".git" -not -path "./third_party/angle/*" -not -path "./third_party/dawn/*" -not -path "./electron/*" ) | xargs rm -rf
- name: Minimize Cache Size for Upload
if: steps.check-cache.outputs.cache_exists == 'false'
run: |
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 src/chrome/test/data/xr/webvr_info
rm -rf src/third_party/angle/third_party/VK-GL-CTS/src
rm -rf src/third_party/swift-toolchain
rm -rf src/third_party/swiftshader/tests/regres/testlists
rm -rf src/electron
- name: Compress Src Directory
if: steps.check-cache.outputs.cache_exists == 'false'
run: |
echo "Uncompressed src size: $(du -sh src | cut -f1 -d' ')"
tar -cvf $DEPSHASH.tar src
echo "Compressed src to $(du -sh $DEPSHASH.tar | cut -f1 -d' ')"
- name: Upload Compressed Src Cache to Azure
if: steps.check-cache.outputs.cache_exists == 'false'
run: |
az storage blob upload \
--account-name $AZURE_STORAGE_ACCOUNT \
--account-key $AZURE_STORAGE_KEY \
--container-name $AZURE_STORAGE_CONTAINER_NAME \
--file $DEPSHASH.tar \
--name $DEPSHASH \
--debug
build:
runs-on: macos-13-xlarge
needs: checkout
env:
AZURE_STORAGE_ACCOUNT: ${{ secrets.AZURE_STORAGE_ACCOUNT }}
AZURE_STORAGE_KEY: ${{ secrets.AZURE_STORAGE_KEY }}
AZURE_STORAGE_CONTAINER_NAME: ${{ secrets.AZURE_STORAGE_CONTAINER_NAME }}
ELECTRON_RBE_JWT: ${{ secrets.ELECTRON_RBE_JWT }}
steps:
- name: Load Build Tools
run: |
npm i -g @electron/build-tools
e init --root=$(pwd) --out=Default ${{ inputs.GN_BUILD_TYPE }}
- name: Checkout Electron
uses: actions/checkout@v4
with:
path: src/electron
- name: Install Azure CLI
run: |
brew update && brew install azure-cli
- name: Setup Node.js/npm
uses: actions/setup-node@v3
with:
node-version: 20.11.x
cache: yarn
cache-dependency-path: src/electron/yarn.lock
- name: Install Dependencies
run: |
cd src/electron
node script/yarn install
- name: Get Depot Tools
timeout-minutes: 5
run: |
git clone --depth=1 https://chromium.googlesource.com/chromium/tools/depot_tools.git
if [ "`uname`" == "Darwin" ]; then
# remove ninjalog_uploader_wrapper.py from autoninja since we don't use it and it causes problems
sed -i '' '/ninjalog_uploader_wrapper.py/d' ./depot_tools/autoninja
else
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
git apply --3way ../src/electron/.github/workflows/config/gclient.diff
fi
# Ensure depot_tools does not update.
test -d depot_tools && cd depot_tools
touch .disable_auto_update
- name: Add Depot Tools to PATH
run: echo "$(pwd)/depot_tools" >> $GITHUB_PATH
- name: Generate DEPS Hash
run: |
node src/electron/script/generate-deps-hash.js && cat src/electron/.depshash-target
echo "DEPSHASH=v1-src-cache-$(shasum src/electron/.depshash | cut -f1 -d' ')" >> $GITHUB_ENV
- name: Download Src Cache
# The cache will always exist here as a result of the checkout job
# Either it was uploaded to Azure in the checkout job for this commit
# or it was uploaded in the checkout job for a previous commit.
run: |
az storage blob download \
--account-name $AZURE_STORAGE_ACCOUNT \
--account-key $AZURE_STORAGE_KEY \
--container-name $AZURE_STORAGE_CONTAINER_NAME \
--name $DEPSHASH \
--file $DEPSHASH.tar \
- name: Unzip and Ensure Src Cache
run: |
echo "Downloaded cache is $(du -sh $DEPSHASH.tar | cut -f1)"
mkdir temp-cache
tar -xvf $DEPSHASH.tar -C temp-cache
echo "Unzipped cache is $(du -sh temp-cache/src | cut -f1)"
if [ -d "temp-cache/src" ]; then
echo "Relocating Cache"
rm -rf src
mv temp-cache/src src
echo "Deleting zip file"
rm -rf $DEPSHASH.tar
fi
if [ ! -d "src/third_party/blink" ]; then
echo "Cache was not correctly restored - exiting"
exit 1
fi
echo "Wiping Electron Directory"
rm -rf src/electron
- name: Checkout Electron
uses: actions/checkout@v4
with:
path: src/electron
- name: Run Electron Only Hooks
run: |
echo "Running Electron Only Hooks"
gclient runhooks --spec="solutions=[{'name':'src/electron','url':None,'deps_file':'DEPS','custom_vars':{'process_deps':False},'managed':False}]"
- name: Regenerate DEPS Hash
run: |
(cd src/electron && git checkout .) && node src/electron/script/generate-deps-hash.js && cat src/electron/.depshash-target
echo "DEPSHASH=$(shasum src/electron/.depshash | cut -f1 -d' ')" >> $GITHUB_ENV
- name: Add CHROMIUM_BUILDTOOLS_PATH to env
run: echo "CHROMIUM_BUILDTOOLS_PATH=$(pwd)/src/buildtools" >> $GITHUB_ENV
- name: Fix Sync
# This step is required to correct for differences between "gclient sync"
# on Linux and the expected state on macOS. This requires:
# 1. Fixing Clang Install (wrong binary)
# 2. Fixing esbuild (wrong binary)
# 3. Fixing rustc (wrong binary)
# 4. Fixing gn (wrong binary)
# 5. Fix reclient (wrong binary)
# 6. Fixing dsymutil (wrong binary)
# 7. Ensuring we are using the correct ninja and adding it to PATH
# 8. Fixing angle (wrong remote)
run : |
SEDOPTION="-i ''"
rm -rf src/third_party/llvm-build
python3 src/tools/clang/scripts/update.py
echo 'infra/3pp/tools/esbuild/${platform}' `gclient getdep --deps-file=src/third_party/devtools-frontend/src/DEPS -r 'third_party/esbuild:infra/3pp/tools/esbuild/${platform}'` > esbuild_ensure_file
# Remove extra output from calling gclient getdep which always calls update_depot_tools
sed -i '' "s/Updating depot_tools... //g" esbuild_ensure_file
cipd ensure --root src/third_party/devtools-frontend/src/third_party/esbuild -ensure-file esbuild_ensure_file
rm -rf src/third_party/rust-toolchain
python3 src/tools/rust/update_rust.py
# Prevent calling gclient getdep which always calls update_depot_tools
echo 'gn/gn/mac-${arch}' `gclient getdep --deps-file=src/DEPS -r 'src/buildtools/mac:gn/gn/mac-${arch}'` > gn_ensure_file
sed -i '' "s/Updating depot_tools... //g" gn_ensure_file
cipd ensure --root src/buildtools/mac -ensure-file gn_ensure_file
# Prevent calling gclient getdep which always calls update_depot_tools
echo 'infra/rbe/client/${platform}' `gclient getdep --deps-file=src/DEPS -r 'src/buildtools/reclient:infra/rbe/client/${platform}'` > gn_ensure_file
sed -i '' "s/Updating depot_tools... //g" gn_ensure_file
cipd ensure --root src/buildtools/reclient -ensure-file gn_ensure_file
python3 src/buildtools/reclient_cfgs/configure_reclient_cfgs.py --rbe_instance "projects/rbe-chrome-untrusted/instances/default_instance" --reproxy_cfg_template reproxy.cfg.template --rewrapper_cfg_project "" --skip_remoteexec_cfg_fetch
DSYM_SHA_FILE=src/tools/clang/dsymutil/bin/dsymutil.arm64.sha1
python3 src/third_party/depot_tools/download_from_google_storage.py --no_resume --no_auth --bucket chromium-browser-clang -s $DSYM_SHA_FILE -o src/tools/clang/dsymutil/bin/dsymutil
echo 'infra/3pp/tools/ninja/${platform}' `gclient getdep --deps-file=src/DEPS -r 'src/third_party/ninja:infra/3pp/tools/ninja/${platform}'` > ninja_ensure_file
sed $SEDOPTION "s/Updating depot_tools... //g" ninja_ensure_file
cipd ensure --root src/third_party/ninja -ensure-file ninja_ensure_file
echo "$(pwd)/src/third_party/ninja" >> $GITHUB_PATH
cd src/third_party/angle
rm -f .git/objects/info/alternates
git remote set-url origin https://chromium.googlesource.com/angle/angle.git
cp .git/config .git/config.backup
git remote remove origin
mv .git/config.backup .git/config
git fetch
- name: Install build-tools & Setup RBE
run: |
echo "NUMBER_OF_NINJA_PROCESSES=200" >> $GITHUB_ENV
cd ~/.electron_build_tools
npx yarn --ignore-engines
# Pull down credential helper and print status
node -e "require('./src/utils/reclient.js').downloadAndPrepare({})"
HELPER=$(node -p "require('./src/utils/reclient.js').helperPath({})")
$HELPER login
echo 'RBE_service='`node -e "console.log(require('./src/utils/reclient.js').serviceAddress)"` >> $GITHUB_ENV
echo 'RBE_experimental_credentials_helper='`node -e "console.log(require('./src/utils/reclient.js').helperPath({}))"` >> $GITHUB_ENV
echo 'RBE_experimental_credentials_helper_args=print' >> $GITHUB_ENV
- name: Build Electron (darwin)
run: |
cd src/electron
# TODO(codebytere): remove this once we figure out why .git/packed-refs is initially missing
git pack-refs
cd ..
ulimit -n 10000
sudo launchctl limit maxfiles 65536 200000
NINJA_SUMMARIZE_BUILD=1 e build -j $NUMBER_OF_NINJA_PROCESSES
cp out/Default/.ninja_log out/electron_ninja_log
node electron/script/check-symlinks.js
# TODO(vertdinde): this step doesn't happen on MAS
# - name: Build Electron Node Headers (darwin)
# run: |
# cd src
# autoninja -C out/Default third_party/electron_node:overlapped-checker -j $NUMBER_OF_NINJA_PROCESSES
# Additional Targets: shell_browser_ui_unittests third_party/electron_node:headers third_party/electron_node:overlapped-checker electron:hunspell_dictionaries_zip
- name: Build Electron dist.zip (darwin)
run: |
cd src
e build electron:electron_dist_zip -j $NUMBER_OF_NINJA_PROCESSES
if [ "$CHECK_DIST_MANIFEST" == "1" ]; then
target_os=mac
target_cpu=arm64
electron/script/zip_manifests/check-zip-manifest.py out/Default/dist.zip electron/script/zip_manifests/dist_zip.$target_os.$target_cpu.manifest
fi
- name: Build Mksnapshot (darwin)
run: |
cd src
e build electron:electron_mksnapshot -j $NUMBER_OF_NINJA_PROCESSES
gn desc out/Default v8:run_mksnapshot_default args > out/Default/mksnapshot_args
# Remove unused args from mksnapshot_args
SEDOPTION="-i ''"
sed $SEDOPTION '/.*builtins-pgo/d' out/Default/mksnapshot_args
sed $SEDOPTION '/--turbo-profiling-input/d' out/Default/mksnapshot_args
sed $SEDOPTION '/The gn arg use_goma=true .*/d' out/Default/mksnapshot_args
e build electron:electron_mksnapshot_zip -j $NUMBER_OF_NINJA_PROCESSES
(cd out/Default; zip mksnapshot.zip mksnapshot_args gen/v8/embedded.S)
- name: Build Chromedriver (darwin)
run: |
cd src
e build electron:electron_chromedriver -j $NUMBER_OF_NINJA_PROCESSES
e build electron:electron_chromedriver_zip
# NOTE (vertedinde): We strip binaries/symbols on the Linux job, not the Mac job
- name: Generate & Zip Symbols (darwin)
run: |
# Generate breakpad symbols on release builds
if [ ${{ inputs.GENERATE_SYMBOLS }} == "true" ]; then
e build electron:electron_symbols
fi
cd src
export BUILD_PATH="$(pwd)/out/Default"
e build electron:licenses
e build electron:electron_version_file
if [ ${{ inputs.IS_RELEASE }} == "true" ]; then
DELETE_DSYMS_AFTER_ZIP=1 electron/script/zip-symbols.py -b $BUILD_PATH
else
electron/script/zip-symbols.py -b $BUILD_PATH
fi
# Only generate ffmpeg, hunspell, and typescript definitions for release builds
- name: Generate ffmpeg
run: |
if [ ${{ inputs.IS_RELEASE }} == "true" ]; then
cd src
gn gen out/ffmpeg --args="import(\"//electron/build/args/ffmpeg.gn\") use_remoteexec=true $GN_EXTRA_ARGS"
autoninja -C out/ffmpeg electron:electron_ffmpeg_zip -j $NUMBER_OF_NINJA_PROCESSES
fi
- name: Generate Hunspell Dictionaries
run: |
if [ ${{ inputs.IS_RELEASE }} == "true" ]; then
cd src
autoninja -C out/Default electron:hunspell_dictionaries_zip -j $NUMBER_OF_NINJA_PROCESSES
fi
- name: Generate TypeScript Definitions
run: |
if [ ${{ inputs.IS_RELEASE }} == "true" ]; then
cd src/electron
node script/yarn create-typescript-definitions
fi
# TODO(vertedinde): These uploads currently point to a different Azure bucket & GitHub Repo
- name: Publish Electron Dist
run: |
rm -rf src/out/Default/obj
cd src/electron
if [ ${{ inputs.UPLOAD_TO_STORAGE }} == "1" ]; then
echo 'Uploading Electron release distribution to Azure'
# script/release/uploaders/upload.py --verbose --upload_to_storage
else
echo 'Uploading Electron release distribution to GitHub releases'
# script/release/uploaders/upload.py --verbose
fi
# The current generated_artifacts_<< artifact.key >> name was taken from CircleCI
# to ensure we don't break anything, but we may be able to improve that.
- name: Move all Generated Artifacts to Upload Folder
run: ./src/electron/script/actions/move-artifacts.sh
- name: Upload Generated Artifacts
uses: actions/upload-artifact@v4
with:
name: generated_artifacts_darwin
path: ./generated_artifacts_darwin
- name: Persist Build Artifacts
uses: actions/cache/save@v4
with:
path: |
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/mac
src/buildtools/third_party/libc++
src/buildtools/third_party/libc++abi
src/third_party/libc++
src/third_party/libc++abi
src/out/Default/obj/buildtools/third_party
src/v8/tools/builtins-pgo
key: ${{ runner.os }}-build-artifacts-darwin-${{ github.sha }}
- name: Create MAS Config
run: |
mv src/electron/script/actions/evm.mas.json $HOME/.electron_build_tools/configs/evm.mas.json
echo "MAS_BUILD=true" >> $GITHUB_ENV
e use mas
- name: Build Electron (mas)
run: |
rm -rf "src/out/Default/Electron Framework.framework"
rm -rf src/out/Default/Electron*.app
cd src/electron
# TODO(codebytere): remove this once we figure out why .git/packed-refs is initially missing
git pack-refs
cd ..
ulimit -n 10000
sudo launchctl limit maxfiles 65536 200000
NINJA_SUMMARIZE_BUILD=1 e build -j $NUMBER_OF_NINJA_PROCESSES
cp out/Default/.ninja_log out/electron_ninja_log
node electron/script/check-symlinks.js
# Additional Targets: shell_browser_ui_unittests third_party/electron_node:headers third_party/electron_node:overlapped-checker electron:hunspell_dictionaries_zip
- name: Build Electron dist.zip (mas)
run: |
cd src
e build electron:electron_dist_zip -j $NUMBER_OF_NINJA_PROCESSES
if [ "$CHECK_DIST_MANIFEST" == "1" ]; then
target_os=mac_mas
target_cpu=arm64
electron/script/zip_manifests/check-zip-manifest.py out/Default/dist.zip electron/script/zip_manifests/dist_zip.$target_os.$target_cpu.manifest
fi
- name: Build Mksnapshot (mas)
run: |
cd src
e build electron:electron_mksnapshot -j $NUMBER_OF_NINJA_PROCESSES
gn desc out/Default v8:run_mksnapshot_default args > out/Default/mksnapshot_args
# Remove unused args from mksnapshot_args
SEDOPTION="-i ''"
sed $SEDOPTION '/.*builtins-pgo/d' out/Default/mksnapshot_args
sed $SEDOPTION '/--turbo-profiling-input/d' out/Default/mksnapshot_args
sed $SEDOPTION '/The gn arg use_goma=true .*/d' out/Default/mksnapshot_args
e build electron:electron_mksnapshot_zip -j $NUMBER_OF_NINJA_PROCESSES
(cd out/Default; zip mksnapshot.zip mksnapshot_args gen/v8/embedded.S)
- name: Build Chromedriver (mas)
run: |
cd src
e build electron:electron_chromedriver -j $NUMBER_OF_NINJA_PROCESSES
e build electron:electron_chromedriver_zip
- name: Build Node Headers
run: |
cd src
e build electron:node_headers
- name: Generate & Zip Symbols (mas)
run: |
if [ ${{ inputs.GENERATE_SYMBOLS }} == "true" ]; then
e build electron:electron_symbols
fi
cd src
export BUILD_PATH="$(pwd)/out/Default"
e build electron:licenses
e build electron:electron_version_file
if [ ${{ inputs.IS_RELEASE }} == "true" ]; then
DELETE_DSYMS_AFTER_ZIP=1 electron/script/zip-symbols.py -b $BUILD_PATH
else
electron/script/zip-symbols.py -b $BUILD_PATH
fi
- name: Move all Generated Artifacts to Upload Folder (mas)
run: ./src/electron/script/actions/move-artifacts.sh
- name: Upload Generated Artifacts
uses: actions/upload-artifact@v4
with:
name: generated_artifacts_mas
path: ./generated_artifacts_mas
- name: Persist Build Artifacts
uses: actions/cache/save@v4
with:
path: |
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/mac
src/buildtools/third_party/libc++
src/buildtools/third_party/libc++abi
src/third_party/libc++
src/third_party/libc++abi
src/out/Default/obj/buildtools/third_party
src/v8/tools/builtins-pgo
key: ${{ runner.os }}-build-artifacts-mas-${{ github.sha }}
test:
if: ${{ inputs.IS_RELEASE == false }}
runs-on: macos-13-xlarge
needs: build
strategy:
fail-fast: false
matrix:
build-type: [darwin, mas]
env:
BUILD_TYPE: ${{ matrix.build-type }}
steps:
- name: Load Build Tools
run: |
npm i -g @electron/build-tools
e init --root=$(pwd) --out=Default ${{ inputs.GN_BUILD_TYPE }}
- name: Checkout Electron
uses: actions/checkout@v4
with:
path: src/electron
- name: Setup Node.js/npm
uses: actions/setup-node@v3
with:
node-version: 20.11.x
cache: yarn
cache-dependency-path: src/electron/yarn.lock
- name: Install Dependencies
run: |
cd src/electron
node script/yarn install
- name: Get Depot Tools
timeout-minutes: 5
run: |
git clone --depth=1 https://chromium.googlesource.com/chromium/tools/depot_tools.git
if [ "`uname`" == "Darwin" ]; then
# remove ninjalog_uploader_wrapper.py from autoninja since we don't use it and it causes problems
sed -i '' '/ninjalog_uploader_wrapper.py/d' ./depot_tools/autoninja
else
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
git apply --3way ../src/electron/.github/workflows/config/gclient.diff
fi
# Ensure depot_tools does not update.
test -d depot_tools && cd depot_tools
touch .disable_auto_update
- name: Add Depot Tools to PATH
run: echo "$(pwd)/depot_tools" >> $GITHUB_PATH
- name: Download Generated Artifacts
uses: actions/download-artifact@v4
with:
name: generated_artifacts_${{ matrix.build-type }}
path: ./generated_artifacts_${{ matrix.build-type }}
- name: Restore Persisted Build Artifacts
uses: actions/cache/restore@v4
with:
path: |
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/mac
src/buildtools/third_party/libc++
src/buildtools/third_party/libc++abi
src/third_party/libc++
src/third_party/libc++abi
src/out/Default/obj/buildtools/third_party
src/v8/tools/builtins-pgo
key: ${{ runner.os }}-build-artifacts-${{ matrix.build-type }}-${{ github.sha }}
- name: Restore Generated Artifacts
run: ./src/electron/script/actions/restore-artifacts.sh
- name: Unzip Dist, Mksnapshot & Chromedriver
run: |
cd src/out/Default
unzip -:o dist.zip
unzip -:o chromedriver.zip
unzip -:o mksnapshot.zip
# - name: Import & Trust Self-Signed Codesigning Cert on MacOS
# run: |
# sudo security authorizationdb write com.apple.trust-settings.admin allow
# cd src/electron
# ./script/codesign/generate-identity.sh
- name: Run Electron Tests
env:
MOCHA_REPORTER: mocha-multi-reporters
ELECTRON_TEST_RESULTS_DIR: junit
MOCHA_MULTI_REPORTERS: mocha-junit-reporter, tap
ELECTRON_DISABLE_SECURITY_WARNINGS: 1
ELECTRON_SKIP_NATIVE_MODULE_TESTS: true
run: |
cd src/electron
node script/yarn test --runners=main --trace-uncaught --enable-logging

30
.github/workflows/macos-publish.yml vendored Normal file
View File

@@ -0,0 +1,30 @@
name: Publish MacOS
on:
workflow_dispatch:
inputs:
macos-publish-arch-limit:
description: 'The allowed arches for macos-publish'
type: choice
default: all
options: ["all", "osx-x64", "osx-arm64", "mas-x64", "mas-arm64"]
upload-to-storage:
description: 'Uploads to Azure storage'
required: false
default: '1'
type: string
run-macos-publish:
description: 'Run the publish jobs vs just the build jobs'
type: boolean
default: false
jobs:
publish:
uses: electron/electron/.github/workflows/macos-build.yml@gh-macos-publish
with:
IS_RELEASE: true
GN_CONFIG: //electron/build/args/release.gn
GN_BUILD_TYPE: release
GENERATE_SYMBOLS: true
UPLOAD_TO_STORAGE: ${{ inputs.upload-to-storage }}
secrets: inherit

View File

@@ -0,0 +1,26 @@
{
"root": "/Users/runner/work/electron/electron/",
"remotes": {
"electron": {
"origin": "https://github.com/electron/electron.git"
}
},
"gen": {
"args": [
"import(\"//electron/build/args/testing.gn\")",
"use_remoteexec = true",
"target_cpu = \"arm64\"",
"is_mas_build = true"
],
"out": "Default"
},
"env": {
"CHROMIUM_BUILDTOOLS_PATH": "/Users/runner/work/electron/electron/src/buildtools",
"GIT_CACHE_PATH": "/Users/runner/work/electron/electron/.git-cache"
},
"$schema": "file:///home/builduser/.electron_build_tools/evm-config.schema.json",
"configValidationLevel": "strict",
"reclient": "remote_exec",
"goma": "none",
"preserveXcode": 5
}

View File

@@ -0,0 +1,40 @@
#!/bin/sh
set -eo pipefail
if [ -z "$MAS_BUILD" ]; then
BUILD_TYPE="darwin"
else
BUILD_TYPE="mas"
fi
rm -rf generated_artifacts_${BUILD_TYPE}
mkdir generated_artifacts_${BUILD_TYPE}
mv_if_exist() {
if [ -f "$1" ] || [ -d "$1" ]; then
echo Storing $1
mv $1 generated_artifacts_${BUILD_TYPE}
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_${BUILD_TYPE}
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
cp_if_exist src/out/electron_ninja_log
cp_if_exist src/out/Default/.ninja_log

View File

@@ -0,0 +1,22 @@
#!/bin/sh
set -eo pipefail
mv_if_exist() {
if [ -f "generated_artifacts_${BUILD_TYPE}/$1" ] || [ -d "generated_artifacts_${BUILD_TYPE}/$1" ]; then
echo Restoring $1 to $2
mkdir -p $2
mv generated_artifacts_${BUILD_TYPE}/$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

View File

@@ -2,6 +2,8 @@
const { BlobServiceClient } = require('@azure/storage-blob');
const path = require('node:path');
// TODO(vertedinde): This variable is a test variable in GHA, sending test artifacts to a test account
// Change this to the real electron artifacts storage account when ready
const blobServiceClient = BlobServiceClient.fromConnectionString(process.env.ELECTRON_ARTIFACTS_BLOB_STORAGE);
const args = require('minimist')(process.argv.slice(2));

View File

@@ -17,6 +17,7 @@ const filePath = process.argv[2];
const fileName = process.argv[3];
const releaseId = parseInt(process.argv[4], 10);
const releaseVersion = process.argv[5];
const isGHActions = process.argv[6];
if (isNaN(releaseId)) {
throw new TypeError('Provided release ID was not a valid integer');
@@ -44,7 +45,9 @@ const getHeaders = (filePath: string, fileName: string) => {
};
const targetRepo = releaseVersion.indexOf('nightly') > 0 ? 'nightlies' : 'electron';
const uploadUrl = `https://uploads.github.com/repos/electron/${targetRepo}/releases/${releaseId}/assets{?name,label}`;
const uploadDefaultUrl = `https://uploads.github.com/repos/electron/${targetRepo}/releases/${releaseId}/assets{?name,label}`;
const uploadGHActionsTestUrl = `https://uploads.github.com/repos/electron/test-releases/releases/${releaseId}/assets{?name,label}`;
const uploadUrl = isGHActions ? uploadGHActionsTestUrl : uploadDefaultUrl;
let retry = 0;
function uploadToGitHub () {

View File

@@ -181,6 +181,9 @@ def parse_args():
parser.add_argument('--verbose',
action='store_true',
help='Mooooorreee logs')
parser.add_argument('-g', '--gh_actions',
help='Sets needed variables for GitHub Actions test runs',
action='store_true')
return parser.parse_args()
@@ -340,6 +343,10 @@ def upload_electron(release, file_path, args):
except NonZipFileError:
pass
is_gh_actions = False
if args.gh_actions:
is_gh_actions = True
# if upload_to_storage is set, skip github upload.
# todo (vertedinde): migrate this variable to upload_to_storage
if args.upload_to_storage:
@@ -349,18 +356,18 @@ def upload_electron(release, file_path, args):
return
# Upload the file.
upload_io_to_github(release, filename, file_path, args.version)
upload_io_to_github(release, filename, file_path, args.version, is_gh_actions)
# Upload the checksum file.
upload_sha256_checksum(args.version, file_path)
def upload_io_to_github(release, filename, filepath, version):
def upload_io_to_github(release, filename, filepath, version, is_gh_actions):
print(f'Uploading {filename} to GitHub')
script_path = os.path.join(
ELECTRON_DIR, 'script', 'release', 'uploaders', 'upload-to-github.ts')
with subprocess.Popen([TS_NODE, script_path, filepath,
filename, str(release['id']), version],
filename, str(release['id']), version, is_gh_actions],
stdout=subprocess.PIPE,
stderr=subprocess.STDOUT) as upload_process:
if is_verbose_mode():