mirror of
https://github.com/electron/electron.git
synced 2026-01-08 23:18:06 -05:00
* chore: bump chromium in DEPS to 141.0.7352.0 * chore: update patches * 6830573: Revert 'Migrate WrappableWithNamedPropertyInterceptor to gin::Wrappable' | https://chromium-review.googlesource.com/c/chromium/src/+/6830573 * chore: bump chromium in DEPS to 141.0.7354.0 * chore: bump chromium in DEPS to 141.0.7356.0 * chore: bump chromium in DEPS to 141.0.7357.0 * chore: bump chromium in DEPS to 141.0.7359.0 * chore: bump chromium in DEPS to 141.0.7361.0 * 6838518: [Mac] Correctly deallocate sandbox error buffers and prevent crash resulting from nullptr assignment | https://chromium-review.googlesource.com/c/chromium/src/+/6838518 * 6850973: Reland "Use base::ByteCount in base::SysInfo." | https://chromium-review.googlesource.com/c/chromium/src/+/6850973 * 6506565: [FPF-CI] Create initial NoiseHash in the browser. | https://chromium-review.googlesource.com/c/chromium/src/+/6506565 * chore: update patches * fixup! 6850973: Reland "Use base::ByteCount in base::SysInfo." | https://chromium-review.googlesource.com/c/chromium/src/+/6850973 * fixup! 6506565: [FPF-CI] Create initial NoiseHash in the browser. | https://chromium-review.googlesource.com/c/chromium/src/+/6506565 * fix: unsafe buffer warning in fix_properly_honor_printing_page_ranges.patch * fix: FTBFS in src_remove_dependency_on_wrapper-descriptor-based_cppheap.patch This change should be upstreamed. Fixes this error: ../../third_party/electron_node/src/env.cc:606:3: error: no matching function for call to 'Wrap' 606 | v8::Object::Wrap<v8::CppHeapPointerTag::kDefaultTag>( | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ../../v8/include/v8-object.h:1076:14: note: candidate function template not viable: cannot convert argument of incomplete type 'void *' to 'v8::Object::Wrappable *' for 3rd argument 1076 | void Object::Wrap(v8::Isolate* isolate, const v8::Local<v8::Object>& wrapper, | ^ 1077 | v8::Object::Wrappable* wrappable) { | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ../../v8/include/v8-object.h:1084:14: note: candidate function template not viable: no known conversion from 'Local<Object>' to 'const PersistentBase<Object>' for 2nd argument 1084 | void Object::Wrap(v8::Isolate* isolate, const PersistentBase<Object>& wrapper, | ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ../../v8/include/v8-object.h:1093:14: note: candidate function template not viable: no known conversion from 'Local<Object>' to 'const BasicTracedReference<Object>' for 2nd argument 1093 | void Object::Wrap(v8::Isolate* isolate, | ^ 1094 | const BasicTracedReference<Object>& wrapper, | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1 error generated. * [v8-init] Access crash key only from main thread | https://chromium-review.googlesource.com/c/chromium/src/+/6827167 * chore: e patches all * chore: remove chore_restore_some_deprecated_wrapper_utility_in_gin.patch from patches this remove line got re-added when rebasing roller/chromium/main * chore: e patches all * fix: include base/time/time.h when using base::Time * chore: update patches * Make --host-rules an alias for --host-resolver-rules. Refs https://chromium-review.googlesource.com/c/chromium/src/+/4867872 * ci: update BUILD_TOOLS_SHA Refs https://github.com/electron/build-tools/pull/746 * [Fontations] Remove Fontations suffix from font names Refs https://chromium-review.googlesource.com/c/chromium/src/+/6835930 * temp: debug macOS addon build failure * Revert "temp: debug macOS addon build failure" This reverts commit 40bc8abab65dc83e17c4ab97cb6e7522a193fb44. * test: run tests with Xcode 16.4 * ci: fix tccdb update for macOS 15 * spec: disable opening external application for loadURL on macOS opening unknown external application will bring up dialog to choose apps from application store which will break our other test suites that want to capture screen for pixel matching. The loadURL spec that tests bad-scheme://foo is sufficient that we hit the permission handler for openExternal since at that point we already know the runtime gave up on handling the scheme. * chore: rebase patches * chore: disable codesiging tests * ci: update ScreenCaptureApprovals.plist for /bin/bash * ci: try updating tcc permissions * ci: update TCC permissions Refs https://www.rainforestqa.com/blog/macos-tcc-db-deep-dive * chore: test with 1st quadrant of the window * chore: adjust for macOS 15 menubar height --------- Co-authored-by: electron-roller[bot] <84116207+electron-roller[bot]@users.noreply.github.com> Co-authored-by: Keeley Hammond <khammond@slack-corp.com> Co-authored-by: Keeley Hammond <vertedinde@electronjs.org> Co-authored-by: Charles Kerr <charles@charleskerr.com> Co-authored-by: deepak1556 <hop2deep@gmail.com> Co-authored-by: John Kleinschmidt <jkleinsc@electronjs.org>
280 lines
12 KiB
YAML
280 lines
12 KiB
YAML
name: Pipeline Segment - Electron Test
|
|
|
|
on:
|
|
workflow_call:
|
|
inputs:
|
|
target-platform:
|
|
type: string
|
|
description: 'Platform to run on, can be macos, win or linux'
|
|
required: true
|
|
target-arch:
|
|
type: string
|
|
description: 'Arch to build for, can be x64, arm64 or arm'
|
|
required: true
|
|
test-runs-on:
|
|
type: string
|
|
description: 'What host to run the tests on'
|
|
required: true
|
|
test-container:
|
|
type: string
|
|
description: 'JSON container information for aks runs-on'
|
|
required: false
|
|
default: '{"image":null}'
|
|
is-asan:
|
|
description: 'Building the Address Sanitizer (ASan) Linux build'
|
|
required: false
|
|
type: boolean
|
|
default: false
|
|
enable-ssh:
|
|
description: 'Enable SSH debugging'
|
|
required: false
|
|
type: boolean
|
|
default: false
|
|
|
|
concurrency:
|
|
group: electron-test-${{ inputs.target-platform }}-${{ inputs.target-arch }}-${{ inputs.is-asan }}-${{ github.ref_protected == true && github.run_id || github.ref }}
|
|
cancel-in-progress: ${{ github.ref_protected != true }}
|
|
|
|
permissions:
|
|
contents: read
|
|
issues: read
|
|
pull-requests: read
|
|
|
|
env:
|
|
CHROMIUM_GIT_COOKIE: ${{ secrets.CHROMIUM_GIT_COOKIE }}
|
|
CHROMIUM_GIT_COOKIE_WINDOWS_STRING: ${{ secrets.CHROMIUM_GIT_COOKIE_WINDOWS_STRING }}
|
|
ELECTRON_OUT_DIR: Default
|
|
ELECTRON_RBE_JWT: ${{ secrets.ELECTRON_RBE_JWT }}
|
|
ACTIONS_STEP_DEBUG: ${{ secrets.ACTIONS_STEP_DEBUG }}
|
|
|
|
jobs:
|
|
test:
|
|
defaults:
|
|
run:
|
|
shell: bash
|
|
runs-on: ${{ inputs.test-runs-on }}
|
|
container: ${{ fromJSON(inputs.test-container) }}
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
build-type: ${{ inputs.target-platform == 'macos' && fromJSON('["darwin","mas"]') || (inputs.target-platform == 'win' && fromJSON('["win"]') || fromJSON('["linux"]')) }}
|
|
shard: ${{ inputs.target-platform == 'linux' && fromJSON('[1, 2, 3]') || fromJSON('[1, 2]') }}
|
|
env:
|
|
BUILD_TYPE: ${{ matrix.build-type }}
|
|
TARGET_ARCH: ${{ inputs.target-arch }}
|
|
ARTIFACT_KEY: ${{ matrix.build-type }}_${{ inputs.target-arch }}
|
|
steps:
|
|
- name: Fix node20 on arm32 runners
|
|
if: ${{ inputs.target-arch == 'arm' && inputs.target-platform == 'linux' }}
|
|
run: |
|
|
cp $(which node) /mnt/runner-externals/node20/bin/
|
|
- name: Setup Node.js/npm
|
|
if: ${{ inputs.target-platform == 'win' }}
|
|
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020
|
|
with:
|
|
node-version: 20.19.x
|
|
- name: Add TCC permissions on macOS
|
|
if: ${{ inputs.target-platform == 'macos' }}
|
|
run: |
|
|
epochdate=$(($(date +'%s * 1000 + %-N / 1000000')))
|
|
configure_user_tccdb () {
|
|
local values=$1
|
|
local dbPath="$HOME/Library/Application Support/com.apple.TCC/TCC.db"
|
|
local sqlQuery="INSERT OR REPLACE INTO access VALUES($values);"
|
|
sqlite3 "$dbPath" "$sqlQuery"
|
|
}
|
|
|
|
configure_sys_tccdb () {
|
|
local values=$1
|
|
local dbPath="/Library/Application Support/com.apple.TCC/TCC.db"
|
|
local sqlQuery="INSERT OR REPLACE INTO access VALUES($values);"
|
|
sudo sqlite3 "$dbPath" "$sqlQuery"
|
|
}
|
|
|
|
userValuesArray=(
|
|
"'kTCCServiceCamera','/usr/local/opt/runner/provisioner/provisioner',1,2,4,1,NULL,NULL,0,'UNUSED',NULL,0,1687786159"
|
|
"'kTCCServiceBluetoothAlways','/usr/local/opt/runner/provisioner/provisioner',1,2,4,1,NULL,NULL,0,'UNUSED',NULL,0,1687786159"
|
|
"'kTCCServiceAppleEvents','/usr/local/opt/runner/provisioner/provisioner',1,2,4,1,NULL,NULL,0,'UNUSED',NULL,0,1687786159"
|
|
"'kTCCServiceCamera','/opt/hca/hosted-compute-agent',1,2,4,1,NULL,NULL,0,'UNUSED',NULL,0,1687786159"
|
|
"'kTCCServiceBluetoothAlways','/opt/hca/hosted-compute-agent',1,2,4,1,NULL,NULL,0,'UNUSED',NULL,0,1687786159"
|
|
"'kTCCServiceScreenCapture','/bin/bash',1,2,3,1,NULL,NULL,NULL,'UNUSED',NULL,0,$epochdate"
|
|
)
|
|
for values in "${userValuesArray[@]}"; do
|
|
# Sonoma and higher have a few extra values
|
|
# Ref: https://github.com/actions/runner-images/blob/main/images/macos/scripts/build/configure-tccdb-macos.sh
|
|
if [ "$OSTYPE" = "darwin23" ] || [ "$OSTYPE" = "darwin24" ]; then
|
|
configure_user_tccdb "$values,NULL,NULL,'UNUSED',${values##*,}"
|
|
configure_sys_tccdb "$values,NULL,NULL,'UNUSED',${values##*,}"
|
|
else
|
|
configure_user_tccdb "$values"
|
|
configure_sys_tccdb "$values"
|
|
fi
|
|
done
|
|
|
|
# Ref: https://github.com/getsentry/sentry-cocoa/blob/main/scripts/ci-enable-permissions.sh
|
|
if [ "$OSTYPE" = "darwin24" ]; then
|
|
defaults write ~/Library/Group\ Containers/group.com.apple.replayd/ScreenCaptureApprovals.plist "/bin/bash" -date "3024-09-23 12:00:00 +0000"
|
|
fi
|
|
- name: Turn off the unexpectedly quit dialog on macOS
|
|
if: ${{ inputs.target-platform == 'macos' }}
|
|
run: defaults write com.apple.CrashReporter DialogType server
|
|
- name: Set xcode to 16.4
|
|
if: ${{ inputs.target-platform == 'macos' }}
|
|
run: sudo xcode-select --switch /Applications/Xcode_16.4.app
|
|
- name: Checkout Electron
|
|
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
|
|
with:
|
|
path: src/electron
|
|
fetch-depth: 0
|
|
ref: ${{ github.event.pull_request.head.sha }}
|
|
- name: Setup SSH Debugging
|
|
if: ${{ inputs.target-platform == 'macos' && (inputs.enable-ssh || env.ACTIONS_STEP_DEBUG == 'true') }}
|
|
uses: ./src/electron/.github/actions/ssh-debug
|
|
with:
|
|
tunnel: 'true'
|
|
env:
|
|
CLOUDFLARE_TUNNEL_CERT: ${{ secrets.CLOUDFLARE_TUNNEL_CERT }}
|
|
CLOUDFLARE_TUNNEL_HOSTNAME: ${{ vars.CLOUDFLARE_TUNNEL_HOSTNAME }}
|
|
CLOUDFLARE_USER_CA_CERT: ${{ secrets.CLOUDFLARE_USER_CA_CERT }}
|
|
AUTHORIZED_USERS: ${{ secrets.SSH_DEBUG_AUTHORIZED_USERS }}
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
- name: Install Dependencies
|
|
uses: ./src/electron/.github/actions/install-dependencies
|
|
- name: Set Chromium Git Cookie
|
|
uses: ./src/electron/.github/actions/set-chromium-cookie
|
|
- name: Get Depot Tools
|
|
timeout-minutes: 5
|
|
run: |
|
|
git config --global core.filemode false
|
|
git config --global core.autocrlf false
|
|
git config --global branch.autosetuprebase always
|
|
git config --global core.fscache true
|
|
git config --global core.longpaths true
|
|
git config --global core.preloadindex true
|
|
git config --global core.longpaths true
|
|
git clone --filter=tree:0 https://chromium.googlesource.com/chromium/tools/depot_tools.git
|
|
# 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: Load ASan specific environment variables
|
|
if: ${{ inputs.is-asan == true }}
|
|
run: |
|
|
echo "ARTIFACT_KEY=${{ matrix.build-type }}_${{ inputs.target-arch }}_asan" >> $GITHUB_ENV
|
|
echo "DISABLE_CRASH_REPORTER_TESTS=true" >> $GITHUB_ENV
|
|
echo "IS_ASAN=true" >> $GITHUB_ENV
|
|
- name: Download Generated Artifacts
|
|
uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0
|
|
with:
|
|
name: generated_artifacts_${{ env.ARTIFACT_KEY }}
|
|
path: ./generated_artifacts_${{ matrix.build-type }}_${{ inputs.target-arch }}
|
|
- name: Download Src Artifacts
|
|
uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0
|
|
with:
|
|
name: src_artifacts_${{ env.ARTIFACT_KEY }}
|
|
path: ./src_artifacts_${{ matrix.build-type }}_${{ inputs.target-arch }}
|
|
- name: Restore Generated Artifacts
|
|
run: ./src/electron/script/actions/restore-artifacts.sh
|
|
- name: Unzip Dist, Mksnapshot & Chromedriver (win)
|
|
if: ${{ inputs.target-platform == 'win' }}
|
|
shell: powershell
|
|
run: |
|
|
Set-ExecutionPolicy Bypass -Scope Process -Force
|
|
cd src/out/Default
|
|
Expand-Archive -Force dist.zip -DestinationPath ./
|
|
Expand-Archive -Force chromedriver.zip -DestinationPath ./
|
|
Expand-Archive -Force mksnapshot.zip -DestinationPath ./
|
|
- name: Unzip Dist, Mksnapshot & Chromedriver (unix)
|
|
if: ${{ inputs.target-platform != 'win' }}
|
|
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
|
|
# if: ${{ inputs.target-platform == 'macos' && inputs.target-arch == 'x64' }}
|
|
# run: |
|
|
# sudo security authorizationdb write com.apple.trust-settings.admin allow
|
|
# cd src/electron
|
|
# ./script/codesign/generate-identity.sh
|
|
- name: Install Datadog CLI
|
|
run: |
|
|
cd src/electron
|
|
node script/yarn global add @datadog/datadog-ci
|
|
- name: Run Electron Tests
|
|
shell: bash
|
|
env:
|
|
MOCHA_REPORTER: mocha-multi-reporters
|
|
MOCHA_MULTI_REPORTERS: mocha-junit-reporter, tap
|
|
ELECTRON_DISABLE_SECURITY_WARNINGS: 1
|
|
DISPLAY: ':99.0'
|
|
NPM_CONFIG_MSVS_VERSION: '2022'
|
|
run: |
|
|
cd src/electron
|
|
export ELECTRON_TEST_RESULTS_DIR=`pwd`/junit
|
|
# Get which tests are on this shard
|
|
tests_files=$(node script/split-tests ${{ matrix.shard }} ${{ inputs.target-platform == 'linux' && 3 || 2 }})
|
|
|
|
# Run tests
|
|
if [ "${{ inputs.target-platform }}" != "linux" ]; then
|
|
echo "About to start tests"
|
|
if [ "${{ inputs.target-platform }}" = "win" ]; then
|
|
if [ "${{ inputs.target-arch }}" = "x86" ]; then
|
|
export npm_config_arch="ia32"
|
|
fi
|
|
if [ "${{ inputs.target-arch }}" = "arm64" ]; then
|
|
export ELECTRON_FORCE_TEST_SUITE_EXIT="true"
|
|
fi
|
|
fi
|
|
node script/yarn test --runners=main --trace-uncaught --enable-logging --files $tests_files
|
|
else
|
|
chown :builduser .. && chmod g+w ..
|
|
chown -R :builduser . && chmod -R g+w .
|
|
chmod 4755 ../out/Default/chrome-sandbox
|
|
runuser -u builduser -- git config --global --add safe.directory $(pwd)
|
|
if [ "${{ inputs.is-asan }}" == "true" ]; then
|
|
cd ..
|
|
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)"
|
|
cd electron
|
|
runuser -u builduser -- xvfb-run script/actions/run-tests.sh script/yarn test --runners=main --trace-uncaught --enable-logging --files $tests_files | $ASAN_SYMBOLIZE
|
|
else
|
|
runuser -u builduser -- xvfb-run script/actions/run-tests.sh script/yarn test --runners=main --trace-uncaught --enable-logging --files $tests_files
|
|
fi
|
|
fi
|
|
- name: Upload Test results to Datadog
|
|
env:
|
|
DD_ENV: ci
|
|
DD_SERVICE: electron
|
|
DD_API_KEY: ${{ secrets.DD_API_KEY }}
|
|
DD_CIVISIBILITY_LOGS_ENABLED: true
|
|
DD_TAGS: "os.architecture:${{ inputs.target-arch }},os.family:${{ inputs.target-platform }},os.platform:${{ inputs.target-platform }},asan:${{ inputs.is-asan }}"
|
|
run: |
|
|
if ! [ -z $DD_API_KEY ] && [ -f src/electron/junit/test-results-main.xml ]; then
|
|
export DATADOG_PATH=`node src/electron/script/yarn global bin`
|
|
$DATADOG_PATH/datadog-ci junit upload src/electron/junit/test-results-main.xml
|
|
fi
|
|
if: always() && !cancelled()
|
|
- name: Upload Test Artifacts
|
|
if: always() && !cancelled()
|
|
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02
|
|
with:
|
|
name: test_artifacts_${{ env.ARTIFACT_KEY }}_${{ matrix.shard }}
|
|
path: src/electron/spec/artifacts
|
|
if-no-files-found: ignore
|
|
- name: Wait for active SSH sessions
|
|
if: always() && !cancelled()
|
|
shell: bash
|
|
run: |
|
|
while [ -f /var/.ssh-lock ]
|
|
do
|
|
sleep 60
|
|
done
|