
* build: test windows runner * build: try build windows on windows? * build: take win/cross changes * build: use bash as default shell always * build: configure git for windows build tools * build: bash as default * build: configure windows correctly * build: use sha1sum * build: force windows cipd init and python3 existence * just pain * build: restore cache on windows * build: use build-tools gclient * build: sync gclient vars to build windows job * build: output depshash for debugging * build: past sam was a silly goose * build: depshash logging * build: force lf endings for lock and DEPS * build: platform strings are hard * build: checkout on windows host * sup * no check * idk * sigh * ... * no double checkout * build: yolo some stuff * build: run gn-check for windows on linux hosts for speed * use container... * cry ? * build: e d * e d * no log * fix toolchain on windows cross check * build: use powershell to add mksnapshot_args * build: enable x86 and arm64 windows builds too * clean up * maybe not needed * build: keep action around for post step * build: configure git global on win * build: ia32 zip manifest * build: no patch depot_tools for tests * build: get arm64 windows closer to working * build: windows tar is ass * 32 bit on 32 bit * maybe bash * build: set up nodejs * correct windows sharding * fix some spec runner stuff * fix windows tests * overwrite -Force * sigh * screen res * wat * logs * ... more logs * line endings will be the death of me * remove 1080p force thing * vsctools + logging * disable some fullscreen tests on GHA * no progress * run all CI * install visual studio on arm64 * windows hax for non windows * maybe arm sdk * clean up depshash logic * build: use single check per platform * ensure clean args * fix loop * remove debug * update default build image sha for dispatch * plzzzz * one more try * arm64 vctools * sad * build: fix non-dispatch windows gn check * chore: debug datadog-ci location * chore: update build-tools for newer toolchain * chore: set path for datadog-ci * try this * chore: fixup gn check * fixup gn-check some more * fixup windows gn check * chore: fixup windows gn check * test: use cmd for Windows testing * fixup use cmd for testing on Windows * fixup windows GN check * fixup npm config arch for x86 * Can we set test files via powershell * fixup to set test files via powershell * fixup set test files via powershell * Don't check cross instance cache disk space on Windows * Use separate step to set env variables for testing * fixup Use separate step to set env variables for testing * fixup Use separate step to set env variables for testing * fixup Use separate step to set env variables for testing (AGAIN) * use powershell if in powershell * fixup use powershell if in powershell * chore: remove no longer needed changes to depot_tools xref: https://chromium-review.googlesource.com/c/chromium/tools/depot_tools/+/5669094 and https://chromium-review.googlesource.com/c/chromium/src/+/5844046 * chore: try using 7zip on Windows to extract tarball * Revert "chore: try using 7zip on Windows to extract tarball" This reverts commit c7432b6a37857fd0746b8f1776fbd1103dba0b85. * test: debug failing tests on GHA windows * fix: ftbfs when including simdjson in Node.js (cherry picked from commit 48e44c40d61b7aa843a990d4e0c8dec676b4ce8f) * chore: try to track down Windows testing hang * use correct timeout * try this * see if this helps * try to figure out why node is running * shard tests to try to narrow down WOA lockup * try to narrow down problem test * Narrow down blocking test more * do we need a combo to repro * see if this cleans up the tests * fixup navigator.usb test * remove logging from problematic tests * Revert "shard tests to try to narrow down WOA lockup" This reverts commit a1806583769678491814cb8b008131c32be4e8fb. * remove logging * debug keyboard test * add timeout for Windows since arm64 sometimes hangs * see if this helps * put back original timeout * try to use screenCapture to get screenshots of what is going on on WOA * try using electron screencapture to debug WOA hang * chore: turn off privacy experience * run screenshot on both shards * fixup screencap * try to narrow down hanging spec * chore: cleanup servers left open * cleanup tests * Revert "try to narrow down hanging spec" This reverts commit a0f959f5382f4012a9919ac535d42c5333eb7d5f. * cleanup test debugging * fixup extensions spec * cleanup unneeded items * run wtf with 2 shards instead of 6 * Revert "run wtf with 2 shards instead of 6" This reverts commit ca2d282129ee42c535d80f9876d6fa0dc6c08344. * debug windows version on woa * dump more info * Get detailed CPU info * revert debugging * use same args as AppVeyor WOA for GHA WOA * fixup use same args as AppVeyor WOA for GHA WOA * fixup use same args as AppVeyor WOA for GHA WOA * try to track down which tests trigger hang * one or more of these combinations should hang * break up web contents spec to find hang * further break down api-web-contents to find hang * test: ensure all webContents are closed * test: fix require is not defined error * see if api-web-contents spec is now good * test: ensure all webContents are closed * Revert "try to track down which tests trigger hang" This reverts commit 07298d6ffeb4873ef7615a8ec3d1a6696e354ff4. * chore: use alternate location for windows toolchain * Reapply "try to track down which tests trigger hang" This reverts commit 0321f76d01069ef325339b6fe6ed39700eae2b6b. * try to narrow down problem test * fix TEST_SHARD env var * no, really fix TEST_SHARD env var * see if this fixes it * test: cleanup any remaining windows and webcontents * see if new cleanup helps * dont destroy webcontents for now * fixup dont destroy webcontents for now * Only cleanup right before process.exit * see if this fixes the hang * actually destroy webcontents * Revert "Reapply "try to track down which tests trigger hang"" This reverts commit cdee7de049ce6bb5f67bbcc64882c56aa2c73027. * see if this helps * Revert "see if this helps" This reverts commit 9a15a69cf7dbc456db7a61efa5b6870535bae993. * Is it all about the web contents? * it is all about the webcontents but which one? * Narrow down problem webcontents test * try to speed up git install on WOA * disable problematic test on WOA * remove debugging * remove debugging from choco installs * Revert "disable problematic test on WOA" This reverts commit e060fb0839b73d53cfde1f8acdca634f8e267937. * Revert "remove debugging" This reverts commit f18dd8b1a555f56bb06d0ea996a6eff31b424bf1. * run against all the tests in the failing shard * don't run visibility tests first * remove debugging * 3 is a magic number * Revert "3 is a magic number" This reverts commit 36b91ccf9f03a4b34230cd69ceca482f7d8428c1. * match what Appveyor runs exactly * Revert "match what Appveyor runs exactly" This reverts commit 7260dd432216c62696e4bc864930f17c857eabbe. * chore: sort files alphabetically * find out what spec is leaving stuff open * chore: Checkout PR HEAD commit instead of merge commit * try using app.exit instead of process.exit * test: cleanup BrowserWindows and webContents * Revert "chore: sort files alphabetically" This reverts commit d9e217ffb1522076e150fce9e43a31bf56716acb. * chore: use win32 to match process.platform Needed for build-tools to download from PRs * chore: cache yarn dir * fixup cache yarn * fixup use win32 to match process.platform * fixup use win32 to match process.platform * fixup cache yarn * Add debugging for WOA hang * Add debugging for failing keyboard lock test * Revert "Add debugging for WOA hang" This reverts commit 8df03d568d15a269e4026140d1158e8cdf551dec. * try using process.kill * add more debugging to keyboard.lock test * Revert "Add debugging for failing keyboard lock test" * remove debugging * test: disable keyboard.lock on Windows * test: disable fullscreen tests on Windows * test: only force test suite exit on WOA * fixup test: only force test suite exit on WOA * cleanup tests * extract yarn caching/install to action * try using bash to run windows tests * remove left over debugging * standardize on 'win' for Windows builds * use 'x86' for arch for manifest files * fixup try using bash to run windows tests * fixup use 'x86' for arch for manifest files * standardize on 'win' for Windows builds * fixup use 'x86' for arch for manifest files * fixup try using bash to run windows tests --------- Co-authored-by: John Kleinschmidt <jkleinsc@electronjs.org> Co-authored-by: Charles Kerr <charles@charleskerr.com>
254 lines
11 KiB
YAML
254 lines
11 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
|
|
|
|
concurrency:
|
|
group: electron-test-${{ inputs.target-platform }}-${{ inputs.target-arch }}-${{ inputs.is-asan }}-${{ github.ref }}
|
|
cancel-in-progress: ${{ github.ref != 'refs/heads/main' && !endsWith(github.ref, '-x-y') }}
|
|
|
|
permissions:
|
|
contents: read
|
|
issues: read
|
|
pull-requests: read
|
|
|
|
env:
|
|
ELECTRON_OUT_DIR: Default
|
|
ELECTRON_RBE_JWT: ${{ secrets.ELECTRON_RBE_JWT }}
|
|
|
|
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: Install Git on Windows arm64 runners
|
|
if: ${{ inputs.target-arch == 'arm64' && inputs.target-platform == 'win' }}
|
|
shell: powershell
|
|
run: |
|
|
Set-ExecutionPolicy Bypass -Scope Process -Force
|
|
[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072
|
|
iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))
|
|
choco install -y --no-progress git.install --params "'/GitAndUnixToolsOnPath'"
|
|
choco install -y --no-progress git
|
|
choco install -y --no-progress python --version 3.11.9
|
|
choco install -y --no-progress visualstudio2022-workload-vctools --package-parameters "--add Microsoft.VisualStudio.Component.VC.Tools.ARM64"
|
|
echo "C:\Program Files\Git\cmd" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append
|
|
echo "C:\Program Files\Git\bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append
|
|
echo "C:\Python311" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append
|
|
- name: Setup Node.js/npm
|
|
if: ${{ inputs.target-platform == 'win' }}
|
|
uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6
|
|
with:
|
|
node-version: 20.11.x
|
|
- name: Add TCC permissions on macOS
|
|
if: ${{ inputs.target-platform == 'macos' }}
|
|
run: |
|
|
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=(
|
|
"'kTCCServiceMicrophone','/usr/local/opt/runner/provisioner/provisioner',1,2,4,1,NULL,NULL,0,'UNUSED',NULL,0,1687786159"
|
|
"'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"
|
|
)
|
|
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" ]; 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
|
|
- name: Checkout Electron
|
|
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
|
|
with:
|
|
path: src/electron
|
|
fetch-depth: 0
|
|
ref: ${{ github.event.pull_request.head.sha }}
|
|
- name: Install Dependencies
|
|
uses: ./src/electron/.github/actions/install-dependencies
|
|
- 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 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@fa0a91b85d4f404e444e00e005971372dc801d16
|
|
with:
|
|
name: generated_artifacts_${{ env.ARTIFACT_KEY }}
|
|
path: ./generated_artifacts_${{ matrix.build-type }}_${{ inputs.target-arch }}
|
|
- name: Download Src Artifacts
|
|
uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16
|
|
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
|
|
ELECTRON_SKIP_NATIVE_MODULE_TESTS: true
|
|
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@b4b15b8c7c6ac21ea08fcf65892d2ee8f75cf882
|
|
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
|