mirror of
https://github.com/electron/electron.git
synced 2026-02-26 03:01:17 -05:00
Compare commits
3 Commits
dawn-patch
...
refactor/r
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
77455f478b | ||
|
|
8874cfae96 | ||
|
|
0e043cd3cb |
@@ -2,7 +2,7 @@ version: '3'
|
|||||||
|
|
||||||
services:
|
services:
|
||||||
buildtools:
|
buildtools:
|
||||||
image: ghcr.io/electron/devcontainer:933c7d6ff6802706875270bec2e3c891cf8add3f
|
image: ghcr.io/electron/devcontainer:424eedbf277ad9749ffa9219068aa72ed4a5e373
|
||||||
|
|
||||||
volumes:
|
volumes:
|
||||||
- ..:/workspaces/gclient/src/electron:cached
|
- ..:/workspaces/gclient/src/electron:cached
|
||||||
|
|||||||
@@ -58,13 +58,13 @@ if [ ! -f $buildtools/configs/evm.testing.json ]; then
|
|||||||
},
|
},
|
||||||
\"\$schema\": \"file:///home/builduser/.electron_build_tools/evm-config.schema.json\",
|
\"\$schema\": \"file:///home/builduser/.electron_build_tools/evm-config.schema.json\",
|
||||||
\"configValidationLevel\": \"strict\",
|
\"configValidationLevel\": \"strict\",
|
||||||
\"remoteBuild\": \"reclient\",
|
\"reclient\": \"$1\",
|
||||||
\"preserveSDK\": 5
|
\"preserveXcode\": 5
|
||||||
}
|
}
|
||||||
" >$buildtools/configs/evm.testing.json
|
" >$buildtools/configs/evm.testing.json
|
||||||
}
|
}
|
||||||
|
|
||||||
write_config
|
write_config remote_exec
|
||||||
|
|
||||||
e use testing
|
e use testing
|
||||||
else
|
else
|
||||||
|
|||||||
10
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
10
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
@@ -58,16 +58,6 @@ body:
|
|||||||
label: Last Known Working Electron version
|
label: Last Known Working Electron version
|
||||||
description: What is the last version of Electron this worked in, if applicable?
|
description: What is the last version of Electron this worked in, if applicable?
|
||||||
placeholder: 16.0.0
|
placeholder: 16.0.0
|
||||||
- type: dropdown
|
|
||||||
attributes:
|
|
||||||
label: Does the issue also appear in Chromium / Google Chrome?
|
|
||||||
description: If it does, please report the issue in the [Chromium issue tracker](https://issues.chromium.org/issues), not against Electron. Electron will inherit the fix once Chromium resolves the issue.
|
|
||||||
options:
|
|
||||||
- I don't know how to test
|
|
||||||
- "Yes"
|
|
||||||
- "No"
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
- type: textarea
|
- type: textarea
|
||||||
attributes:
|
attributes:
|
||||||
label: Expected Behavior
|
label: Expected Behavior
|
||||||
|
|||||||
142
.github/actions/build-electron/action.yml
vendored
142
.github/actions/build-electron/action.yml
vendored
@@ -17,6 +17,9 @@ inputs:
|
|||||||
is-release:
|
is-release:
|
||||||
description: 'Is release build'
|
description: 'Is release build'
|
||||||
required: true
|
required: true
|
||||||
|
strip-binaries:
|
||||||
|
description: 'Strip binaries (Linux only)'
|
||||||
|
required: false
|
||||||
generate-symbols:
|
generate-symbols:
|
||||||
description: 'Generate symbols'
|
description: 'Generate symbols'
|
||||||
required: true
|
required: true
|
||||||
@@ -35,17 +38,10 @@ runs:
|
|||||||
run: |
|
run: |
|
||||||
GN_APPENDED_ARGS="$GN_EXTRA_ARGS target_cpu=\"x64\" v8_snapshot_toolchain=\"//build/toolchain/mac:clang_x64\""
|
GN_APPENDED_ARGS="$GN_EXTRA_ARGS target_cpu=\"x64\" v8_snapshot_toolchain=\"//build/toolchain/mac:clang_x64\""
|
||||||
echo "GN_EXTRA_ARGS=$GN_APPENDED_ARGS" >> $GITHUB_ENV
|
echo "GN_EXTRA_ARGS=$GN_APPENDED_ARGS" >> $GITHUB_ENV
|
||||||
- name: Set GN_EXTRA_ARGS for Windows
|
|
||||||
shell: bash
|
|
||||||
if: ${{inputs.target-arch != 'x64' && inputs.target-platform == 'win' }}
|
|
||||||
run: |
|
|
||||||
GN_APPENDED_ARGS="$GN_EXTRA_ARGS target_cpu=\"${{ inputs.target-arch }}\""
|
|
||||||
echo "GN_EXTRA_ARGS=$GN_APPENDED_ARGS" >> $GITHUB_ENV
|
|
||||||
- name: Add Clang problem matcher
|
- name: Add Clang problem matcher
|
||||||
shell: bash
|
shell: bash
|
||||||
run: echo "::add-matcher::src/electron/.github/problem-matchers/clang.json"
|
run: echo "::add-matcher::src/electron/.github/problem-matchers/clang.json"
|
||||||
- name: Build Electron ${{ inputs.step-suffix }}
|
- name: Build Electron ${{ inputs.step-suffix }}
|
||||||
if: ${{ inputs.target-platform != 'win' }}
|
|
||||||
shell: bash
|
shell: bash
|
||||||
run: |
|
run: |
|
||||||
rm -rf "src/out/Default/Electron Framework.framework"
|
rm -rf "src/out/Default/Electron Framework.framework"
|
||||||
@@ -61,51 +57,22 @@ runs:
|
|||||||
sudo launchctl limit maxfiles 65536 200000
|
sudo launchctl limit maxfiles 65536 200000
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ "${{ inputs.is-release }}" = "true" ]; then
|
NINJA_SUMMARIZE_BUILD=1 e build -j $NUMBER_OF_NINJA_PROCESSES
|
||||||
NINJA_SUMMARIZE_BUILD=1 e build --target electron:release_build
|
|
||||||
else
|
|
||||||
NINJA_SUMMARIZE_BUILD=1 e build --target electron:testing_build
|
|
||||||
fi
|
|
||||||
cp out/Default/.ninja_log out/electron_ninja_log
|
cp out/Default/.ninja_log out/electron_ninja_log
|
||||||
node electron/script/check-symlinks.js
|
node electron/script/check-symlinks.js
|
||||||
|
- name: Strip Electron Binaries ${{ inputs.step-suffix }}
|
||||||
# Upload build stats to Datadog
|
shell: bash
|
||||||
if ! [ -z $DD_API_KEY ]; then
|
if: ${{ inputs.strip-binaries == 'true' }}
|
||||||
npx node electron/script/build-stats.mjs out/Default/siso.INFO --upload-stats || true
|
|
||||||
else
|
|
||||||
echo "Skipping build-stats.mjs upload because DD_API_KEY is not set"
|
|
||||||
fi
|
|
||||||
- name: Build Electron (Windows) ${{ inputs.step-suffix }}
|
|
||||||
if: ${{ inputs.target-platform == 'win' }}
|
|
||||||
shell: powershell
|
|
||||||
run: |
|
run: |
|
||||||
cd src\electron
|
cd src
|
||||||
git pack-refs
|
electron/script/copy-debug-symbols.py --target-cpu="${{ inputs.target-arch }}" --out-dir=out/Default/debug --compress
|
||||||
cd ..
|
electron/script/strip-binaries.py --target-cpu="${{ inputs.target-arch }}" --verbose
|
||||||
|
electron/script/add-debug-link.py --target-cpu="${{ inputs.target-arch }}" --debug-dir=out/Default/debug
|
||||||
$env:NINJA_SUMMARIZE_BUILD = 1
|
- name: Build Electron dist.zip ${{ inputs.step-suffix }}
|
||||||
if ("${{ inputs.is-release }}" -eq "true") {
|
|
||||||
e build --target electron:release_build
|
|
||||||
} else {
|
|
||||||
e build --target electron:testing_build
|
|
||||||
}
|
|
||||||
Copy-Item out\Default\.ninja_log out\electron_ninja_log
|
|
||||||
node electron\script\check-symlinks.js
|
|
||||||
|
|
||||||
# Upload build stats to Datadog
|
|
||||||
if ($env:DD_API_KEY) {
|
|
||||||
try {
|
|
||||||
npx node electron\script\build-stats.mjs out\Default\siso.exe.INFO --upload-stats
|
|
||||||
} catch {
|
|
||||||
Write-Host "Build stats upload failed, continuing..."
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
Write-Host "Skipping build-stats.mjs upload because DD_API_KEY is not set"
|
|
||||||
}
|
|
||||||
- name: Verify dist.zip ${{ inputs.step-suffix }}
|
|
||||||
shell: bash
|
shell: bash
|
||||||
run: |
|
run: |
|
||||||
cd src
|
cd src
|
||||||
|
e build --target electron:electron_dist_zip -j $NUMBER_OF_NINJA_PROCESSES -d explain
|
||||||
if [ "${{ inputs.is-asan }}" != "true" ]; then
|
if [ "${{ inputs.is-asan }}" != "true" ]; then
|
||||||
target_os=${{ inputs.target-platform == 'macos' && 'mac' || inputs.target-platform }}
|
target_os=${{ inputs.target-platform == 'macos' && 'mac' || inputs.target-platform }}
|
||||||
if [ "${{ inputs.artifact-platform }}" = "mas" ]; then
|
if [ "${{ inputs.artifact-platform }}" = "mas" ]; then
|
||||||
@@ -113,10 +80,11 @@ runs:
|
|||||||
fi
|
fi
|
||||||
electron/script/zip_manifests/check-zip-manifest.py out/Default/dist.zip electron/script/zip_manifests/dist_zip.$target_os.${{ inputs.target-arch }}.manifest
|
electron/script/zip_manifests/check-zip-manifest.py out/Default/dist.zip electron/script/zip_manifests/dist_zip.$target_os.${{ inputs.target-arch }}.manifest
|
||||||
fi
|
fi
|
||||||
- name: Fixup Mksnapshot ${{ inputs.step-suffix }}
|
- name: Build Mksnapshot ${{ inputs.step-suffix }}
|
||||||
shell: bash
|
shell: bash
|
||||||
run: |
|
run: |
|
||||||
cd src
|
cd src
|
||||||
|
e build --target electron:electron_mksnapshot -j $NUMBER_OF_NINJA_PROCESSES
|
||||||
ELECTRON_DEPOT_TOOLS_DISABLE_LOG=1 e d gn desc out/Default v8:run_mksnapshot_default args > out/Default/mksnapshot_args
|
ELECTRON_DEPOT_TOOLS_DISABLE_LOG=1 e d gn desc out/Default v8:run_mksnapshot_default args > out/Default/mksnapshot_args
|
||||||
# Remove unused args from mksnapshot_args
|
# Remove unused args from mksnapshot_args
|
||||||
SEDOPTION="-i"
|
SEDOPTION="-i"
|
||||||
@@ -126,6 +94,20 @@ runs:
|
|||||||
sed $SEDOPTION '/.*builtins-pgo/d' out/Default/mksnapshot_args
|
sed $SEDOPTION '/.*builtins-pgo/d' out/Default/mksnapshot_args
|
||||||
sed $SEDOPTION '/--turbo-profiling-input/d' out/Default/mksnapshot_args
|
sed $SEDOPTION '/--turbo-profiling-input/d' out/Default/mksnapshot_args
|
||||||
|
|
||||||
|
if [ "${{ inputs.target-platform }}" = "linux" ]; then
|
||||||
|
if [ "${{ inputs.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 [ "${{ inputs.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
|
||||||
|
|
||||||
|
e build --target electron:electron_mksnapshot_zip -j $NUMBER_OF_NINJA_PROCESSES
|
||||||
if [ "${{ inputs.target-platform }}" = "win" ]; then
|
if [ "${{ inputs.target-platform }}" = "win" ]; then
|
||||||
cd out/Default
|
cd out/Default
|
||||||
powershell Compress-Archive -update mksnapshot_args mksnapshot.zip
|
powershell Compress-Archive -update mksnapshot_args mksnapshot.zip
|
||||||
@@ -159,15 +141,13 @@ runs:
|
|||||||
shell: bash
|
shell: bash
|
||||||
run: |
|
run: |
|
||||||
cd src
|
cd src
|
||||||
|
e build --target electron:electron_chromedriver -j $NUMBER_OF_NINJA_PROCESSES
|
||||||
e build --target electron:electron_chromedriver_zip
|
e build --target electron:electron_chromedriver_zip
|
||||||
|
- name: Build Node.js headers ${{ inputs.step-suffix }}
|
||||||
if [ "${{ inputs.is-asan }}" != "true" ]; then
|
shell: bash
|
||||||
target_os=${{ inputs.target-platform == 'macos' && 'mac' || inputs.target-platform }}
|
run: |
|
||||||
if [ "${{ inputs.artifact-platform }}" = "mas" ]; then
|
cd src
|
||||||
target_os="${target_os}_mas"
|
e build --target electron:node_headers
|
||||||
fi
|
|
||||||
electron/script/zip_manifests/check-zip-manifest.py out/Default/chromedriver.zip electron/script/zip_manifests/chromedriver_zip.$target_os.${{ inputs.target-arch }}.manifest
|
|
||||||
fi
|
|
||||||
- name: Create installed_software.json ${{ inputs.step-suffix }}
|
- name: Create installed_software.json ${{ inputs.step-suffix }}
|
||||||
shell: powershell
|
shell: powershell
|
||||||
if: ${{ inputs.is-release == 'true' && inputs.target-platform == 'win' }}
|
if: ${{ inputs.is-release == 'true' && inputs.target-platform == 'win' }}
|
||||||
@@ -187,11 +167,17 @@ runs:
|
|||||||
# Needed for msdia140.dll on 64-bit windows
|
# Needed for msdia140.dll on 64-bit windows
|
||||||
cd src
|
cd src
|
||||||
export PATH="$PATH:$(pwd)/third_party/llvm-build/Release+Asserts/bin"
|
export PATH="$PATH:$(pwd)/third_party/llvm-build/Release+Asserts/bin"
|
||||||
- name: Zip Symbols ${{ inputs.step-suffix }}
|
- name: Generate & Zip Symbols ${{ inputs.step-suffix }}
|
||||||
shell: bash
|
shell: bash
|
||||||
run: |
|
run: |
|
||||||
|
# Generate breakpad symbols on release builds
|
||||||
|
if [ "${{ inputs.generate-symbols }}" = "true" ]; then
|
||||||
|
e build --target electron:electron_symbols
|
||||||
|
fi
|
||||||
cd src
|
cd src
|
||||||
export BUILD_PATH="$(pwd)/out/Default"
|
export BUILD_PATH="$(pwd)/out/Default"
|
||||||
|
e build --target electron:licenses
|
||||||
|
e build --target electron:electron_version_file
|
||||||
if [ "${{ inputs.is-release }}" = "true" ]; then
|
if [ "${{ inputs.is-release }}" = "true" ]; then
|
||||||
DELETE_DSYMS_AFTER_ZIP=1 electron/script/zip-symbols.py -b $BUILD_PATH
|
DELETE_DSYMS_AFTER_ZIP=1 electron/script/zip-symbols.py -b $BUILD_PATH
|
||||||
else
|
else
|
||||||
@@ -202,8 +188,20 @@ runs:
|
|||||||
if: ${{ inputs.is-release == 'true' }}
|
if: ${{ inputs.is-release == 'true' }}
|
||||||
run: |
|
run: |
|
||||||
cd src
|
cd src
|
||||||
gn gen out/ffmpeg --args="import(\"//electron/build/args/ffmpeg.gn\") use_remoteexec=true use_siso=true $GN_EXTRA_ARGS"
|
gn gen out/ffmpeg --args="import(\"//electron/build/args/ffmpeg.gn\") use_remoteexec=true $GN_EXTRA_ARGS"
|
||||||
e build --target electron:electron_ffmpeg_zip -C ../../out/ffmpeg
|
e build --target electron:electron_ffmpeg_zip -C ../../out/ffmpeg -j $NUMBER_OF_NINJA_PROCESSES
|
||||||
|
- name: Generate Hunspell Dictionaries ${{ inputs.step-suffix }}
|
||||||
|
shell: bash
|
||||||
|
if: ${{ inputs.is-release == 'true' && inputs.target-platform == 'linux' }}
|
||||||
|
run: |
|
||||||
|
e build --target electron:hunspell_dictionaries_zip -j $NUMBER_OF_NINJA_PROCESSES
|
||||||
|
- name: Generate Libcxx ${{ inputs.step-suffix }}
|
||||||
|
shell: bash
|
||||||
|
if: ${{ inputs.is-release == 'true' && inputs.target-platform == 'linux' }}
|
||||||
|
run: |
|
||||||
|
e build --target electron:libcxx_headers_zip -j $NUMBER_OF_NINJA_PROCESSES
|
||||||
|
e build --target electron:libcxxabi_headers_zip -j $NUMBER_OF_NINJA_PROCESSES
|
||||||
|
e build --target electron:libcxx_objects_zip -j $NUMBER_OF_NINJA_PROCESSES
|
||||||
- name: Remove Clang problem matcher
|
- name: Remove Clang problem matcher
|
||||||
shell: bash
|
shell: bash
|
||||||
run: echo "::remove-matcher owner=clang::"
|
run: echo "::remove-matcher owner=clang::"
|
||||||
@@ -212,7 +210,7 @@ runs:
|
|||||||
shell: bash
|
shell: bash
|
||||||
run: |
|
run: |
|
||||||
cd src/electron
|
cd src/electron
|
||||||
node script/yarn.js create-typescript-definitions
|
node script/yarn create-typescript-definitions
|
||||||
- name: Publish Electron Dist ${{ inputs.step-suffix }}
|
- name: Publish Electron Dist ${{ inputs.step-suffix }}
|
||||||
if: ${{ inputs.is-release == 'true' }}
|
if: ${{ inputs.is-release == 'true' }}
|
||||||
shell: bash
|
shell: bash
|
||||||
@@ -226,29 +224,7 @@ runs:
|
|||||||
echo 'Uploading Electron release distribution to GitHub releases'
|
echo 'Uploading Electron release distribution to GitHub releases'
|
||||||
script/release/uploaders/upload.py --verbose
|
script/release/uploaders/upload.py --verbose
|
||||||
fi
|
fi
|
||||||
- name: Generate siso report
|
|
||||||
if: ${{ inputs.target-platform != 'win' && !cancelled() }}
|
|
||||||
shell: bash
|
|
||||||
run: |
|
|
||||||
cd src
|
|
||||||
e d siso report -C out/Default > siso_report.txt
|
|
||||||
SISO_REPORT_PATH=$(grep -o '/.*siso-report-[^ ]*' siso_report.txt)
|
|
||||||
echo "SISO_REPORT_PATH=$SISO_REPORT_PATH" >> $GITHUB_ENV
|
|
||||||
cat siso_report.txt
|
|
||||||
echo "SISO REPORT AT $SISO_REPORT_PATH"
|
|
||||||
- name: Generate siso report (Windows)
|
|
||||||
if: ${{ inputs.target-platform == 'win' && !cancelled() }}
|
|
||||||
shell: powershell
|
|
||||||
run: |
|
|
||||||
cd src
|
|
||||||
e d siso report -C out\Default > siso_report.txt
|
|
||||||
$SISO_REPORT_PATH = Get-Content "siso_report.txt" | Select-String "report file:\s*(.+)" | ForEach-Object {
|
|
||||||
$_.Matches.Groups[1].Value.Trim()
|
|
||||||
}
|
|
||||||
echo "SISO_REPORT_PATH=$SISO_REPORT_PATH"
|
|
||||||
echo "SISO_REPORT_PATH=$SISO_REPORT_PATH" >> $env:GITHUB_ENV
|
|
||||||
- name: Generate Artifact Key
|
- name: Generate Artifact Key
|
||||||
if: always() && !cancelled()
|
|
||||||
shell: bash
|
shell: bash
|
||||||
run: |
|
run: |
|
||||||
if [ "${{ inputs.is-asan }}" = "true" ]; then
|
if [ "${{ inputs.is-asan }}" = "true" ]; then
|
||||||
@@ -260,11 +236,9 @@ runs:
|
|||||||
# The current generated_artifacts_<< artifact.key >> name was taken from CircleCI
|
# 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.
|
# to ensure we don't break anything, but we may be able to improve that.
|
||||||
- name: Move all Generated Artifacts to Upload Folder ${{ inputs.step-suffix }}
|
- name: Move all Generated Artifacts to Upload Folder ${{ inputs.step-suffix }}
|
||||||
if: always() && !cancelled()
|
|
||||||
shell: bash
|
shell: bash
|
||||||
run: ./src/electron/script/actions/move-artifacts.sh
|
run: ./src/electron/script/actions/move-artifacts.sh
|
||||||
- name: Upload Generated Artifacts ${{ inputs.step-suffix }}
|
- name: Upload Generated Artifacts ${{ inputs.step-suffix }}
|
||||||
if: always() && !cancelled()
|
|
||||||
uses: actions/upload-artifact@65462800fd760344b1a7b4382951275a0abb4808
|
uses: actions/upload-artifact@65462800fd760344b1a7b4382951275a0abb4808
|
||||||
with:
|
with:
|
||||||
name: generated_artifacts_${{ env.ARTIFACT_KEY }}
|
name: generated_artifacts_${{ env.ARTIFACT_KEY }}
|
||||||
|
|||||||
83
.github/actions/build-git-cache/action.yml
vendored
83
.github/actions/build-git-cache/action.yml
vendored
@@ -1,83 +0,0 @@
|
|||||||
name: 'Build Git Cache'
|
|
||||||
description: 'Runs a gclient sync to build the git cache for Electron'
|
|
||||||
inputs:
|
|
||||||
target-platform:
|
|
||||||
description: 'Target platform, should be linux, win, macos'
|
|
||||||
runs:
|
|
||||||
using: "composite"
|
|
||||||
steps:
|
|
||||||
- name: Set GIT_CACHE_PATH to make gclient to use the cache
|
|
||||||
shell: bash
|
|
||||||
run: |
|
|
||||||
echo "GIT_CACHE_PATH=$(pwd)/git-cache" >> $GITHUB_ENV
|
|
||||||
- name: Set Chromium Git Cookie
|
|
||||||
uses: ./src/electron/.github/actions/set-chromium-cookie
|
|
||||||
- name: Install Build Tools
|
|
||||||
uses: ./src/electron/.github/actions/install-build-tools
|
|
||||||
- name: Set up cache drive
|
|
||||||
shell: bash
|
|
||||||
run: |
|
|
||||||
if [ "${{ inputs.target-platform }}" = "win" ]; then
|
|
||||||
echo "CACHE_DRIVE=/mnt/win-cache" >> $GITHUB_ENV
|
|
||||||
else
|
|
||||||
echo "CACHE_DRIVE=/mnt/cross-instance-cache" >> $GITHUB_ENV
|
|
||||||
fi
|
|
||||||
- name: Check cross instance cache disk space
|
|
||||||
shell: bash
|
|
||||||
run: |
|
|
||||||
# if there is less than 35 GB free space then creating the cache might fail so exit early
|
|
||||||
freespace=`df -m $CACHE_DRIVE | grep -w $CACHE_DRIVE | awk '{print $4}'`
|
|
||||||
freespace_human=`df -h $CACHE_DRIVE | grep -w $CACHE_DRIVE | awk '{print $4}'`
|
|
||||||
if [ $freespace -le 35000 ]; then
|
|
||||||
echo "The cross mount cache has $freespace_human free space which is not enough - exiting"
|
|
||||||
exit 1
|
|
||||||
else
|
|
||||||
echo "The cross mount cache has $freespace_human free space - continuing"
|
|
||||||
fi
|
|
||||||
- name: Restore gitcache
|
|
||||||
shell: bash
|
|
||||||
run: |
|
|
||||||
GIT_CACHE_TAR="$CACHE_DRIVE/gitcache.tar"
|
|
||||||
if [ ! -f "$GIT_CACHE_TAR" ]; then
|
|
||||||
echo "Git cache tar file does not exist, skipping restore"
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
echo "Restoring git cache from $GIT_CACHE_TAR to $GIT_CACHE_PATH"
|
|
||||||
mkdir -p $GIT_CACHE_PATH
|
|
||||||
tar -xf $GIT_CACHE_TAR -C $GIT_CACHE_PATH
|
|
||||||
- name: Gclient Sync
|
|
||||||
shell: bash
|
|
||||||
run: |
|
|
||||||
e d gclient config \
|
|
||||||
--name "src/electron" \
|
|
||||||
--unmanaged \
|
|
||||||
${GCLIENT_EXTRA_ARGS} \
|
|
||||||
"$GITHUB_SERVER_URL/$GITHUB_REPOSITORY"
|
|
||||||
|
|
||||||
if [ "$TARGET_OS" != "" ]; then
|
|
||||||
echo "target_os=['$TARGET_OS']" >> ./.gclient
|
|
||||||
fi
|
|
||||||
|
|
||||||
ELECTRON_USE_THREE_WAY_MERGE_FOR_PATCHES=1 e d gclient sync --with_branch_heads --with_tags --nohooks -vv
|
|
||||||
- name: Compress Git Cache Directory
|
|
||||||
shell: bash
|
|
||||||
run: |
|
|
||||||
echo "Uncompressed gitcache size: $(du -sh $GIT_CACHE_PATH | cut -f1 -d' ')"
|
|
||||||
cd $GIT_CACHE_PATH
|
|
||||||
tar -cf ../gitcache.tar .
|
|
||||||
cd ..
|
|
||||||
echo "Compressed gitcache to $(du -sh gitcache.tar | cut -f1 -d' ')"
|
|
||||||
# remove the old cache file if it exists
|
|
||||||
if [ -f $CACHE_DRIVE/gitcache.tar ]; then
|
|
||||||
echo "Removing old gitcache.tar from $CACHE_DRIVE"
|
|
||||||
rm $CACHE_DRIVE/gitcache.tar
|
|
||||||
fi
|
|
||||||
cp ./gitcache.tar $CACHE_DRIVE/
|
|
||||||
- name: Wait for active SSH sessions
|
|
||||||
shell: bash
|
|
||||||
if: always() && !cancelled()
|
|
||||||
run: |
|
|
||||||
while [ -f /var/.ssh-lock ]
|
|
||||||
do
|
|
||||||
sleep 60
|
|
||||||
done
|
|
||||||
35
.github/actions/checkout/action.yml
vendored
35
.github/actions/checkout/action.yml
vendored
@@ -20,8 +20,8 @@ runs:
|
|||||||
echo "GIT_CACHE_PATH=$(pwd)/git-cache" >> $GITHUB_ENV
|
echo "GIT_CACHE_PATH=$(pwd)/git-cache" >> $GITHUB_ENV
|
||||||
- name: Install Dependencies
|
- name: Install Dependencies
|
||||||
uses: ./src/electron/.github/actions/install-dependencies
|
uses: ./src/electron/.github/actions/install-dependencies
|
||||||
- name: Set Chromium Git Cookie
|
- name: Set Chromium Git Helper
|
||||||
uses: ./src/electron/.github/actions/set-chromium-cookie
|
uses: ./src/electron/.github/actions/set-chromium-git-helper
|
||||||
- name: Install Build Tools
|
- name: Install Build Tools
|
||||||
uses: ./src/electron/.github/actions/install-build-tools
|
uses: ./src/electron/.github/actions/install-build-tools
|
||||||
- name: Generate DEPS Hash
|
- name: Generate DEPS Hash
|
||||||
@@ -40,10 +40,10 @@ runs:
|
|||||||
if: ${{ inputs.generate-sas-token == 'true' }}
|
if: ${{ inputs.generate-sas-token == 'true' }}
|
||||||
shell: bash
|
shell: bash
|
||||||
run: |
|
run: |
|
||||||
curl --unix-socket /var/run/sas/sas.sock --fail "http://foo/$CACHE_FILE?platform=${{ inputs.target-platform }}&getAccountName=true" > sas-token
|
curl --unix-socket /var/run/sas/sas.sock --fail "http://foo/$CACHE_FILE?platform=${{ inputs.target-platform }}" > sas-token
|
||||||
- name: Save SAS Key
|
- name: Save SAS Key
|
||||||
if: ${{ inputs.generate-sas-token == 'true' }}
|
if: ${{ inputs.generate-sas-token == 'true' }}
|
||||||
uses: actions/cache/save@5a3ec84eff668545956fd18022155c47e93e2684 # v4.2.3
|
uses: actions/cache/save@d4323d4df104b026a6aa633fdb11d772146be0bf
|
||||||
with:
|
with:
|
||||||
path: sas-token
|
path: sas-token
|
||||||
key: sas-key-${{ inputs.target-platform }}-${{ github.run_number }}-${{ github.run_attempt }}
|
key: sas-key-${{ inputs.target-platform }}-${{ github.run_number }}-${{ github.run_attempt }}
|
||||||
@@ -83,18 +83,6 @@ runs:
|
|||||||
- name: Add patch conflict problem matcher
|
- name: Add patch conflict problem matcher
|
||||||
shell: bash
|
shell: bash
|
||||||
run: echo "::add-matcher::src/electron/.github/problem-matchers/patch-conflict.json"
|
run: echo "::add-matcher::src/electron/.github/problem-matchers/patch-conflict.json"
|
||||||
- name: Restore gitcache
|
|
||||||
if: steps.check-cache.outputs.cache_exists == 'false'
|
|
||||||
shell: bash
|
|
||||||
run: |
|
|
||||||
GIT_CACHE_TAR="$CACHE_DRIVE/gitcache.tar"
|
|
||||||
if [ ! -f "$GIT_CACHE_TAR" ]; then
|
|
||||||
echo "Git cache tar file does not exist, skipping restore"
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
echo "Restoring git cache from $GIT_CACHE_TAR to $GIT_CACHE_PATH"
|
|
||||||
mkdir -p $GIT_CACHE_PATH
|
|
||||||
tar -xf $GIT_CACHE_TAR -C $GIT_CACHE_PATH
|
|
||||||
- name: Gclient Sync
|
- name: Gclient Sync
|
||||||
if: steps.check-cache.outputs.cache_exists == 'false'
|
if: steps.check-cache.outputs.cache_exists == 'false'
|
||||||
shell: bash
|
shell: bash
|
||||||
@@ -117,7 +105,12 @@ runs:
|
|||||||
git update-index --refresh || true
|
git update-index --refresh || true
|
||||||
if ! git diff-index --quiet HEAD --; then
|
if ! git diff-index --quiet HEAD --; then
|
||||||
# There are changes to the patches. Make a git commit with the updated patches
|
# There are changes to the patches. Make a git commit with the updated patches
|
||||||
if node ./script/patch-up.js; then
|
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; then
|
||||||
echo
|
echo
|
||||||
echo "======================================================================"
|
echo "======================================================================"
|
||||||
echo "Changes to the patches when applying, we have auto-pushed the diff to the current branch"
|
echo "Changes to the patches when applying, we have auto-pushed the diff to the current branch"
|
||||||
@@ -125,11 +118,6 @@ runs:
|
|||||||
echo "======================================================================"
|
echo "======================================================================"
|
||||||
exit 1
|
exit 1
|
||||||
else
|
else
|
||||||
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
|
|
||||||
echo
|
echo
|
||||||
echo "======================================================================"
|
echo "======================================================================"
|
||||||
echo "There were changes to the patches when applying."
|
echo "There were changes to the patches when applying."
|
||||||
@@ -152,7 +140,7 @@ runs:
|
|||||||
if: ${{ inputs.target-platform == 'linux' && github.ref == 'refs/heads/main' }}
|
if: ${{ inputs.target-platform == 'linux' && github.ref == 'refs/heads/main' }}
|
||||||
shell: bash
|
shell: bash
|
||||||
run: |
|
run: |
|
||||||
node src/electron/script/patches-stats.mjs --upload-stats || true
|
npx node src/electron/script/patches-stats.mjs --upload-stats || true
|
||||||
# delete all .git directories under src/ except for
|
# delete all .git directories under src/ except for
|
||||||
# third_party/angle/ and third_party/dawn/ because of build time generation of files
|
# 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
|
# gen/angle/commit.h depends on third_party/angle/.git/HEAD
|
||||||
@@ -172,6 +160,7 @@ runs:
|
|||||||
run: |
|
run: |
|
||||||
rm -rf src/android_webview
|
rm -rf src/android_webview
|
||||||
rm -rf src/ios/chrome
|
rm -rf src/ios/chrome
|
||||||
|
rm -rf src/third_party/blink/web_tests
|
||||||
rm -rf src/third_party/blink/perf_tests
|
rm -rf src/third_party/blink/perf_tests
|
||||||
rm -rf src/chrome/test/data/xr/webvr_info
|
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/angle/third_party/VK-GL-CTS/src
|
||||||
|
|||||||
15
.github/actions/cipd-install/action.yml
vendored
15
.github/actions/cipd-install/action.yml
vendored
@@ -14,9 +14,6 @@ inputs:
|
|||||||
description: 'Target platform, should be linux, win, macos'
|
description: 'Target platform, should be linux, win, macos'
|
||||||
package:
|
package:
|
||||||
description: 'Package to install'
|
description: 'Package to install'
|
||||||
dependency-version:
|
|
||||||
description: 'Version of the dependency to install'
|
|
||||||
default: ''
|
|
||||||
runs:
|
runs:
|
||||||
using: "composite"
|
using: "composite"
|
||||||
steps:
|
steps:
|
||||||
@@ -25,23 +22,15 @@ runs:
|
|||||||
run : |
|
run : |
|
||||||
rm -rf ${{ inputs.cipd-root-prefix-path }}${{ inputs.installation-dir }}
|
rm -rf ${{ inputs.cipd-root-prefix-path }}${{ inputs.installation-dir }}
|
||||||
- name: Create ensure file for ${{ inputs.dependency }}
|
- name: Create ensure file for ${{ inputs.dependency }}
|
||||||
if: ${{ inputs.dependency-version == '' }}
|
|
||||||
shell: bash
|
shell: bash
|
||||||
run: |
|
run: |
|
||||||
echo '${{ inputs.package }}' `e d gclient getdep --deps-file=${{ inputs.deps-file }} -r '${{ inputs.installation-dir }}:${{ inputs.package }}'` > ${{ inputs.dependency }}_ensure_file
|
echo '${{ inputs.package }}' `e d gclient getdep --deps-file=${{ inputs.deps-file }} -r '${{ inputs.installation-dir }}:${{ inputs.package }}'` > ${{ inputs.dependency }}_ensure_file
|
||||||
cat ${{ inputs.dependency }}_ensure_file
|
cat ${{ inputs.dependency }}_ensure_file
|
||||||
|
|
||||||
- name: Create ensure file for ${{ inputs.dependency }} from dependency-version
|
|
||||||
if: ${{ inputs.dependency-version != '' }}
|
|
||||||
shell: bash
|
|
||||||
run: |
|
|
||||||
echo '${{ inputs.package }} ${{ inputs.dependency-version }}' > ${{ inputs.dependency }}_ensure_file
|
|
||||||
cat ${{ inputs.dependency }}_ensure_file
|
|
||||||
- name: CIPD installation of ${{ inputs.dependency }} (macOS)
|
- name: CIPD installation of ${{ inputs.dependency }} (macOS)
|
||||||
if: ${{ inputs.target-platform != 'win' }}
|
if: ${{ inputs.target-platform == 'macos' }}
|
||||||
shell: bash
|
shell: bash
|
||||||
run: |
|
run: |
|
||||||
echo "ensuring ${{ inputs.dependency }}"
|
echo "ensuring ${{ inputs.dependency }} on macOS"
|
||||||
e d cipd ensure --root ${{ inputs.cipd-root-prefix-path }}${{ inputs.installation-dir }} -ensure-file ${{ inputs.dependency }}_ensure_file
|
e d cipd ensure --root ${{ inputs.cipd-root-prefix-path }}${{ inputs.installation-dir }} -ensure-file ${{ inputs.dependency }}_ensure_file
|
||||||
- name: CIPD installation of ${{ inputs.dependency }} (Windows)
|
- name: CIPD installation of ${{ inputs.dependency }} (Windows)
|
||||||
if: ${{ inputs.target-platform == 'win' }}
|
if: ${{ inputs.target-platform == 'win' }}
|
||||||
|
|||||||
20
.github/actions/fix-sync/action.yml
vendored
20
.github/actions/fix-sync/action.yml
vendored
@@ -19,16 +19,12 @@ inputs:
|
|||||||
runs:
|
runs:
|
||||||
using: "composite"
|
using: "composite"
|
||||||
steps:
|
steps:
|
||||||
- name: Fix llvm toolchain
|
- name: Fix clang
|
||||||
if: ${{ inputs.target-platform != 'linux' }}
|
|
||||||
shell: bash
|
shell: bash
|
||||||
run : |
|
run : |
|
||||||
rm -rf src/third_party/llvm-build
|
rm -rf src/third_party/llvm-build
|
||||||
python3 src/tools/clang/scripts/update.py
|
python3 src/tools/clang/scripts/update.py
|
||||||
# Refs https://chromium-review.googlesource.com/c/chromium/src/+/6667681
|
|
||||||
python3 src/tools/clang/scripts/update.py --package objdump
|
|
||||||
- name: Fix esbuild
|
- name: Fix esbuild
|
||||||
if: ${{ inputs.target-platform != 'linux' }}
|
|
||||||
uses: ./src/electron/.github/actions/cipd-install
|
uses: ./src/electron/.github/actions/cipd-install
|
||||||
with:
|
with:
|
||||||
cipd-root-prefix-path: src/third_party/devtools-frontend/src/
|
cipd-root-prefix-path: src/third_party/devtools-frontend/src/
|
||||||
@@ -38,7 +34,6 @@ runs:
|
|||||||
target-platform: ${{ inputs.target-platform }}
|
target-platform: ${{ inputs.target-platform }}
|
||||||
package: infra/3pp/tools/esbuild/${platform}
|
package: infra/3pp/tools/esbuild/${platform}
|
||||||
- name: Fix rustc
|
- name: Fix rustc
|
||||||
if: ${{ inputs.target-platform != 'linux' }}
|
|
||||||
shell: bash
|
shell: bash
|
||||||
run : |
|
run : |
|
||||||
rm -rf src/third_party/rust-toolchain
|
rm -rf src/third_party/rust-toolchain
|
||||||
@@ -62,7 +57,6 @@ runs:
|
|||||||
target-platform: ${{ inputs.target-platform }}
|
target-platform: ${{ inputs.target-platform }}
|
||||||
package: gn/gn/windows-amd64
|
package: gn/gn/windows-amd64
|
||||||
- name: Fix reclient
|
- name: Fix reclient
|
||||||
if: ${{ inputs.target-platform != 'linux' }}
|
|
||||||
uses: ./src/electron/.github/actions/cipd-install
|
uses: ./src/electron/.github/actions/cipd-install
|
||||||
with:
|
with:
|
||||||
dependency: reclient
|
dependency: reclient
|
||||||
@@ -71,7 +65,6 @@ runs:
|
|||||||
target-platform: ${{ inputs.target-platform }}
|
target-platform: ${{ inputs.target-platform }}
|
||||||
package: infra/rbe/client/${platform}
|
package: infra/rbe/client/${platform}
|
||||||
- name: Configure reclient configs
|
- name: Configure reclient configs
|
||||||
if: ${{ inputs.target-platform != 'linux' }}
|
|
||||||
shell: bash
|
shell: bash
|
||||||
run : |
|
run : |
|
||||||
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
|
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
|
||||||
@@ -89,7 +82,6 @@ runs:
|
|||||||
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
|
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
|
||||||
fi
|
fi
|
||||||
- name: Fix ninja
|
- name: Fix ninja
|
||||||
if: ${{ inputs.target-platform != 'linux' }}
|
|
||||||
uses: ./src/electron/.github/actions/cipd-install
|
uses: ./src/electron/.github/actions/cipd-install
|
||||||
with:
|
with:
|
||||||
dependency: ninja
|
dependency: ninja
|
||||||
@@ -98,20 +90,10 @@ runs:
|
|||||||
target-platform: ${{ inputs.target-platform }}
|
target-platform: ${{ inputs.target-platform }}
|
||||||
package: infra/3pp/tools/ninja/${platform}
|
package: infra/3pp/tools/ninja/${platform}
|
||||||
- name: Set ninja in path
|
- name: Set ninja in path
|
||||||
if: ${{ inputs.target-platform != 'linux' }}
|
|
||||||
shell: bash
|
shell: bash
|
||||||
run : |
|
run : |
|
||||||
echo "$(pwd)/src/third_party/ninja" >> $GITHUB_PATH
|
echo "$(pwd)/src/third_party/ninja" >> $GITHUB_PATH
|
||||||
- name: Fix siso
|
|
||||||
uses: ./src/electron/.github/actions/cipd-install
|
|
||||||
with:
|
|
||||||
dependency: siso
|
|
||||||
deps-file: src/DEPS
|
|
||||||
installation-dir: src/third_party/siso/cipd
|
|
||||||
target-platform: ${{ inputs.target-platform }}
|
|
||||||
package: build/siso/${platform}
|
|
||||||
- name: Fixup angle git
|
- name: Fixup angle git
|
||||||
if: ${{ inputs.target-platform != 'linux' }}
|
|
||||||
shell: bash
|
shell: bash
|
||||||
run : |
|
run : |
|
||||||
cd src/third_party/angle
|
cd src/third_party/angle
|
||||||
|
|||||||
64
.github/actions/free-space-macos/action.yml
vendored
64
.github/actions/free-space-macos/action.yml
vendored
@@ -6,8 +6,6 @@ runs:
|
|||||||
- name: Free Space on MacOS
|
- name: Free Space on MacOS
|
||||||
shell: bash
|
shell: bash
|
||||||
run: |
|
run: |
|
||||||
echo "Disk usage before cleanup:"
|
|
||||||
df -h
|
|
||||||
sudo mkdir -p $TMPDIR/del-target
|
sudo mkdir -p $TMPDIR/del-target
|
||||||
|
|
||||||
tmpify() {
|
tmpify() {
|
||||||
@@ -17,30 +15,28 @@ runs:
|
|||||||
}
|
}
|
||||||
|
|
||||||
strip_universal_deep() {
|
strip_universal_deep() {
|
||||||
if [ -d "$1" ]; then
|
opwd=$(pwd)
|
||||||
opwd=$(pwd)
|
cd $1
|
||||||
cd $1
|
f=$(find . -perm +111 -type f)
|
||||||
f=$(find . -perm +111 -type f)
|
for fp in $f
|
||||||
for fp in $f
|
do
|
||||||
do
|
if [[ $(file "$fp") == *"universal binary"* ]]; then
|
||||||
if [[ $(file "$fp") == *"universal binary"* ]]; then
|
if [ "`arch`" == "arm64" ]; then
|
||||||
if [ "`arch`" == "arm64" ]; then
|
if [[ $(file "$fp") == *"x86_64"* ]]; then
|
||||||
if [[ $(file "$fp") == *"x86_64"* ]]; then
|
sudo lipo -remove x86_64 "$fp" -o "$fp" || true
|
||||||
sudo lipo -remove x86_64 "$fp" -o "$fp" || true
|
fi
|
||||||
fi
|
else
|
||||||
else
|
if [[ $(file "$fp") == *"arm64e)"* ]]; then
|
||||||
if [[ $(file "$fp") == *"arm64e)"* ]]; then
|
sudo lipo -remove arm64e "$fp" -o "$fp" || true
|
||||||
sudo lipo -remove arm64e "$fp" -o "$fp" || true
|
fi
|
||||||
fi
|
if [[ $(file "$fp") == *"arm64)"* ]]; then
|
||||||
if [[ $(file "$fp") == *"arm64)"* ]]; then
|
sudo lipo -remove arm64 "$fp" -o "$fp" || true
|
||||||
sudo lipo -remove arm64 "$fp" -o "$fp" || true
|
|
||||||
fi
|
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
done
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
cd $opwd
|
cd $opwd
|
||||||
fi
|
|
||||||
}
|
}
|
||||||
|
|
||||||
tmpify /Library/Developer/CoreSimulator
|
tmpify /Library/Developer/CoreSimulator
|
||||||
@@ -61,29 +57,9 @@ runs:
|
|||||||
sudo rm -rf $TMPDIR/del-target
|
sudo rm -rf $TMPDIR/del-target
|
||||||
|
|
||||||
sudo rm -rf /Applications/Safari.app
|
sudo rm -rf /Applications/Safari.app
|
||||||
sudo rm -rf /Applications/Xcode_16.1.app
|
|
||||||
sudo rm -rf /Applications/Xcode_16.2.app
|
|
||||||
sudo rm -rf /Applications/Xcode_16.3.app
|
|
||||||
sudo rm -rf /Applications/Xcode_26*
|
|
||||||
sudo rm -rf /Applications/Google Chrome.app
|
|
||||||
sudo rm -rf /Applications/Google Chrome for Testing.app
|
|
||||||
sudo rm -rf /Applications/Firefox.app
|
|
||||||
sudo rm -rf /Applications/Microsoft Edge.app
|
|
||||||
sudo rm -rf ~/project/src/third_party/catapult/tracing/test_data
|
sudo rm -rf ~/project/src/third_party/catapult/tracing/test_data
|
||||||
sudo rm -rf ~/project/src/third_party/angle/third_party/VK-GL-CTS
|
sudo rm -rf ~/project/src/third_party/angle/third_party/VK-GL-CTS
|
||||||
sudo rm -rf /Users/runner/Library/Android
|
|
||||||
sudo rm -rf $JAVA_HOME_11_arm64
|
|
||||||
sudo rm -rf $JAVA_HOME_17_arm64
|
|
||||||
sudo rm -rf $JAVA_HOME_21_arm64
|
|
||||||
sudo rm -rf $JAVA_HOME_25_arm64
|
|
||||||
sudo rm -rf /Users/runner/.dotnet/
|
|
||||||
sudo rm -rf /Users/runner/.rustup
|
|
||||||
|
|
||||||
# remove homebrew packages we don't need
|
|
||||||
brew uninstall -f --zap aws-sam-cli session-manager-plugin gcc gcc@13 gcc@14 llvm@18 gradle maven ant azure-cli
|
|
||||||
brew autoremove
|
|
||||||
|
|
||||||
# lipo off some huge binaries arm64 versions to save space
|
# lipo off some huge binaries arm64 versions to save space
|
||||||
strip_universal_deep $(xcode-select -p)/../SharedFrameworks
|
strip_universal_deep $(xcode-select -p)/../SharedFrameworks
|
||||||
# strip_arm_deep /System/Volumes/Data/Library/Developer/CommandLineTools/usr
|
# strip_arm_deep /System/Volumes/Data/Library/Developer/CommandLineTools/usr
|
||||||
sudo mdutil -a -i off
|
|
||||||
14
.github/actions/generate-types/action.yml
vendored
14
.github/actions/generate-types/action.yml
vendored
@@ -13,16 +13,12 @@ runs:
|
|||||||
- name: Generating Types for SHA in ${{ inputs.sha-file }}
|
- name: Generating Types for SHA in ${{ inputs.sha-file }}
|
||||||
shell: bash
|
shell: bash
|
||||||
run: |
|
run: |
|
||||||
export ELECTRON_DIR=$(pwd)
|
git checkout $(cat ${{ inputs.sha-file }})
|
||||||
if [ "${{ inputs.sha-file }}" == ".dig-old" ]; then
|
rm -rf node_modules
|
||||||
cd /tmp
|
yarn install --frozen-lockfile --ignore-scripts
|
||||||
git clone https://github.com/electron/electron.git
|
|
||||||
cd electron
|
|
||||||
fi
|
|
||||||
git checkout $(cat $ELECTRON_DIR/${{ inputs.sha-file }})
|
|
||||||
node script/yarn.js install --immutable
|
|
||||||
echo "#!/usr/bin/env node\nglobal.x=1" > node_modules/typescript/bin/tsc
|
echo "#!/usr/bin/env node\nglobal.x=1" > node_modules/typescript/bin/tsc
|
||||||
node node_modules/.bin/electron-docs-parser --dir=./ --outDir=./ --moduleVersion=0.0.0-development
|
node node_modules/.bin/electron-docs-parser --dir=./ --outDir=./ --moduleVersion=0.0.0-development
|
||||||
node node_modules/.bin/electron-typescript-definitions --api=electron-api.json --outDir=artifacts
|
node node_modules/.bin/electron-typescript-definitions --api=electron-api.json --outDir=artifacts
|
||||||
mv artifacts/electron.d.ts $ELECTRON_DIR/artifacts/${{ inputs.filename }}
|
mv artifacts/electron.d.ts artifacts/${{ inputs.filename }}
|
||||||
|
git checkout .
|
||||||
working-directory: ./electron
|
working-directory: ./electron
|
||||||
|
|||||||
@@ -11,11 +11,9 @@ runs:
|
|||||||
git config --global core.autocrlf false
|
git config --global core.autocrlf false
|
||||||
git config --global branch.autosetuprebase always
|
git config --global branch.autosetuprebase always
|
||||||
git config --global core.fscache true
|
git config --global core.fscache true
|
||||||
git config --global core.longpaths true
|
|
||||||
git config --global core.preloadindex true
|
git config --global core.preloadindex true
|
||||||
git config --global core.longpaths true
|
|
||||||
fi
|
fi
|
||||||
export BUILD_TOOLS_SHA=a5d9f9052dcc36ee88bef5c8b13acbefd87b7d8d
|
export BUILD_TOOLS_SHA=6e8526315ea3b4828882497e532b8340e64e053c
|
||||||
npm i -g @electron/build-tools
|
npm i -g @electron/build-tools
|
||||||
# Update depot_tools to ensure python
|
# Update depot_tools to ensure python
|
||||||
e d update_depot_tools
|
e d update_depot_tools
|
||||||
|
|||||||
16
.github/actions/install-dependencies/action.yml
vendored
16
.github/actions/install-dependencies/action.yml
vendored
@@ -6,8 +6,8 @@ runs:
|
|||||||
- name: Get yarn cache directory path
|
- name: Get yarn cache directory path
|
||||||
shell: bash
|
shell: bash
|
||||||
id: yarn-cache-dir-path
|
id: yarn-cache-dir-path
|
||||||
run: echo "dir=$(node src/electron/script/yarn.js config get cacheFolder)" >> $GITHUB_OUTPUT
|
run: echo "dir=$(node src/electron/script/yarn cache dir)" >> $GITHUB_OUTPUT
|
||||||
- uses: actions/cache@5a3ec84eff668545956fd18022155c47e93e2684 # v4.2.3
|
- uses: actions/cache@1bd1e32a3bdc45362d1e726936510720a7c30a57
|
||||||
id: yarn-cache
|
id: yarn-cache
|
||||||
with:
|
with:
|
||||||
path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
|
path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
|
||||||
@@ -18,14 +18,4 @@ runs:
|
|||||||
shell: bash
|
shell: bash
|
||||||
run: |
|
run: |
|
||||||
cd src/electron
|
cd src/electron
|
||||||
if [ "$TARGET_ARCH" = "x86" ]; then
|
node script/yarn install --frozen-lockfile --prefer-offline
|
||||||
export npm_config_arch="ia32"
|
|
||||||
fi
|
|
||||||
# if running on linux arm skip yarn Builds
|
|
||||||
ARCH=$(uname -m)
|
|
||||||
if [ "$ARCH" = "armv7l" ]; then
|
|
||||||
echo "Skipping yarn build on linux arm"
|
|
||||||
node script/yarn.js install --immutable --mode=skip-build
|
|
||||||
else
|
|
||||||
node script/yarn.js install --immutable
|
|
||||||
fi
|
|
||||||
|
|||||||
19
.github/actions/restore-cache-azcopy/action.yml
vendored
19
.github/actions/restore-cache-azcopy/action.yml
vendored
@@ -8,14 +8,14 @@ runs:
|
|||||||
steps:
|
steps:
|
||||||
- name: Obtain SAS Key
|
- name: Obtain SAS Key
|
||||||
continue-on-error: true
|
continue-on-error: true
|
||||||
uses: actions/cache/restore@5a3ec84eff668545956fd18022155c47e93e2684 # v4.2.3
|
uses: actions/cache/restore@d4323d4df104b026a6aa633fdb11d772146be0bf
|
||||||
with:
|
with:
|
||||||
path: sas-token
|
path: sas-token
|
||||||
key: sas-key-${{ inputs.target-platform }}-${{ github.run_number }}-1
|
key: sas-key-${{ inputs.target-platform }}-${{ github.run_number }}-1
|
||||||
enableCrossOsArchive: true
|
enableCrossOsArchive: true
|
||||||
- name: Obtain SAS Key
|
- name: Obtain SAS Key
|
||||||
continue-on-error: true
|
continue-on-error: true
|
||||||
uses: actions/cache/restore@5a3ec84eff668545956fd18022155c47e93e2684 # v4.2.3
|
uses: actions/cache/restore@d4323d4df104b026a6aa633fdb11d772146be0bf
|
||||||
with:
|
with:
|
||||||
path: sas-token
|
path: sas-token
|
||||||
key: sas-key-${{ inputs.target-platform }}-${{ github.run_number }}-${{ github.run_attempt }}
|
key: sas-key-${{ inputs.target-platform }}-${{ github.run_number }}-${{ github.run_attempt }}
|
||||||
@@ -32,23 +32,22 @@ runs:
|
|||||||
shell: bash
|
shell: bash
|
||||||
command: |
|
command: |
|
||||||
sas_token=$(cat sas-token)
|
sas_token=$(cat sas-token)
|
||||||
if [ -z "$sas_token" ]; then
|
if [ -z $sas-token ]; then
|
||||||
echo "SAS Token not found; exiting src cache download early..."
|
echo "SAS Token not found; exiting src cache download early..."
|
||||||
exit 1
|
exit 1
|
||||||
else
|
else
|
||||||
sas_token=$(jq -r '.sasToken' sas-token)
|
|
||||||
account_name=$(jq -r '.accountName' sas-token)
|
|
||||||
if [ "${{ inputs.target-platform }}" = "win" ]; then
|
if [ "${{ inputs.target-platform }}" = "win" ]; then
|
||||||
azcopy copy --log-level=ERROR \
|
azcopy copy --log-level=ERROR \
|
||||||
"https://$account_name.file.core.windows.net/${{ env.AZURE_AKS_WIN_CACHE_SHARE_NAME }}/${{ env.CACHE_PATH }}?$sas_token" $DEPSHASH.tar
|
"https://${{ env.AZURE_AKS_CACHE_STORAGE_ACCOUNT }}.file.core.windows.net/${{ env.AZURE_AKS_WIN_CACHE_SHARE_NAME }}/${{ env.CACHE_PATH }}?$sas_token" $DEPSHASH.tar
|
||||||
else
|
else
|
||||||
azcopy copy --log-level=ERROR \
|
azcopy copy --log-level=ERROR \
|
||||||
"https://$account_name.file.core.windows.net/${{ env.AZURE_AKS_CACHE_SHARE_NAME }}/${{ env.CACHE_PATH }}?$sas_token" $DEPSHASH.tar
|
"https://${{ env.AZURE_AKS_CACHE_STORAGE_ACCOUNT }}.file.core.windows.net/${{ env.AZURE_AKS_CACHE_SHARE_NAME }}/${{ env.CACHE_PATH }}?$sas_token" $DEPSHASH.tar
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
env:
|
env:
|
||||||
AZURE_AKS_CACHE_SHARE_NAME: linux-cache
|
AZURE_AKS_CACHE_STORAGE_ACCOUNT: f723719aa87a34622b5f7f3
|
||||||
AZURE_AKS_WIN_CACHE_SHARE_NAME: windows-cache
|
AZURE_AKS_CACHE_SHARE_NAME: pvc-f6a4089f-b082-4bee-a3f9-c3e1c0c02d8f
|
||||||
|
AZURE_AKS_WIN_CACHE_SHARE_NAME: pvc-71dec4f2-0d44-4fd1-a2c3-add049d70bdf
|
||||||
- name: Clean SAS Key
|
- name: Clean SAS Key
|
||||||
shell: bash
|
shell: bash
|
||||||
run: rm -f sas-token
|
run: rm -f sas-token
|
||||||
@@ -97,7 +96,7 @@ runs:
|
|||||||
|
|
||||||
$TEMP_DIR=New-Item -ItemType Directory -Path temp-cache
|
$TEMP_DIR=New-Item -ItemType Directory -Path temp-cache
|
||||||
$TEMP_DIR_PATH = $TEMP_DIR.FullName
|
$TEMP_DIR_PATH = $TEMP_DIR.FullName
|
||||||
C:\ProgramData\Chocolatey\bin\7z.exe -y -snld20 x $src_cache -o"$TEMP_DIR_PATH"
|
C:\ProgramData\Chocolatey\bin\7z.exe -y x $src_cache -o"$TEMP_DIR_PATH"
|
||||||
|
|
||||||
- name: Move Src Cache (Windows)
|
- name: Move Src Cache (Windows)
|
||||||
if: ${{ inputs.target-platform == 'win' }}
|
if: ${{ inputs.target-platform == 'win' }}
|
||||||
|
|||||||
58
.github/actions/set-chromium-cookie/action.yml
vendored
58
.github/actions/set-chromium-cookie/action.yml
vendored
@@ -1,58 +0,0 @@
|
|||||||
name: 'Set Chromium Git Cookie'
|
|
||||||
description: 'Sets an authenticated cookie from Chromium to allow for a higher request limit'
|
|
||||||
runs:
|
|
||||||
using: "composite"
|
|
||||||
steps:
|
|
||||||
- name: Set the git cookie from chromium.googlesource.com (Unix)
|
|
||||||
if: ${{ runner.os != 'Windows' }}
|
|
||||||
shell: bash
|
|
||||||
run: |
|
|
||||||
if [[ -z "${{ env.CHROMIUM_GIT_COOKIE }}" ]]; then
|
|
||||||
echo "CHROMIUM_GIT_COOKIE is not set - cannot authenticate."
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
eval 'set +o history' 2>/dev/null || setopt HIST_IGNORE_SPACE 2>/dev/null
|
|
||||||
touch ~/.gitcookies
|
|
||||||
chmod 0600 ~/.gitcookies
|
|
||||||
|
|
||||||
git config --global http.cookiefile ~/.gitcookies
|
|
||||||
|
|
||||||
tr , \\t <<\__END__ >>~/.gitcookies
|
|
||||||
${{ env.CHROMIUM_GIT_COOKIE }}
|
|
||||||
__END__
|
|
||||||
eval 'set -o history' 2>/dev/null || unsetopt HIST_IGNORE_SPACE 2>/dev/null
|
|
||||||
|
|
||||||
RESPONSE=$(curl -s -b ~/.gitcookies https://chromium-review.googlesource.com/a/accounts/self)
|
|
||||||
if [[ $RESPONSE == ")]}'"* ]]; then
|
|
||||||
# Extract account email for verification
|
|
||||||
EMAIL=$(echo "$RESPONSE" | tail -c +5 | jq -r '.email // "No email found"')
|
|
||||||
echo "Cookie authentication successful - authenticated as: $EMAIL"
|
|
||||||
else
|
|
||||||
echo "Cookie authentication failed - ensure CHROMIUM_GIT_COOKIE is set correctly"
|
|
||||||
echo $RESPONSE
|
|
||||||
fi
|
|
||||||
- name: Set the git cookie from chromium.googlesource.com (Windows)
|
|
||||||
if: ${{ runner.os == 'Windows' }}
|
|
||||||
shell: cmd
|
|
||||||
run: |
|
|
||||||
if "%CHROMIUM_GIT_COOKIE_WINDOWS_STRING%"=="" (
|
|
||||||
echo CHROMIUM_GIT_COOKIE_WINDOWS_STRING is not set - cannot authenticate.
|
|
||||||
exit /b 0
|
|
||||||
)
|
|
||||||
|
|
||||||
git config --global http.cookiefile "%USERPROFILE%\.gitcookies"
|
|
||||||
powershell -noprofile -nologo -command Write-Output "${{ env.CHROMIUM_GIT_COOKIE_WINDOWS_STRING }}" >>"%USERPROFILE%\.gitcookies"
|
|
||||||
|
|
||||||
curl -s -b "%USERPROFILE%\.gitcookies" https://chromium-review.googlesource.com/a/accounts/self > response.txt
|
|
||||||
|
|
||||||
findstr /B /C:")]}'" response.txt > nul
|
|
||||||
if %ERRORLEVEL% EQU 0 (
|
|
||||||
echo Cookie authentication successful
|
|
||||||
powershell -NoProfile -Command "& {$content = Get-Content -Raw response.txt; $content = $content.Substring(4); try { $json = ConvertFrom-Json $content; if($json.email) { Write-Host 'Authenticated as:' $json.email } else { Write-Host 'No email found in response' } } catch { Write-Host 'Error parsing JSON:' $_ }}"
|
|
||||||
) else (
|
|
||||||
echo Cookie authentication failed - ensure CHROMIUM_GIT_COOKIE_WINDOWS_STRING is set correctly
|
|
||||||
type response.txt
|
|
||||||
)
|
|
||||||
|
|
||||||
del response.txt
|
|
||||||
41
.github/actions/set-chromium-git-helper/action.yml
vendored
Normal file
41
.github/actions/set-chromium-git-helper/action.yml
vendored
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
name: 'Set Chromium Git Helper'
|
||||||
|
description: 'Sets Chromium Git Helper to allow for a higher request limit'
|
||||||
|
runs:
|
||||||
|
using: "composite"
|
||||||
|
steps:
|
||||||
|
- name: Save the chromium git credentials to a file
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
if [[ -z "${{ env.CHROMIUM_GIT_AUTH }}" ]]; then
|
||||||
|
echo "CHROMIUM_GIT_AUTH is not set - cannot authenticate."
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
if [[ "${{ runner.os }}" != "Windows" ]]; then
|
||||||
|
cd $HOME
|
||||||
|
fi
|
||||||
|
echo "${{ env.CHROMIUM_GIT_AUTH }}" > .chromium_git_auth
|
||||||
|
|
||||||
|
- name: Set the chromium git helper to use auth from a file
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
if [[ "${{ runner.os }}" == "Windows" ]]; then
|
||||||
|
if [[ ! -f "/c/actions-runner/_work/electron/electron/.chromium_git_auth" ]]; then
|
||||||
|
echo "File /c/actions-runner/_work/electron/electron/.chromium_git_auth does not exist - cannot authenticate."
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
if [[ ! -f "$HOME/.chromium_git_auth" ]]; then
|
||||||
|
echo "File $HOME/.chromium_git_auth does not exist - cannot authenticate."
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
if [[ -z "${{ env.CHROMIUM_GIT_USER }}" ]]; then
|
||||||
|
echo "CHROMIUM_GIT_USER is not set - cannot authenticate."
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
git config --global credential.https://chromium.googlesource.com.username "${{ env.CHROMIUM_GIT_USER }}"
|
||||||
|
if [[ "${{ runner.os }}" == "Windows" ]]; then
|
||||||
|
git config --global credential.https://chromium.googlesource.com.helper '!f() { test "$1" = get && echo "password=$(cat /c/actions-runner/_work/electron/electron/.chromium_git_auth)"; }; f'
|
||||||
|
else
|
||||||
|
git config --global credential.https://chromium.googlesource.com.helper '!f() { test "$1" = get && echo "password=$(cat $HOME/.chromium_git_auth)"; }; f'
|
||||||
|
fi
|
||||||
20
.github/actions/ssh-debug/action.yml
vendored
20
.github/actions/ssh-debug/action.yml
vendored
@@ -1,20 +0,0 @@
|
|||||||
name: Debug via SSH
|
|
||||||
description: Setup a SSH server with a tunnel to access it to debug via SSH.
|
|
||||||
inputs:
|
|
||||||
tunnel:
|
|
||||||
description: 'Enable SSH tunneling via cloudflared'
|
|
||||||
required: true
|
|
||||||
default: 'false'
|
|
||||||
timeout:
|
|
||||||
description: 'SSH session timeout in seconds'
|
|
||||||
required: false
|
|
||||||
type: number
|
|
||||||
default: 3600
|
|
||||||
runs:
|
|
||||||
using: composite
|
|
||||||
steps:
|
|
||||||
- run: $GITHUB_ACTION_PATH/setup-ssh.sh
|
|
||||||
shell: bash
|
|
||||||
env:
|
|
||||||
TUNNEL: ${{ inputs.tunnel }}
|
|
||||||
TIMEOUT: ${{ inputs.timeout }}
|
|
||||||
4
.github/actions/ssh-debug/bashrc
vendored
4
.github/actions/ssh-debug/bashrc
vendored
@@ -1,4 +0,0 @@
|
|||||||
# If we're in an interactive SSH session and we're not already in tmux and there's no explicit SSH command, auto attach tmux
|
|
||||||
if [ -n "$SSH_TTY" ] && [ -z "$TMUX" ] && [ -z "$SSH_ORIGINAL_COMMAND" ]; then
|
|
||||||
exec tmux attach || exec tmux
|
|
||||||
fi
|
|
||||||
146
.github/actions/ssh-debug/setup-ssh.sh
vendored
146
.github/actions/ssh-debug/setup-ssh.sh
vendored
@@ -1,146 +0,0 @@
|
|||||||
#!/bin/bash -e
|
|
||||||
|
|
||||||
if [ "${TUNNEL}" != "true" ]; then
|
|
||||||
echo "SSH tunneling is disabled. Set enable-tunnel: true to enable remote access."
|
|
||||||
echo "Local SSH server would be available on localhost:2222 if this were a local environment."
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo ::group::Configuring Tunnel
|
|
||||||
|
|
||||||
echo "SSH tunneling enabled. Setting up remote access..."
|
|
||||||
|
|
||||||
EXTERNAL_DEPS="curl jq ssh-keygen"
|
|
||||||
|
|
||||||
for dep in $EXTERNAL_DEPS; do
|
|
||||||
if ! command -v "${dep}" > /dev/null 2>&1; then
|
|
||||||
echo "Command ${dep} not installed on the system!" >&2
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
cd "$GITHUB_ACTION_PATH"
|
|
||||||
|
|
||||||
bashrc_path=$(pwd)/bashrc
|
|
||||||
|
|
||||||
# Source `bashrc` to auto start tmux on SSH login.
|
|
||||||
if ! grep -q "${bashrc_path}" ~/.bash_profile; then
|
|
||||||
echo >> ~/.bash_profile # On macOS runner there's no newline at the end of the file
|
|
||||||
echo "source \"${bashrc_path}\"" >> ~/.bash_profile
|
|
||||||
fi
|
|
||||||
|
|
||||||
OS=$(uname -s | tr '[:upper:]' '[:lower:]')
|
|
||||||
ARCH=$(uname -m)
|
|
||||||
|
|
||||||
if [ "${ARCH}" = "x86_64" ]; then
|
|
||||||
ARCH="amd64"
|
|
||||||
elif [ "${ARCH}" = "aarch64" ]; then
|
|
||||||
ARCH="arm64"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ "${OS}" = "darwin" ] && ! command -v tmux > /dev/null 2>&1; then
|
|
||||||
echo "Installing tmux..."
|
|
||||||
brew install tmux
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ "$OS" = "darwin" ]; then
|
|
||||||
cloudflared_url="https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-${OS}-${ARCH}.tgz"
|
|
||||||
echo "Downloading \`cloudflared\` from <$cloudflared_url>..."
|
|
||||||
curl --location --silent --output cloudflared.tgz "${cloudflared_url}"
|
|
||||||
tar xf cloudflared.tgz
|
|
||||||
rm cloudflared.tgz
|
|
||||||
fi
|
|
||||||
|
|
||||||
chmod +x cloudflared
|
|
||||||
|
|
||||||
echo 'Creating SSH server key...'
|
|
||||||
ssh-keygen -q -f ssh_host_rsa_key -N ''
|
|
||||||
|
|
||||||
echo 'Creating SSH server config...'
|
|
||||||
sed "s,\$PWD,${PWD},;s,\$USER,${USER}," sshd_config.template > sshd_config
|
|
||||||
|
|
||||||
echo 'Starting SSH server...'
|
|
||||||
sudo /usr/sbin/sshd -f sshd_config -D &
|
|
||||||
sshd_pid=$!
|
|
||||||
|
|
||||||
echo "SSH server started successfully (PID: ${sshd_pid})"
|
|
||||||
|
|
||||||
echo 'Starting tmux session...'
|
|
||||||
(cd "${GITHUB_WORKSPACE}" && tmux new-session -d -s debug)
|
|
||||||
|
|
||||||
mkdir ~/.cloudflared
|
|
||||||
CLEAN_TUNNEL_CERT=$(printf '%s\n' "${CLOUDFLARE_TUNNEL_CERT}" | tr -d '\r' | sed '/^[[:space:]]*$/d')
|
|
||||||
|
|
||||||
echo "${CLEAN_TUNNEL_CERT}" > ~/.cloudflared/cert.pem
|
|
||||||
|
|
||||||
CLEAN_USER_CA_CERT=$(printf '%s\n' "${CLOUDFLARE_USER_CA_CERT}" | tr -d '\r' | sed '/^[[:space:]]*$/d')
|
|
||||||
|
|
||||||
echo "${CLEAN_USER_CA_CERT}" | sudo tee /etc/ssh/ca.pub > /dev/null
|
|
||||||
sudo chmod 644 /etc/ssh/ca.pub
|
|
||||||
|
|
||||||
random_suffix=$(openssl rand -hex 5 | cut -c1-10)
|
|
||||||
tunnel_name="${GITHUB_SHA}-${GITHUB_RUN_ID}-${random_suffix}"
|
|
||||||
tunnel_url="${tunnel_name}.${CLOUDFLARE_TUNNEL_HOSTNAME}"
|
|
||||||
|
|
||||||
if ./cloudflared tunnel list | grep -q "${tunnel_name}"; then
|
|
||||||
echo "Deleting existing tunnel: ${tunnel_name}"
|
|
||||||
./cloudflared tunnel delete ${tunnel_name}
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "Creating new cloudflare tunnel: ${tunnel_name}"
|
|
||||||
./cloudflared tunnel create ${tunnel_name}
|
|
||||||
|
|
||||||
credentials_file=$(find ~/.cloudflared -name "*.json" | head -n 1)
|
|
||||||
if [ -z "${credentials_file}" ]; then
|
|
||||||
echo "Error: Could not find tunnel credentials file"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "Found credentials file: ${credentials_file}"
|
|
||||||
|
|
||||||
echo 'Creating tunnel configuration...'
|
|
||||||
cat > tunnel_config.yml << EOF
|
|
||||||
tunnel: ${tunnel_name}
|
|
||||||
credentials-file: ${credentials_file}
|
|
||||||
|
|
||||||
ingress:
|
|
||||||
- hostname: ${tunnel_url}
|
|
||||||
service: ssh://localhost:2222
|
|
||||||
- service: http_status:404
|
|
||||||
EOF
|
|
||||||
|
|
||||||
echo 'Setting up DNS routing for tunnel...'
|
|
||||||
./cloudflared tunnel route dns ${tunnel_name} ${tunnel_url}
|
|
||||||
|
|
||||||
echo 'Running cloudflare tunnel...'
|
|
||||||
./cloudflared tunnel --no-autoupdate --config tunnel_config.yml run 2>&1 | tee cloudflared.log | sed -u 's/^/cloudflared: /' &
|
|
||||||
cloudflared_pid=$!
|
|
||||||
|
|
||||||
echo ::endgroup::
|
|
||||||
|
|
||||||
echo ::notice title=SSH Debug Session Ready::ssh ${tunnel_url}
|
|
||||||
|
|
||||||
|
|
||||||
(
|
|
||||||
echo ' '
|
|
||||||
echo ' '
|
|
||||||
echo '🔗 SSH Debug Session Ready!'
|
|
||||||
echo '━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━'
|
|
||||||
echo ' '
|
|
||||||
echo '📋 Infra WG can copy and run this command to connect:'
|
|
||||||
echo ' '
|
|
||||||
echo "ssh ${tunnel_url}"
|
|
||||||
echo ' '
|
|
||||||
echo "⏰ Session expires automatically in ${TIMEOUT} seconds"
|
|
||||||
echo '━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━'
|
|
||||||
echo ' '
|
|
||||||
echo ' '
|
|
||||||
) | cat
|
|
||||||
|
|
||||||
echo ::group::Starting Background Session
|
|
||||||
echo 'Starting SSH session in background...'
|
|
||||||
./ssh-session.sh "${sshd_pid}" "${cloudflared_pid}" "${TIMEOUT}" "${tunnel_name}" &
|
|
||||||
|
|
||||||
echo 'SSH session is running in background. GitHub Action will continue.'
|
|
||||||
echo 'Session will auto-cleanup after timeout or when processes end.'
|
|
||||||
echo ::endgroup::
|
|
||||||
52
.github/actions/ssh-debug/ssh-session.sh
vendored
52
.github/actions/ssh-debug/ssh-session.sh
vendored
@@ -1,52 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
SSHD_PID=$1
|
|
||||||
CLOUDFLARED_PID=$2
|
|
||||||
SESSION_TIMEOUT=${3:-10000}
|
|
||||||
TUNNEL_NAME=$4
|
|
||||||
|
|
||||||
cleanup() {
|
|
||||||
# Kill processes.
|
|
||||||
for pid in "$SLEEP_PID" "$SSHD_PID" "$CLOUDFLARED_PID"; do
|
|
||||||
if [ -n "$pid" ] && kill -0 "$pid" 2>/dev/null; then
|
|
||||||
kill "$pid" 2>/dev/null || true
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
# Clean up tunnel.
|
|
||||||
if [ -n "$TUNNEL_NAME" ]; then
|
|
||||||
cd "$GITHUB_ACTION_PATH"
|
|
||||||
./cloudflared tunnel delete "$TUNNEL_NAME" 2>/dev/null || {
|
|
||||||
echo "Failed to delete tunnel"
|
|
||||||
}
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "Session ended at $(date)"
|
|
||||||
exit 0
|
|
||||||
}
|
|
||||||
|
|
||||||
# Trap signals to ensure cleanup.
|
|
||||||
trap cleanup SIGTERM SIGINT SIGQUIT SIGHUP EXIT
|
|
||||||
|
|
||||||
# Wait for timeout or until processes die.
|
|
||||||
sleep "$SESSION_TIMEOUT" &
|
|
||||||
SLEEP_PID=$!
|
|
||||||
|
|
||||||
# Monitor processes
|
|
||||||
while kill -0 "$SLEEP_PID" 2>/dev/null; do
|
|
||||||
# Check SSH daemon.
|
|
||||||
if ! kill -0 "$SSHD_PID" 2>/dev/null; then
|
|
||||||
echo "SSH daemon died at $(date)"
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Check cloudflared,
|
|
||||||
if ! kill -0 "$CLOUDFLARED_PID" 2>/dev/null; then
|
|
||||||
echo "Cloudflared died at $(date)"
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
|
|
||||||
sleep 10
|
|
||||||
done
|
|
||||||
|
|
||||||
cleanup
|
|
||||||
25
.github/actions/ssh-debug/sshd_config.template
vendored
25
.github/actions/ssh-debug/sshd_config.template
vendored
@@ -1,25 +0,0 @@
|
|||||||
Port 2222
|
|
||||||
HostKey $PWD/ssh_host_rsa_key
|
|
||||||
PidFile $PWD/sshd.pid
|
|
||||||
|
|
||||||
# Connection settings
|
|
||||||
ClientAliveInterval 30
|
|
||||||
ClientAliveCountMax 10
|
|
||||||
MaxStartups 10
|
|
||||||
LoginGraceTime 120
|
|
||||||
|
|
||||||
# Allow TCP forwarding for tunneling
|
|
||||||
AllowTcpForwarding yes
|
|
||||||
|
|
||||||
# Try to prevent timeouts
|
|
||||||
TCPKeepAlive yes
|
|
||||||
|
|
||||||
# Security
|
|
||||||
TrustedUserCAKeys /etc/ssh/ca.pub
|
|
||||||
PubkeyAuthentication yes
|
|
||||||
PasswordAuthentication no
|
|
||||||
|
|
||||||
AuthorizedPrincipalsCommand /bin/bash -c "echo '%t %k' | ssh-keygen -L -f - | grep -A1 Principals"
|
|
||||||
AuthorizedPrincipalsCommandUser nobody
|
|
||||||
|
|
||||||
PubkeyAcceptedKeyTypes ssh-rsa,ssh-ed25519,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,ssh-ed25519-cert-v01@openssh.com,ecdsa-sha2-nistp256-cert-v01@openssh.com,ecdsa-sha2-nistp384-cert-v01@openssh.com,ecdsa-sha2-nistp521-cert-v01@openssh.com,rsa-sha2-256-cert-v01@openssh.com,rsa-sha2-512-cert-v01@openssh.com
|
|
||||||
10
.github/workflows/archaeologist-dig.yml
vendored
10
.github/workflows/archaeologist-dig.yml
vendored
@@ -3,21 +3,17 @@ name: Archaeologist
|
|||||||
on:
|
on:
|
||||||
pull_request:
|
pull_request:
|
||||||
|
|
||||||
permissions: {}
|
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
archaeologist-dig:
|
archaeologist-dig:
|
||||||
name: Archaeologist Dig
|
name: Archaeologist Dig
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout Electron
|
- name: Checkout Electron
|
||||||
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8
|
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 #v4.0.2
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
- name: Setup Node.js/npm
|
- name: Setup Node.js/npm
|
||||||
uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903
|
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020
|
||||||
with:
|
with:
|
||||||
node-version: 20.19.x
|
node-version: 20.19.x
|
||||||
- name: Setting Up Dig Site
|
- name: Setting Up Dig Site
|
||||||
@@ -45,7 +41,7 @@ jobs:
|
|||||||
sha-file: .dig-old
|
sha-file: .dig-old
|
||||||
filename: electron.old.d.ts
|
filename: electron.old.d.ts
|
||||||
- name: Upload artifacts
|
- name: Upload artifacts
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 #v5.0.0
|
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 #v4.6.2
|
||||||
with:
|
with:
|
||||||
name: artifacts
|
name: artifacts
|
||||||
path: electron/artifacts
|
path: electron/artifacts
|
||||||
|
|||||||
29
.github/workflows/audit-branch-ci.yml
vendored
29
.github/workflows/audit-branch-ci.yml
vendored
@@ -15,13 +15,8 @@ jobs:
|
|||||||
permissions:
|
permissions:
|
||||||
contents: read
|
contents: read
|
||||||
steps:
|
steps:
|
||||||
- name: Setup Node.js
|
- run: npm install @actions/cache @electron/fiddle-core
|
||||||
uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6.0.0
|
- uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1
|
||||||
with:
|
|
||||||
node-version: 22.17.x
|
|
||||||
- run: npm install @actions/cache@4.0.3 @electron/fiddle-core@2.0.1
|
|
||||||
- uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0
|
|
||||||
id: audit-errors
|
|
||||||
with:
|
with:
|
||||||
github-token: ${{ secrets.GITHUB_TOKEN }}
|
github-token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
script: |
|
script: |
|
||||||
@@ -33,7 +28,7 @@ jobs:
|
|||||||
// Only want the most recent workflow run that wasn't skipped or cancelled
|
// Only want the most recent workflow run that wasn't skipped or cancelled
|
||||||
const isValidWorkflowRun = (run) => !['skipped', 'cancelled'].includes(run.conclusion);
|
const isValidWorkflowRun = (run) => !['skipped', 'cancelled'].includes(run.conclusion);
|
||||||
|
|
||||||
const versions = await ElectronVersions.create({ ignoreCache: true });
|
const versions = await ElectronVersions.create(undefined, { ignoreCache: true });
|
||||||
const branches = versions.supportedMajors.map((branch) => `${branch}-x-y`);
|
const branches = versions.supportedMajors.map((branch) => `${branch}-x-y`);
|
||||||
|
|
||||||
for (const branch of ["main", ...branches]) {
|
for (const branch of ["main", ...branches]) {
|
||||||
@@ -57,25 +52,18 @@ jobs:
|
|||||||
|
|
||||||
// Check for runs which had error annotations
|
// Check for runs which had error annotations
|
||||||
for (const checkRun of Array.from(latestCheckRuns.values())) {
|
for (const checkRun of Array.from(latestCheckRuns.values())) {
|
||||||
if (checkRun.name === "Audit CI on Branches") {
|
|
||||||
continue; // Skip the audit workflow itself
|
|
||||||
}
|
|
||||||
|
|
||||||
const annotations = (await github.rest.checks.listAnnotations({
|
const annotations = (await github.rest.checks.listAnnotations({
|
||||||
owner: "electron",
|
owner: "electron",
|
||||||
repo: "electron",
|
repo: "electron",
|
||||||
check_run_id: checkRun.id,
|
check_run_id: checkRun.id,
|
||||||
})).data ?? [];
|
})).data ?? [];
|
||||||
|
console.log(checkRun);
|
||||||
|
console.log(annotations);
|
||||||
|
|
||||||
if (
|
if (
|
||||||
annotations.find(
|
annotations.find(
|
||||||
({ annotation_level, message }) =>
|
({ annotation_level, message }) =>
|
||||||
annotation_level === "failure" &&
|
annotation_level === 'failure' && !message.startsWith("Process completed with exit code")
|
||||||
!message.startsWith("Process completed with exit code") &&
|
|
||||||
!message.startsWith("Response status code does not indicate success") &&
|
|
||||||
!message.startsWith("The hosted runner lost communication with the server") &&
|
|
||||||
!/Unable to make request/.test(message) &&
|
|
||||||
!/The requested URL returned error/.test(message),
|
|
||||||
)
|
)
|
||||||
) {
|
) {
|
||||||
checkRun.hasErrorAnnotations = true;
|
checkRun.hasErrorAnnotations = true;
|
||||||
@@ -132,7 +120,6 @@ jobs:
|
|||||||
|
|
||||||
// Set this as failed so it's easy to scan runs to find failures
|
// Set this as failed so it's easy to scan runs to find failures
|
||||||
if (runsWithErrors.find((run) => !run.isStale)) {
|
if (runsWithErrors.find((run) => !run.isStale)) {
|
||||||
core.setOutput('errorsFound', true);
|
|
||||||
process.exitCode = 1;
|
process.exitCode = 1;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@@ -141,8 +128,8 @@ jobs:
|
|||||||
|
|
||||||
await core.summary.write();
|
await core.summary.write();
|
||||||
- name: Send Slack message if errors
|
- name: Send Slack message if errors
|
||||||
if: ${{ always() && steps.audit-errors.outputs.errorsFound && github.ref == 'refs/heads/main' }}
|
if: failure()
|
||||||
uses: slackapi/slack-github-action@91efab103c0de0a537f72a35f6b8cda0ee76bf0a # v2.1.1
|
uses: slackapi/slack-github-action@b0fa283ad8fea605de13dc3f449259339835fc52 # v2.1.0
|
||||||
with:
|
with:
|
||||||
payload: |
|
payload: |
|
||||||
link: "https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}"
|
link: "https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}"
|
||||||
|
|||||||
2
.github/workflows/branch-created.yml
vendored
2
.github/workflows/branch-created.yml
vendored
@@ -75,7 +75,7 @@ jobs:
|
|||||||
org: electron
|
org: electron
|
||||||
- name: Generate Release Project Board Metadata
|
- name: Generate Release Project Board Metadata
|
||||||
if: ${{ steps.check-major-version.outputs.MAJOR }}
|
if: ${{ steps.check-major-version.outputs.MAJOR }}
|
||||||
uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0
|
uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1
|
||||||
id: generate-project-metadata
|
id: generate-project-metadata
|
||||||
with:
|
with:
|
||||||
script: |
|
script: |
|
||||||
|
|||||||
82
.github/workflows/build-git-cache.yml
vendored
82
.github/workflows/build-git-cache.yml
vendored
@@ -1,82 +0,0 @@
|
|||||||
name: Build Git Cache
|
|
||||||
# This workflow updates git cache on the cross-instance cache volumes
|
|
||||||
# It runs daily at midnight.
|
|
||||||
|
|
||||||
on:
|
|
||||||
schedule:
|
|
||||||
- cron: "0 0 * * *"
|
|
||||||
|
|
||||||
permissions: {}
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
build-git-cache-linux:
|
|
||||||
runs-on: electron-arc-centralus-linux-amd64-32core
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
container:
|
|
||||||
image: ghcr.io/electron/build:bc2f48b2415a670de18d13605b1cf0eb5fdbaae1
|
|
||||||
options: --user root
|
|
||||||
volumes:
|
|
||||||
- /mnt/cross-instance-cache:/mnt/cross-instance-cache
|
|
||||||
env:
|
|
||||||
CHROMIUM_GIT_COOKIE: ${{ secrets.CHROMIUM_GIT_COOKIE }}
|
|
||||||
GCLIENT_EXTRA_ARGS: '--custom-var=checkout_arm=True --custom-var=checkout_arm64=True'
|
|
||||||
steps:
|
|
||||||
- name: Checkout Electron
|
|
||||||
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8
|
|
||||||
with:
|
|
||||||
path: src/electron
|
|
||||||
fetch-depth: 0
|
|
||||||
- name: Build Git Cache
|
|
||||||
uses: ./src/electron/.github/actions/build-git-cache
|
|
||||||
with:
|
|
||||||
target-platform: linux
|
|
||||||
|
|
||||||
build-git-cache-windows:
|
|
||||||
runs-on: electron-arc-centralus-linux-amd64-32core
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
container:
|
|
||||||
image: ghcr.io/electron/build:bc2f48b2415a670de18d13605b1cf0eb5fdbaae1
|
|
||||||
options: --user root --device /dev/fuse --cap-add SYS_ADMIN
|
|
||||||
volumes:
|
|
||||||
- /mnt/win-cache:/mnt/win-cache
|
|
||||||
env:
|
|
||||||
CHROMIUM_GIT_COOKIE: ${{ secrets.CHROMIUM_GIT_COOKIE }}
|
|
||||||
GCLIENT_EXTRA_ARGS: '--custom-var=checkout_win=True'
|
|
||||||
TARGET_OS: 'win'
|
|
||||||
steps:
|
|
||||||
- name: Checkout Electron
|
|
||||||
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8
|
|
||||||
with:
|
|
||||||
path: src/electron
|
|
||||||
fetch-depth: 0
|
|
||||||
- name: Build Git Cache
|
|
||||||
uses: ./src/electron/.github/actions/build-git-cache
|
|
||||||
with:
|
|
||||||
target-platform: win
|
|
||||||
|
|
||||||
build-git-cache-macos:
|
|
||||||
runs-on: electron-arc-centralus-linux-amd64-32core
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
# This job updates the same git cache as linux, so it needs to run after the linux one.
|
|
||||||
needs: build-git-cache-linux
|
|
||||||
container:
|
|
||||||
image: ghcr.io/electron/build:bc2f48b2415a670de18d13605b1cf0eb5fdbaae1
|
|
||||||
options: --user root
|
|
||||||
volumes:
|
|
||||||
- /mnt/cross-instance-cache:/mnt/cross-instance-cache
|
|
||||||
env:
|
|
||||||
CHROMIUM_GIT_COOKIE: ${{ secrets.CHROMIUM_GIT_COOKIE }}
|
|
||||||
GCLIENT_EXTRA_ARGS: '--custom-var=checkout_mac=True --custom-var=host_os=mac'
|
|
||||||
steps:
|
|
||||||
- name: Checkout Electron
|
|
||||||
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8
|
|
||||||
with:
|
|
||||||
path: src/electron
|
|
||||||
fetch-depth: 0
|
|
||||||
- name: Build Git Cache
|
|
||||||
uses: ./src/electron/.github/actions/build-git-cache
|
|
||||||
with:
|
|
||||||
target-platform: macos
|
|
||||||
111
.github/workflows/build.yml
vendored
111
.github/workflows/build.yml
vendored
@@ -6,7 +6,7 @@ on:
|
|||||||
build-image-sha:
|
build-image-sha:
|
||||||
type: string
|
type: string
|
||||||
description: 'SHA for electron/build image'
|
description: 'SHA for electron/build image'
|
||||||
default: '933c7d6ff6802706875270bec2e3c891cf8add3f'
|
default: '424eedbf277ad9749ffa9219068aa72ed4a5e373'
|
||||||
required: true
|
required: true
|
||||||
skip-macos:
|
skip-macos:
|
||||||
type: boolean
|
type: boolean
|
||||||
@@ -28,11 +28,6 @@ on:
|
|||||||
description: 'Skip lint check'
|
description: 'Skip lint check'
|
||||||
default: false
|
default: false
|
||||||
required: false
|
required: false
|
||||||
enable-ssh:
|
|
||||||
description: 'Enable SSH debugging'
|
|
||||||
required: false
|
|
||||||
type: boolean
|
|
||||||
default: false
|
|
||||||
push:
|
push:
|
||||||
branches:
|
branches:
|
||||||
- main
|
- main
|
||||||
@@ -43,13 +38,10 @@ defaults:
|
|||||||
run:
|
run:
|
||||||
shell: bash
|
shell: bash
|
||||||
|
|
||||||
permissions: {}
|
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
setup:
|
setup:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
permissions:
|
permissions:
|
||||||
contents: read
|
|
||||||
pull-requests: read
|
pull-requests: read
|
||||||
outputs:
|
outputs:
|
||||||
docs: ${{ steps.filter.outputs.docs }}
|
docs: ${{ steps.filter.outputs.docs }}
|
||||||
@@ -57,7 +49,7 @@ jobs:
|
|||||||
build-image-sha: ${{ steps.set-output.outputs.build-image-sha }}
|
build-image-sha: ${{ steps.set-output.outputs.build-image-sha }}
|
||||||
docs-only: ${{ steps.set-output.outputs.docs-only }}
|
docs-only: ${{ steps.set-output.outputs.docs-only }}
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8
|
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 #v4.0.2
|
||||||
with:
|
with:
|
||||||
ref: ${{ github.event.pull_request.head.sha }}
|
ref: ${{ github.event.pull_request.head.sha }}
|
||||||
- uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3.0.2
|
- uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3.0.2
|
||||||
@@ -66,17 +58,13 @@ jobs:
|
|||||||
filters: |
|
filters: |
|
||||||
docs:
|
docs:
|
||||||
- 'docs/**'
|
- 'docs/**'
|
||||||
- README.md
|
|
||||||
- SECURITY.md
|
|
||||||
- CONTRIBUTING.md
|
|
||||||
- CODE_OF_CONDUCT.md
|
|
||||||
src:
|
src:
|
||||||
- '!docs/**'
|
- '!docs/**'
|
||||||
- name: Set Outputs for Build Image SHA & Docs Only
|
- name: Set Outputs for Build Image SHA & Docs Only
|
||||||
id: set-output
|
id: set-output
|
||||||
run: |
|
run: |
|
||||||
if [ -z "${{ inputs.build-image-sha }}" ]; then
|
if [ -z "${{ inputs.build-image-sha }}" ]; then
|
||||||
echo "build-image-sha=933c7d6ff6802706875270bec2e3c891cf8add3f" >> "$GITHUB_OUTPUT"
|
echo "build-image-sha=424eedbf277ad9749ffa9219068aa72ed4a5e373" >> "$GITHUB_OUTPUT"
|
||||||
else
|
else
|
||||||
echo "build-image-sha=${{ inputs.build-image-sha }}" >> "$GITHUB_OUTPUT"
|
echo "build-image-sha=${{ inputs.build-image-sha }}" >> "$GITHUB_OUTPUT"
|
||||||
fi
|
fi
|
||||||
@@ -87,30 +75,24 @@ jobs:
|
|||||||
needs: setup
|
needs: setup
|
||||||
if: ${{ !inputs.skip-lint }}
|
if: ${{ !inputs.skip-lint }}
|
||||||
uses: ./.github/workflows/pipeline-electron-lint.yml
|
uses: ./.github/workflows/pipeline-electron-lint.yml
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
with:
|
with:
|
||||||
container: '{"image":"ghcr.io/electron/build:${{ needs.setup.outputs.build-image-sha }}","options":"--user root"}'
|
container: '{"image":"ghcr.io/electron/build:${{ needs.setup.outputs.build-image-sha }}","options":"--user root"}'
|
||||||
secrets: inherit
|
secrets: inherit
|
||||||
|
|
||||||
# Docs Only Jobs
|
# Docs Only Jobs
|
||||||
docs-only:
|
docs-only:
|
||||||
needs: [setup, checkout-linux]
|
needs: setup
|
||||||
if: ${{ needs.setup.outputs.docs-only == 'true' }}
|
if: ${{ needs.setup.outputs.docs-only == 'true' }}
|
||||||
uses: ./.github/workflows/pipeline-electron-docs-only.yml
|
uses: ./.github/workflows/pipeline-electron-docs-only.yml
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
with:
|
with:
|
||||||
container: '{"image":"ghcr.io/electron/build:${{ needs.checkout-linux.outputs.build-image-sha }}","options":"--user root","volumes":["/mnt/cross-instance-cache:/mnt/cross-instance-cache"]}'
|
container: '{"image":"ghcr.io/electron/build:${{ needs.setup.outputs.build-image-sha }}","options":"--user root"}'
|
||||||
secrets: inherit
|
secrets: inherit
|
||||||
|
|
||||||
# Checkout Jobs
|
# Checkout Jobs
|
||||||
checkout-macos:
|
checkout-macos:
|
||||||
needs: setup
|
needs: setup
|
||||||
if: ${{ needs.setup.outputs.src == 'true' && !inputs.skip-macos}}
|
if: ${{ needs.setup.outputs.src == 'true' && !inputs.skip-macos}}
|
||||||
runs-on: electron-arc-centralus-linux-amd64-32core
|
runs-on: electron-arc-linux-amd64-32core
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
container:
|
container:
|
||||||
image: ghcr.io/electron/build:${{ needs.setup.outputs.build-image-sha }}
|
image: ghcr.io/electron/build:${{ needs.setup.outputs.build-image-sha }}
|
||||||
options: --user root
|
options: --user root
|
||||||
@@ -118,13 +100,14 @@ jobs:
|
|||||||
- /mnt/cross-instance-cache:/mnt/cross-instance-cache
|
- /mnt/cross-instance-cache:/mnt/cross-instance-cache
|
||||||
- /var/run/sas:/var/run/sas
|
- /var/run/sas:/var/run/sas
|
||||||
env:
|
env:
|
||||||
CHROMIUM_GIT_COOKIE: ${{ secrets.CHROMIUM_GIT_COOKIE }}
|
CHROMIUM_GIT_AUTH: ${{ secrets.CHROMIUM_GIT_AUTH }}
|
||||||
|
CHROMIUM_GIT_USER: ${{ secrets.CHROMIUM_GIT_USER }}
|
||||||
GCLIENT_EXTRA_ARGS: '--custom-var=checkout_mac=True --custom-var=host_os=mac'
|
GCLIENT_EXTRA_ARGS: '--custom-var=checkout_mac=True --custom-var=host_os=mac'
|
||||||
outputs:
|
outputs:
|
||||||
build-image-sha: ${{ needs.setup.outputs.build-image-sha }}
|
build-image-sha: ${{ needs.setup.outputs.build-image-sha }}
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout Electron
|
- name: Checkout Electron
|
||||||
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8
|
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
|
||||||
with:
|
with:
|
||||||
path: src/electron
|
path: src/electron
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
@@ -137,10 +120,8 @@ jobs:
|
|||||||
|
|
||||||
checkout-linux:
|
checkout-linux:
|
||||||
needs: setup
|
needs: setup
|
||||||
if: ${{ !inputs.skip-linux}}
|
if: ${{ needs.setup.outputs.src == 'true' && !inputs.skip-linux}}
|
||||||
runs-on: electron-arc-centralus-linux-amd64-32core
|
runs-on: electron-arc-linux-amd64-32core
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
container:
|
container:
|
||||||
image: ghcr.io/electron/build:${{ needs.setup.outputs.build-image-sha }}
|
image: ghcr.io/electron/build:${{ needs.setup.outputs.build-image-sha }}
|
||||||
options: --user root
|
options: --user root
|
||||||
@@ -148,7 +129,8 @@ jobs:
|
|||||||
- /mnt/cross-instance-cache:/mnt/cross-instance-cache
|
- /mnt/cross-instance-cache:/mnt/cross-instance-cache
|
||||||
- /var/run/sas:/var/run/sas
|
- /var/run/sas:/var/run/sas
|
||||||
env:
|
env:
|
||||||
CHROMIUM_GIT_COOKIE: ${{ secrets.CHROMIUM_GIT_COOKIE }}
|
CHROMIUM_GIT_AUTH: ${{ secrets.CHROMIUM_GIT_AUTH }}
|
||||||
|
CHROMIUM_GIT_USER: ${{ secrets.CHROMIUM_GIT_USER }}
|
||||||
DD_API_KEY: ${{ secrets.DD_API_KEY }}
|
DD_API_KEY: ${{ secrets.DD_API_KEY }}
|
||||||
GCLIENT_EXTRA_ARGS: '--custom-var=checkout_arm=True --custom-var=checkout_arm64=True'
|
GCLIENT_EXTRA_ARGS: '--custom-var=checkout_arm=True --custom-var=checkout_arm64=True'
|
||||||
PATCH_UP_APP_CREDS: ${{ secrets.PATCH_UP_APP_CREDS }}
|
PATCH_UP_APP_CREDS: ${{ secrets.PATCH_UP_APP_CREDS }}
|
||||||
@@ -156,7 +138,7 @@ jobs:
|
|||||||
build-image-sha: ${{ needs.setup.outputs.build-image-sha}}
|
build-image-sha: ${{ needs.setup.outputs.build-image-sha}}
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout Electron
|
- name: Checkout Electron
|
||||||
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8
|
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
|
||||||
with:
|
with:
|
||||||
path: src/electron
|
path: src/electron
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
@@ -169,9 +151,7 @@ jobs:
|
|||||||
checkout-windows:
|
checkout-windows:
|
||||||
needs: setup
|
needs: setup
|
||||||
if: ${{ needs.setup.outputs.src == 'true' && !inputs.skip-windows }}
|
if: ${{ needs.setup.outputs.src == 'true' && !inputs.skip-windows }}
|
||||||
runs-on: electron-arc-centralus-linux-amd64-32core
|
runs-on: electron-arc-linux-amd64-32core
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
container:
|
container:
|
||||||
image: ghcr.io/electron/build:${{ needs.setup.outputs.build-image-sha }}
|
image: ghcr.io/electron/build:${{ needs.setup.outputs.build-image-sha }}
|
||||||
options: --user root --device /dev/fuse --cap-add SYS_ADMIN
|
options: --user root --device /dev/fuse --cap-add SYS_ADMIN
|
||||||
@@ -179,8 +159,8 @@ jobs:
|
|||||||
- /mnt/win-cache:/mnt/win-cache
|
- /mnt/win-cache:/mnt/win-cache
|
||||||
- /var/run/sas:/var/run/sas
|
- /var/run/sas:/var/run/sas
|
||||||
env:
|
env:
|
||||||
CHROMIUM_GIT_COOKIE: ${{ secrets.CHROMIUM_GIT_COOKIE }}
|
CHROMIUM_GIT_AUTH: ${{ secrets.CHROMIUM_GIT_AUTH }}
|
||||||
CHROMIUM_GIT_COOKIE_WINDOWS_STRING: ${{ secrets.CHROMIUM_GIT_COOKIE_WINDOWS_STRING }}
|
CHROMIUM_GIT_USER: ${{ secrets.CHROMIUM_GIT_USER }}
|
||||||
GCLIENT_EXTRA_ARGS: '--custom-var=checkout_win=True'
|
GCLIENT_EXTRA_ARGS: '--custom-var=checkout_win=True'
|
||||||
TARGET_OS: 'win'
|
TARGET_OS: 'win'
|
||||||
ELECTRON_DEPOT_TOOLS_WIN_TOOLCHAIN: '1'
|
ELECTRON_DEPOT_TOOLS_WIN_TOOLCHAIN: '1'
|
||||||
@@ -188,7 +168,7 @@ jobs:
|
|||||||
build-image-sha: ${{ needs.setup.outputs.build-image-sha}}
|
build-image-sha: ${{ needs.setup.outputs.build-image-sha}}
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout Electron
|
- name: Checkout Electron
|
||||||
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8
|
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
|
||||||
with:
|
with:
|
||||||
path: src/electron
|
path: src/electron
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
@@ -202,39 +182,32 @@ jobs:
|
|||||||
# GN Check Jobs
|
# GN Check Jobs
|
||||||
macos-gn-check:
|
macos-gn-check:
|
||||||
uses: ./.github/workflows/pipeline-segment-electron-gn-check.yml
|
uses: ./.github/workflows/pipeline-segment-electron-gn-check.yml
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
needs: checkout-macos
|
needs: checkout-macos
|
||||||
with:
|
with:
|
||||||
target-platform: macos
|
target-platform: macos
|
||||||
target-archs: x64 arm64
|
target-archs: x64 arm64
|
||||||
check-runs-on: macos-15
|
check-runs-on: macos-14
|
||||||
gn-build-type: testing
|
gn-build-type: testing
|
||||||
secrets: inherit
|
secrets: inherit
|
||||||
|
|
||||||
linux-gn-check:
|
linux-gn-check:
|
||||||
uses: ./.github/workflows/pipeline-segment-electron-gn-check.yml
|
uses: ./.github/workflows/pipeline-segment-electron-gn-check.yml
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
needs: checkout-linux
|
needs: checkout-linux
|
||||||
if: ${{ needs.setup.outputs.src == 'true' }}
|
|
||||||
with:
|
with:
|
||||||
target-platform: linux
|
target-platform: linux
|
||||||
target-archs: x64 arm arm64
|
target-archs: x64 arm arm64
|
||||||
check-runs-on: electron-arc-centralus-linux-amd64-8core
|
check-runs-on: electron-arc-linux-amd64-8core
|
||||||
check-container: '{"image":"ghcr.io/electron/build:${{ needs.checkout-linux.outputs.build-image-sha }}","options":"--user root","volumes":["/mnt/cross-instance-cache:/mnt/cross-instance-cache"]}'
|
check-container: '{"image":"ghcr.io/electron/build:${{ needs.checkout-linux.outputs.build-image-sha }}","options":"--user root","volumes":["/mnt/cross-instance-cache:/mnt/cross-instance-cache"]}'
|
||||||
gn-build-type: testing
|
gn-build-type: testing
|
||||||
secrets: inherit
|
secrets: inherit
|
||||||
|
|
||||||
windows-gn-check:
|
windows-gn-check:
|
||||||
uses: ./.github/workflows/pipeline-segment-electron-gn-check.yml
|
uses: ./.github/workflows/pipeline-segment-electron-gn-check.yml
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
needs: checkout-windows
|
needs: checkout-windows
|
||||||
with:
|
with:
|
||||||
target-platform: win
|
target-platform: win
|
||||||
target-archs: x64 x86 arm64
|
target-archs: x64 x86 arm64
|
||||||
check-runs-on: electron-arc-centralus-linux-amd64-8core
|
check-runs-on: electron-arc-linux-amd64-8core
|
||||||
check-container: '{"image":"ghcr.io/electron/build:${{ needs.checkout-windows.outputs.build-image-sha }}","options":"--user root --device /dev/fuse --cap-add SYS_ADMIN","volumes":["/mnt/win-cache:/mnt/win-cache"]}'
|
check-container: '{"image":"ghcr.io/electron/build:${{ needs.checkout-windows.outputs.build-image-sha }}","options":"--user root --device /dev/fuse --cap-add SYS_ADMIN","volumes":["/mnt/win-cache:/mnt/win-cache"]}'
|
||||||
gn-build-type: testing
|
gn-build-type: testing
|
||||||
secrets: inherit
|
secrets: inherit
|
||||||
@@ -248,15 +221,14 @@ jobs:
|
|||||||
uses: ./.github/workflows/pipeline-electron-build-and-test.yml
|
uses: ./.github/workflows/pipeline-electron-build-and-test.yml
|
||||||
needs: checkout-macos
|
needs: checkout-macos
|
||||||
with:
|
with:
|
||||||
build-runs-on: macos-15-xlarge
|
build-runs-on: macos-14-xlarge
|
||||||
test-runs-on: macos-15-large
|
test-runs-on: macos-13
|
||||||
target-platform: macos
|
target-platform: macos
|
||||||
target-arch: x64
|
target-arch: x64
|
||||||
is-release: false
|
is-release: false
|
||||||
gn-build-type: testing
|
gn-build-type: testing
|
||||||
generate-symbols: false
|
generate-symbols: false
|
||||||
upload-to-storage: '0'
|
upload-to-storage: '0'
|
||||||
enable-ssh: ${{ inputs.enable-ssh || false }}
|
|
||||||
secrets: inherit
|
secrets: inherit
|
||||||
|
|
||||||
macos-arm64:
|
macos-arm64:
|
||||||
@@ -267,15 +239,14 @@ jobs:
|
|||||||
uses: ./.github/workflows/pipeline-electron-build-and-test.yml
|
uses: ./.github/workflows/pipeline-electron-build-and-test.yml
|
||||||
needs: checkout-macos
|
needs: checkout-macos
|
||||||
with:
|
with:
|
||||||
build-runs-on: macos-15-xlarge
|
build-runs-on: macos-14-xlarge
|
||||||
test-runs-on: macos-15
|
test-runs-on: macos-14
|
||||||
target-platform: macos
|
target-platform: macos
|
||||||
target-arch: arm64
|
target-arch: arm64
|
||||||
is-release: false
|
is-release: false
|
||||||
gn-build-type: testing
|
gn-build-type: testing
|
||||||
generate-symbols: false
|
generate-symbols: false
|
||||||
upload-to-storage: '0'
|
upload-to-storage: '0'
|
||||||
enable-ssh: ${{ inputs.enable-ssh || false }}
|
|
||||||
secrets: inherit
|
secrets: inherit
|
||||||
|
|
||||||
linux-x64:
|
linux-x64:
|
||||||
@@ -285,10 +256,9 @@ jobs:
|
|||||||
pull-requests: read
|
pull-requests: read
|
||||||
uses: ./.github/workflows/pipeline-electron-build-and-test-and-nan.yml
|
uses: ./.github/workflows/pipeline-electron-build-and-test-and-nan.yml
|
||||||
needs: checkout-linux
|
needs: checkout-linux
|
||||||
if: ${{ needs.setup.outputs.src == 'true' }}
|
|
||||||
with:
|
with:
|
||||||
build-runs-on: electron-arc-centralus-linux-amd64-32core
|
build-runs-on: electron-arc-linux-amd64-32core
|
||||||
test-runs-on: electron-arc-centralus-linux-amd64-4core
|
test-runs-on: electron-arc-linux-amd64-4core
|
||||||
build-container: '{"image":"ghcr.io/electron/build:${{ needs.checkout-linux.outputs.build-image-sha }}","options":"--user root","volumes":["/mnt/cross-instance-cache:/mnt/cross-instance-cache"]}'
|
build-container: '{"image":"ghcr.io/electron/build:${{ needs.checkout-linux.outputs.build-image-sha }}","options":"--user root","volumes":["/mnt/cross-instance-cache:/mnt/cross-instance-cache"]}'
|
||||||
test-container: '{"image":"ghcr.io/electron/build:${{ needs.checkout-linux.outputs.build-image-sha }}","options":"--user root --privileged --init"}'
|
test-container: '{"image":"ghcr.io/electron/build:${{ needs.checkout-linux.outputs.build-image-sha }}","options":"--user root --privileged --init"}'
|
||||||
target-platform: linux
|
target-platform: linux
|
||||||
@@ -306,10 +276,9 @@ jobs:
|
|||||||
pull-requests: read
|
pull-requests: read
|
||||||
uses: ./.github/workflows/pipeline-electron-build-and-test.yml
|
uses: ./.github/workflows/pipeline-electron-build-and-test.yml
|
||||||
needs: checkout-linux
|
needs: checkout-linux
|
||||||
if: ${{ needs.setup.outputs.src == 'true' }}
|
|
||||||
with:
|
with:
|
||||||
build-runs-on: electron-arc-centralus-linux-amd64-32core
|
build-runs-on: electron-arc-linux-amd64-32core
|
||||||
test-runs-on: electron-arc-centralus-linux-amd64-4core
|
test-runs-on: electron-arc-linux-amd64-4core
|
||||||
build-container: '{"image":"ghcr.io/electron/build:${{ needs.checkout-linux.outputs.build-image-sha }}","options":"--user root","volumes":["/mnt/cross-instance-cache:/mnt/cross-instance-cache"]}'
|
build-container: '{"image":"ghcr.io/electron/build:${{ needs.checkout-linux.outputs.build-image-sha }}","options":"--user root","volumes":["/mnt/cross-instance-cache:/mnt/cross-instance-cache"]}'
|
||||||
test-container: '{"image":"ghcr.io/electron/build:${{ needs.checkout-linux.outputs.build-image-sha }}","options":"--user root --privileged --init"}'
|
test-container: '{"image":"ghcr.io/electron/build:${{ needs.checkout-linux.outputs.build-image-sha }}","options":"--user root --privileged --init"}'
|
||||||
target-platform: linux
|
target-platform: linux
|
||||||
@@ -328,12 +297,11 @@ jobs:
|
|||||||
pull-requests: read
|
pull-requests: read
|
||||||
uses: ./.github/workflows/pipeline-electron-build-and-test.yml
|
uses: ./.github/workflows/pipeline-electron-build-and-test.yml
|
||||||
needs: checkout-linux
|
needs: checkout-linux
|
||||||
if: ${{ needs.setup.outputs.src == 'true' }}
|
|
||||||
with:
|
with:
|
||||||
build-runs-on: electron-arc-centralus-linux-amd64-32core
|
build-runs-on: electron-arc-linux-amd64-32core
|
||||||
test-runs-on: electron-arc-centralus-linux-arm64-4core
|
test-runs-on: electron-arc-linux-arm64-4core
|
||||||
build-container: '{"image":"ghcr.io/electron/build:${{ needs.checkout-linux.outputs.build-image-sha }}","options":"--user root","volumes":["/mnt/cross-instance-cache:/mnt/cross-instance-cache"]}'
|
build-container: '{"image":"ghcr.io/electron/build:${{ needs.checkout-linux.outputs.build-image-sha }}","options":"--user root","volumes":["/mnt/cross-instance-cache:/mnt/cross-instance-cache"]}'
|
||||||
test-container: '{"image":"ghcr.io/electron/test:arm32v7-${{ needs.checkout-linux.outputs.build-image-sha }}","options":"--user root --privileged --init --memory=12g","volumes":["/home/runner/externals:/mnt/runner-externals"]}'
|
test-container: '{"image":"ghcr.io/electron/test:arm32v7-${{ needs.checkout-linux.outputs.build-image-sha }}","options":"--user root --privileged --init","volumes":["/home/runner/externals:/mnt/runner-externals"]}'
|
||||||
target-platform: linux
|
target-platform: linux
|
||||||
target-arch: arm
|
target-arch: arm
|
||||||
is-release: false
|
is-release: false
|
||||||
@@ -349,10 +317,9 @@ jobs:
|
|||||||
pull-requests: read
|
pull-requests: read
|
||||||
uses: ./.github/workflows/pipeline-electron-build-and-test.yml
|
uses: ./.github/workflows/pipeline-electron-build-and-test.yml
|
||||||
needs: checkout-linux
|
needs: checkout-linux
|
||||||
if: ${{ needs.setup.outputs.src == 'true' }}
|
|
||||||
with:
|
with:
|
||||||
build-runs-on: electron-arc-centralus-linux-amd64-32core
|
build-runs-on: electron-arc-linux-amd64-32core
|
||||||
test-runs-on: ubuntu-22.04-arm
|
test-runs-on: electron-arc-linux-arm64-4core
|
||||||
build-container: '{"image":"ghcr.io/electron/build:${{ needs.checkout-linux.outputs.build-image-sha }}","options":"--user root","volumes":["/mnt/cross-instance-cache:/mnt/cross-instance-cache"]}'
|
build-container: '{"image":"ghcr.io/electron/build:${{ needs.checkout-linux.outputs.build-image-sha }}","options":"--user root","volumes":["/mnt/cross-instance-cache:/mnt/cross-instance-cache"]}'
|
||||||
test-container: '{"image":"ghcr.io/electron/test:arm64v8-${{ needs.checkout-linux.outputs.build-image-sha }}","options":"--user root --privileged --init"}'
|
test-container: '{"image":"ghcr.io/electron/test:arm64v8-${{ needs.checkout-linux.outputs.build-image-sha }}","options":"--user root --privileged --init"}'
|
||||||
target-platform: linux
|
target-platform: linux
|
||||||
@@ -372,7 +339,7 @@ jobs:
|
|||||||
needs: checkout-windows
|
needs: checkout-windows
|
||||||
if: ${{ needs.setup.outputs.src == 'true' && !inputs.skip-windows }}
|
if: ${{ needs.setup.outputs.src == 'true' && !inputs.skip-windows }}
|
||||||
with:
|
with:
|
||||||
build-runs-on: electron-arc-centralus-windows-amd64-16core
|
build-runs-on: electron-arc-windows-amd64-16core
|
||||||
test-runs-on: windows-latest
|
test-runs-on: windows-latest
|
||||||
target-platform: win
|
target-platform: win
|
||||||
target-arch: x64
|
target-arch: x64
|
||||||
@@ -391,7 +358,7 @@ jobs:
|
|||||||
needs: checkout-windows
|
needs: checkout-windows
|
||||||
if: ${{ needs.setup.outputs.src == 'true' && !inputs.skip-windows }}
|
if: ${{ needs.setup.outputs.src == 'true' && !inputs.skip-windows }}
|
||||||
with:
|
with:
|
||||||
build-runs-on: electron-arc-centralus-windows-amd64-16core
|
build-runs-on: electron-arc-windows-amd64-16core
|
||||||
test-runs-on: windows-latest
|
test-runs-on: windows-latest
|
||||||
target-platform: win
|
target-platform: win
|
||||||
target-arch: x86
|
target-arch: x86
|
||||||
@@ -410,8 +377,8 @@ jobs:
|
|||||||
needs: checkout-windows
|
needs: checkout-windows
|
||||||
if: ${{ needs.setup.outputs.src == 'true' && !inputs.skip-windows }}
|
if: ${{ needs.setup.outputs.src == 'true' && !inputs.skip-windows }}
|
||||||
with:
|
with:
|
||||||
build-runs-on: electron-arc-centralus-windows-amd64-16core
|
build-runs-on: electron-arc-windows-amd64-16core
|
||||||
test-runs-on: windows-11-arm
|
test-runs-on: electron-hosted-windows-arm64-4core
|
||||||
target-platform: win
|
target-platform: win
|
||||||
target-arch: arm64
|
target-arch: arm64
|
||||||
is-release: false
|
is-release: false
|
||||||
@@ -423,8 +390,6 @@ jobs:
|
|||||||
gha-done:
|
gha-done:
|
||||||
name: GitHub Actions Completed
|
name: GitHub Actions Completed
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
needs: [docs-only, macos-x64, macos-arm64, linux-x64, linux-x64-asan, linux-arm, linux-arm64, windows-x64, windows-x86, windows-arm64]
|
needs: [docs-only, macos-x64, macos-arm64, linux-x64, linux-x64-asan, linux-arm, linux-arm64, windows-x64, windows-x86, windows-arm64]
|
||||||
if: always() && !contains(needs.*.result, 'failure')
|
if: always() && !contains(needs.*.result, 'failure')
|
||||||
steps:
|
steps:
|
||||||
|
|||||||
12
.github/workflows/clean-src-cache.yml
vendored
12
.github/workflows/clean-src-cache.yml
vendored
@@ -1,20 +1,16 @@
|
|||||||
name: Clean Source Cache
|
name: Clean Source Cache
|
||||||
|
|
||||||
# Description:
|
description: |
|
||||||
# This workflow cleans up the source cache on the cross-instance cache volume
|
This workflow cleans up the source cache on the cross-instance cache volume
|
||||||
# to free up space. It runs daily at midnight and clears files older than 15 days.
|
to free up space. It runs daily at midnight and clears files older than 15 days.
|
||||||
|
|
||||||
on:
|
on:
|
||||||
schedule:
|
schedule:
|
||||||
- cron: "0 0 * * *"
|
- cron: "0 0 * * *"
|
||||||
|
|
||||||
permissions: {}
|
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
clean-src-cache:
|
clean-src-cache:
|
||||||
runs-on: electron-arc-centralus-linux-amd64-32core
|
runs-on: electron-arc-linux-amd64-32core
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
container:
|
container:
|
||||||
image: ghcr.io/electron/build:bc2f48b2415a670de18d13605b1cf0eb5fdbaae1
|
image: ghcr.io/electron/build:bc2f48b2415a670de18d13605b1cf0eb5fdbaae1
|
||||||
options: --user root
|
options: --user root
|
||||||
|
|||||||
11
.github/workflows/issue-commented.yml
vendored
11
.github/workflows/issue-commented.yml
vendored
@@ -10,24 +10,15 @@ permissions: {}
|
|||||||
jobs:
|
jobs:
|
||||||
issue-commented:
|
issue-commented:
|
||||||
name: Remove blocked/{need-info,need-repro} on comment
|
name: Remove blocked/{need-info,need-repro} on comment
|
||||||
if: ${{ (contains(github.event.issue.labels.*.name, 'blocked/need-repro') || contains(github.event.issue.labels.*.name, 'blocked/need-info ❌')) && github.event.comment.user.type != 'Bot' }}
|
if: ${{ (contains(github.event.issue.labels.*.name, 'blocked/need-repro') || contains(github.event.issue.labels.*.name, 'blocked/need-info ❌')) && !contains(fromJSON('["MEMBER", "OWNER", "COLLABORATOR"]'), github.event.comment.author_association) && github.event.comment.user.type != 'Bot' }}
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Get author association
|
|
||||||
id: get-author-association
|
|
||||||
env:
|
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
run: |
|
|
||||||
AUTHOR_ASSOCIATION=$(gh api /repos/electron/electron/issues/comments/${{ github.event.comment.id }} --jq '.author_association')
|
|
||||||
echo "author_association=$AUTHOR_ASSOCIATION" >> "$GITHUB_OUTPUT"
|
|
||||||
- name: Generate GitHub App token
|
- name: Generate GitHub App token
|
||||||
uses: electron/github-app-auth-action@384fd19694fe7b6dcc9a684746c6976ad78228ae # v1.1.1
|
uses: electron/github-app-auth-action@384fd19694fe7b6dcc9a684746c6976ad78228ae # v1.1.1
|
||||||
if: ${{ !contains(fromJSON('["MEMBER", "OWNER", "COLLABORATOR"]'), steps.get-author-association.outputs.author_association) }}
|
|
||||||
id: generate-token
|
id: generate-token
|
||||||
with:
|
with:
|
||||||
creds: ${{ secrets.ISSUE_TRIAGE_GH_APP_CREDS }}
|
creds: ${{ secrets.ISSUE_TRIAGE_GH_APP_CREDS }}
|
||||||
- name: Remove label
|
- name: Remove label
|
||||||
if: ${{ !contains(fromJSON('["MEMBER", "OWNER", "COLLABORATOR"]'), steps.get-author-association.outputs.author_association) }}
|
|
||||||
env:
|
env:
|
||||||
GITHUB_TOKEN: ${{ steps.generate-token.outputs.token }}
|
GITHUB_TOKEN: ${{ steps.generate-token.outputs.token }}
|
||||||
ISSUE_URL: ${{ github.event.issue.html_url }}
|
ISSUE_URL: ${{ github.event.issue.html_url }}
|
||||||
|
|||||||
9
.github/workflows/issue-labeled.yml
vendored
9
.github/workflows/issue-labeled.yml
vendored
@@ -4,15 +4,14 @@ on:
|
|||||||
issues:
|
issues:
|
||||||
types: [labeled]
|
types: [labeled]
|
||||||
|
|
||||||
permissions: {}
|
permissions: # added using https://github.com/step-security/secure-workflows
|
||||||
|
contents: read
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
issue-labeled-with-status:
|
issue-labeled-with-status:
|
||||||
name: status/{confirmed,reviewed} label added
|
name: status/{confirmed,reviewed} label added
|
||||||
if: github.event.label.name == 'status/confirmed' || github.event.label.name == 'status/reviewed'
|
if: github.event.label.name == 'status/confirmed' || github.event.label.name == 'status/reviewed'
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
steps:
|
steps:
|
||||||
- name: Generate GitHub App token
|
- name: Generate GitHub App token
|
||||||
uses: electron/github-app-auth-action@384fd19694fe7b6dcc9a684746c6976ad78228ae # v1.1.1
|
uses: electron/github-app-auth-action@384fd19694fe7b6dcc9a684746c6976ad78228ae # v1.1.1
|
||||||
@@ -32,8 +31,6 @@ jobs:
|
|||||||
name: blocked/* label added
|
name: blocked/* label added
|
||||||
if: startsWith(github.event.label.name, 'blocked/')
|
if: startsWith(github.event.label.name, 'blocked/')
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
steps:
|
steps:
|
||||||
- name: Generate GitHub App token
|
- name: Generate GitHub App token
|
||||||
uses: electron/github-app-auth-action@384fd19694fe7b6dcc9a684746c6976ad78228ae # v1.1.1
|
uses: electron/github-app-auth-action@384fd19694fe7b6dcc9a684746c6976ad78228ae # v1.1.1
|
||||||
@@ -75,7 +72,7 @@ jobs:
|
|||||||
creds: ${{ secrets.ISSUE_TRIAGE_GH_APP_CREDS }}
|
creds: ${{ secrets.ISSUE_TRIAGE_GH_APP_CREDS }}
|
||||||
- name: Create comment
|
- name: Create comment
|
||||||
if: ${{ steps.check-for-comment.outputs.SHOULD_COMMENT }}
|
if: ${{ steps.check-for-comment.outputs.SHOULD_COMMENT }}
|
||||||
uses: actions-cool/issues-helper@50068f49b7b2b3857270ead65e2d02e4459b022c # v3.6.2
|
uses: actions-cool/issues-helper@a610082f8ac0cf03e357eb8dd0d5e2ba075e017e # v3.6.0
|
||||||
with:
|
with:
|
||||||
actions: 'create-comment'
|
actions: 'create-comment'
|
||||||
token: ${{ steps.generate-token.outputs.token }}
|
token: ${{ steps.generate-token.outputs.token }}
|
||||||
|
|||||||
23
.github/workflows/issue-opened.yml
vendored
23
.github/workflows/issue-opened.yml
vendored
@@ -11,7 +11,6 @@ jobs:
|
|||||||
add-to-issue-triage:
|
add-to-issue-triage:
|
||||||
if: ${{ contains(github.event.issue.labels.*.name, 'bug :beetle:') }}
|
if: ${{ contains(github.event.issue.labels.*.name, 'bug :beetle:') }}
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
permissions: {}
|
|
||||||
steps:
|
steps:
|
||||||
- name: Generate GitHub App token
|
- name: Generate GitHub App token
|
||||||
uses: electron/github-app-auth-action@384fd19694fe7b6dcc9a684746c6976ad78228ae # v1.1.1
|
uses: electron/github-app-auth-action@384fd19694fe7b6dcc9a684746c6976ad78228ae # v1.1.1
|
||||||
@@ -29,7 +28,6 @@ jobs:
|
|||||||
set-labels:
|
set-labels:
|
||||||
if: ${{ contains(github.event.issue.labels.*.name, 'bug :beetle:') }}
|
if: ${{ contains(github.event.issue.labels.*.name, 'bug :beetle:') }}
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
permissions: {}
|
|
||||||
steps:
|
steps:
|
||||||
- name: Generate GitHub App token
|
- name: Generate GitHub App token
|
||||||
uses: electron/github-app-auth-action@384fd19694fe7b6dcc9a684746c6976ad78228ae # v1.1.1
|
uses: electron/github-app-auth-action@384fd19694fe7b6dcc9a684746c6976ad78228ae # v1.1.1
|
||||||
@@ -39,7 +37,7 @@ jobs:
|
|||||||
org: electron
|
org: electron
|
||||||
- run: npm install @electron/fiddle-core@1.3.3 mdast-util-from-markdown@2.0.0 unist-util-select@5.1.0 semver@7.6.0
|
- run: npm install @electron/fiddle-core@1.3.3 mdast-util-from-markdown@2.0.0 unist-util-select@5.1.0 semver@7.6.0
|
||||||
- name: Add labels
|
- name: Add labels
|
||||||
uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0
|
uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1
|
||||||
id: add-labels
|
id: add-labels
|
||||||
env:
|
env:
|
||||||
ISSUE_BODY: ${{ github.event.issue.body }}
|
ISSUE_BODY: ${{ github.event.issue.body }}
|
||||||
@@ -62,8 +60,6 @@ jobs:
|
|||||||
// It's possible for multiple versions to be listed -
|
// It's possible for multiple versions to be listed -
|
||||||
// for now check for comma or space separated version.
|
// for now check for comma or space separated version.
|
||||||
const versions = electronVersion.split(/, | /);
|
const versions = electronVersion.split(/, | /);
|
||||||
let hasSupportedVersion = false;
|
|
||||||
|
|
||||||
for (const version of versions) {
|
for (const version of versions) {
|
||||||
const major = semver.coerce(version, { loose: true })?.major;
|
const major = semver.coerce(version, { loose: true })?.major;
|
||||||
if (major) {
|
if (major) {
|
||||||
@@ -79,20 +75,19 @@ jobs:
|
|||||||
labelExists = true;
|
labelExists = true;
|
||||||
} catch {}
|
} catch {}
|
||||||
|
|
||||||
const { ElectronVersions } = await import('${{ github.workspace }}/node_modules/@electron/fiddle-core/dist/index.js');
|
if (labelExists) {
|
||||||
const electronVersions = await ElectronVersions.create(undefined, { ignoreCache: true });
|
// Check if it's an unsupported major
|
||||||
const validVersions = [...electronVersions.supportedMajors, ...electronVersions.prereleaseMajors];
|
const { ElectronVersions } = await import('${{ github.workspace }}/node_modules/@electron/fiddle-core/dist/index.js');
|
||||||
|
const versions = await ElectronVersions.create(undefined, { ignoreCache: true });
|
||||||
|
|
||||||
if (validVersions.includes(major)) {
|
const validVersions = [...versions.supportedMajors, ...versions.prereleaseMajors];
|
||||||
hasSupportedVersion = true;
|
if (validVersions.includes(major)) {
|
||||||
if (labelExists) {
|
|
||||||
labels.push(versionLabel);
|
labels.push(versionLabel);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (labels.length === 0) {
|
||||||
if (!hasSupportedVersion) {
|
|
||||||
core.setOutput('unsupportedMajor', true);
|
core.setOutput('unsupportedMajor', true);
|
||||||
labels.push('blocked/need-info ❌');
|
labels.push('blocked/need-info ❌');
|
||||||
}
|
}
|
||||||
@@ -136,7 +131,7 @@ jobs:
|
|||||||
}
|
}
|
||||||
- name: Create unsupported major comment
|
- name: Create unsupported major comment
|
||||||
if: ${{ steps.add-labels.outputs.unsupportedMajor }}
|
if: ${{ steps.add-labels.outputs.unsupportedMajor }}
|
||||||
uses: actions-cool/issues-helper@50068f49b7b2b3857270ead65e2d02e4459b022c # v3.6.2
|
uses: actions-cool/issues-helper@a610082f8ac0cf03e357eb8dd0d5e2ba075e017e # v3.6.0
|
||||||
with:
|
with:
|
||||||
actions: 'create-comment'
|
actions: 'create-comment'
|
||||||
token: ${{ steps.generate-token.outputs.token }}
|
token: ${{ steps.generate-token.outputs.token }}
|
||||||
|
|||||||
1
.github/workflows/issue-transferred.yml
vendored
1
.github/workflows/issue-transferred.yml
vendored
@@ -10,7 +10,6 @@ jobs:
|
|||||||
issue-transferred:
|
issue-transferred:
|
||||||
name: Issue Transferred
|
name: Issue Transferred
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
permissions: {}
|
|
||||||
if: ${{ !github.event.changes.new_repository.private }}
|
if: ${{ !github.event.changes.new_repository.private }}
|
||||||
steps:
|
steps:
|
||||||
- name: Generate GitHub App token
|
- name: Generate GitHub App token
|
||||||
|
|||||||
5
.github/workflows/issue-unlabeled.yml
vendored
5
.github/workflows/issue-unlabeled.yml
vendored
@@ -4,15 +4,14 @@ on:
|
|||||||
issues:
|
issues:
|
||||||
types: [unlabeled]
|
types: [unlabeled]
|
||||||
|
|
||||||
permissions: {}
|
permissions:
|
||||||
|
contents: read
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
issue-unlabeled-blocked:
|
issue-unlabeled-blocked:
|
||||||
name: All blocked/* labels removed
|
name: All blocked/* labels removed
|
||||||
if: startsWith(github.event.label.name, 'blocked/') && github.event.issue.state == 'open'
|
if: startsWith(github.event.label.name, 'blocked/') && github.event.issue.state == 'open'
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
steps:
|
steps:
|
||||||
- name: Check for any blocked labels
|
- name: Check for any blocked labels
|
||||||
id: check-for-blocked-labels
|
id: check-for-blocked-labels
|
||||||
|
|||||||
28
.github/workflows/linux-publish.yml
vendored
28
.github/workflows/linux-publish.yml
vendored
@@ -6,7 +6,7 @@ on:
|
|||||||
build-image-sha:
|
build-image-sha:
|
||||||
type: string
|
type: string
|
||||||
description: 'SHA for electron/build image'
|
description: 'SHA for electron/build image'
|
||||||
default: '933c7d6ff6802706875270bec2e3c891cf8add3f'
|
default: '424eedbf277ad9749ffa9219068aa72ed4a5e373'
|
||||||
upload-to-storage:
|
upload-to-storage:
|
||||||
description: 'Uploads to Azure storage'
|
description: 'Uploads to Azure storage'
|
||||||
required: false
|
required: false
|
||||||
@@ -17,13 +17,9 @@ on:
|
|||||||
type: boolean
|
type: boolean
|
||||||
default: false
|
default: false
|
||||||
|
|
||||||
permissions: {}
|
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
checkout-linux:
|
checkout-linux:
|
||||||
runs-on: electron-arc-centralus-linux-amd64-32core
|
runs-on: electron-arc-linux-amd64-32core
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
container:
|
container:
|
||||||
image: ghcr.io/electron/build:${{ inputs.build-image-sha }}
|
image: ghcr.io/electron/build:${{ inputs.build-image-sha }}
|
||||||
options: --user root
|
options: --user root
|
||||||
@@ -31,11 +27,12 @@ jobs:
|
|||||||
- /mnt/cross-instance-cache:/mnt/cross-instance-cache
|
- /mnt/cross-instance-cache:/mnt/cross-instance-cache
|
||||||
- /var/run/sas:/var/run/sas
|
- /var/run/sas:/var/run/sas
|
||||||
env:
|
env:
|
||||||
CHROMIUM_GIT_COOKIE: ${{ secrets.CHROMIUM_GIT_COOKIE }}
|
CHROMIUM_GIT_AUTH: ${{ secrets.CHROMIUM_GIT_AUTH }}
|
||||||
|
CHROMIUM_GIT_USER: ${{ secrets.CHROMIUM_GIT_USER }}
|
||||||
GCLIENT_EXTRA_ARGS: '--custom-var=checkout_arm=True --custom-var=checkout_arm64=True'
|
GCLIENT_EXTRA_ARGS: '--custom-var=checkout_arm=True --custom-var=checkout_arm64=True'
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout Electron
|
- name: Checkout Electron
|
||||||
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8
|
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
|
||||||
with:
|
with:
|
||||||
path: src/electron
|
path: src/electron
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
@@ -44,51 +41,48 @@ jobs:
|
|||||||
|
|
||||||
publish-x64:
|
publish-x64:
|
||||||
uses: ./.github/workflows/pipeline-segment-electron-build.yml
|
uses: ./.github/workflows/pipeline-segment-electron-build.yml
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
needs: checkout-linux
|
needs: checkout-linux
|
||||||
with:
|
with:
|
||||||
environment: production-release
|
environment: production-release
|
||||||
build-runs-on: electron-arc-centralus-linux-amd64-32core
|
build-runs-on: electron-arc-linux-amd64-32core
|
||||||
build-container: '{"image":"ghcr.io/electron/build:${{ inputs.build-image-sha }}","options":"--user root","volumes":["/mnt/cross-instance-cache:/mnt/cross-instance-cache"]}'
|
build-container: '{"image":"ghcr.io/electron/build:${{ inputs.build-image-sha }}","options":"--user root","volumes":["/mnt/cross-instance-cache:/mnt/cross-instance-cache"]}'
|
||||||
target-platform: linux
|
target-platform: linux
|
||||||
target-arch: x64
|
target-arch: x64
|
||||||
is-release: true
|
is-release: true
|
||||||
gn-build-type: release
|
gn-build-type: release
|
||||||
generate-symbols: true
|
generate-symbols: true
|
||||||
|
strip-binaries: true
|
||||||
upload-to-storage: ${{ inputs.upload-to-storage }}
|
upload-to-storage: ${{ inputs.upload-to-storage }}
|
||||||
secrets: inherit
|
secrets: inherit
|
||||||
|
|
||||||
publish-arm:
|
publish-arm:
|
||||||
uses: ./.github/workflows/pipeline-segment-electron-build.yml
|
uses: ./.github/workflows/pipeline-segment-electron-build.yml
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
needs: checkout-linux
|
needs: checkout-linux
|
||||||
with:
|
with:
|
||||||
environment: production-release
|
environment: production-release
|
||||||
build-runs-on: electron-arc-centralus-linux-amd64-32core
|
build-runs-on: electron-arc-linux-amd64-32core
|
||||||
build-container: '{"image":"ghcr.io/electron/build:${{ inputs.build-image-sha }}","options":"--user root","volumes":["/mnt/cross-instance-cache:/mnt/cross-instance-cache"]}'
|
build-container: '{"image":"ghcr.io/electron/build:${{ inputs.build-image-sha }}","options":"--user root","volumes":["/mnt/cross-instance-cache:/mnt/cross-instance-cache"]}'
|
||||||
target-platform: linux
|
target-platform: linux
|
||||||
target-arch: arm
|
target-arch: arm
|
||||||
is-release: true
|
is-release: true
|
||||||
gn-build-type: release
|
gn-build-type: release
|
||||||
generate-symbols: true
|
generate-symbols: true
|
||||||
|
strip-binaries: true
|
||||||
upload-to-storage: ${{ inputs.upload-to-storage }}
|
upload-to-storage: ${{ inputs.upload-to-storage }}
|
||||||
secrets: inherit
|
secrets: inherit
|
||||||
|
|
||||||
publish-arm64:
|
publish-arm64:
|
||||||
uses: ./.github/workflows/pipeline-segment-electron-build.yml
|
uses: ./.github/workflows/pipeline-segment-electron-build.yml
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
needs: checkout-linux
|
needs: checkout-linux
|
||||||
with:
|
with:
|
||||||
environment: production-release
|
environment: production-release
|
||||||
build-runs-on: electron-arc-centralus-linux-amd64-32core
|
build-runs-on: electron-arc-linux-amd64-32core
|
||||||
build-container: '{"image":"ghcr.io/electron/build:${{ inputs.build-image-sha }}","options":"--user root","volumes":["/mnt/cross-instance-cache:/mnt/cross-instance-cache"]}'
|
build-container: '{"image":"ghcr.io/electron/build:${{ inputs.build-image-sha }}","options":"--user root","volumes":["/mnt/cross-instance-cache:/mnt/cross-instance-cache"]}'
|
||||||
target-platform: linux
|
target-platform: linux
|
||||||
target-arch: arm64
|
target-arch: arm64
|
||||||
is-release: true
|
is-release: true
|
||||||
gn-build-type: release
|
gn-build-type: release
|
||||||
generate-symbols: true
|
generate-symbols: true
|
||||||
|
strip-binaries: true
|
||||||
upload-to-storage: ${{ inputs.upload-to-storage }}
|
upload-to-storage: ${{ inputs.upload-to-storage }}
|
||||||
secrets: inherit
|
secrets: inherit
|
||||||
|
|||||||
29
.github/workflows/macos-publish.yml
vendored
29
.github/workflows/macos-publish.yml
vendored
@@ -6,7 +6,7 @@ on:
|
|||||||
build-image-sha:
|
build-image-sha:
|
||||||
type: string
|
type: string
|
||||||
description: 'SHA for electron/build image'
|
description: 'SHA for electron/build image'
|
||||||
default: '933c7d6ff6802706875270bec2e3c891cf8add3f'
|
default: '424eedbf277ad9749ffa9219068aa72ed4a5e373'
|
||||||
required: true
|
required: true
|
||||||
upload-to-storage:
|
upload-to-storage:
|
||||||
description: 'Uploads to Azure storage'
|
description: 'Uploads to Azure storage'
|
||||||
@@ -18,13 +18,9 @@ on:
|
|||||||
type: boolean
|
type: boolean
|
||||||
default: false
|
default: false
|
||||||
|
|
||||||
permissions: {}
|
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
checkout-macos:
|
checkout-macos:
|
||||||
runs-on: electron-arc-centralus-linux-amd64-32core
|
runs-on: electron-arc-linux-amd64-32core
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
container:
|
container:
|
||||||
image: ghcr.io/electron/build:${{ inputs.build-image-sha }}
|
image: ghcr.io/electron/build:${{ inputs.build-image-sha }}
|
||||||
options: --user root
|
options: --user root
|
||||||
@@ -32,11 +28,12 @@ jobs:
|
|||||||
- /mnt/cross-instance-cache:/mnt/cross-instance-cache
|
- /mnt/cross-instance-cache:/mnt/cross-instance-cache
|
||||||
- /var/run/sas:/var/run/sas
|
- /var/run/sas:/var/run/sas
|
||||||
env:
|
env:
|
||||||
CHROMIUM_GIT_COOKIE: ${{ secrets.CHROMIUM_GIT_COOKIE }}
|
CHROMIUM_GIT_AUTH: ${{ secrets.CHROMIUM_GIT_AUTH }}
|
||||||
|
CHROMIUM_GIT_USER: ${{ secrets.CHROMIUM_GIT_USER }}
|
||||||
GCLIENT_EXTRA_ARGS: '--custom-var=checkout_mac=True --custom-var=host_os=mac'
|
GCLIENT_EXTRA_ARGS: '--custom-var=checkout_mac=True --custom-var=host_os=mac'
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout Electron
|
- name: Checkout Electron
|
||||||
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8
|
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
|
||||||
with:
|
with:
|
||||||
path: src/electron
|
path: src/electron
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
@@ -48,12 +45,10 @@ jobs:
|
|||||||
|
|
||||||
publish-x64-darwin:
|
publish-x64-darwin:
|
||||||
uses: ./.github/workflows/pipeline-segment-electron-build.yml
|
uses: ./.github/workflows/pipeline-segment-electron-build.yml
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
needs: checkout-macos
|
needs: checkout-macos
|
||||||
with:
|
with:
|
||||||
environment: production-release
|
environment: production-release
|
||||||
build-runs-on: macos-15-xlarge
|
build-runs-on: macos-14-xlarge
|
||||||
target-platform: macos
|
target-platform: macos
|
||||||
target-arch: x64
|
target-arch: x64
|
||||||
target-variant: darwin
|
target-variant: darwin
|
||||||
@@ -65,12 +60,10 @@ jobs:
|
|||||||
|
|
||||||
publish-x64-mas:
|
publish-x64-mas:
|
||||||
uses: ./.github/workflows/pipeline-segment-electron-build.yml
|
uses: ./.github/workflows/pipeline-segment-electron-build.yml
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
needs: checkout-macos
|
needs: checkout-macos
|
||||||
with:
|
with:
|
||||||
environment: production-release
|
environment: production-release
|
||||||
build-runs-on: macos-15-xlarge
|
build-runs-on: macos-14-xlarge
|
||||||
target-platform: macos
|
target-platform: macos
|
||||||
target-arch: x64
|
target-arch: x64
|
||||||
target-variant: mas
|
target-variant: mas
|
||||||
@@ -82,12 +75,10 @@ jobs:
|
|||||||
|
|
||||||
publish-arm64-darwin:
|
publish-arm64-darwin:
|
||||||
uses: ./.github/workflows/pipeline-segment-electron-build.yml
|
uses: ./.github/workflows/pipeline-segment-electron-build.yml
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
needs: checkout-macos
|
needs: checkout-macos
|
||||||
with:
|
with:
|
||||||
environment: production-release
|
environment: production-release
|
||||||
build-runs-on: macos-15-xlarge
|
build-runs-on: macos-14-xlarge
|
||||||
target-platform: macos
|
target-platform: macos
|
||||||
target-arch: arm64
|
target-arch: arm64
|
||||||
target-variant: darwin
|
target-variant: darwin
|
||||||
@@ -99,12 +90,10 @@ jobs:
|
|||||||
|
|
||||||
publish-arm64-mas:
|
publish-arm64-mas:
|
||||||
uses: ./.github/workflows/pipeline-segment-electron-build.yml
|
uses: ./.github/workflows/pipeline-segment-electron-build.yml
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
needs: checkout-macos
|
needs: checkout-macos
|
||||||
with:
|
with:
|
||||||
environment: production-release
|
environment: production-release
|
||||||
build-runs-on: macos-15-xlarge
|
build-runs-on: macos-14-xlarge
|
||||||
target-platform: macos
|
target-platform: macos
|
||||||
target-arch: arm64
|
target-arch: arm64
|
||||||
target-variant: mas
|
target-variant: mas
|
||||||
|
|||||||
@@ -1,42 +1,30 @@
|
|||||||
name: Check for Disallowed Non-Maintainer Change
|
name: Check for Non-Maintainer Dependency Change
|
||||||
|
|
||||||
on:
|
on:
|
||||||
pull_request_target:
|
pull_request_target:
|
||||||
paths:
|
paths:
|
||||||
- 'yarn.lock'
|
- 'yarn.lock'
|
||||||
- 'spec/yarn.lock'
|
- 'spec/yarn.lock'
|
||||||
- '.github/workflows/**'
|
|
||||||
- '.github/actions/**'
|
|
||||||
- '.yarn/**'
|
|
||||||
- '.yarnrc.yml'
|
|
||||||
|
|
||||||
permissions: {}
|
permissions: {}
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
check-for-non-maintainer-dependency-change:
|
check-for-non-maintainer-dependency-change:
|
||||||
name: Check for disallowed non-maintainer change
|
name: Check for non-maintainer dependency change
|
||||||
if: ${{ github.event.pull_request.user.type != 'Bot' && !github.event.pull_request.draft }}
|
if: ${{ !contains(fromJSON('["MEMBER", "OWNER"]'), github.event.pull_request.author_association) && github.event.pull_request.user.type != 'Bot' && !github.event.pull_request.draft }}
|
||||||
permissions:
|
permissions:
|
||||||
contents: read
|
contents: read
|
||||||
pull-requests: write
|
pull-requests: write
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Get author association
|
|
||||||
id: get-author-association
|
|
||||||
env:
|
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
run: |
|
|
||||||
AUTHOR_ASSOCIATION=$(gh api /repos/electron/electron/pulls/${{ github.event.pull_request.number }} --jq '.author_association')
|
|
||||||
echo "author_association=$AUTHOR_ASSOCIATION" >> "$GITHUB_OUTPUT"
|
|
||||||
- name: Check for existing review
|
- name: Check for existing review
|
||||||
id: check-for-review
|
id: check-for-review
|
||||||
if: ${{ !contains(fromJSON('["MEMBER", "OWNER"]'), steps.get-author-association.outputs.author_association) }}
|
|
||||||
env:
|
env:
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
PR_URL: ${{ github.event.pull_request.html_url }}
|
PR_URL: ${{ github.event.pull_request.html_url }}
|
||||||
run: |
|
run: |
|
||||||
set -eo pipefail
|
set -eo pipefail
|
||||||
REVIEW_COUNT=$(gh pr view $PR_URL --json reviews | jq '[ .reviews[] | select(.author.login == "github-actions") | select(.body | startswith("<!-- disallowed-non-maintainer-change -->")) ] | length')
|
REVIEW_COUNT=$(gh pr view $PR_URL --json reviews | jq '[ .reviews[] | select(.author.login == "github-actions") | select(.body | startswith("<!-- no-dependency-change -->")) ] | length')
|
||||||
if [[ $REVIEW_COUNT -eq 0 ]]; then
|
if [[ $REVIEW_COUNT -eq 0 ]]; then
|
||||||
echo "SHOULD_REVIEW=1" >> "$GITHUB_OUTPUT"
|
echo "SHOULD_REVIEW=1" >> "$GITHUB_OUTPUT"
|
||||||
fi
|
fi
|
||||||
@@ -46,4 +34,4 @@ jobs:
|
|||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
PR_URL: ${{ github.event.pull_request.html_url }}
|
PR_URL: ${{ github.event.pull_request.html_url }}
|
||||||
run: |
|
run: |
|
||||||
printf "<!-- disallowed-non-maintainer-change -->\n\nHello @${{ github.event.pull_request.user.login }}! It looks like this pull request touches one of our dependency or CI files, and per [our contribution policy](https://github.com/electron/electron/blob/main/CONTRIBUTING.md#dependencies-upgrades-policy) we do not accept these types of changes in PRs." | gh pr review $PR_URL -r --body-file=-
|
printf "<!-- no-dependency-change -->\n\nHello @${{ github.event.pull_request.user.login }}! It looks like this pull request touches one of our dependency files, and per [our contribution policy](https://github.com/electron/electron/blob/main/CONTRIBUTING.md#dependencies-upgrades-policy) we do not accept these types of changes in PRs." | gh pr review $PR_URL -r --body-file=-
|
||||||
|
|||||||
@@ -55,8 +55,6 @@ on:
|
|||||||
type: boolean
|
type: boolean
|
||||||
default: false
|
default: false
|
||||||
|
|
||||||
permissions: {}
|
|
||||||
|
|
||||||
concurrency:
|
concurrency:
|
||||||
group: electron-build-and-test-and-nan-${{ inputs.target-platform }}-${{ inputs.target-arch }}-${{ github.ref_protected == true && github.run_id || github.ref }}
|
group: electron-build-and-test-and-nan-${{ inputs.target-platform }}-${{ inputs.target-arch }}-${{ github.ref_protected == true && github.run_id || github.ref }}
|
||||||
cancel-in-progress: ${{ github.ref_protected != true }}
|
cancel-in-progress: ${{ github.ref_protected != true }}
|
||||||
@@ -64,8 +62,6 @@ concurrency:
|
|||||||
jobs:
|
jobs:
|
||||||
build:
|
build:
|
||||||
uses: ./.github/workflows/pipeline-segment-electron-build.yml
|
uses: ./.github/workflows/pipeline-segment-electron-build.yml
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
with:
|
with:
|
||||||
build-runs-on: ${{ inputs.build-runs-on }}
|
build-runs-on: ${{ inputs.build-runs-on }}
|
||||||
build-container: ${{ inputs.build-container }}
|
build-container: ${{ inputs.build-container }}
|
||||||
@@ -78,10 +74,6 @@ jobs:
|
|||||||
secrets: inherit
|
secrets: inherit
|
||||||
test:
|
test:
|
||||||
uses: ./.github/workflows/pipeline-segment-electron-test.yml
|
uses: ./.github/workflows/pipeline-segment-electron-test.yml
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
issues: read
|
|
||||||
pull-requests: read
|
|
||||||
needs: build
|
needs: build
|
||||||
with:
|
with:
|
||||||
target-arch: ${{ inputs.target-arch }}
|
target-arch: ${{ inputs.target-arch }}
|
||||||
@@ -91,8 +83,6 @@ jobs:
|
|||||||
secrets: inherit
|
secrets: inherit
|
||||||
nn-test:
|
nn-test:
|
||||||
uses: ./.github/workflows/pipeline-segment-node-nan-test.yml
|
uses: ./.github/workflows/pipeline-segment-node-nan-test.yml
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
needs: build
|
needs: build
|
||||||
with:
|
with:
|
||||||
target-arch: ${{ inputs.target-arch }}
|
target-arch: ${{ inputs.target-arch }}
|
||||||
|
|||||||
@@ -54,23 +54,19 @@ on:
|
|||||||
required: false
|
required: false
|
||||||
type: boolean
|
type: boolean
|
||||||
default: false
|
default: false
|
||||||
enable-ssh:
|
|
||||||
description: 'Enable SSH debugging'
|
|
||||||
required: false
|
|
||||||
type: boolean
|
|
||||||
default: false
|
|
||||||
|
|
||||||
concurrency:
|
concurrency:
|
||||||
group: electron-build-and-test-${{ inputs.target-platform }}-${{ inputs.target-arch }}-${{ github.ref_protected == true && github.run_id || github.ref }}
|
group: electron-build-and-test-${{ inputs.target-platform }}-${{ inputs.target-arch }}-${{ github.ref_protected == true && github.run_id || github.ref }}
|
||||||
cancel-in-progress: ${{ github.ref_protected != true }}
|
cancel-in-progress: ${{ github.ref_protected != true }}
|
||||||
|
|
||||||
permissions: {}
|
permissions:
|
||||||
|
contents: read
|
||||||
|
issues: read
|
||||||
|
pull-requests: read
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build:
|
build:
|
||||||
uses: ./.github/workflows/pipeline-segment-electron-build.yml
|
uses: ./.github/workflows/pipeline-segment-electron-build.yml
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
with:
|
with:
|
||||||
build-runs-on: ${{ inputs.build-runs-on }}
|
build-runs-on: ${{ inputs.build-runs-on }}
|
||||||
build-container: ${{ inputs.build-container }}
|
build-container: ${{ inputs.build-container }}
|
||||||
@@ -80,21 +76,15 @@ jobs:
|
|||||||
gn-build-type: ${{ inputs.gn-build-type }}
|
gn-build-type: ${{ inputs.gn-build-type }}
|
||||||
generate-symbols: ${{ inputs.generate-symbols }}
|
generate-symbols: ${{ inputs.generate-symbols }}
|
||||||
upload-to-storage: ${{ inputs.upload-to-storage }}
|
upload-to-storage: ${{ inputs.upload-to-storage }}
|
||||||
is-asan: ${{ inputs.is-asan }}
|
is-asan: ${{ inputs.is-asan}}
|
||||||
enable-ssh: ${{ inputs.enable-ssh }}
|
|
||||||
secrets: inherit
|
secrets: inherit
|
||||||
test:
|
test:
|
||||||
uses: ./.github/workflows/pipeline-segment-electron-test.yml
|
uses: ./.github/workflows/pipeline-segment-electron-test.yml
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
issues: read
|
|
||||||
pull-requests: read
|
|
||||||
needs: build
|
needs: build
|
||||||
with:
|
with:
|
||||||
target-arch: ${{ inputs.target-arch }}
|
target-arch: ${{ inputs.target-arch }}
|
||||||
target-platform: ${{ inputs.target-platform }}
|
target-platform: ${{ inputs.target-platform }}
|
||||||
test-runs-on: ${{ inputs.test-runs-on }}
|
test-runs-on: ${{ inputs.test-runs-on }}
|
||||||
test-container: ${{ inputs.test-container }}
|
test-container: ${{ inputs.test-container }}
|
||||||
is-asan: ${{ inputs.is-asan }}
|
is-asan: ${{ inputs.is-asan}}
|
||||||
enable-ssh: ${{ inputs.enable-ssh }}
|
|
||||||
secrets: inherit
|
secrets: inherit
|
||||||
|
|||||||
@@ -8,42 +8,19 @@ on:
|
|||||||
description: 'Container to run the docs-only ts compile in'
|
description: 'Container to run the docs-only ts compile in'
|
||||||
type: string
|
type: string
|
||||||
|
|
||||||
permissions: {}
|
|
||||||
|
|
||||||
concurrency:
|
concurrency:
|
||||||
group: electron-docs-only-${{ github.ref }}
|
group: electron-docs-only-${{ github.ref }}
|
||||||
cancel-in-progress: true
|
cancel-in-progress: true
|
||||||
|
|
||||||
env:
|
|
||||||
GCLIENT_EXTRA_ARGS: --custom-var=checkout_arm=True --custom-var=checkout_arm64=True
|
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
docs-only:
|
docs-only:
|
||||||
name: Docs Only Compile
|
name: Docs Only Compile
|
||||||
runs-on: electron-arc-centralus-linux-amd64-4core
|
runs-on: electron-arc-linux-amd64-4core
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
timeout-minutes: 20
|
timeout-minutes: 20
|
||||||
container: ${{ fromJSON(inputs.container) }}
|
container: ${{ fromJSON(inputs.container) }}
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout Electron
|
- name: Checkout Electron
|
||||||
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8
|
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
|
||||||
with:
|
|
||||||
path: src/electron
|
|
||||||
fetch-depth: 0
|
|
||||||
ref: ${{ github.event.pull_request.head.sha }}
|
|
||||||
- name: Generate DEPS Hash
|
|
||||||
run: |
|
|
||||||
node src/electron/script/generate-deps-hash.js
|
|
||||||
DEPSHASH=v1-src-cache-$(cat src/electron/.depshash)
|
|
||||||
echo "DEPSHASH=$DEPSHASH" >> $GITHUB_ENV
|
|
||||||
echo "CACHE_PATH=$DEPSHASH.tar" >> $GITHUB_ENV
|
|
||||||
- name: Restore src cache via AKS
|
|
||||||
uses: ./src/electron/.github/actions/restore-cache-aks
|
|
||||||
with:
|
|
||||||
target-platform: linux
|
|
||||||
- name: Checkout Electron
|
|
||||||
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8
|
|
||||||
with:
|
with:
|
||||||
path: src/electron
|
path: src/electron
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
@@ -54,12 +31,12 @@ jobs:
|
|||||||
shell: bash
|
shell: bash
|
||||||
run: |
|
run: |
|
||||||
cd src/electron
|
cd src/electron
|
||||||
node script/yarn.js create-typescript-definitions
|
node script/yarn create-typescript-definitions
|
||||||
node script/yarn.js tsc -p tsconfig.default_app.json --noEmit
|
node script/yarn tsc -p tsconfig.default_app.json --noEmit
|
||||||
for f in build/webpack/*.js
|
for f in build/webpack/*.js
|
||||||
do
|
do
|
||||||
out="${f:29}"
|
out="${f:29}"
|
||||||
if [ "$out" != "base.js" ]; then
|
if [ "$out" != "base.js" ]; then
|
||||||
node script/yarn.js webpack --config $f --output-filename=$out --output-path=./.tmp --env mode=development
|
node script/yarn webpack --config $f --output-filename=$out --output-path=./.tmp --env mode=development
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|||||||
21
.github/workflows/pipeline-electron-lint.yml
vendored
21
.github/workflows/pipeline-electron-lint.yml
vendored
@@ -8,34 +8,31 @@ on:
|
|||||||
description: 'Container to run lint in'
|
description: 'Container to run lint in'
|
||||||
type: string
|
type: string
|
||||||
|
|
||||||
permissions: {}
|
|
||||||
|
|
||||||
concurrency:
|
concurrency:
|
||||||
group: electron-lint-${{ github.ref_protected == true && github.run_id || github.ref }}
|
group: electron-lint-${{ github.ref_protected == true && github.run_id || github.ref }}
|
||||||
cancel-in-progress: ${{ github.ref_protected != true }}
|
cancel-in-progress: ${{ github.ref_protected != true }}
|
||||||
|
|
||||||
env:
|
env:
|
||||||
CHROMIUM_GIT_COOKIE: ${{ secrets.CHROMIUM_GIT_COOKIE }}
|
CHROMIUM_GIT_AUTH: ${{ secrets.CHROMIUM_GIT_AUTH }}
|
||||||
|
CHROMIUM_GIT_USER: ${{ secrets.CHROMIUM_GIT_USER }}
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
lint:
|
lint:
|
||||||
name: Lint
|
name: Lint
|
||||||
runs-on: electron-arc-centralus-linux-amd64-4core
|
runs-on: electron-arc-linux-amd64-4core
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
timeout-minutes: 20
|
timeout-minutes: 20
|
||||||
container: ${{ fromJSON(inputs.container) }}
|
container: ${{ fromJSON(inputs.container) }}
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout Electron
|
- name: Checkout Electron
|
||||||
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8
|
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
|
||||||
with:
|
with:
|
||||||
path: src/electron
|
path: src/electron
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
ref: ${{ github.event.pull_request.head.sha }}
|
ref: ${{ github.event.pull_request.head.sha }}
|
||||||
- name: Install Dependencies
|
- name: Install Dependencies
|
||||||
uses: ./src/electron/.github/actions/install-dependencies
|
uses: ./src/electron/.github/actions/install-dependencies
|
||||||
- name: Set Chromium Git Cookie
|
- name: Set Chromium Git Helper
|
||||||
uses: ./src/electron/.github/actions/set-chromium-cookie
|
uses: ./src/electron/.github/actions/set-chromium-git-helper
|
||||||
- name: Setup third_party Depot Tools
|
- name: Setup third_party Depot Tools
|
||||||
shell: bash
|
shell: bash
|
||||||
run: |
|
run: |
|
||||||
@@ -78,11 +75,11 @@ jobs:
|
|||||||
# but then we would lint its contents (at least gn format), and it doesn't pass it.
|
# but then we would lint its contents (at least gn format), and it doesn't pass it.
|
||||||
|
|
||||||
cd src/electron
|
cd src/electron
|
||||||
node script/yarn.js install --immutable
|
node script/yarn install --frozen-lockfile
|
||||||
node script/yarn.js lint
|
node script/yarn lint
|
||||||
- name: Run Script Typechecker
|
- name: Run Script Typechecker
|
||||||
shell: bash
|
shell: bash
|
||||||
run: |
|
run: |
|
||||||
cd src/electron
|
cd src/electron
|
||||||
node script/yarn.js tsc -p tsconfig.script.json
|
node script/yarn tsc -p tsconfig.script.json
|
||||||
|
|
||||||
|
|||||||
@@ -48,34 +48,31 @@ on:
|
|||||||
required: true
|
required: true
|
||||||
type: string
|
type: string
|
||||||
default: '0'
|
default: '0'
|
||||||
|
strip-binaries:
|
||||||
|
description: 'Strip the binaries before release (Linux only)'
|
||||||
|
required: false
|
||||||
|
type: boolean
|
||||||
|
default: false
|
||||||
is-asan:
|
is-asan:
|
||||||
description: 'Building the Address Sanitizer (ASan) Linux build'
|
description: 'Building the Address Sanitizer (ASan) Linux build'
|
||||||
required: false
|
required: false
|
||||||
type: boolean
|
type: boolean
|
||||||
default: false
|
default: false
|
||||||
enable-ssh:
|
|
||||||
description: 'Enable SSH debugging'
|
|
||||||
required: false
|
|
||||||
type: boolean
|
|
||||||
default: false
|
|
||||||
|
|
||||||
permissions: {}
|
|
||||||
|
|
||||||
concurrency:
|
concurrency:
|
||||||
group: electron-build-${{ inputs.target-platform }}-${{ inputs.target-arch }}-${{ inputs.target-variant }}-${{ inputs.is-asan }}-${{ github.ref_protected == true && github.run_id || github.ref }}
|
group: electron-build-${{ inputs.target-platform }}-${{ inputs.target-arch }}-${{ inputs.target-variant }}-${{ inputs.is-asan }}-${{ github.ref_protected == true && github.run_id || github.ref }}
|
||||||
cancel-in-progress: ${{ github.ref_protected != true }}
|
cancel-in-progress: ${{ github.ref_protected != true }}
|
||||||
|
|
||||||
env:
|
env:
|
||||||
CHROMIUM_GIT_COOKIE: ${{ secrets.CHROMIUM_GIT_COOKIE }}
|
CHROMIUM_GIT_AUTH: ${{ secrets.CHROMIUM_GIT_AUTH }}
|
||||||
CHROMIUM_GIT_COOKIE_WINDOWS_STRING: ${{ secrets.CHROMIUM_GIT_COOKIE_WINDOWS_STRING }}
|
CHROMIUM_GIT_USER: ${{ secrets.CHROMIUM_GIT_USER }}
|
||||||
DD_API_KEY: ${{ secrets.DD_API_KEY }}
|
|
||||||
ELECTRON_ARTIFACTS_BLOB_STORAGE: ${{ secrets.ELECTRON_ARTIFACTS_BLOB_STORAGE }}
|
ELECTRON_ARTIFACTS_BLOB_STORAGE: ${{ secrets.ELECTRON_ARTIFACTS_BLOB_STORAGE }}
|
||||||
ELECTRON_RBE_JWT: ${{ secrets.ELECTRON_RBE_JWT }}
|
ELECTRON_RBE_JWT: ${{ secrets.ELECTRON_RBE_JWT }}
|
||||||
SUDOWOODO_EXCHANGE_URL: ${{ secrets.SUDOWOODO_EXCHANGE_URL }}
|
SUDOWOODO_EXCHANGE_URL: ${{ secrets.SUDOWOODO_EXCHANGE_URL }}
|
||||||
SUDOWOODO_EXCHANGE_TOKEN: ${{ secrets.SUDOWOODO_EXCHANGE_TOKEN }}
|
SUDOWOODO_EXCHANGE_TOKEN: ${{ secrets.SUDOWOODO_EXCHANGE_TOKEN }}
|
||||||
GCLIENT_EXTRA_ARGS: ${{ inputs.target-platform == 'macos' && '--custom-var=checkout_mac=True --custom-var=host_os=mac' || inputs.target-platform == 'win' && '--custom-var=checkout_win=True' || '--custom-var=checkout_arm=True --custom-var=checkout_arm64=True' }}
|
GCLIENT_EXTRA_ARGS: ${{ inputs.target-platform == 'macos' && '--custom-var=checkout_mac=True --custom-var=host_os=mac' || inputs.target-platform == 'win' && '--custom-var=checkout_win=True' || '--custom-var=checkout_arm=True --custom-var=checkout_arm64=True' }}
|
||||||
ELECTRON_OUT_DIR: Default
|
ELECTRON_OUT_DIR: Default
|
||||||
ACTIONS_STEP_DEBUG: ${{ secrets.ACTIONS_STEP_DEBUG }}
|
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build:
|
build:
|
||||||
@@ -83,34 +80,20 @@ jobs:
|
|||||||
run:
|
run:
|
||||||
shell: bash
|
shell: bash
|
||||||
runs-on: ${{ inputs.build-runs-on }}
|
runs-on: ${{ inputs.build-runs-on }}
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
container: ${{ fromJSON(inputs.build-container) }}
|
container: ${{ fromJSON(inputs.build-container) }}
|
||||||
environment: ${{ inputs.environment }}
|
environment: ${{ inputs.environment }}
|
||||||
env:
|
env:
|
||||||
TARGET_ARCH: ${{ inputs.target-arch }}
|
TARGET_ARCH: ${{ inputs.target-arch }}
|
||||||
TARGET_PLATFORM: ${{ inputs.target-platform }}
|
|
||||||
steps:
|
steps:
|
||||||
- name: Create src dir
|
- name: Create src dir
|
||||||
run: |
|
run: |
|
||||||
mkdir src
|
mkdir src
|
||||||
- name: Checkout Electron
|
- name: Checkout Electron
|
||||||
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8
|
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
|
||||||
with:
|
with:
|
||||||
path: src/electron
|
path: src/electron
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
ref: ${{ github.event.pull_request.head.sha }}
|
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: Free up space (macOS)
|
- name: Free up space (macOS)
|
||||||
if: ${{ inputs.target-platform == 'macos' }}
|
if: ${{ inputs.target-platform == 'macos' }}
|
||||||
uses: ./src/electron/.github/actions/free-space-macos
|
uses: ./src/electron/.github/actions/free-space-macos
|
||||||
@@ -119,7 +102,7 @@ jobs:
|
|||||||
run: df -h
|
run: df -h
|
||||||
- name: Setup Node.js/npm
|
- name: Setup Node.js/npm
|
||||||
if: ${{ inputs.target-platform == 'macos' }}
|
if: ${{ inputs.target-platform == 'macos' }}
|
||||||
uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903
|
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020
|
||||||
with:
|
with:
|
||||||
node-version: 20.19.x
|
node-version: 20.19.x
|
||||||
cache: yarn
|
cache: yarn
|
||||||
@@ -144,8 +127,8 @@ jobs:
|
|||||||
GN_EXTRA_ARGS='is_asan=true'
|
GN_EXTRA_ARGS='is_asan=true'
|
||||||
fi
|
fi
|
||||||
echo "GN_EXTRA_ARGS=$GN_EXTRA_ARGS" >> $GITHUB_ENV
|
echo "GN_EXTRA_ARGS=$GN_EXTRA_ARGS" >> $GITHUB_ENV
|
||||||
- name: Set Chromium Git Cookie
|
- name: Set Chromium Git Helper
|
||||||
uses: ./src/electron/.github/actions/set-chromium-cookie
|
uses: ./src/electron/.github/actions/set-chromium-git-helper
|
||||||
- name: Install Build Tools
|
- name: Install Build Tools
|
||||||
uses: ./src/electron/.github/actions/install-build-tools
|
uses: ./src/electron/.github/actions/install-build-tools
|
||||||
- name: Generate DEPS Hash
|
- name: Generate DEPS Hash
|
||||||
@@ -163,7 +146,7 @@ jobs:
|
|||||||
if: ${{ inputs.target-platform == 'linux' }}
|
if: ${{ inputs.target-platform == 'linux' }}
|
||||||
uses: ./src/electron/.github/actions/restore-cache-aks
|
uses: ./src/electron/.github/actions/restore-cache-aks
|
||||||
- name: Checkout Electron
|
- name: Checkout Electron
|
||||||
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8
|
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
|
||||||
with:
|
with:
|
||||||
path: src/electron
|
path: src/electron
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
@@ -177,7 +160,7 @@ jobs:
|
|||||||
ELECTRON_DEPOT_TOOLS_DISABLE_LOG: true
|
ELECTRON_DEPOT_TOOLS_DISABLE_LOG: true
|
||||||
- name: Init Build Tools
|
- name: Init Build Tools
|
||||||
run: |
|
run: |
|
||||||
e init -f --root=$(pwd) --out=Default ${{ inputs.gn-build-type }} --import ${{ inputs.gn-build-type }} --target-cpu ${{ inputs.target-arch }} --remote-build siso
|
e init -f --root=$(pwd) --out=Default ${{ inputs.gn-build-type }} --import ${{ inputs.gn-build-type }} --target-cpu ${{ inputs.target-arch }}
|
||||||
- name: Run Electron Only Hooks
|
- name: Run Electron Only Hooks
|
||||||
run: |
|
run: |
|
||||||
e d gclient runhooks --spec="solutions=[{'name':'src/electron','url':None,'deps_file':'DEPS','custom_vars':{'process_deps':False},'managed':False}]"
|
e d gclient runhooks --spec="solutions=[{'name':'src/electron','url':None,'deps_file':'DEPS','custom_vars':{'process_deps':False},'managed':False}]"
|
||||||
@@ -187,6 +170,9 @@ jobs:
|
|||||||
echo "DEPSHASH=$(cat src/electron/.depshash)" >> $GITHUB_ENV
|
echo "DEPSHASH=$(cat src/electron/.depshash)" >> $GITHUB_ENV
|
||||||
- name: Add CHROMIUM_BUILDTOOLS_PATH to env
|
- name: Add CHROMIUM_BUILDTOOLS_PATH to env
|
||||||
run: echo "CHROMIUM_BUILDTOOLS_PATH=$(pwd)/src/buildtools" >> $GITHUB_ENV
|
run: echo "CHROMIUM_BUILDTOOLS_PATH=$(pwd)/src/buildtools" >> $GITHUB_ENV
|
||||||
|
- name: Setup Number of Ninja Processes
|
||||||
|
run: |
|
||||||
|
echo "NUMBER_OF_NINJA_PROCESSES=${{ inputs.target-platform != 'macos' && '300' || '200' }}" >> $GITHUB_ENV
|
||||||
- name: Free up space (macOS)
|
- name: Free up space (macOS)
|
||||||
if: ${{ inputs.target-platform == 'macos' }}
|
if: ${{ inputs.target-platform == 'macos' }}
|
||||||
uses: ./src/electron/.github/actions/free-space-macos
|
uses: ./src/electron/.github/actions/free-space-macos
|
||||||
@@ -199,6 +185,7 @@ jobs:
|
|||||||
artifact-platform: ${{ inputs.target-platform == 'macos' && 'darwin' || inputs.target-platform }}
|
artifact-platform: ${{ inputs.target-platform == 'macos' && 'darwin' || inputs.target-platform }}
|
||||||
is-release: '${{ inputs.is-release }}'
|
is-release: '${{ inputs.is-release }}'
|
||||||
generate-symbols: '${{ inputs.generate-symbols }}'
|
generate-symbols: '${{ inputs.generate-symbols }}'
|
||||||
|
strip-binaries: '${{ inputs.strip-binaries }}'
|
||||||
upload-to-storage: '${{ inputs.upload-to-storage }}'
|
upload-to-storage: '${{ inputs.upload-to-storage }}'
|
||||||
is-asan: '${{ inputs.is-asan }}'
|
is-asan: '${{ inputs.is-asan }}'
|
||||||
- name: Set GN_EXTRA_ARGS for MAS Build
|
- name: Set GN_EXTRA_ARGS for MAS Build
|
||||||
|
|||||||
@@ -26,8 +26,6 @@ on:
|
|||||||
type: string
|
type: string
|
||||||
default: testing
|
default: testing
|
||||||
|
|
||||||
permissions: {}
|
|
||||||
|
|
||||||
concurrency:
|
concurrency:
|
||||||
group: electron-gn-check-${{ inputs.target-platform }}-${{ github.ref }}
|
group: electron-gn-check-${{ inputs.target-platform }}-${{ github.ref }}
|
||||||
cancel-in-progress: true
|
cancel-in-progress: true
|
||||||
@@ -43,12 +41,10 @@ jobs:
|
|||||||
run:
|
run:
|
||||||
shell: bash
|
shell: bash
|
||||||
runs-on: ${{ inputs.check-runs-on }}
|
runs-on: ${{ inputs.check-runs-on }}
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
container: ${{ fromJSON(inputs.check-container) }}
|
container: ${{ fromJSON(inputs.check-container) }}
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout Electron
|
- name: Checkout Electron
|
||||||
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8
|
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
|
||||||
with:
|
with:
|
||||||
path: src/electron
|
path: src/electron
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
@@ -70,8 +66,8 @@ jobs:
|
|||||||
- name: Check disk space after freeing up space
|
- name: Check disk space after freeing up space
|
||||||
if: ${{ inputs.target-platform == 'macos' }}
|
if: ${{ inputs.target-platform == 'macos' }}
|
||||||
run: df -h
|
run: df -h
|
||||||
- name: Set Chromium Git Cookie
|
- name: Set Chromium Git Helper
|
||||||
uses: ./src/electron/.github/actions/set-chromium-cookie
|
uses: ./src/electron/.github/actions/set-chromium-git-helper
|
||||||
- name: Install Build Tools
|
- name: Install Build Tools
|
||||||
uses: ./src/electron/.github/actions/install-build-tools
|
uses: ./src/electron/.github/actions/install-build-tools
|
||||||
- name: Enable windows toolchain
|
- name: Enable windows toolchain
|
||||||
@@ -115,7 +111,7 @@ jobs:
|
|||||||
- name: Add CHROMIUM_BUILDTOOLS_PATH to env
|
- name: Add CHROMIUM_BUILDTOOLS_PATH to env
|
||||||
run: echo "CHROMIUM_BUILDTOOLS_PATH=$(pwd)/src/buildtools" >> $GITHUB_ENV
|
run: echo "CHROMIUM_BUILDTOOLS_PATH=$(pwd)/src/buildtools" >> $GITHUB_ENV
|
||||||
- name: Checkout Electron
|
- name: Checkout Electron
|
||||||
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8
|
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
|
||||||
with:
|
with:
|
||||||
path: src/electron
|
path: src/electron
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
|
|||||||
123
.github/workflows/pipeline-segment-electron-test.yml
vendored
123
.github/workflows/pipeline-segment-electron-test.yml
vendored
@@ -25,24 +25,21 @@ on:
|
|||||||
required: false
|
required: false
|
||||||
type: boolean
|
type: boolean
|
||||||
default: false
|
default: false
|
||||||
enable-ssh:
|
|
||||||
description: 'Enable SSH debugging'
|
|
||||||
required: false
|
|
||||||
type: boolean
|
|
||||||
default: false
|
|
||||||
|
|
||||||
concurrency:
|
concurrency:
|
||||||
group: electron-test-${{ inputs.target-platform }}-${{ inputs.target-arch }}-${{ inputs.is-asan }}-${{ github.ref_protected == true && github.run_id || github.ref }}
|
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 }}
|
cancel-in-progress: ${{ github.ref_protected != true }}
|
||||||
|
|
||||||
permissions: {}
|
permissions:
|
||||||
|
contents: read
|
||||||
|
issues: read
|
||||||
|
pull-requests: read
|
||||||
|
|
||||||
env:
|
env:
|
||||||
CHROMIUM_GIT_COOKIE: ${{ secrets.CHROMIUM_GIT_COOKIE }}
|
CHROMIUM_GIT_AUTH: ${{ secrets.CHROMIUM_GIT_AUTH }}
|
||||||
CHROMIUM_GIT_COOKIE_WINDOWS_STRING: ${{ secrets.CHROMIUM_GIT_COOKIE_WINDOWS_STRING }}
|
CHROMIUM_GIT_USER: ${{ secrets.CHROMIUM_GIT_USER }}
|
||||||
ELECTRON_OUT_DIR: Default
|
ELECTRON_OUT_DIR: Default
|
||||||
ELECTRON_RBE_JWT: ${{ secrets.ELECTRON_RBE_JWT }}
|
ELECTRON_RBE_JWT: ${{ secrets.ELECTRON_RBE_JWT }}
|
||||||
ACTIONS_STEP_DEBUG: ${{ secrets.ACTIONS_STEP_DEBUG }}
|
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
test:
|
test:
|
||||||
@@ -50,10 +47,6 @@ jobs:
|
|||||||
run:
|
run:
|
||||||
shell: bash
|
shell: bash
|
||||||
runs-on: ${{ inputs.test-runs-on }}
|
runs-on: ${{ inputs.test-runs-on }}
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
issues: read
|
|
||||||
pull-requests: read
|
|
||||||
container: ${{ fromJSON(inputs.test-container) }}
|
container: ${{ fromJSON(inputs.test-container) }}
|
||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
@@ -69,16 +62,29 @@ jobs:
|
|||||||
if: ${{ inputs.target-arch == 'arm' && inputs.target-platform == 'linux' }}
|
if: ${{ inputs.target-arch == 'arm' && inputs.target-platform == 'linux' }}
|
||||||
run: |
|
run: |
|
||||||
cp $(which node) /mnt/runner-externals/node20/bin/
|
cp $(which node) /mnt/runner-externals/node20/bin/
|
||||||
cp $(which node) /mnt/runner-externals/node24/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
|
||||||
|
cp "C:\Python311\python.exe" "C:\Python311\python3.exe"
|
||||||
- name: Setup Node.js/npm
|
- name: Setup Node.js/npm
|
||||||
if: ${{ inputs.target-platform == 'win' }}
|
if: ${{ inputs.target-platform == 'win' }}
|
||||||
uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903
|
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020
|
||||||
with:
|
with:
|
||||||
node-version: 20.19.x
|
node-version: 20.19.x
|
||||||
- name: Add TCC permissions on macOS
|
- name: Add TCC permissions on macOS
|
||||||
if: ${{ inputs.target-platform == 'macos' }}
|
if: ${{ inputs.target-platform == 'macos' }}
|
||||||
run: |
|
run: |
|
||||||
epochdate=$(($(date +'%s * 1000 + %-N / 1000000')))
|
|
||||||
configure_user_tccdb () {
|
configure_user_tccdb () {
|
||||||
local values=$1
|
local values=$1
|
||||||
local dbPath="$HOME/Library/Application Support/com.apple.TCC/TCC.db"
|
local dbPath="$HOME/Library/Application Support/com.apple.TCC/TCC.db"
|
||||||
@@ -94,17 +100,14 @@ jobs:
|
|||||||
}
|
}
|
||||||
|
|
||||||
userValuesArray=(
|
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"
|
"'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"
|
"'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
|
for values in "${userValuesArray[@]}"; do
|
||||||
# Sonoma and higher have a few extra values
|
# 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
|
# Ref: https://github.com/actions/runner-images/blob/main/images/macos/scripts/build/configure-tccdb-macos.sh
|
||||||
if [ "$OSTYPE" = "darwin23" ] || [ "$OSTYPE" = "darwin24" ]; then
|
if [ "$OSTYPE" = "darwin23" ]; then
|
||||||
configure_user_tccdb "$values,NULL,NULL,'UNUSED',${values##*,}"
|
configure_user_tccdb "$values,NULL,NULL,'UNUSED',${values##*,}"
|
||||||
configure_sys_tccdb "$values,NULL,NULL,'UNUSED',${values##*,}"
|
configure_sys_tccdb "$values,NULL,NULL,'UNUSED',${values##*,}"
|
||||||
else
|
else
|
||||||
@@ -115,36 +118,16 @@ jobs:
|
|||||||
- name: Turn off the unexpectedly quit dialog on macOS
|
- name: Turn off the unexpectedly quit dialog on macOS
|
||||||
if: ${{ inputs.target-platform == 'macos' }}
|
if: ${{ inputs.target-platform == 'macos' }}
|
||||||
run: defaults write com.apple.CrashReporter DialogType server
|
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
|
- name: Checkout Electron
|
||||||
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8
|
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
|
||||||
with:
|
with:
|
||||||
path: src/electron
|
path: src/electron
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
ref: ${{ github.event.pull_request.head.sha }}
|
ref: ${{ github.event.pull_request.head.sha }}
|
||||||
- name: Turn off screenshot nag on macOS
|
|
||||||
if: ${{ inputs.target-platform == 'macos' }}
|
|
||||||
run: |
|
|
||||||
defaults write ~/Library/Group\ Containers/group.com.apple.replayd/ScreenCaptureApprovals.plist "/bin/bash" -date "3024-09-23 12:00:00 +0000"
|
|
||||||
src/electron/script/actions/screencapture-nag-remover.sh -a $(which bash)
|
|
||||||
src/electron/script/actions/screencapture-nag-remover.sh -a /opt/hca/hosted-compute-agent
|
|
||||||
- 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
|
- name: Install Dependencies
|
||||||
uses: ./src/electron/.github/actions/install-dependencies
|
uses: ./src/electron/.github/actions/install-dependencies
|
||||||
- name: Set Chromium Git Cookie
|
- name: Set Chromium Git Helper
|
||||||
uses: ./src/electron/.github/actions/set-chromium-cookie
|
uses: ./src/electron/.github/actions/set-chromium-git-helper
|
||||||
- name: Get Depot Tools
|
- name: Get Depot Tools
|
||||||
timeout-minutes: 5
|
timeout-minutes: 5
|
||||||
run: |
|
run: |
|
||||||
@@ -152,9 +135,7 @@ jobs:
|
|||||||
git config --global core.autocrlf false
|
git config --global core.autocrlf false
|
||||||
git config --global branch.autosetuprebase always
|
git config --global branch.autosetuprebase always
|
||||||
git config --global core.fscache true
|
git config --global core.fscache true
|
||||||
git config --global core.longpaths true
|
|
||||||
git config --global core.preloadindex 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
|
git clone --filter=tree:0 https://chromium.googlesource.com/chromium/tools/depot_tools.git
|
||||||
# Ensure depot_tools does not update.
|
# Ensure depot_tools does not update.
|
||||||
test -d depot_tools && cd depot_tools
|
test -d depot_tools && cd depot_tools
|
||||||
@@ -168,42 +149,50 @@ jobs:
|
|||||||
echo "DISABLE_CRASH_REPORTER_TESTS=true" >> $GITHUB_ENV
|
echo "DISABLE_CRASH_REPORTER_TESTS=true" >> $GITHUB_ENV
|
||||||
echo "IS_ASAN=true" >> $GITHUB_ENV
|
echo "IS_ASAN=true" >> $GITHUB_ENV
|
||||||
- name: Download Generated Artifacts
|
- name: Download Generated Artifacts
|
||||||
uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53
|
uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093
|
||||||
with:
|
with:
|
||||||
name: generated_artifacts_${{ env.ARTIFACT_KEY }}
|
name: generated_artifacts_${{ env.ARTIFACT_KEY }}
|
||||||
path: ./generated_artifacts_${{ matrix.build-type }}_${{ inputs.target-arch }}
|
path: ./generated_artifacts_${{ matrix.build-type }}_${{ inputs.target-arch }}
|
||||||
- name: Download Src Artifacts
|
- name: Download Src Artifacts
|
||||||
uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53
|
uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093
|
||||||
with:
|
with:
|
||||||
name: src_artifacts_${{ env.ARTIFACT_KEY }}
|
name: src_artifacts_${{ env.ARTIFACT_KEY }}
|
||||||
path: ./src_artifacts_${{ matrix.build-type }}_${{ inputs.target-arch }}
|
path: ./src_artifacts_${{ matrix.build-type }}_${{ inputs.target-arch }}
|
||||||
- name: Restore Generated Artifacts
|
- name: Restore Generated Artifacts
|
||||||
run: ./src/electron/script/actions/restore-artifacts.sh
|
run: ./src/electron/script/actions/restore-artifacts.sh
|
||||||
- name: Unzip Dist (win)
|
- name: Unzip Dist, Mksnapshot & Chromedriver (win)
|
||||||
if: ${{ inputs.target-platform == 'win' }}
|
if: ${{ inputs.target-platform == 'win' }}
|
||||||
shell: powershell
|
shell: powershell
|
||||||
run: |
|
run: |
|
||||||
Set-ExecutionPolicy Bypass -Scope Process -Force
|
Set-ExecutionPolicy Bypass -Scope Process -Force
|
||||||
cd src/out/Default
|
cd src/out/Default
|
||||||
Expand-Archive -Force dist.zip -DestinationPath ./
|
Expand-Archive -Force dist.zip -DestinationPath ./
|
||||||
- name: Unzip Dist (unix)
|
Expand-Archive -Force chromedriver.zip -DestinationPath ./
|
||||||
|
Expand-Archive -Force mksnapshot.zip -DestinationPath ./
|
||||||
|
- name: Unzip Dist, Mksnapshot & Chromedriver (unix)
|
||||||
if: ${{ inputs.target-platform != 'win' }}
|
if: ${{ inputs.target-platform != 'win' }}
|
||||||
run: |
|
run: |
|
||||||
cd src/out/Default
|
cd src/out/Default
|
||||||
unzip -:o dist.zip
|
unzip -:o dist.zip
|
||||||
#- name: Import & Trust Self-Signed Codesigning Cert on MacOS
|
unzip -:o chromedriver.zip
|
||||||
# if: ${{ inputs.target-platform == 'macos' && inputs.target-arch == 'x64' }}
|
unzip -:o mksnapshot.zip
|
||||||
# run: |
|
- name: Import & Trust Self-Signed Codesigning Cert on MacOS
|
||||||
# sudo security authorizationdb write com.apple.trust-settings.admin allow
|
if: ${{ inputs.target-platform == 'macos' && inputs.target-arch == 'x64' }}
|
||||||
# cd src/electron
|
run: |
|
||||||
# ./script/codesign/generate-identity.sh
|
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
|
- name: Run Electron Tests
|
||||||
shell: bash
|
shell: bash
|
||||||
env:
|
env:
|
||||||
MOCHA_REPORTER: mocha-multi-reporters
|
MOCHA_REPORTER: mocha-multi-reporters
|
||||||
MOCHA_MULTI_REPORTERS: mocha-junit-reporter, tap
|
MOCHA_MULTI_REPORTERS: mocha-junit-reporter, tap
|
||||||
ELECTRON_DISABLE_SECURITY_WARNINGS: 1
|
ELECTRON_DISABLE_SECURITY_WARNINGS: 1
|
||||||
|
ELECTRON_SKIP_NATIVE_MODULE_TESTS: true
|
||||||
DISPLAY: ':99.0'
|
DISPLAY: ':99.0'
|
||||||
NPM_CONFIG_MSVS_VERSION: '2022'
|
NPM_CONFIG_MSVS_VERSION: '2022'
|
||||||
run: |
|
run: |
|
||||||
@@ -223,7 +212,7 @@ jobs:
|
|||||||
export ELECTRON_FORCE_TEST_SUITE_EXIT="true"
|
export ELECTRON_FORCE_TEST_SUITE_EXIT="true"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
node script/yarn.js test --runners=main --enableRerun=3 --trace-uncaught --enable-logging --files $tests_files
|
node script/yarn test --runners=main --trace-uncaught --enable-logging --files $tests_files
|
||||||
else
|
else
|
||||||
chown :builduser .. && chmod g+w ..
|
chown :builduser .. && chmod g+w ..
|
||||||
chown -R :builduser . && chmod -R g+w .
|
chown -R :builduser . && chmod -R g+w .
|
||||||
@@ -240,14 +229,9 @@ jobs:
|
|||||||
export MOCHA_TIMEOUT=180000
|
export MOCHA_TIMEOUT=180000
|
||||||
echo "Piping output to ASAN_SYMBOLIZE ($ASAN_SYMBOLIZE)"
|
echo "Piping output to ASAN_SYMBOLIZE ($ASAN_SYMBOLIZE)"
|
||||||
cd electron
|
cd electron
|
||||||
runuser -u builduser -- xvfb-run script/actions/run-tests.sh script/yarn.js test --runners=main --trace-uncaught --enable-logging --files $tests_files | $ASAN_SYMBOLIZE
|
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
|
else
|
||||||
if [ "${{ inputs.target-arch }}" = "arm" ]; then
|
runuser -u builduser -- xvfb-run script/actions/run-tests.sh script/yarn test --runners=main --trace-uncaught --enable-logging --files $tests_files
|
||||||
runuser -u builduser -- xvfb-run script/actions/run-tests.sh script/yarn.js test --skipYarnInstall --runners=main --enableRerun=3 --trace-uncaught --enable-logging --files $tests_files
|
|
||||||
else
|
|
||||||
runuser -u builduser -- xvfb-run script/actions/run-tests.sh script/yarn.js test --runners=main --enableRerun=3 --trace-uncaught --enable-logging --files $tests_files
|
|
||||||
fi
|
|
||||||
|
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
- name: Upload Test results to Datadog
|
- name: Upload Test results to Datadog
|
||||||
@@ -259,14 +243,13 @@ jobs:
|
|||||||
DD_TAGS: "os.architecture:${{ inputs.target-arch }},os.family:${{ inputs.target-platform }},os.platform:${{ inputs.target-platform }},asan:${{ inputs.is-asan }}"
|
DD_TAGS: "os.architecture:${{ inputs.target-arch }},os.family:${{ inputs.target-platform }},os.platform:${{ inputs.target-platform }},asan:${{ inputs.is-asan }}"
|
||||||
run: |
|
run: |
|
||||||
if ! [ -z $DD_API_KEY ] && [ -f src/electron/junit/test-results-main.xml ]; then
|
if ! [ -z $DD_API_KEY ] && [ -f src/electron/junit/test-results-main.xml ]; then
|
||||||
cd src/electron
|
export DATADOG_PATH=`node src/electron/script/yarn global bin`
|
||||||
export DATADOG_PATH=`node script/yarn.js bin datadog-ci`
|
$DATADOG_PATH/datadog-ci junit upload src/electron/junit/test-results-main.xml
|
||||||
$DATADOG_PATH junit upload junit/test-results-main.xml
|
fi
|
||||||
fi
|
|
||||||
if: always() && !cancelled()
|
if: always() && !cancelled()
|
||||||
- name: Upload Test Artifacts
|
- name: Upload Test Artifacts
|
||||||
if: always() && !cancelled()
|
if: always() && !cancelled()
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4
|
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02
|
||||||
with:
|
with:
|
||||||
name: test_artifacts_${{ env.ARTIFACT_KEY }}_${{ matrix.shard }}
|
name: test_artifacts_${{ env.ARTIFACT_KEY }}_${{ matrix.shard }}
|
||||||
path: src/electron/spec/artifacts
|
path: src/electron/spec/artifacts
|
||||||
|
|||||||
@@ -26,23 +26,20 @@ on:
|
|||||||
type: string
|
type: string
|
||||||
default: testing
|
default: testing
|
||||||
|
|
||||||
permissions: {}
|
|
||||||
|
|
||||||
concurrency:
|
concurrency:
|
||||||
group: electron-node-nan-test-${{ inputs.target-platform }}-${{ inputs.target-arch }}-${{ github.ref_protected == true && github.run_id || github.ref }}
|
group: electron-node-nan-test-${{ inputs.target-platform }}-${{ inputs.target-arch }}-${{ github.ref_protected == true && github.run_id || github.ref }}
|
||||||
cancel-in-progress: ${{ github.ref_protected != true }}
|
cancel-in-progress: ${{ github.ref_protected != true }}
|
||||||
|
|
||||||
env:
|
env:
|
||||||
CHROMIUM_GIT_COOKIE: ${{ secrets.CHROMIUM_GIT_COOKIE }}
|
CHROMIUM_GIT_AUTH: ${{ secrets.CHROMIUM_GIT_AUTH }}
|
||||||
|
CHROMIUM_GIT_USER: ${{ secrets.CHROMIUM_GIT_USER }}
|
||||||
ELECTRON_OUT_DIR: Default
|
ELECTRON_OUT_DIR: Default
|
||||||
ELECTRON_RBE_JWT: ${{ secrets.ELECTRON_RBE_JWT }}
|
ELECTRON_RBE_JWT: ${{ secrets.ELECTRON_RBE_JWT }}
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
node-tests:
|
node-tests:
|
||||||
name: Run Node.js Tests
|
name: Run Node.js Tests
|
||||||
runs-on: electron-arc-centralus-linux-amd64-8core
|
runs-on: electron-arc-linux-amd64-8core
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
timeout-minutes: 30
|
timeout-minutes: 30
|
||||||
env:
|
env:
|
||||||
TARGET_ARCH: ${{ inputs.target-arch }}
|
TARGET_ARCH: ${{ inputs.target-arch }}
|
||||||
@@ -50,13 +47,13 @@ jobs:
|
|||||||
container: ${{ fromJSON(inputs.test-container) }}
|
container: ${{ fromJSON(inputs.test-container) }}
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout Electron
|
- name: Checkout Electron
|
||||||
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8
|
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
|
||||||
with:
|
with:
|
||||||
path: src/electron
|
path: src/electron
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
ref: ${{ github.event.pull_request.head.sha }}
|
ref: ${{ github.event.pull_request.head.sha }}
|
||||||
- name: Set Chromium Git Cookie
|
- name: Set Chromium Git Helper
|
||||||
uses: ./src/electron/.github/actions/set-chromium-cookie
|
uses: ./src/electron/.github/actions/set-chromium-git-helper
|
||||||
- name: Install Build Tools
|
- name: Install Build Tools
|
||||||
uses: ./src/electron/.github/actions/install-build-tools
|
uses: ./src/electron/.github/actions/install-build-tools
|
||||||
- name: Init Build Tools
|
- name: Init Build Tools
|
||||||
@@ -65,12 +62,12 @@ jobs:
|
|||||||
- name: Install Dependencies
|
- name: Install Dependencies
|
||||||
uses: ./src/electron/.github/actions/install-dependencies
|
uses: ./src/electron/.github/actions/install-dependencies
|
||||||
- name: Download Generated Artifacts
|
- name: Download Generated Artifacts
|
||||||
uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53
|
uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093
|
||||||
with:
|
with:
|
||||||
name: generated_artifacts_${{ env.BUILD_TYPE }}_${{ env.TARGET_ARCH }}
|
name: generated_artifacts_${{ env.BUILD_TYPE }}_${{ env.TARGET_ARCH }}
|
||||||
path: ./generated_artifacts_${{ env.BUILD_TYPE }}_${{ env.TARGET_ARCH }}
|
path: ./generated_artifacts_${{ env.BUILD_TYPE }}_${{ env.TARGET_ARCH }}
|
||||||
- name: Download Src Artifacts
|
- name: Download Src Artifacts
|
||||||
uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53
|
uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093
|
||||||
with:
|
with:
|
||||||
name: src_artifacts_linux_${{ env.TARGET_ARCH }}
|
name: src_artifacts_linux_${{ env.TARGET_ARCH }}
|
||||||
path: ./src_artifacts_linux_${{ env.TARGET_ARCH }}
|
path: ./src_artifacts_linux_${{ env.TARGET_ARCH }}
|
||||||
@@ -96,9 +93,7 @@ jobs:
|
|||||||
done
|
done
|
||||||
nan-tests:
|
nan-tests:
|
||||||
name: Run Nan Tests
|
name: Run Nan Tests
|
||||||
runs-on: electron-arc-centralus-linux-amd64-4core
|
runs-on: electron-arc-linux-amd64-4core
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
timeout-minutes: 30
|
timeout-minutes: 30
|
||||||
env:
|
env:
|
||||||
TARGET_ARCH: ${{ inputs.target-arch }}
|
TARGET_ARCH: ${{ inputs.target-arch }}
|
||||||
@@ -106,13 +101,13 @@ jobs:
|
|||||||
container: ${{ fromJSON(inputs.test-container) }}
|
container: ${{ fromJSON(inputs.test-container) }}
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout Electron
|
- name: Checkout Electron
|
||||||
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8
|
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
|
||||||
with:
|
with:
|
||||||
path: src/electron
|
path: src/electron
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
ref: ${{ github.event.pull_request.head.sha }}
|
ref: ${{ github.event.pull_request.head.sha }}
|
||||||
- name: Set Chromium Git Cookie
|
- name: Set Chromium Git Helper
|
||||||
uses: ./src/electron/.github/actions/set-chromium-cookie
|
uses: ./src/electron/.github/actions/set-chromium-git-helper
|
||||||
- name: Install Build Tools
|
- name: Install Build Tools
|
||||||
uses: ./src/electron/.github/actions/install-build-tools
|
uses: ./src/electron/.github/actions/install-build-tools
|
||||||
- name: Init Build Tools
|
- name: Init Build Tools
|
||||||
@@ -121,12 +116,12 @@ jobs:
|
|||||||
- name: Install Dependencies
|
- name: Install Dependencies
|
||||||
uses: ./src/electron/.github/actions/install-dependencies
|
uses: ./src/electron/.github/actions/install-dependencies
|
||||||
- name: Download Generated Artifacts
|
- name: Download Generated Artifacts
|
||||||
uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53
|
uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093
|
||||||
with:
|
with:
|
||||||
name: generated_artifacts_${{ env.BUILD_TYPE }}_${{ env.TARGET_ARCH }}
|
name: generated_artifacts_${{ env.BUILD_TYPE }}_${{ env.TARGET_ARCH }}
|
||||||
path: ./generated_artifacts_${{ env.BUILD_TYPE }}_${{ env.TARGET_ARCH }}
|
path: ./generated_artifacts_${{ env.BUILD_TYPE }}_${{ env.TARGET_ARCH }}
|
||||||
- name: Download Src Artifacts
|
- name: Download Src Artifacts
|
||||||
uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53
|
uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093
|
||||||
with:
|
with:
|
||||||
name: src_artifacts_linux_${{ env.TARGET_ARCH }}
|
name: src_artifacts_linux_${{ env.TARGET_ARCH }}
|
||||||
path: ./src_artifacts_linux_${{ env.TARGET_ARCH }}
|
path: ./src_artifacts_linux_${{ env.TARGET_ARCH }}
|
||||||
@@ -138,16 +133,10 @@ jobs:
|
|||||||
unzip -:o dist.zip
|
unzip -:o dist.zip
|
||||||
- name: Setup Linux for Headless Testing
|
- name: Setup Linux for Headless Testing
|
||||||
run: sh -e /etc/init.d/xvfb start
|
run: sh -e /etc/init.d/xvfb start
|
||||||
- name: Add Clang problem matcher
|
|
||||||
shell: bash
|
|
||||||
run: echo "::add-matcher::src/electron/.github/problem-matchers/clang.json"
|
|
||||||
- name: Run Nan Tests
|
- name: Run Nan Tests
|
||||||
run: |
|
run: |
|
||||||
cd src
|
cd src
|
||||||
node electron/script/nan-spec-runner.js
|
node electron/script/nan-spec-runner.js
|
||||||
- name: Remove Clang problem matcher
|
|
||||||
shell: bash
|
|
||||||
run: echo "::remove-matcher owner=clang::"
|
|
||||||
- name: Wait for active SSH sessions
|
- name: Wait for active SSH sessions
|
||||||
shell: bash
|
shell: bash
|
||||||
if: always() && !cancelled()
|
if: always() && !cancelled()
|
||||||
|
|||||||
9
.github/workflows/pull-request-labeled.yml
vendored
9
.github/workflows/pull-request-labeled.yml
vendored
@@ -11,25 +11,20 @@ jobs:
|
|||||||
name: backport/requested label added
|
name: backport/requested label added
|
||||||
if: github.event.label.name == 'backport/requested 🗳'
|
if: github.event.label.name == 'backport/requested 🗳'
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
permissions: {}
|
|
||||||
steps:
|
steps:
|
||||||
- name: Trigger Slack workflow
|
- name: Trigger Slack workflow
|
||||||
uses: slackapi/slack-github-action@91efab103c0de0a537f72a35f6b8cda0ee76bf0a # v2.1.1
|
uses: slackapi/slack-github-action@b0fa283ad8fea605de13dc3f449259339835fc52 # v2.1.0
|
||||||
with:
|
with:
|
||||||
webhook: ${{ secrets.BACKPORT_REQUESTED_SLACK_WEBHOOK_URL }}
|
webhook: ${{ secrets.BACKPORT_REQUESTED_SLACK_WEBHOOK_URL }}
|
||||||
webhook-type: webhook-trigger
|
webhook-type: webhook-trigger
|
||||||
payload: |
|
payload: |
|
||||||
{
|
{
|
||||||
"base_ref": ${{ toJSON(github.event.pull_request.base.ref) }},
|
"url": "${{ github.event.pull_request.html_url }}"
|
||||||
"title": ${{ toJSON(github.event.pull_request.title) }},
|
|
||||||
"url": ${{ toJSON(github.event.pull_request.html_url) }},
|
|
||||||
"user": ${{ toJSON(github.event.pull_request.user.login) }}
|
|
||||||
}
|
}
|
||||||
pull-request-labeled-deprecation-review-complete:
|
pull-request-labeled-deprecation-review-complete:
|
||||||
name: deprecation-review/complete label added
|
name: deprecation-review/complete label added
|
||||||
if: github.event.label.name == 'deprecation-review/complete ✅'
|
if: github.event.label.name == 'deprecation-review/complete ✅'
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
permissions: {}
|
|
||||||
steps:
|
steps:
|
||||||
- name: Generate GitHub App token
|
- name: Generate GitHub App token
|
||||||
uses: electron/github-app-auth-action@384fd19694fe7b6dcc9a684746c6976ad78228ae # v1.1.1
|
uses: electron/github-app-auth-action@384fd19694fe7b6dcc9a684746c6976ad78228ae # v1.1.1
|
||||||
|
|||||||
8
.github/workflows/scorecards.yml
vendored
8
.github/workflows/scorecards.yml
vendored
@@ -22,13 +22,13 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: "Checkout code"
|
- name: "Checkout code"
|
||||||
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
|
|
||||||
# This is a pre-submit / pre-release.
|
# This is a pre-submit / pre-release.
|
||||||
- name: "Run analysis"
|
- name: "Run analysis"
|
||||||
uses: ossf/scorecard-action@4eaacf0543bb3f2c246792bd56e8cdeffafb205a # v2.4.3
|
uses: ossf/scorecard-action@f49aabe0b5af0936a0987cfb85d86b75731b0186 # v2.4.1
|
||||||
with:
|
with:
|
||||||
results_file: results.sarif
|
results_file: results.sarif
|
||||||
results_format: sarif
|
results_format: sarif
|
||||||
@@ -42,7 +42,7 @@ jobs:
|
|||||||
# Upload the results as artifacts (optional). Commenting out will disable uploads of run results in SARIF
|
# Upload the results as artifacts (optional). Commenting out will disable uploads of run results in SARIF
|
||||||
# format to the repository Actions tab.
|
# format to the repository Actions tab.
|
||||||
- name: "Upload artifact"
|
- name: "Upload artifact"
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5.0.0
|
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
|
||||||
with:
|
with:
|
||||||
name: SARIF file
|
name: SARIF file
|
||||||
path: results.sarif
|
path: results.sarif
|
||||||
@@ -50,6 +50,6 @@ jobs:
|
|||||||
|
|
||||||
# Upload the results to GitHub's code scanning dashboard.
|
# Upload the results to GitHub's code scanning dashboard.
|
||||||
- name: "Upload to code-scanning"
|
- name: "Upload to code-scanning"
|
||||||
uses: github/codeql-action/upload-sarif@4e94bd11f71e507f7f87df81788dff88d1dacbfb # v3.29.5
|
uses: github/codeql-action/upload-sarif@ff0a06e83cb2de871e5a09832bc6a81e7276941f # v3.28.18
|
||||||
with:
|
with:
|
||||||
sarif_file: results.sarif
|
sarif_file: results.sarif
|
||||||
|
|||||||
5
.github/workflows/semantic.yml
vendored
5
.github/workflows/semantic.yml
vendored
@@ -7,7 +7,8 @@ on:
|
|||||||
- edited
|
- edited
|
||||||
- synchronize
|
- synchronize
|
||||||
|
|
||||||
permissions: {}
|
permissions:
|
||||||
|
contents: read
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
main:
|
main:
|
||||||
@@ -18,7 +19,7 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: semantic-pull-request
|
- name: semantic-pull-request
|
||||||
uses: amannn/action-semantic-pull-request@48f256284bd46cdaab1048c3721360e808335d50 # v6.1.1
|
uses: amannn/action-semantic-pull-request@0723387faaf9b38adef4775cd42cfd5155ed6017 # v5.5.3
|
||||||
env:
|
env:
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
with:
|
with:
|
||||||
|
|||||||
1
.github/workflows/stable-prep-items.yml
vendored
1
.github/workflows/stable-prep-items.yml
vendored
@@ -11,7 +11,6 @@ jobs:
|
|||||||
check-stable-prep-items:
|
check-stable-prep-items:
|
||||||
name: Check Stable Prep Items
|
name: Check Stable Prep Items
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
permissions: {}
|
|
||||||
steps:
|
steps:
|
||||||
- name: Generate GitHub App token
|
- name: Generate GitHub App token
|
||||||
uses: electron/github-app-auth-action@384fd19694fe7b6dcc9a684746c6976ad78228ae # v1.1.1
|
uses: electron/github-app-auth-action@384fd19694fe7b6dcc9a684746c6976ad78228ae # v1.1.1
|
||||||
|
|||||||
8
.github/workflows/stale.yml
vendored
8
.github/workflows/stale.yml
vendored
@@ -10,14 +10,13 @@ permissions: {}
|
|||||||
jobs:
|
jobs:
|
||||||
stale:
|
stale:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
permissions: {}
|
|
||||||
steps:
|
steps:
|
||||||
- name: Generate GitHub App token
|
- name: Generate GitHub App token
|
||||||
uses: electron/github-app-auth-action@384fd19694fe7b6dcc9a684746c6976ad78228ae # v1.1.1
|
uses: electron/github-app-auth-action@384fd19694fe7b6dcc9a684746c6976ad78228ae # v1.1.1
|
||||||
id: generate-token
|
id: generate-token
|
||||||
with:
|
with:
|
||||||
creds: ${{ secrets.ISSUE_TRIAGE_GH_APP_CREDS }}
|
creds: ${{ secrets.ISSUE_TRIAGE_GH_APP_CREDS }}
|
||||||
- uses: actions/stale@5f858e3efba33a5ca4407a664cc011ad407f2008 # tag: v10.1.0
|
- uses: actions/stale@5bef64f19d7facfb25b37b414482c7164d639639 # tag: v9.1.0
|
||||||
with:
|
with:
|
||||||
repo-token: ${{ steps.generate-token.outputs.token }}
|
repo-token: ${{ steps.generate-token.outputs.token }}
|
||||||
days-before-stale: 90
|
days-before-stale: 90
|
||||||
@@ -28,11 +27,10 @@ jobs:
|
|||||||
This issue has been automatically marked as stale. **If this issue is still affecting you, please leave any comment** (for example, "bump"), and we'll keep it open. If you have any new additional information—in particular, if this is still reproducible in the [latest version of Electron](https://www.electronjs.org/releases/stable) or in the [beta](https://www.electronjs.org/releases/beta)—please include it with your comment!
|
This issue has been automatically marked as stale. **If this issue is still affecting you, please leave any comment** (for example, "bump"), and we'll keep it open. If you have any new additional information—in particular, if this is still reproducible in the [latest version of Electron](https://www.electronjs.org/releases/stable) or in the [beta](https://www.electronjs.org/releases/beta)—please include it with your comment!
|
||||||
close-issue-message: >
|
close-issue-message: >
|
||||||
This issue has been closed due to inactivity, and will not be monitored. If this is a bug and you can reproduce this issue on a [supported version of Electron](https://www.electronjs.org/docs/latest/tutorial/electron-timelines#timeline) please open a new issue and include instructions for reproducing the issue.
|
This issue has been closed due to inactivity, and will not be monitored. If this is a bug and you can reproduce this issue on a [supported version of Electron](https://www.electronjs.org/docs/latest/tutorial/electron-timelines#timeline) please open a new issue and include instructions for reproducing the issue.
|
||||||
exempt-issue-labels: "discussion,security \U0001F512,enhancement :sparkles:,status/confirmed,stale-exempt,upgrade-follow-up,tracking-upstream"
|
exempt-issue-labels: "discussion,security \U0001F512,enhancement :sparkles:,status/confirmed,stale-exempt"
|
||||||
only-pr-labels: not-a-real-label
|
only-pr-labels: not-a-real-label
|
||||||
pending-repro:
|
pending-repro:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
permissions: {}
|
|
||||||
if: ${{ always() }}
|
if: ${{ always() }}
|
||||||
needs: stale
|
needs: stale
|
||||||
steps:
|
steps:
|
||||||
@@ -41,7 +39,7 @@ jobs:
|
|||||||
id: generate-token
|
id: generate-token
|
||||||
with:
|
with:
|
||||||
creds: ${{ secrets.ISSUE_TRIAGE_GH_APP_CREDS }}
|
creds: ${{ secrets.ISSUE_TRIAGE_GH_APP_CREDS }}
|
||||||
- uses: actions/stale@5f858e3efba33a5ca4407a664cc011ad407f2008 # tag: v10.1.0
|
- uses: actions/stale@5bef64f19d7facfb25b37b414482c7164d639639 # tag: v9.1.0
|
||||||
with:
|
with:
|
||||||
repo-token: ${{ steps.generate-token.outputs.token }}
|
repo-token: ${{ steps.generate-token.outputs.token }}
|
||||||
days-before-stale: -1
|
days-before-stale: -1
|
||||||
|
|||||||
25
.github/workflows/windows-publish.yml
vendored
25
.github/workflows/windows-publish.yml
vendored
@@ -6,7 +6,7 @@ on:
|
|||||||
build-image-sha:
|
build-image-sha:
|
||||||
type: string
|
type: string
|
||||||
description: 'SHA for electron/build image'
|
description: 'SHA for electron/build image'
|
||||||
default: '933c7d6ff6802706875270bec2e3c891cf8add3f'
|
default: '424eedbf277ad9749ffa9219068aa72ed4a5e373'
|
||||||
required: true
|
required: true
|
||||||
upload-to-storage:
|
upload-to-storage:
|
||||||
description: 'Uploads to Azure storage'
|
description: 'Uploads to Azure storage'
|
||||||
@@ -18,13 +18,9 @@ on:
|
|||||||
type: boolean
|
type: boolean
|
||||||
default: false
|
default: false
|
||||||
|
|
||||||
permissions: {}
|
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
checkout-windows:
|
checkout-windows:
|
||||||
runs-on: electron-arc-centralus-linux-amd64-32core
|
runs-on: electron-arc-linux-amd64-32core
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
container:
|
container:
|
||||||
image: ghcr.io/electron/build:${{ inputs.build-image-sha }}
|
image: ghcr.io/electron/build:${{ inputs.build-image-sha }}
|
||||||
options: --user root --device /dev/fuse --cap-add SYS_ADMIN
|
options: --user root --device /dev/fuse --cap-add SYS_ADMIN
|
||||||
@@ -32,7 +28,8 @@ jobs:
|
|||||||
- /mnt/win-cache:/mnt/win-cache
|
- /mnt/win-cache:/mnt/win-cache
|
||||||
- /var/run/sas:/var/run/sas
|
- /var/run/sas:/var/run/sas
|
||||||
env:
|
env:
|
||||||
CHROMIUM_GIT_COOKIE_WINDOWS_STRING: ${{ secrets.CHROMIUM_GIT_COOKIE_WINDOWS_STRING }}
|
CHROMIUM_GIT_AUTH: ${{ secrets.CHROMIUM_GIT_AUTH }}
|
||||||
|
CHROMIUM_GIT_USER: ${{ secrets.CHROMIUM_GIT_USER }}
|
||||||
GCLIENT_EXTRA_ARGS: '--custom-var=checkout_win=True'
|
GCLIENT_EXTRA_ARGS: '--custom-var=checkout_win=True'
|
||||||
TARGET_OS: 'win'
|
TARGET_OS: 'win'
|
||||||
ELECTRON_DEPOT_TOOLS_WIN_TOOLCHAIN: '1'
|
ELECTRON_DEPOT_TOOLS_WIN_TOOLCHAIN: '1'
|
||||||
@@ -40,7 +37,7 @@ jobs:
|
|||||||
build-image-sha: ${{ inputs.build-image-sha }}
|
build-image-sha: ${{ inputs.build-image-sha }}
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout Electron
|
- name: Checkout Electron
|
||||||
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8
|
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
|
||||||
with:
|
with:
|
||||||
path: src/electron
|
path: src/electron
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
@@ -52,12 +49,10 @@ jobs:
|
|||||||
|
|
||||||
publish-x64-win:
|
publish-x64-win:
|
||||||
uses: ./.github/workflows/pipeline-segment-electron-build.yml
|
uses: ./.github/workflows/pipeline-segment-electron-build.yml
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
needs: checkout-windows
|
needs: checkout-windows
|
||||||
with:
|
with:
|
||||||
environment: production-release
|
environment: production-release
|
||||||
build-runs-on: electron-arc-centralus-windows-amd64-16core
|
build-runs-on: electron-arc-windows-amd64-16core
|
||||||
target-platform: win
|
target-platform: win
|
||||||
target-arch: x64
|
target-arch: x64
|
||||||
is-release: true
|
is-release: true
|
||||||
@@ -68,12 +63,10 @@ jobs:
|
|||||||
|
|
||||||
publish-arm64-win:
|
publish-arm64-win:
|
||||||
uses: ./.github/workflows/pipeline-segment-electron-build.yml
|
uses: ./.github/workflows/pipeline-segment-electron-build.yml
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
needs: checkout-windows
|
needs: checkout-windows
|
||||||
with:
|
with:
|
||||||
environment: production-release
|
environment: production-release
|
||||||
build-runs-on: electron-arc-centralus-windows-amd64-16core
|
build-runs-on: electron-arc-windows-amd64-16core
|
||||||
target-platform: win
|
target-platform: win
|
||||||
target-arch: arm64
|
target-arch: arm64
|
||||||
is-release: true
|
is-release: true
|
||||||
@@ -84,12 +77,10 @@ jobs:
|
|||||||
|
|
||||||
publish-x86-win:
|
publish-x86-win:
|
||||||
uses: ./.github/workflows/pipeline-segment-electron-build.yml
|
uses: ./.github/workflows/pipeline-segment-electron-build.yml
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
needs: checkout-windows
|
needs: checkout-windows
|
||||||
with:
|
with:
|
||||||
environment: production-release
|
environment: production-release
|
||||||
build-runs-on: electron-arc-centralus-windows-amd64-16core
|
build-runs-on: electron-arc-windows-amd64-16core
|
||||||
target-platform: win
|
target-platform: win
|
||||||
target-arch: x86
|
target-arch: x86
|
||||||
is-release: true
|
is-release: true
|
||||||
|
|||||||
2
.gitignore
vendored
2
.gitignore
vendored
@@ -53,5 +53,3 @@ ts-gen
|
|||||||
patches/mtime-cache.json
|
patches/mtime-cache.json
|
||||||
|
|
||||||
spec/fixtures/logo.png
|
spec/fixtures/logo.png
|
||||||
|
|
||||||
.yarn/install-state.gz
|
|
||||||
@@ -1 +1,4 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
. "$(dirname "$0")/_/husky.sh"
|
||||||
|
|
||||||
npm run precommit
|
npm run precommit
|
||||||
@@ -1 +1,4 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
. "$(dirname "$0")/_/husky.sh"
|
||||||
|
|
||||||
npm run prepack
|
npm run prepack
|
||||||
|
|||||||
@@ -21,9 +21,7 @@
|
|||||||
"ul",
|
"ul",
|
||||||
"unknown",
|
"unknown",
|
||||||
"Tabs",
|
"Tabs",
|
||||||
"TabItem",
|
"TabItem"
|
||||||
"DocCardList",
|
|
||||||
"kbd"
|
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"no-newline-in-links": true
|
"no-newline-in-links": true
|
||||||
|
|||||||
942
.yarn/releases/yarn-4.12.0.cjs
vendored
942
.yarn/releases/yarn-4.12.0.cjs
vendored
File diff suppressed because one or more lines are too long
12
.yarnrc.yml
12
.yarnrc.yml
@@ -1,12 +0,0 @@
|
|||||||
enableScripts: false
|
|
||||||
|
|
||||||
nmHoistingLimits: workspaces
|
|
||||||
|
|
||||||
nodeLinker: node-modules
|
|
||||||
|
|
||||||
npmMinimalAgeGate: 10080
|
|
||||||
|
|
||||||
npmPreapprovedPackages:
|
|
||||||
- "@electron/*"
|
|
||||||
|
|
||||||
yarnPath: .yarn/releases/yarn-4.12.0.cjs
|
|
||||||
166
BUILD.gn
166
BUILD.gn
@@ -4,9 +4,9 @@ import("//build/config/win/manifest.gni")
|
|||||||
import("//components/os_crypt/sync/features.gni")
|
import("//components/os_crypt/sync/features.gni")
|
||||||
import("//components/spellcheck/spellcheck_build_features.gni")
|
import("//components/spellcheck/spellcheck_build_features.gni")
|
||||||
import("//content/public/app/mac_helpers.gni")
|
import("//content/public/app/mac_helpers.gni")
|
||||||
import("//content/public/common/features.gni")
|
|
||||||
import("//extensions/buildflags/buildflags.gni")
|
import("//extensions/buildflags/buildflags.gni")
|
||||||
import("//pdf/features.gni")
|
import("//pdf/features.gni")
|
||||||
|
import("//ppapi/buildflags/buildflags.gni")
|
||||||
import("//printing/buildflags/buildflags.gni")
|
import("//printing/buildflags/buildflags.gni")
|
||||||
import("//testing/test.gni")
|
import("//testing/test.gni")
|
||||||
import("//third_party/electron_node/node.gni")
|
import("//third_party/electron_node/node.gni")
|
||||||
@@ -38,13 +38,12 @@ if (is_mac) {
|
|||||||
import("build/rules.gni")
|
import("build/rules.gni")
|
||||||
|
|
||||||
assert(
|
assert(
|
||||||
mac_deployment_target == "12.0",
|
mac_deployment_target == "11.0",
|
||||||
"Chromium has updated the mac_deployment_target, please update this assert and flag this as a breaking change (docs/breaking-changes.md)")
|
"Chromium has updated the mac_deployment_target, please update this assert, update the supported versions documentation (docs/tutorial/support.md) and flag this as a breaking change")
|
||||||
}
|
}
|
||||||
|
|
||||||
if (is_linux) {
|
if (is_linux) {
|
||||||
import("//build/config/linux/pkg_config.gni")
|
import("//build/config/linux/pkg_config.gni")
|
||||||
import("//electron/build/linux/strip_binary.gni")
|
|
||||||
import("//tools/generate_stubs/rules.gni")
|
import("//tools/generate_stubs/rules.gni")
|
||||||
|
|
||||||
pkg_config("gio_unix") {
|
pkg_config("gio_unix") {
|
||||||
@@ -453,7 +452,7 @@ source_set("electron_lib") {
|
|||||||
"//components/certificate_transparency",
|
"//components/certificate_transparency",
|
||||||
"//components/compose:buildflags",
|
"//components/compose:buildflags",
|
||||||
"//components/embedder_support:user_agent",
|
"//components/embedder_support:user_agent",
|
||||||
"//components/input",
|
"//components/input:input",
|
||||||
"//components/language/core/browser",
|
"//components/language/core/browser",
|
||||||
"//components/net_log",
|
"//components/net_log",
|
||||||
"//components/network_hints/browser",
|
"//components/network_hints/browser",
|
||||||
@@ -480,14 +479,13 @@ source_set("electron_lib") {
|
|||||||
"//device/bluetooth",
|
"//device/bluetooth",
|
||||||
"//device/bluetooth/public/cpp",
|
"//device/bluetooth/public/cpp",
|
||||||
"//gin",
|
"//gin",
|
||||||
"//gpu/ipc/client",
|
|
||||||
"//media/capture/mojom:video_capture",
|
"//media/capture/mojom:video_capture",
|
||||||
"//media/mojo/mojom",
|
"//media/mojo/mojom",
|
||||||
"//media/mojo/mojom:web_speech_recognition",
|
"//media/mojo/mojom:web_speech_recognition",
|
||||||
"//net:extras",
|
"//net:extras",
|
||||||
"//net:net_resources",
|
"//net:net_resources",
|
||||||
"//printing/buildflags",
|
"//printing/buildflags",
|
||||||
"//services/device/public/cpp/bluetooth",
|
"//services/device/public/cpp/bluetooth:bluetooth",
|
||||||
"//services/device/public/cpp/geolocation",
|
"//services/device/public/cpp/geolocation",
|
||||||
"//services/device/public/cpp/hid",
|
"//services/device/public/cpp/hid",
|
||||||
"//services/device/public/mojom",
|
"//services/device/public/mojom",
|
||||||
@@ -520,15 +518,10 @@ source_set("electron_lib") {
|
|||||||
"//v8:v8_libplatform",
|
"//v8:v8_libplatform",
|
||||||
]
|
]
|
||||||
|
|
||||||
if (v8_use_external_startup_data && use_v8_context_snapshot) {
|
|
||||||
deps += [ ":mksnapshot_checksum_gen" ]
|
|
||||||
}
|
|
||||||
|
|
||||||
public_deps = [
|
public_deps = [
|
||||||
"//base",
|
"//base",
|
||||||
"//base:i18n",
|
"//base:i18n",
|
||||||
"//content/public/app",
|
"//content/public/app",
|
||||||
"//ui/base/unowned_user_data",
|
|
||||||
]
|
]
|
||||||
|
|
||||||
include_dirs = [
|
include_dirs = [
|
||||||
@@ -588,13 +581,7 @@ source_set("electron_lib") {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (is_mac) {
|
if (is_mac) {
|
||||||
# Disable C++ modules to resolve linking error when including MacOS SDK
|
|
||||||
# headers from third_party/electron_node/deps/uv/include/uv/darwin.h
|
|
||||||
# TODO(samuelmaddock): consider revisiting this in the future
|
|
||||||
use_libcxx_modules = false
|
|
||||||
|
|
||||||
deps += [
|
deps += [
|
||||||
"//components/os_crypt/common:keychain_password_mac",
|
|
||||||
"//components/remote_cocoa/app_shim",
|
"//components/remote_cocoa/app_shim",
|
||||||
"//components/remote_cocoa/browser",
|
"//components/remote_cocoa/browser",
|
||||||
"//content/browser:mac_helpers",
|
"//content/browser:mac_helpers",
|
||||||
@@ -663,7 +650,6 @@ source_set("electron_lib") {
|
|||||||
"//ui/events/devices/x11",
|
"//ui/events/devices/x11",
|
||||||
"//ui/events/platform/x11",
|
"//ui/events/platform/x11",
|
||||||
"//ui/gtk:gtk_config",
|
"//ui/gtk:gtk_config",
|
||||||
"//ui/linux:display_server_utils",
|
|
||||||
"//ui/linux:linux_ui",
|
"//ui/linux:linux_ui",
|
||||||
"//ui/linux:linux_ui_factory",
|
"//ui/linux:linux_ui_factory",
|
||||||
"//ui/wm",
|
"//ui/wm",
|
||||||
@@ -696,7 +682,7 @@ source_set("electron_lib") {
|
|||||||
deps += [
|
deps += [
|
||||||
"//components/app_launch_prefetch",
|
"//components/app_launch_prefetch",
|
||||||
"//components/crash/core/app:crash_export_thunks",
|
"//components/crash/core/app:crash_export_thunks",
|
||||||
"//third_party/libxml:xml_writer",
|
"//ui/native_theme:native_theme_browser",
|
||||||
"//ui/wm",
|
"//ui/wm",
|
||||||
"//ui/wm/public",
|
"//ui/wm/public",
|
||||||
]
|
]
|
||||||
@@ -741,7 +727,7 @@ source_set("electron_lib") {
|
|||||||
"shell/common/extensions/api:extensions_features",
|
"shell/common/extensions/api:extensions_features",
|
||||||
"//chrome/browser/resources:component_extension_resources",
|
"//chrome/browser/resources:component_extension_resources",
|
||||||
"//components/guest_view/common:mojom",
|
"//components/guest_view/common:mojom",
|
||||||
"//components/update_client",
|
"//components/update_client:update_client",
|
||||||
"//components/zoom",
|
"//components/zoom",
|
||||||
"//extensions/browser",
|
"//extensions/browser",
|
||||||
"//extensions/browser/api:api_provider",
|
"//extensions/browser/api:api_provider",
|
||||||
@@ -763,13 +749,11 @@ source_set("electron_lib") {
|
|||||||
if (enable_pdf_viewer) {
|
if (enable_pdf_viewer) {
|
||||||
deps += [
|
deps += [
|
||||||
"//chrome/browser/resources/pdf:resources",
|
"//chrome/browser/resources/pdf:resources",
|
||||||
"//chrome/browser/ui:browser_element_identifiers",
|
|
||||||
"//components/pdf/browser",
|
"//components/pdf/browser",
|
||||||
"//components/pdf/browser:interceptors",
|
"//components/pdf/browser:interceptors",
|
||||||
"//components/pdf/common:constants",
|
"//components/pdf/common:constants",
|
||||||
"//components/pdf/common:util",
|
"//components/pdf/common:util",
|
||||||
"//components/pdf/renderer",
|
"//components/pdf/renderer",
|
||||||
"//components/user_education/webui",
|
|
||||||
"//pdf",
|
"//pdf",
|
||||||
"//pdf:content_restriction",
|
"//pdf:content_restriction",
|
||||||
]
|
]
|
||||||
@@ -788,18 +772,6 @@ source_set("electron_lib") {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
action("mksnapshot_checksum_gen") {
|
|
||||||
script = "build/checksum_header.py"
|
|
||||||
|
|
||||||
outputs = [ "$target_gen_dir/snapshot_checksum.h" ]
|
|
||||||
inputs = [ "$root_out_dir/$v8_context_snapshot_filename" ]
|
|
||||||
args = rebase_path(inputs)
|
|
||||||
|
|
||||||
args += rebase_path(outputs)
|
|
||||||
|
|
||||||
deps = [ "//tools/v8_context_snapshot" ]
|
|
||||||
}
|
|
||||||
|
|
||||||
electron_paks("packed_resources") {
|
electron_paks("packed_resources") {
|
||||||
if (is_mac) {
|
if (is_mac) {
|
||||||
output_dir = "$root_gen_dir/electron_repack"
|
output_dir = "$root_gen_dir/electron_repack"
|
||||||
@@ -843,7 +815,7 @@ if (is_mac) {
|
|||||||
sources = []
|
sources = []
|
||||||
public_deps = []
|
public_deps = []
|
||||||
sources += [ "$root_out_dir/libffmpeg.dylib" ]
|
sources += [ "$root_out_dir/libffmpeg.dylib" ]
|
||||||
public_deps += [ "//third_party/ffmpeg" ]
|
public_deps += [ "//third_party/ffmpeg:ffmpeg" ]
|
||||||
outputs = [ "{{bundle_contents_dir}}/Libraries/{{source_file_part}}" ]
|
outputs = [ "{{bundle_contents_dir}}/Libraries/{{source_file_part}}" ]
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@@ -1258,7 +1230,7 @@ if (is_mac) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (use_v8_context_snapshot) {
|
if (use_v8_context_snapshot) {
|
||||||
public_deps = [ "//tools/v8_context_snapshot" ]
|
public_deps = [ "//tools/v8_context_snapshot:v8_context_snapshot" ]
|
||||||
}
|
}
|
||||||
|
|
||||||
if (is_linux) {
|
if (is_linux) {
|
||||||
@@ -1437,18 +1409,6 @@ dist_zip("electron_dist_zip") {
|
|||||||
":licenses",
|
":licenses",
|
||||||
]
|
]
|
||||||
if (is_linux) {
|
if (is_linux) {
|
||||||
if (is_official_build) {
|
|
||||||
data_deps += [
|
|
||||||
":strip_chrome_crashpad_handler",
|
|
||||||
":strip_chrome_sandbox",
|
|
||||||
":strip_electron_binary",
|
|
||||||
":strip_libEGL_shlib",
|
|
||||||
":strip_libGLESv2_shlib",
|
|
||||||
":strip_libffmpeg_shlib",
|
|
||||||
":strip_libvk_swiftshader_shlib",
|
|
||||||
]
|
|
||||||
}
|
|
||||||
|
|
||||||
data_deps += [ "//sandbox/linux:chrome_sandbox" ]
|
data_deps += [ "//sandbox/linux:chrome_sandbox" ]
|
||||||
}
|
}
|
||||||
deps = data_deps
|
deps = data_deps
|
||||||
@@ -1494,16 +1454,6 @@ group("electron_mksnapshot") {
|
|||||||
|
|
||||||
dist_zip("electron_mksnapshot_zip") {
|
dist_zip("electron_mksnapshot_zip") {
|
||||||
data_deps = mksnapshot_deps
|
data_deps = mksnapshot_deps
|
||||||
if (is_linux && is_official_build) {
|
|
||||||
data_deps += [
|
|
||||||
":strip_libEGL_shlib",
|
|
||||||
":strip_libGLESv2_shlib",
|
|
||||||
":strip_libffmpeg_shlib",
|
|
||||||
":strip_libvk_swiftshader_shlib",
|
|
||||||
":strip_mksnapshot_binary",
|
|
||||||
":strip_v8_context_snapshot_generator_binary",
|
|
||||||
]
|
|
||||||
}
|
|
||||||
deps = data_deps
|
deps = data_deps
|
||||||
outputs = [ "$root_build_dir/mksnapshot.zip" ]
|
outputs = [ "$root_build_dir/mksnapshot.zip" ]
|
||||||
}
|
}
|
||||||
@@ -1628,101 +1578,3 @@ group("copy_node_headers") {
|
|||||||
group("node_headers") {
|
group("node_headers") {
|
||||||
public_deps = [ ":tar_node_headers" ]
|
public_deps = [ ":tar_node_headers" ]
|
||||||
}
|
}
|
||||||
|
|
||||||
group("testing_build") {
|
|
||||||
public_deps = [
|
|
||||||
":electron_dist_zip",
|
|
||||||
":electron_mksnapshot_zip",
|
|
||||||
":node_headers",
|
|
||||||
]
|
|
||||||
}
|
|
||||||
|
|
||||||
group("release_build") {
|
|
||||||
public_deps = [ ":testing_build" ]
|
|
||||||
if (is_official_build) {
|
|
||||||
public_deps += [ ":electron_symbols" ]
|
|
||||||
}
|
|
||||||
if (is_linux) {
|
|
||||||
public_deps += [
|
|
||||||
":hunspell_dictionaries_zip",
|
|
||||||
":libcxx_headers_zip",
|
|
||||||
":libcxx_objects_zip",
|
|
||||||
":libcxxabi_headers_zip",
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (is_linux && is_official_build) {
|
|
||||||
strip_binary("strip_electron_binary") {
|
|
||||||
binary_input = "$root_out_dir/$electron_project_name"
|
|
||||||
symbol_output = "$root_out_dir/debug/$electron_project_name.debug"
|
|
||||||
compress_debug_sections = true
|
|
||||||
deps = [ ":electron_app" ]
|
|
||||||
}
|
|
||||||
|
|
||||||
strip_binary("strip_chrome_crashpad_handler") {
|
|
||||||
binary_input = "$root_out_dir/chrome_crashpad_handler"
|
|
||||||
symbol_output = "$root_out_dir/debug/chrome_crashpad_handler.debug"
|
|
||||||
compress_debug_sections = true
|
|
||||||
deps = [ "//components/crash/core/app:chrome_crashpad_handler" ]
|
|
||||||
}
|
|
||||||
|
|
||||||
strip_binary("strip_chrome_sandbox") {
|
|
||||||
binary_input = "$root_out_dir/chrome_sandbox"
|
|
||||||
symbol_output = "$root_out_dir/debug/chrome-sandbox.debug"
|
|
||||||
compress_debug_sections = true
|
|
||||||
deps = [ "//sandbox/linux:chrome_sandbox" ]
|
|
||||||
}
|
|
||||||
|
|
||||||
strip_binary("strip_libEGL_shlib") {
|
|
||||||
binary_input = "$root_out_dir/libEGL.so"
|
|
||||||
symbol_output = "$root_out_dir/debug/libEGL.so.debug"
|
|
||||||
compress_debug_sections = true
|
|
||||||
deps = [ "//third_party/angle:libEGL" ]
|
|
||||||
}
|
|
||||||
|
|
||||||
strip_binary("strip_libGLESv2_shlib") {
|
|
||||||
binary_input = "$root_out_dir/libGLESv2.so"
|
|
||||||
symbol_output = "$root_out_dir/debug/libGLESv2.so.debug"
|
|
||||||
compress_debug_sections = true
|
|
||||||
deps = [ "//third_party/angle:libGLESv2" ]
|
|
||||||
}
|
|
||||||
|
|
||||||
strip_binary("strip_libffmpeg_shlib") {
|
|
||||||
binary_input = "$root_out_dir/libffmpeg.so"
|
|
||||||
symbol_output = "$root_out_dir/debug/libffmpeg.so.debug"
|
|
||||||
compress_debug_sections = true
|
|
||||||
deps = [ "//third_party/ffmpeg" ]
|
|
||||||
}
|
|
||||||
|
|
||||||
strip_binary("strip_libvk_swiftshader_shlib") {
|
|
||||||
binary_input = "$root_out_dir/libvk_swiftshader.so"
|
|
||||||
symbol_output = "$root_out_dir/debug/libvk_swiftshader.so.debug"
|
|
||||||
compress_debug_sections = true
|
|
||||||
deps = [ "//third_party/swiftshader/src/Vulkan:swiftshader_libvulkan" ]
|
|
||||||
}
|
|
||||||
|
|
||||||
strip_binary("strip_mksnapshot_binary") {
|
|
||||||
_binary_path = rebase_path(
|
|
||||||
get_label_info(
|
|
||||||
":v8_context_snapshot_generator($v8_snapshot_toolchain)",
|
|
||||||
"root_out_dir") + "/mksnapshot",
|
|
||||||
root_build_dir)
|
|
||||||
binary_input = "$root_out_dir/$_binary_path"
|
|
||||||
symbol_output = "$root_out_dir/debug/${_binary_path}.debug"
|
|
||||||
compress_debug_sections = true
|
|
||||||
deps = mksnapshot_deps
|
|
||||||
}
|
|
||||||
|
|
||||||
strip_binary("strip_v8_context_snapshot_generator_binary") {
|
|
||||||
_binary_path = rebase_path(
|
|
||||||
get_label_info(
|
|
||||||
":v8_context_snapshot_generator($v8_snapshot_toolchain)",
|
|
||||||
"root_out_dir") + "/v8_context_snapshot_generator",
|
|
||||||
root_build_dir)
|
|
||||||
binary_input = "$root_out_dir/$_binary_path"
|
|
||||||
symbol_output = "$root_out_dir/debug/${_binary_path}.debug"
|
|
||||||
compress_debug_sections = true
|
|
||||||
deps = mksnapshot_deps
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|||||||
11
DEPS
11
DEPS
@@ -2,11 +2,11 @@ gclient_gn_args_from = 'src'
|
|||||||
|
|
||||||
vars = {
|
vars = {
|
||||||
'chromium_version':
|
'chromium_version':
|
||||||
'144.0.7547.0',
|
'138.0.7178.0',
|
||||||
'node_version':
|
'node_version':
|
||||||
'v24.11.1',
|
'v22.15.1',
|
||||||
'nan_version':
|
'nan_version':
|
||||||
'675cefebca42410733da8a454c8d9391fcebfbc2',
|
'e14bdcd1f72d62bca1d541b66da43130384ec213',
|
||||||
'squirrel.mac_version':
|
'squirrel.mac_version':
|
||||||
'0e5d146ba13101a1302d59ea6e6e0b3cace4ae38',
|
'0e5d146ba13101a1302d59ea6e6e0b3cace4ae38',
|
||||||
'reactiveobjc_version':
|
'reactiveobjc_version':
|
||||||
@@ -30,6 +30,9 @@ vars = {
|
|||||||
# The path of the sysroots.json file.
|
# The path of the sysroots.json file.
|
||||||
'sysroots_json_path': 'electron/script/sysroots.json',
|
'sysroots_json_path': 'electron/script/sysroots.json',
|
||||||
|
|
||||||
|
# KEEP IN SYNC WITH utils.js FILE
|
||||||
|
'yarn_version': '1.15.2',
|
||||||
|
|
||||||
# To be able to build clean Chromium from sources.
|
# To be able to build clean Chromium from sources.
|
||||||
'apply_patches': True,
|
'apply_patches': True,
|
||||||
|
|
||||||
@@ -152,7 +155,7 @@ hooks = [
|
|||||||
'action': [
|
'action': [
|
||||||
'python3',
|
'python3',
|
||||||
'-c',
|
'-c',
|
||||||
'import os, subprocess; os.chdir(os.path.join("src", "electron")); subprocess.check_call(["node", ".yarn/releases/yarn-4.12.0.cjs", "install", "--immutable"]);',
|
'import os, subprocess; os.chdir(os.path.join("src", "electron")); subprocess.check_call(["python3", "script/lib/npx.py", "yarn@' + (Var("yarn_version")) + '", "install", "--frozen-lockfile"]);',
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|||||||
18
README.md
18
README.md
@@ -37,24 +37,36 @@ For more installation options and troubleshooting tips, see
|
|||||||
|
|
||||||
Each Electron release provides binaries for macOS, Windows, and Linux.
|
Each Electron release provides binaries for macOS, Windows, and Linux.
|
||||||
|
|
||||||
* macOS (Monterey and up): Electron provides 64-bit Intel and Apple Silicon / ARM binaries for macOS.
|
* macOS (Big Sur and up): Electron provides 64-bit Intel and Apple Silicon / ARM binaries for macOS.
|
||||||
* Windows (Windows 10 and up): Electron provides `ia32` (`x86`), `x64` (`amd64`), and `arm64` binaries for Windows. Windows on ARM support was added in Electron 5.0.8. Support for Windows 7, 8 and 8.1 was [removed in Electron 23, in line with Chromium's Windows deprecation policy](https://www.electronjs.org/blog/windows-7-to-8-1-deprecation-notice).
|
* Windows (Windows 10 and up): Electron provides `ia32` (`x86`), `x64` (`amd64`), and `arm64` binaries for Windows. Windows on ARM support was added in Electron 5.0.8. Support for Windows 7, 8 and 8.1 was [removed in Electron 23, in line with Chromium's Windows deprecation policy](https://www.electronjs.org/blog/windows-7-to-8-1-deprecation-notice).
|
||||||
* Linux: The prebuilt binaries of Electron are built on Ubuntu 22.04. They have also been verified to work on:
|
* Linux: The prebuilt binaries of Electron are built on Ubuntu 20.04. They have also been verified to work on:
|
||||||
* Ubuntu 18.04 and newer
|
* Ubuntu 18.04 and newer
|
||||||
* Fedora 32 and newer
|
* Fedora 32 and newer
|
||||||
* Debian 10 and newer
|
* Debian 10 and newer
|
||||||
|
|
||||||
## Electron Fiddle
|
## Quick start & Electron Fiddle
|
||||||
|
|
||||||
Use [`Electron Fiddle`](https://github.com/electron/fiddle)
|
Use [`Electron Fiddle`](https://github.com/electron/fiddle)
|
||||||
to build, run, and package small Electron experiments, to see code examples for all of Electron's APIs, and
|
to build, run, and package small Electron experiments, to see code examples for all of Electron's APIs, and
|
||||||
to try out different versions of Electron. It's designed to make the start of your journey with
|
to try out different versions of Electron. It's designed to make the start of your journey with
|
||||||
Electron easier.
|
Electron easier.
|
||||||
|
|
||||||
|
Alternatively, clone and run the
|
||||||
|
[electron/electron-quick-start](https://github.com/electron/electron-quick-start)
|
||||||
|
repository to see a minimal Electron app in action:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
git clone https://github.com/electron/electron-quick-start
|
||||||
|
cd electron-quick-start
|
||||||
|
npm install
|
||||||
|
npm start
|
||||||
|
```
|
||||||
|
|
||||||
## Resources for learning Electron
|
## Resources for learning Electron
|
||||||
|
|
||||||
* [electronjs.org/docs](https://electronjs.org/docs) - All of Electron's documentation
|
* [electronjs.org/docs](https://electronjs.org/docs) - All of Electron's documentation
|
||||||
* [electron/fiddle](https://github.com/electron/fiddle) - A tool to build, run, and package small Electron experiments
|
* [electron/fiddle](https://github.com/electron/fiddle) - A tool to build, run, and package small Electron experiments
|
||||||
|
* [electron/electron-quick-start](https://github.com/electron/electron-quick-start) - A very basic starter Electron app
|
||||||
* [electronjs.org/community#boilerplates](https://electronjs.org/community#boilerplates) - Sample starter apps created by the community
|
* [electronjs.org/community#boilerplates](https://electronjs.org/community#boilerplates) - Sample starter apps created by the community
|
||||||
|
|
||||||
## Programmatic usage
|
## Programmatic usage
|
||||||
|
|||||||
@@ -8,12 +8,6 @@ The Electron team will send a response indicating the next steps in handling you
|
|||||||
|
|
||||||
Report security bugs in third-party modules to the person or team maintaining the module. You can also report a vulnerability through the [npm contact form](https://www.npmjs.com/support) by selecting "I'm reporting a security vulnerability".
|
Report security bugs in third-party modules to the person or team maintaining the module. You can also report a vulnerability through the [npm contact form](https://www.npmjs.com/support) by selecting "I'm reporting a security vulnerability".
|
||||||
|
|
||||||
## Escalation
|
|
||||||
|
|
||||||
If you do not receive an acknowledgement of your report within 6 business days, or if you cannot find a private security contact for the project, you may escalate to the OpenJS Foundation CNA at `security@lists.openjsf.org`.
|
|
||||||
|
|
||||||
If the project acknowledges your report but does not provide any further response or engagement within 14 days, escalation is also appropriate.
|
|
||||||
|
|
||||||
## The Electron Security Notification Process
|
## The Electron Security Notification Process
|
||||||
|
|
||||||
For context on Electron's security notification process, please see the [Notifications](https://github.com/electron/governance/blob/main/wg-security/membership-and-notifications.md#notifications) section of the Security WG's [Membership and Notifications](https://github.com/electron/governance/blob/main/wg-security/membership-and-notifications.md) Governance document.
|
For context on Electron's security notification process, please see the [Notifications](https://github.com/electron/governance/blob/main/wg-security/membership-and-notifications.md#notifications) section of the Security WG's [Membership and Notifications](https://github.com/electron/governance/blob/main/wg-security/membership-and-notifications.md) Governance document.
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
{
|
{
|
||||||
"plugins": [
|
"plugins": [
|
||||||
"import"
|
"unicorn"
|
||||||
],
|
],
|
||||||
"rules": {
|
"rules": {
|
||||||
"import/enforce-node-protocol-usage": ["error", "always"]
|
"unicorn/prefer-node-protocol": "error"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ is_electron_build = true
|
|||||||
root_extra_deps = [ "//electron" ]
|
root_extra_deps = [ "//electron" ]
|
||||||
|
|
||||||
# Registry of NMVs --> https://github.com/nodejs/node/blob/main/doc/abi_version_registry.json
|
# Registry of NMVs --> https://github.com/nodejs/node/blob/main/doc/abi_version_registry.json
|
||||||
node_module_version = 143
|
node_module_version = 136
|
||||||
|
|
||||||
v8_promise_internal_field_count = 1
|
v8_promise_internal_field_count = 1
|
||||||
v8_embedder_string = "-electron.0"
|
v8_embedder_string = "-electron.0"
|
||||||
@@ -19,15 +19,15 @@ proprietary_codecs = true
|
|||||||
|
|
||||||
enable_printing = true
|
enable_printing = true
|
||||||
|
|
||||||
# Refs https://chromium-review.googlesource.com/c/chromium/src/+/6986517
|
|
||||||
# CI is using MacOS 15.5 which doesn't have the required modulemaps.
|
|
||||||
use_clang_modules = false
|
|
||||||
|
|
||||||
# Removes DLLs from the build, which are only meant to be used for Chromium development.
|
# Removes DLLs from the build, which are only meant to be used for Chromium development.
|
||||||
# See https://github.com/electron/electron/pull/17985
|
# See https://github.com/electron/electron/pull/17985
|
||||||
angle_enable_vulkan_validation_layers = false
|
angle_enable_vulkan_validation_layers = false
|
||||||
dawn_enable_vulkan_validation_layers = false
|
dawn_enable_vulkan_validation_layers = false
|
||||||
|
|
||||||
|
# Removes dxc dll's that are only used experimentally.
|
||||||
|
# See https://bugs.chromium.org/p/chromium/issues/detail?id=1474897
|
||||||
|
dawn_use_built_dxc = false
|
||||||
|
|
||||||
# These are disabled because they cause the zip manifest to differ between
|
# These are disabled because they cause the zip manifest to differ between
|
||||||
# testing and release builds.
|
# testing and release builds.
|
||||||
# See https://chromium-review.googlesource.com/c/chromium/src/+/2774898.
|
# See https://chromium-review.googlesource.com/c/chromium/src/+/2774898.
|
||||||
@@ -70,8 +70,6 @@ v8_expose_public_symbols = true
|
|||||||
# sensitive content by enterprise users.
|
# sensitive content by enterprise users.
|
||||||
enterprise_cloud_content_analysis = false
|
enterprise_cloud_content_analysis = false
|
||||||
|
|
||||||
# We don't use anything from here, and it causes target collisions
|
# TODO: remove dependency on legacy ipc
|
||||||
enable_linux_installer = false
|
# https://issues.chromium.org/issues/40943039
|
||||||
|
content_enable_legacy_ipc = true
|
||||||
# Disable "Save to Drive" feature in PDF viewer
|
|
||||||
enable_pdf_save_to_drive = false
|
|
||||||
|
|||||||
@@ -1,37 +0,0 @@
|
|||||||
#!/usr/bin/env python3
|
|
||||||
|
|
||||||
import os
|
|
||||||
import sys
|
|
||||||
import hashlib
|
|
||||||
|
|
||||||
dir_path = os.path.dirname(os.path.realpath(__file__))
|
|
||||||
|
|
||||||
TEMPLATE_H = """
|
|
||||||
#ifndef ELECTRON_SNAPSHOT_CHECKSUM_H_
|
|
||||||
#define ELECTRON_SNAPSHOT_CHECKSUM_H_
|
|
||||||
|
|
||||||
namespace electron::snapshot_checksum {
|
|
||||||
|
|
||||||
inline constexpr std::string_view kChecksum = "{checksum}";
|
|
||||||
|
|
||||||
} // namespace electron::snapshot_checksum
|
|
||||||
|
|
||||||
#endif // ELECTRON_SNAPSHOT_CHECKSUM_H_
|
|
||||||
"""
|
|
||||||
|
|
||||||
def calculate_sha256(filepath):
|
|
||||||
sha256_hash = hashlib.sha256()
|
|
||||||
with open(filepath, "rb") as f:
|
|
||||||
for byte_block in iter(lambda: f.read(4096), b""):
|
|
||||||
sha256_hash.update(byte_block)
|
|
||||||
return sha256_hash.hexdigest()
|
|
||||||
|
|
||||||
input_file = sys.argv[1]
|
|
||||||
output_file = sys.argv[2]
|
|
||||||
|
|
||||||
checksum = calculate_sha256(input_file)
|
|
||||||
|
|
||||||
checksum_h = TEMPLATE_H.replace("{checksum}", checksum)
|
|
||||||
|
|
||||||
with open(output_file, 'w') as f:
|
|
||||||
f.write(checksum_h)
|
|
||||||
@@ -1,70 +0,0 @@
|
|||||||
# Copyright 2021 The Chromium Authors
|
|
||||||
# Use of this source code is governed by a BSD-style license that can be
|
|
||||||
# found in the LICENSE file.
|
|
||||||
|
|
||||||
# This has been adapted from https://source.chromium.org/chromium/chromium/src/+/main:build/linux/strip_binary.gni;drc=c220a41e0422d45f1657c28146d32e99cc53640b
|
|
||||||
# The notable difference is it has an option to compress the debug sections
|
|
||||||
|
|
||||||
import("//build/config/clang/clang.gni")
|
|
||||||
import("//build/toolchain/toolchain.gni")
|
|
||||||
|
|
||||||
# Extracts symbols from a binary into a symbol file.
|
|
||||||
#
|
|
||||||
# Args:
|
|
||||||
# binary_input: Path to the binary containing symbols to extract, e.g.:
|
|
||||||
# "$root_out_dir/chrome"
|
|
||||||
# symbol_output: Desired output file for symbols, e.g.:
|
|
||||||
# "$root_out_dir/chrome.debug"
|
|
||||||
# stripped_binary_output: Desired output file for stripped file, e.g.:
|
|
||||||
# "$root_out_dir/chrome.stripped"
|
|
||||||
# compress_debug_sections: If true, compress the extracted debug sections
|
|
||||||
template("strip_binary") {
|
|
||||||
forward_variables_from(invoker,
|
|
||||||
[
|
|
||||||
"deps",
|
|
||||||
"testonly",
|
|
||||||
])
|
|
||||||
action("${target_name}") {
|
|
||||||
llvm_strip_binary = "${clang_base_path}/bin/llvm-strip"
|
|
||||||
llvm_objcopy_binary = "${clang_base_path}/bin/llvm-objcopy"
|
|
||||||
script = "//electron/build/linux/strip_binary.py"
|
|
||||||
|
|
||||||
if (defined(invoker.stripped_binary_output)) {
|
|
||||||
stripped_binary_output = invoker.stripped_binary_output
|
|
||||||
} else {
|
|
||||||
stripped_binary_output = invoker.binary_input + ".stripped"
|
|
||||||
}
|
|
||||||
if (defined(invoker.symbol_output)) {
|
|
||||||
symbol_output = invoker.symbol_output
|
|
||||||
} else {
|
|
||||||
symbol_output = invoker.binary_input + ".debug"
|
|
||||||
}
|
|
||||||
|
|
||||||
inputs = [
|
|
||||||
invoker.binary_input,
|
|
||||||
llvm_strip_binary,
|
|
||||||
llvm_objcopy_binary,
|
|
||||||
]
|
|
||||||
outputs = [
|
|
||||||
symbol_output,
|
|
||||||
stripped_binary_output,
|
|
||||||
]
|
|
||||||
args = [
|
|
||||||
"--llvm-strip-binary-path",
|
|
||||||
rebase_path(llvm_strip_binary, root_build_dir),
|
|
||||||
"--llvm-objcopy-binary-path",
|
|
||||||
rebase_path(llvm_objcopy_binary, root_build_dir),
|
|
||||||
"--symbol-output",
|
|
||||||
rebase_path(symbol_output, root_build_dir),
|
|
||||||
"--stripped-binary-output",
|
|
||||||
rebase_path(stripped_binary_output, root_build_dir),
|
|
||||||
"--binary-input",
|
|
||||||
rebase_path(invoker.binary_input, root_build_dir),
|
|
||||||
]
|
|
||||||
|
|
||||||
if (defined(invoker.compress_debug_sections) &&
|
|
||||||
invoker.compress_debug_sections) {
|
|
||||||
args += [ "--compress-debug-sections" ]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,63 +0,0 @@
|
|||||||
#!/usr/bin/env python3
|
|
||||||
#
|
|
||||||
# Copyright 2021 The Chromium Authors
|
|
||||||
# Use of this source code is governed by a BSD-style license that can be
|
|
||||||
# found in the LICENSE file.
|
|
||||||
|
|
||||||
# This has been adapted from https://source.chromium.org/chromium/chromium/src/+/main:build/linux/strip_binary.py;drc=c220a41e0422d45f1657c28146d32e99cc53640b
|
|
||||||
# The notable difference is it has an option to compress the debug sections
|
|
||||||
|
|
||||||
import argparse
|
|
||||||
import subprocess
|
|
||||||
import sys
|
|
||||||
|
|
||||||
|
|
||||||
def main() -> int:
|
|
||||||
parser = argparse.ArgumentParser(description="Strip binary using LLVM tools.")
|
|
||||||
parser.add_argument("--llvm-strip-binary-path",
|
|
||||||
help="Path to llvm-strip executable.")
|
|
||||||
parser.add_argument("--llvm-objcopy-binary-path",
|
|
||||||
required=True,
|
|
||||||
help="Path to llvm-objcopy executable.")
|
|
||||||
parser.add_argument("--binary-input", help="Input ELF binary.")
|
|
||||||
parser.add_argument("--symbol-output",
|
|
||||||
help="File to write extracted debug info (.debug).")
|
|
||||||
parser.add_argument("--compress-debug-sections",
|
|
||||||
action="store_true",
|
|
||||||
help="Compress extracted debug info.")
|
|
||||||
parser.add_argument("--stripped-binary-output",
|
|
||||||
help="File to write stripped binary.")
|
|
||||||
args = parser.parse_args()
|
|
||||||
|
|
||||||
# Replicate the behavior of:
|
|
||||||
# eu-strip <binary_input> -o <stripped_binary_output> -f <symbol_output>
|
|
||||||
|
|
||||||
objcopy_args = [
|
|
||||||
"--only-keep-debug",
|
|
||||||
args.binary_input,
|
|
||||||
args.symbol_output,
|
|
||||||
]
|
|
||||||
|
|
||||||
if args.compress_debug_sections:
|
|
||||||
objcopy_args.insert(0, "--compress-debug-sections")
|
|
||||||
|
|
||||||
subprocess.check_output([args.llvm_objcopy_binary_path] + objcopy_args)
|
|
||||||
subprocess.check_output([
|
|
||||||
args.llvm_strip_binary_path,
|
|
||||||
"--strip-debug",
|
|
||||||
"--strip-unneeded",
|
|
||||||
"-o",
|
|
||||||
args.stripped_binary_output,
|
|
||||||
args.binary_input,
|
|
||||||
])
|
|
||||||
subprocess.check_output([
|
|
||||||
args.llvm_objcopy_binary_path,
|
|
||||||
f"--add-gnu-debuglink={args.symbol_output}",
|
|
||||||
args.stripped_binary_output,
|
|
||||||
])
|
|
||||||
|
|
||||||
return 0
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
sys.exit(main())
|
|
||||||
@@ -67,6 +67,10 @@ template("mac_xib_bundle_data") {
|
|||||||
ibtool_flags = [
|
ibtool_flags = [
|
||||||
"--minimum-deployment-target",
|
"--minimum-deployment-target",
|
||||||
mac_deployment_target,
|
mac_deployment_target,
|
||||||
|
|
||||||
|
# TODO(rsesek): Enable this once all the bots are on Xcode 7+.
|
||||||
|
# "--target-device",
|
||||||
|
# "mac",
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,21 +0,0 @@
|
|||||||
# -*- bazel-starlark -*-
|
|
||||||
|
|
||||||
load("@builtin//struct.star", "module")
|
|
||||||
|
|
||||||
def __platform_properties(ctx):
|
|
||||||
container_image = "docker://gcr.io/chops-public-images-prod/rbe/siso-chromium/linux@sha256:d7cb1ab14a0f20aa669c23f22c15a9dead761dcac19f43985bf9dd5f41fbef3a"
|
|
||||||
return {
|
|
||||||
"default": {
|
|
||||||
"OSFamily": "Linux",
|
|
||||||
"container-image": container_image,
|
|
||||||
},
|
|
||||||
"large": {
|
|
||||||
"OSFamily": "Linux",
|
|
||||||
"container-image": container_image,
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
backend = module(
|
|
||||||
"backend",
|
|
||||||
platform_properties = __platform_properties,
|
|
||||||
)
|
|
||||||
@@ -1,66 +0,0 @@
|
|||||||
load("@builtin//encoding.star", "json")
|
|
||||||
load("@builtin//path.star", "path")
|
|
||||||
load("@builtin//runtime.star", "runtime")
|
|
||||||
load("@builtin//struct.star", "module")
|
|
||||||
load("@config//main.star", upstream_init = "init")
|
|
||||||
load("@config//win_sdk.star", "win_sdk")
|
|
||||||
load("@config//gn_logs.star", "gn_logs")
|
|
||||||
|
|
||||||
def init(ctx):
|
|
||||||
mod = upstream_init(ctx)
|
|
||||||
step_config = json.decode(mod.step_config)
|
|
||||||
|
|
||||||
# Buildbarn doesn't support input_root_absolute_path so disable that
|
|
||||||
for rule in step_config["rules"]:
|
|
||||||
input_root_absolute_path = rule.get("input_root_absolute_path", False)
|
|
||||||
if input_root_absolute_path:
|
|
||||||
rule.pop("input_root_absolute_path", None)
|
|
||||||
|
|
||||||
# Only wrap clang rules with a remote wrapper if not on Linux. These are currently only
|
|
||||||
# needed for X-Compile builds, which run on Windows and Mac.
|
|
||||||
if runtime.os != "linux":
|
|
||||||
for rule in step_config["rules"]:
|
|
||||||
if rule["name"].startswith("clang/") or rule["name"].startswith("clang-cl/"):
|
|
||||||
rule["remote_wrapper"] = "../../buildtools/reclient_cfgs/chromium-browser-clang/clang_remote_wrapper"
|
|
||||||
if "inputs" not in rule:
|
|
||||||
rule["inputs"] = []
|
|
||||||
rule["inputs"].append("buildtools/reclient_cfgs/chromium-browser-clang/clang_remote_wrapper")
|
|
||||||
rule["inputs"].append("third_party/llvm-build/Release+Asserts_linux/bin/clang")
|
|
||||||
|
|
||||||
if "executables" not in step_config:
|
|
||||||
step_config["executables"] = []
|
|
||||||
step_config["executables"].append("buildtools/reclient_cfgs/chromium-browser-clang/clang_remote_wrapper")
|
|
||||||
step_config["executables"].append("third_party/llvm-build/Release+Asserts_linux/bin/clang")
|
|
||||||
|
|
||||||
if runtime.os == "darwin":
|
|
||||||
# Update platforms to match our default siso config instead of reclient configs.
|
|
||||||
step_config["platforms"].update({
|
|
||||||
"clang": step_config["platforms"]["default"],
|
|
||||||
"clang_large": step_config["platforms"]["default"],
|
|
||||||
})
|
|
||||||
|
|
||||||
if runtime.os == "windows":
|
|
||||||
# Add additional Windows SDK headers needed by Electron
|
|
||||||
win_toolchain_dir = win_sdk.toolchain_dir(ctx)
|
|
||||||
if win_toolchain_dir:
|
|
||||||
sdk_version = gn_logs.read(ctx).get("windows_sdk_version")
|
|
||||||
step_config["input_deps"][win_toolchain_dir + ":headers"].extend([
|
|
||||||
# third_party/electron_node/deps/uv/include/uv/win.h includes mswsock.h
|
|
||||||
path.join(win_toolchain_dir, "Windows Kits/10/Include", sdk_version, "um/mswsock.h"),
|
|
||||||
# third_party/electron_node/src/debug_utils.cc includes lm.h
|
|
||||||
path.join(win_toolchain_dir, "Windows Kits/10/Include", sdk_version, "um/Lm.h"),
|
|
||||||
])
|
|
||||||
|
|
||||||
# Update platforms to match our default siso config instead of reclient configs.
|
|
||||||
step_config["platforms"].update({
|
|
||||||
"clang-cl": step_config["platforms"]["default"],
|
|
||||||
"clang-cl_large": step_config["platforms"]["default"],
|
|
||||||
"lld-link": step_config["platforms"]["default"],
|
|
||||||
})
|
|
||||||
|
|
||||||
return module(
|
|
||||||
"config",
|
|
||||||
step_config = json.encode(step_config),
|
|
||||||
filegroups = mod.filegroups,
|
|
||||||
handlers = mod.handlers,
|
|
||||||
)
|
|
||||||
@@ -121,7 +121,6 @@ if ((globalThis.process || binding.process).argv.includes("--profile-electron-in
|
|||||||
'electron/main$': electronAPIFile,
|
'electron/main$': electronAPIFile,
|
||||||
'electron/renderer$': electronAPIFile,
|
'electron/renderer$': electronAPIFile,
|
||||||
'electron/common$': electronAPIFile,
|
'electron/common$': electronAPIFile,
|
||||||
'electron/utility$': electronAPIFile,
|
|
||||||
// Force timers to resolve to our dependency that doesn't use window.postMessage
|
// Force timers to resolve to our dependency that doesn't use window.postMessage
|
||||||
timers: path.resolve(electronRoot, 'node_modules', 'timers-browserify', 'main.js')
|
timers: path.resolve(electronRoot, 'node_modules', 'timers-browserify', 'main.js')
|
||||||
},
|
},
|
||||||
@@ -144,9 +143,7 @@ if ((globalThis.process || binding.process).argv.includes("--profile-electron-in
|
|||||||
transpileOnly: onlyPrintingGraph,
|
transpileOnly: onlyPrintingGraph,
|
||||||
ignoreDiagnostics: [
|
ignoreDiagnostics: [
|
||||||
// File '{0}' is not under 'rootDir' '{1}'.
|
// File '{0}' is not under 'rootDir' '{1}'.
|
||||||
6059,
|
6059
|
||||||
// Private field '{0}' must be declared in an enclosing class.
|
|
||||||
1111
|
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
}]
|
}]
|
||||||
|
|||||||
12
build/zip.py
12
build/zip.py
@@ -41,8 +41,6 @@ PATHS_TO_SKIP = [
|
|||||||
'resources/inspector',
|
'resources/inspector',
|
||||||
'gen/third_party/devtools-frontend/src',
|
'gen/third_party/devtools-frontend/src',
|
||||||
'gen/ui/webui',
|
'gen/ui/webui',
|
||||||
# Skip because these get zipped separately in script/zip-symbols.py
|
|
||||||
'debug',
|
|
||||||
]
|
]
|
||||||
|
|
||||||
def skip_path(dep, dist_zip, target_cpu):
|
def skip_path(dep, dist_zip, target_cpu):
|
||||||
@@ -82,11 +80,6 @@ def main(argv):
|
|||||||
dep = dep.strip()
|
dep = dep.strip()
|
||||||
if not skip_path(dep, dist_zip, target_cpu):
|
if not skip_path(dep, dist_zip, target_cpu):
|
||||||
dist_files.add(dep)
|
dist_files.add(dep)
|
||||||
# On Linux, filter out any files which have a .stripped companion
|
|
||||||
if sys.platform == 'linux':
|
|
||||||
dist_files = {
|
|
||||||
dep for dep in dist_files if f"{dep.removeprefix('./')}.stripped" not in dist_files
|
|
||||||
}
|
|
||||||
if sys.platform == 'darwin' and not should_flatten:
|
if sys.platform == 'darwin' and not should_flatten:
|
||||||
execute(['zip', '-r', '-y', dist_zip] + list(dist_files))
|
execute(['zip', '-r', '-y', dist_zip] + list(dist_files))
|
||||||
else:
|
else:
|
||||||
@@ -103,13 +96,10 @@ def main(argv):
|
|||||||
dirname = os.path.dirname(dep)
|
dirname = os.path.dirname(dep)
|
||||||
arcname = (
|
arcname = (
|
||||||
os.path.join(dirname, 'chrome-sandbox')
|
os.path.join(dirname, 'chrome-sandbox')
|
||||||
if basename.removesuffix('.stripped') == 'chrome_sandbox'
|
if basename == 'chrome_sandbox'
|
||||||
else dep
|
else dep
|
||||||
)
|
)
|
||||||
name_to_write = arcname
|
name_to_write = arcname
|
||||||
# On Linux, strip the .stripped suffix from the name before zipping
|
|
||||||
if sys.platform == 'linux':
|
|
||||||
name_to_write = name_to_write.removesuffix('.stripped')
|
|
||||||
if should_flatten:
|
if should_flatten:
|
||||||
if flatten_relative_to:
|
if flatten_relative_to:
|
||||||
if name_to_write.startswith(flatten_relative_to):
|
if name_to_write.startswith(flatten_relative_to):
|
||||||
|
|||||||
@@ -23,8 +23,6 @@ static_library("chrome") {
|
|||||||
"//chrome/browser/browser_process.h",
|
"//chrome/browser/browser_process.h",
|
||||||
"//chrome/browser/devtools/devtools_contents_resizing_strategy.cc",
|
"//chrome/browser/devtools/devtools_contents_resizing_strategy.cc",
|
||||||
"//chrome/browser/devtools/devtools_contents_resizing_strategy.h",
|
"//chrome/browser/devtools/devtools_contents_resizing_strategy.h",
|
||||||
"//chrome/browser/devtools/devtools_dispatch_http_request_params.cc",
|
|
||||||
"//chrome/browser/devtools/devtools_dispatch_http_request_params.h",
|
|
||||||
"//chrome/browser/devtools/devtools_embedder_message_dispatcher.cc",
|
"//chrome/browser/devtools/devtools_embedder_message_dispatcher.cc",
|
||||||
"//chrome/browser/devtools/devtools_embedder_message_dispatcher.h",
|
"//chrome/browser/devtools/devtools_embedder_message_dispatcher.h",
|
||||||
"//chrome/browser/devtools/devtools_eye_dropper.cc",
|
"//chrome/browser/devtools/devtools_eye_dropper.cc",
|
||||||
@@ -68,8 +66,6 @@ static_library("chrome") {
|
|||||||
"//chrome/browser/picture_in_picture/picture_in_picture_occlusion_tracker.h",
|
"//chrome/browser/picture_in_picture/picture_in_picture_occlusion_tracker.h",
|
||||||
"//chrome/browser/picture_in_picture/picture_in_picture_occlusion_tracker_observer.cc",
|
"//chrome/browser/picture_in_picture/picture_in_picture_occlusion_tracker_observer.cc",
|
||||||
"//chrome/browser/picture_in_picture/picture_in_picture_occlusion_tracker_observer.h",
|
"//chrome/browser/picture_in_picture/picture_in_picture_occlusion_tracker_observer.h",
|
||||||
"//chrome/browser/picture_in_picture/picture_in_picture_widget_fade_animator.cc",
|
|
||||||
"//chrome/browser/picture_in_picture/picture_in_picture_widget_fade_animator.h",
|
|
||||||
"//chrome/browser/picture_in_picture/picture_in_picture_window_manager.cc",
|
"//chrome/browser/picture_in_picture/picture_in_picture_window_manager.cc",
|
||||||
"//chrome/browser/picture_in_picture/picture_in_picture_window_manager.h",
|
"//chrome/browser/picture_in_picture/picture_in_picture_window_manager.h",
|
||||||
"//chrome/browser/picture_in_picture/picture_in_picture_window_manager_uma_helper.cc",
|
"//chrome/browser/picture_in_picture/picture_in_picture_window_manager_uma_helper.cc",
|
||||||
@@ -78,8 +74,14 @@ static_library("chrome") {
|
|||||||
"//chrome/browser/picture_in_picture/scoped_picture_in_picture_occlusion_observation.h",
|
"//chrome/browser/picture_in_picture/scoped_picture_in_picture_occlusion_observation.h",
|
||||||
"//chrome/browser/platform_util.cc",
|
"//chrome/browser/platform_util.cc",
|
||||||
"//chrome/browser/platform_util.h",
|
"//chrome/browser/platform_util.h",
|
||||||
|
"//chrome/browser/predictors/preconnect_manager.cc",
|
||||||
|
"//chrome/browser/predictors/preconnect_manager.h",
|
||||||
"//chrome/browser/predictors/predictors_features.cc",
|
"//chrome/browser/predictors/predictors_features.cc",
|
||||||
"//chrome/browser/predictors/predictors_features.h",
|
"//chrome/browser/predictors/predictors_features.h",
|
||||||
|
"//chrome/browser/predictors/proxy_lookup_client_impl.cc",
|
||||||
|
"//chrome/browser/predictors/proxy_lookup_client_impl.h",
|
||||||
|
"//chrome/browser/predictors/resolve_host_client_impl.cc",
|
||||||
|
"//chrome/browser/predictors/resolve_host_client_impl.h",
|
||||||
"//chrome/browser/process_singleton.h",
|
"//chrome/browser/process_singleton.h",
|
||||||
"//chrome/browser/process_singleton_internal.cc",
|
"//chrome/browser/process_singleton_internal.cc",
|
||||||
"//chrome/browser/process_singleton_internal.h",
|
"//chrome/browser/process_singleton_internal.h",
|
||||||
@@ -126,12 +128,8 @@ static_library("chrome") {
|
|||||||
"//chrome/browser/ui/views/overlay/hang_up_button.h",
|
"//chrome/browser/ui/views/overlay/hang_up_button.h",
|
||||||
"//chrome/browser/ui/views/overlay/minimize_button.cc",
|
"//chrome/browser/ui/views/overlay/minimize_button.cc",
|
||||||
"//chrome/browser/ui/views/overlay/minimize_button.h",
|
"//chrome/browser/ui/views/overlay/minimize_button.h",
|
||||||
"//chrome/browser/ui/views/overlay/overlay_controls_fade_animation.cc",
|
|
||||||
"//chrome/browser/ui/views/overlay/overlay_controls_fade_animation.h",
|
|
||||||
"//chrome/browser/ui/views/overlay/overlay_window_image_button.cc",
|
"//chrome/browser/ui/views/overlay/overlay_window_image_button.cc",
|
||||||
"//chrome/browser/ui/views/overlay/overlay_window_image_button.h",
|
"//chrome/browser/ui/views/overlay/overlay_window_image_button.h",
|
||||||
"//chrome/browser/ui/views/overlay/overlay_window_live_caption_button.cc",
|
|
||||||
"//chrome/browser/ui/views/overlay/overlay_window_live_caption_button.h",
|
|
||||||
"//chrome/browser/ui/views/overlay/playback_image_button.cc",
|
"//chrome/browser/ui/views/overlay/playback_image_button.cc",
|
||||||
"//chrome/browser/ui/views/overlay/playback_image_button.h",
|
"//chrome/browser/ui/views/overlay/playback_image_button.h",
|
||||||
"//chrome/browser/ui/views/overlay/resize_handle_button.cc",
|
"//chrome/browser/ui/views/overlay/resize_handle_button.cc",
|
||||||
@@ -146,10 +144,6 @@ static_library("chrome") {
|
|||||||
"//chrome/browser/ui/views/overlay/toggle_microphone_button.h",
|
"//chrome/browser/ui/views/overlay/toggle_microphone_button.h",
|
||||||
"//chrome/browser/ui/views/overlay/video_overlay_window_views.cc",
|
"//chrome/browser/ui/views/overlay/video_overlay_window_views.cc",
|
||||||
"//chrome/browser/ui/views/overlay/video_overlay_window_views.h",
|
"//chrome/browser/ui/views/overlay/video_overlay_window_views.h",
|
||||||
"//chrome/browser/ui/views/picture_in_picture/picture_in_picture_bounds_change_animation.cc",
|
|
||||||
"//chrome/browser/ui/views/picture_in_picture/picture_in_picture_bounds_change_animation.h",
|
|
||||||
"//chrome/browser/ui/views/picture_in_picture/picture_in_picture_tucker.cc",
|
|
||||||
"//chrome/browser/ui/views/picture_in_picture/picture_in_picture_tucker.h",
|
|
||||||
"//chrome/browser/ui/webui/accessibility/accessibility_ui.cc",
|
"//chrome/browser/ui/webui/accessibility/accessibility_ui.cc",
|
||||||
"//chrome/browser/ui/webui/accessibility/accessibility_ui.h",
|
"//chrome/browser/ui/webui/accessibility/accessibility_ui.h",
|
||||||
"//chrome/browser/usb/usb_blocklist.cc",
|
"//chrome/browser/usb/usb_blocklist.cc",
|
||||||
@@ -213,7 +207,7 @@ static_library("chrome") {
|
|||||||
"//components/enterprise/common/proto:connectors_proto",
|
"//components/enterprise/common/proto:connectors_proto",
|
||||||
"//components/enterprise/obfuscation/core:enterprise_obfuscation",
|
"//components/enterprise/obfuscation/core:enterprise_obfuscation",
|
||||||
"//components/safe_browsing/core/browser/db:safebrowsing_proto",
|
"//components/safe_browsing/core/browser/db:safebrowsing_proto",
|
||||||
"//components/vector_icons",
|
"//components/vector_icons:vector_icons",
|
||||||
"//ui/base/accelerators/global_accelerator_listener",
|
"//ui/base/accelerators/global_accelerator_listener",
|
||||||
"//ui/snapshot",
|
"//ui/snapshot",
|
||||||
"//ui/views/controls/webview",
|
"//ui/views/controls/webview",
|
||||||
@@ -223,8 +217,8 @@ static_library("chrome") {
|
|||||||
sources += [
|
sources += [
|
||||||
"//chrome/browser/platform_util_aura.cc",
|
"//chrome/browser/platform_util_aura.cc",
|
||||||
"//chrome/browser/ui/views/eye_dropper/eye_dropper_aura.cc",
|
"//chrome/browser/ui/views/eye_dropper/eye_dropper_aura.cc",
|
||||||
"//ui/native_window_tracker/native_window_tracker_aura.cc",
|
"//ui/views/native_window_tracker_aura.cc",
|
||||||
"//ui/native_window_tracker/native_window_tracker_aura.h",
|
"//ui/views/native_window_tracker_aura.h",
|
||||||
]
|
]
|
||||||
deps += [ "//components/eye_dropper" ]
|
deps += [ "//components/eye_dropper" ]
|
||||||
}
|
}
|
||||||
@@ -280,8 +274,6 @@ static_library("chrome") {
|
|||||||
"//chrome/browser/process_singleton_mac.mm",
|
"//chrome/browser/process_singleton_mac.mm",
|
||||||
"//chrome/browser/ui/views/eye_dropper/eye_dropper_view_mac.h",
|
"//chrome/browser/ui/views/eye_dropper/eye_dropper_view_mac.h",
|
||||||
"//chrome/browser/ui/views/eye_dropper/eye_dropper_view_mac.mm",
|
"//chrome/browser/ui/views/eye_dropper/eye_dropper_view_mac.mm",
|
||||||
"//chrome/browser/ui/views/overlay/video_overlay_window_native_widget_mac.h",
|
|
||||||
"//chrome/browser/ui/views/overlay/video_overlay_window_native_widget_mac.mm",
|
|
||||||
]
|
]
|
||||||
deps += [ ":system_media_capture_permissions_mac_conflict" ]
|
deps += [ ":system_media_capture_permissions_mac_conflict" ]
|
||||||
}
|
}
|
||||||
@@ -383,8 +375,6 @@ static_library("chrome") {
|
|||||||
"//chrome/browser/pdf/chrome_pdf_stream_delegate.h",
|
"//chrome/browser/pdf/chrome_pdf_stream_delegate.h",
|
||||||
"//chrome/browser/pdf/pdf_extension_util.cc",
|
"//chrome/browser/pdf/pdf_extension_util.cc",
|
||||||
"//chrome/browser/pdf/pdf_extension_util.h",
|
"//chrome/browser/pdf/pdf_extension_util.h",
|
||||||
"//chrome/browser/pdf/pdf_help_bubble_handler_factory.cc",
|
|
||||||
"//chrome/browser/pdf/pdf_help_bubble_handler_factory.h",
|
|
||||||
"//chrome/browser/pdf/pdf_viewer_stream_manager.cc",
|
"//chrome/browser/pdf/pdf_viewer_stream_manager.cc",
|
||||||
"//chrome/browser/pdf/pdf_viewer_stream_manager.h",
|
"//chrome/browser/pdf/pdf_viewer_stream_manager.h",
|
||||||
"//chrome/browser/plugins/pdf_iframe_navigation_throttle.cc",
|
"//chrome/browser/plugins/pdf_iframe_navigation_throttle.cc",
|
||||||
@@ -393,8 +383,6 @@ static_library("chrome") {
|
|||||||
deps += [
|
deps += [
|
||||||
"//components/pdf/browser",
|
"//components/pdf/browser",
|
||||||
"//components/pdf/renderer",
|
"//components/pdf/renderer",
|
||||||
"//ui/base/interaction",
|
|
||||||
"//ui/webui/resources/cr_components/help_bubble:mojo_bindings",
|
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@@ -508,17 +496,15 @@ source_set("chrome_spellchecker") {
|
|||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
||||||
if (is_mac) {
|
# These sources create an object file conflict with one in |:chrome|, so they
|
||||||
# These sources create an object file conflict with one in |:chrome|, so they
|
# must live in a separate target.
|
||||||
# must live in a separate target.
|
# Conflicting sources:
|
||||||
# Conflicting sources:
|
# //chrome/browser/media/webrtc/system_media_capture_permissions_stats_mac.mm
|
||||||
# //chrome/browser/media/webrtc/system_media_capture_permissions_stats_mac.mm
|
# //chrome/browser/permissions/system/system_media_capture_permissions_mac.mm
|
||||||
# //chrome/browser/permissions/system/system_media_capture_permissions_mac.mm
|
source_set("system_media_capture_permissions_mac_conflict") {
|
||||||
source_set("system_media_capture_permissions_mac_conflict") {
|
sources = [
|
||||||
sources = [
|
"//chrome/browser/permissions/system/system_media_capture_permissions_mac.h",
|
||||||
"//chrome/browser/permissions/system/system_media_capture_permissions_mac.h",
|
"//chrome/browser/permissions/system/system_media_capture_permissions_mac.mm",
|
||||||
"//chrome/browser/permissions/system/system_media_capture_permissions_mac.mm",
|
]
|
||||||
]
|
deps = [ "//chrome/common" ]
|
||||||
deps = [ "//chrome/common" ]
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
{
|
{
|
||||||
"plugins": [
|
"plugins": [
|
||||||
"import"
|
"unicorn"
|
||||||
],
|
],
|
||||||
"rules": {
|
"rules": {
|
||||||
"import/enforce-node-protocol-usage": ["error", "always"]
|
"unicorn/prefer-node-protocol": "error"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
{
|
{
|
||||||
"extends": "standard",
|
"extends": "standard",
|
||||||
"plugins": [
|
"plugins": [
|
||||||
"import",
|
"markdown",
|
||||||
"markdown"
|
"unicorn"
|
||||||
],
|
],
|
||||||
"overrides": [
|
"overrides": [
|
||||||
{
|
{
|
||||||
@@ -30,6 +30,6 @@
|
|||||||
"no-undef": "off",
|
"no-undef": "off",
|
||||||
"no-unused-expressions": "off",
|
"no-unused-expressions": "off",
|
||||||
"no-unused-vars": "off",
|
"no-unused-vars": "off",
|
||||||
"import/enforce-node-protocol-usage": ["error", "always"]
|
"unicorn/prefer-node-protocol": "error"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
82
docs/api/accelerator.md
Normal file
82
docs/api/accelerator.md
Normal file
@@ -0,0 +1,82 @@
|
|||||||
|
# Accelerator
|
||||||
|
|
||||||
|
> Define keyboard shortcuts.
|
||||||
|
|
||||||
|
Accelerators are strings that can contain multiple modifiers and a single key code,
|
||||||
|
combined by the `+` character, and are used to define keyboard shortcuts
|
||||||
|
throughout your application. Accelerators are case insensitive.
|
||||||
|
|
||||||
|
Examples:
|
||||||
|
|
||||||
|
* `CommandOrControl+A`
|
||||||
|
* `CommandOrControl+Shift+Z`
|
||||||
|
|
||||||
|
Shortcuts are registered with the [`globalShortcut`](global-shortcut.md) module
|
||||||
|
using the [`register`](global-shortcut.md#globalshortcutregisteraccelerator-callback)
|
||||||
|
method, i.e.
|
||||||
|
|
||||||
|
```js
|
||||||
|
const { app, globalShortcut } = require('electron')
|
||||||
|
|
||||||
|
app.whenReady().then(() => {
|
||||||
|
// Register a 'CommandOrControl+Y' shortcut listener.
|
||||||
|
globalShortcut.register('CommandOrControl+Y', () => {
|
||||||
|
// Do stuff when Y and either Command/Control is pressed.
|
||||||
|
})
|
||||||
|
})
|
||||||
|
```
|
||||||
|
|
||||||
|
## Platform notice
|
||||||
|
|
||||||
|
On Linux and Windows, the `Command` key does not have any effect so
|
||||||
|
use `CommandOrControl` which represents `Command` on macOS and `Control` on
|
||||||
|
Linux and Windows to define some accelerators.
|
||||||
|
|
||||||
|
Use `Alt` instead of `Option`. The `Option` key only exists on macOS, whereas
|
||||||
|
the `Alt` key is available on all platforms.
|
||||||
|
|
||||||
|
The `Super` (or `Meta`) key is mapped to the `Windows` key on Windows and Linux and
|
||||||
|
`Cmd` on macOS.
|
||||||
|
|
||||||
|
## Available modifiers
|
||||||
|
|
||||||
|
* `Command` (or `Cmd` for short)
|
||||||
|
* `Control` (or `Ctrl` for short)
|
||||||
|
* `CommandOrControl` (or `CmdOrCtrl` for short)
|
||||||
|
* `Alt`
|
||||||
|
* `Option`
|
||||||
|
* `AltGr`
|
||||||
|
* `Shift`
|
||||||
|
* `Super`
|
||||||
|
* `Meta`
|
||||||
|
|
||||||
|
## Available key codes
|
||||||
|
|
||||||
|
* `0` to `9`
|
||||||
|
* `A` to `Z`
|
||||||
|
* `F1` to `F24`
|
||||||
|
* Various Punctuation: `)`, `!`, `@`, `#`, `$`, `%`, `^`, `&`, `*`, `(`, `:`, `;`, `:`, `+`, `=`, `<`, `,`, `_`, `-`, `>`, `.`, `?`, `/`, `~`, `` ` ``, `{`, `]`, `[`, `|`, `\`, `}`, `"`
|
||||||
|
* `Plus`
|
||||||
|
* `Space`
|
||||||
|
* `Tab`
|
||||||
|
* `Capslock`
|
||||||
|
* `Numlock`
|
||||||
|
* `Scrolllock`
|
||||||
|
* `Backspace`
|
||||||
|
* `Delete`
|
||||||
|
* `Insert`
|
||||||
|
* `Return` (or `Enter` as alias)
|
||||||
|
* `Up`, `Down`, `Left` and `Right`
|
||||||
|
* `Home` and `End`
|
||||||
|
* `PageUp` and `PageDown`
|
||||||
|
* `Escape` (or `Esc` for short)
|
||||||
|
* `VolumeUp`, `VolumeDown` and `VolumeMute`
|
||||||
|
* `MediaNextTrack`, `MediaPreviousTrack`, `MediaStop` and `MediaPlayPause`
|
||||||
|
* `PrintScreen`
|
||||||
|
* NumPad Keys
|
||||||
|
* `num0` - `num9`
|
||||||
|
* `numdec` - decimal key
|
||||||
|
* `numadd` - numpad `+` key
|
||||||
|
* `numsub` - numpad `-` key
|
||||||
|
* `nummult` - numpad `*` key
|
||||||
|
* `numdiv` - numpad `÷` key
|
||||||
@@ -421,7 +421,6 @@ Returns:
|
|||||||
* `oom` - Process ran out of memory
|
* `oom` - Process ran out of memory
|
||||||
* `launch-failed` - Process never successfully launched
|
* `launch-failed` - Process never successfully launched
|
||||||
* `integrity-failure` - Windows code integrity checks failed
|
* `integrity-failure` - Windows code integrity checks failed
|
||||||
* `memory-eviction` - Process proactively terminated to prevent a future out-of-memory (OOM) situation
|
|
||||||
* `exitCode` number - The exit code for the process
|
* `exitCode` number - The exit code for the process
|
||||||
(e.g. status from waitpid if on POSIX, from GetExitCodeProcess on Windows).
|
(e.g. status from waitpid if on POSIX, from GetExitCodeProcess on Windows).
|
||||||
* `serviceName` string (optional) - The non-localized name of the process.
|
* `serviceName` string (optional) - The non-localized name of the process.
|
||||||
@@ -603,7 +602,6 @@ Returns `string` - The current application directory.
|
|||||||
* `%APPDATA%` on Windows
|
* `%APPDATA%` on Windows
|
||||||
* `$XDG_CONFIG_HOME` or `~/.config` on Linux
|
* `$XDG_CONFIG_HOME` or `~/.config` on Linux
|
||||||
* `~/Library/Application Support` on macOS
|
* `~/Library/Application Support` on macOS
|
||||||
* `assets` The directory where app assets such as `resources.pak` are stored. By default this is the same as the folder containing the `exe` path. Available on Windows and Linux only.
|
|
||||||
* `userData` The directory for storing your app's configuration files, which
|
* `userData` The directory for storing your app's configuration files, which
|
||||||
by default is the `appData` directory appended with your app's name. By
|
by default is the `appData` directory appended with your app's name. By
|
||||||
convention files storing user data should be written to this directory, and
|
convention files storing user data should be written to this directory, and
|
||||||
@@ -618,7 +616,7 @@ Returns `string` - The current application directory.
|
|||||||
directory.
|
directory.
|
||||||
* `temp` Temporary directory.
|
* `temp` Temporary directory.
|
||||||
* `exe` The current executable file.
|
* `exe` The current executable file.
|
||||||
* `module` The location of the Chromium module. By default this is synonymous with `exe`.
|
* `module` The `libchromiumcontent` library.
|
||||||
* `desktop` The current user's Desktop directory.
|
* `desktop` The current user's Desktop directory.
|
||||||
* `documents` Directory for a user's "My Documents".
|
* `documents` Directory for a user's "My Documents".
|
||||||
* `downloads` Directory for a user's downloads.
|
* `downloads` Directory for a user's downloads.
|
||||||
@@ -778,22 +776,6 @@ bar, and on macOS, you can visit it from dock menu.
|
|||||||
|
|
||||||
Clears the recent documents list.
|
Clears the recent documents list.
|
||||||
|
|
||||||
### `app.getRecentDocuments()` _macOS_ _Windows_
|
|
||||||
|
|
||||||
Returns `string[]` - An array containing documents in the most recent documents list.
|
|
||||||
|
|
||||||
```js
|
|
||||||
const { app } = require('electron')
|
|
||||||
|
|
||||||
const path = require('node:path')
|
|
||||||
|
|
||||||
const file = path.join(app.getPath('desktop'), 'foo.txt')
|
|
||||||
app.addRecentDocument(file)
|
|
||||||
|
|
||||||
const recents = app.getRecentDocuments()
|
|
||||||
console.log(recents) // ['/path/to/desktop/foo.txt'}
|
|
||||||
```
|
|
||||||
|
|
||||||
### `app.setAsDefaultProtocolClient(protocol[, path, args])`
|
### `app.setAsDefaultProtocolClient(protocol[, path, args])`
|
||||||
|
|
||||||
* `protocol` string - The name of your protocol, without `://`. For example,
|
* `protocol` string - The name of your protocol, without `://`. For example,
|
||||||
@@ -1215,13 +1197,6 @@ Disables hardware acceleration for current app.
|
|||||||
|
|
||||||
This method can only be called before app is ready.
|
This method can only be called before app is ready.
|
||||||
|
|
||||||
### `app.isHardwareAccelerationEnabled()`
|
|
||||||
|
|
||||||
Returns `boolean` - whether hardware acceleration is currently enabled.
|
|
||||||
|
|
||||||
> [!NOTE]
|
|
||||||
> This information is only usable after the `gpu-info-update` event is emitted.
|
|
||||||
|
|
||||||
### `app.disableDomainBlockingFor3DAPIs()`
|
### `app.disableDomainBlockingFor3DAPIs()`
|
||||||
|
|
||||||
By default, Chromium disables 3D APIs (e.g. WebGL) until restart on a per
|
By default, Chromium disables 3D APIs (e.g. WebGL) until restart on a per
|
||||||
@@ -1405,75 +1380,7 @@ details. Disabled by default.
|
|||||||
This API must be called after the `ready` event is emitted.
|
This API must be called after the `ready` event is emitted.
|
||||||
|
|
||||||
> [!NOTE]
|
> [!NOTE]
|
||||||
> Rendering accessibility tree can significantly affect the performance of your app. It should not be enabled by default. Calling this method will enable the following accessibility support features: `nativeAPIs`, `webContents`, `inlineTextBoxes`, and `extendedProperties`.
|
> Rendering accessibility tree can significantly affect the performance of your app. It should not be enabled by default.
|
||||||
|
|
||||||
### `app.getAccessibilitySupportFeatures()` _macOS_ _Windows_
|
|
||||||
|
|
||||||
Returns `string[]` - Array of strings naming currently enabled accessibility support components. Possible values:
|
|
||||||
|
|
||||||
* `nativeAPIs` - Native OS accessibility APIs integration enabled.
|
|
||||||
* `webContents` - Web contents accessibility tree exposure enabled.
|
|
||||||
* `inlineTextBoxes` - Inline text boxes (character bounding boxes) enabled.
|
|
||||||
* `extendedProperties` - Extended accessibility properties enabled.
|
|
||||||
* `screenReader` - Screen reader specific mode enabled.
|
|
||||||
* `html` - HTML accessibility tree construction enabled.
|
|
||||||
* `labelImages` - Accessibility support for automatic image annotations.
|
|
||||||
* `pdfPrinting` - Accessibility support for PDF printing enabled.
|
|
||||||
|
|
||||||
Notes:
|
|
||||||
|
|
||||||
* The array may be empty if no accessibility modes are active.
|
|
||||||
* Use `app.isAccessibilitySupportEnabled()` for the legacy boolean check;
|
|
||||||
prefer this method for granular diagnostics or telemetry.
|
|
||||||
|
|
||||||
Example:
|
|
||||||
|
|
||||||
```js
|
|
||||||
const { app } = require('electron')
|
|
||||||
|
|
||||||
app.whenReady().then(() => {
|
|
||||||
if (app.getAccessibilitySupportFeatures().includes('screenReader')) {
|
|
||||||
// Change some app UI to better work with Screen Readers.
|
|
||||||
}
|
|
||||||
})
|
|
||||||
```
|
|
||||||
|
|
||||||
### `app.setAccessibilitySupportFeatures(features)` _macOS_ _Windows_
|
|
||||||
|
|
||||||
* `features` string[] - An array of the accessibility features to enable.
|
|
||||||
|
|
||||||
Possible values are:
|
|
||||||
|
|
||||||
* `nativeAPIs` - Native OS accessibility APIs integration enabled.
|
|
||||||
* `webContents` - Web contents accessibility tree exposure enabled.
|
|
||||||
* `inlineTextBoxes` - Inline text boxes (character bounding boxes) enabled.
|
|
||||||
* `extendedProperties` - Extended accessibility properties enabled.
|
|
||||||
* `screenReader` - Screen reader specific mode enabled.
|
|
||||||
* `html` - HTML accessibility tree construction enabled.
|
|
||||||
* `labelImages` - Accessibility support for automatic image annotations.
|
|
||||||
* `pdfPrinting` - Accessibility support for PDF printing enabled.
|
|
||||||
|
|
||||||
To disable all supported features, pass an empty array `[]`.
|
|
||||||
|
|
||||||
Example:
|
|
||||||
|
|
||||||
```js
|
|
||||||
const { app } = require('electron')
|
|
||||||
|
|
||||||
app.whenReady().then(() => {
|
|
||||||
// Enable a subset of features:
|
|
||||||
app.setAccessibilitySupportFeatures([
|
|
||||||
'screenReader',
|
|
||||||
'pdfPrinting',
|
|
||||||
'webContents'
|
|
||||||
])
|
|
||||||
|
|
||||||
// Other logic
|
|
||||||
|
|
||||||
// Some time later, disable all features:
|
|
||||||
app.setAccessibilitySupportFeatures([])
|
|
||||||
})
|
|
||||||
```
|
|
||||||
|
|
||||||
### `app.showAboutPanel()`
|
### `app.showAboutPanel()`
|
||||||
|
|
||||||
|
|||||||
@@ -99,10 +99,6 @@ Process: [Main](../glossary.md#main-process)
|
|||||||
|
|
||||||
It creates a new `BaseWindow` with native properties as set by the `options`.
|
It creates a new `BaseWindow` with native properties as set by the `options`.
|
||||||
|
|
||||||
> [!WARNING]
|
|
||||||
> Electron's built-in classes cannot be subclassed in user code.
|
|
||||||
> For more information, see [the FAQ](../faq.md#class-inheritance-does-not-work-with-electron-built-in-modules).
|
|
||||||
|
|
||||||
### `new BaseWindow([options])`
|
### `new BaseWindow([options])`
|
||||||
|
|
||||||
* `options` [BaseWindowConstructorOptions](structures/base-window-options.md?inline) (optional)
|
* `options` [BaseWindowConstructorOptions](structures/base-window-options.md?inline) (optional)
|
||||||
@@ -1260,47 +1256,6 @@ Sets the properties for the window's taskbar button.
|
|||||||
> `relaunchCommand` and `relaunchDisplayName` must always be set
|
> `relaunchCommand` and `relaunchDisplayName` must always be set
|
||||||
> together. If one of those properties is not set, then neither will be used.
|
> together. If one of those properties is not set, then neither will be used.
|
||||||
|
|
||||||
#### `win.setAccentColor(accentColor)` _Windows_
|
|
||||||
|
|
||||||
* `accentColor` boolean | string | null - The accent color for the window. By default, follows user preference in System Settings. To reset to system default, pass `null`.
|
|
||||||
|
|
||||||
Sets the system accent color and highlighting of active window border.
|
|
||||||
|
|
||||||
The `accentColor` parameter accepts the following values:
|
|
||||||
|
|
||||||
* **Color string** - Like `true`, but sets a custom accent color using standard CSS color formats (Hex, RGB, RGBA, HSL, HSLA, or named colors). Alpha values in RGBA/HSLA formats are ignored and the color is treated as fully opaque.
|
|
||||||
* **`true`** - Enable accent color highlighting for the window with the system accent color regardless of whether accent colors are enabled for windows in System `Settings.`
|
|
||||||
* **`false`** - Disable accent color highlighting for the window regardless of whether accent colors are currently enabled for windows in System Settings.
|
|
||||||
* **`null`** - Reset window accent color behavior to follow behavior set in System Settings.
|
|
||||||
|
|
||||||
Examples:
|
|
||||||
|
|
||||||
```js
|
|
||||||
const win = new BrowserWindow({ frame: false })
|
|
||||||
|
|
||||||
// Set red accent color.
|
|
||||||
win.setAccentColor('#ff0000')
|
|
||||||
|
|
||||||
// RGB format (alpha ignored if present).
|
|
||||||
win.setAccentColor('rgba(255,0,0,0.5)')
|
|
||||||
|
|
||||||
// Enable accent color, using the color specified in System Settings.
|
|
||||||
win.setAccentColor(true)
|
|
||||||
|
|
||||||
// Disable accent color.
|
|
||||||
win.setAccentColor(false)
|
|
||||||
|
|
||||||
// Reset window accent color behavior to follow behavior set in System Settings.
|
|
||||||
win.setAccentColor(null)
|
|
||||||
```
|
|
||||||
|
|
||||||
#### `win.getAccentColor()` _Windows_
|
|
||||||
|
|
||||||
Returns `string | boolean` - the system accent color and highlighting of active window border in Hex RGB format.
|
|
||||||
|
|
||||||
If a color has been set for the window that differs from the system accent color, the window accent color will
|
|
||||||
be returned. Otherwise, a boolean will be returned, with `true` indicating that the window uses the global system accent color, and `false` indicating that accent color highlighting is disabled for this window.
|
|
||||||
|
|
||||||
#### `win.setIcon(icon)` _Windows_ _Linux_
|
#### `win.setIcon(icon)` _Windows_ _Linux_
|
||||||
|
|
||||||
* `icon` [NativeImage](native-image.md) | string
|
* `icon` [NativeImage](native-image.md) | string
|
||||||
|
|||||||
@@ -38,10 +38,6 @@ Process: [Main](../glossary.md#main-process)
|
|||||||
This module cannot be used until the `ready` event of the `app`
|
This module cannot be used until the `ready` event of the `app`
|
||||||
module is emitted.
|
module is emitted.
|
||||||
|
|
||||||
> [!WARNING]
|
|
||||||
> Electron's built-in classes cannot be subclassed in user code.
|
|
||||||
> For more information, see [the FAQ](../faq.md#class-inheritance-does-not-work-with-electron-built-in-modules).
|
|
||||||
|
|
||||||
### Example
|
### Example
|
||||||
|
|
||||||
```js
|
```js
|
||||||
|
|||||||
@@ -151,10 +151,6 @@ Process: [Main](../glossary.md#main-process)
|
|||||||
|
|
||||||
It creates a new `BrowserWindow` with native properties as set by the `options`.
|
It creates a new `BrowserWindow` with native properties as set by the `options`.
|
||||||
|
|
||||||
> [!WARNING]
|
|
||||||
> Electron's built-in classes cannot be subclassed in user code.
|
|
||||||
> For more information, see [the FAQ](../faq.md#class-inheritance-does-not-work-with-electron-built-in-modules).
|
|
||||||
|
|
||||||
### `new BrowserWindow([options])`
|
### `new BrowserWindow([options])`
|
||||||
|
|
||||||
* `options` [BrowserWindowConstructorOptions](structures/browser-window-options.md?inline) (optional)
|
* `options` [BrowserWindowConstructorOptions](structures/browser-window-options.md?inline) (optional)
|
||||||
@@ -1227,8 +1223,7 @@ Captures a snapshot of the page within `rect`. Omitting `rect` will capture the
|
|||||||
|
|
||||||
Returns `Promise<void>` - the promise will resolve when the page has finished loading
|
Returns `Promise<void>` - the promise will resolve when the page has finished loading
|
||||||
(see [`did-finish-load`](web-contents.md#event-did-finish-load)), and rejects
|
(see [`did-finish-load`](web-contents.md#event-did-finish-load)), and rejects
|
||||||
if the page fails to load (see
|
if the page fails to load (see [`did-fail-load`](web-contents.md#event-did-fail-load)).
|
||||||
[`did-fail-load`](web-contents.md#event-did-fail-load)). A noop rejection handler is already attached, which avoids unhandled rejection errors. If the existing page has a beforeUnload handler, [`did-fail-load`](web-contents.md#event-did-fail-load) will be called unless [`will-prevent-unload`](web-contents.md#event-did-fail-load) is handled.
|
|
||||||
|
|
||||||
Same as [`webContents.loadURL(url[, options])`](web-contents.md#contentsloadurlurl-options).
|
Same as [`webContents.loadURL(url[, options])`](web-contents.md#contentsloadurlurl-options).
|
||||||
|
|
||||||
@@ -1441,47 +1436,6 @@ Sets the properties for the window's taskbar button.
|
|||||||
> `relaunchCommand` and `relaunchDisplayName` must always be set
|
> `relaunchCommand` and `relaunchDisplayName` must always be set
|
||||||
> together. If one of those properties is not set, then neither will be used.
|
> together. If one of those properties is not set, then neither will be used.
|
||||||
|
|
||||||
#### `win.setAccentColor(accentColor)` _Windows_
|
|
||||||
|
|
||||||
* `accentColor` boolean | string | null - The accent color for the window. By default, follows user preference in System Settings. To reset to system default, pass `null`.
|
|
||||||
|
|
||||||
Sets the system accent color and highlighting of active window border.
|
|
||||||
|
|
||||||
The `accentColor` parameter accepts the following values:
|
|
||||||
|
|
||||||
* **Color string** - Like `true`, but sets a custom accent color using standard CSS color formats (Hex, RGB, RGBA, HSL, HSLA, or named colors). Alpha values in RGBA/HSLA formats are ignored and the color is treated as fully opaque.
|
|
||||||
* **`true`** - Enable accent color highlighting for the window with the system accent color regardless of whether accent colors are enabled for windows in System `Settings.`
|
|
||||||
* **`false`** - Disable accent color highlighting for the window regardless of whether accent colors are currently enabled for windows in System Settings.
|
|
||||||
* **`null`** - Reset window accent color behavior to follow behavior set in System Settings.
|
|
||||||
|
|
||||||
Examples:
|
|
||||||
|
|
||||||
```js
|
|
||||||
const win = new BrowserWindow({ frame: false })
|
|
||||||
|
|
||||||
// Set red accent color.
|
|
||||||
win.setAccentColor('#ff0000')
|
|
||||||
|
|
||||||
// RGB format (alpha ignored if present).
|
|
||||||
win.setAccentColor('rgba(255,0,0,0.5)')
|
|
||||||
|
|
||||||
// Enable accent color, using the color specified in System Settings.
|
|
||||||
win.setAccentColor(true)
|
|
||||||
|
|
||||||
// Disable accent color.
|
|
||||||
win.setAccentColor(false)
|
|
||||||
|
|
||||||
// Reset window accent color behavior to follow behavior set in System Settings.
|
|
||||||
win.setAccentColor(null)
|
|
||||||
```
|
|
||||||
|
|
||||||
#### `win.getAccentColor()` _Windows_
|
|
||||||
|
|
||||||
Returns `string | boolean` - the system accent color and highlighting of active window border in Hex RGB format.
|
|
||||||
|
|
||||||
If a color has been set for the window that differs from the system accent color, the window accent color will
|
|
||||||
be returned. Otherwise, a boolean will be returned, with `true` indicating that the window uses the global system accent color, and `false` indicating that accent color highlighting is disabled for this window.
|
|
||||||
|
|
||||||
#### `win.showDefinitionForSelection()` _macOS_
|
#### `win.showDefinitionForSelection()` _macOS_
|
||||||
|
|
||||||
Same as `webContents.showDefinitionForSelection()`.
|
Same as `webContents.showDefinitionForSelection()`.
|
||||||
@@ -1575,18 +1529,11 @@ events.
|
|||||||
|
|
||||||
Prevents the window contents from being captured by other apps.
|
Prevents the window contents from being captured by other apps.
|
||||||
|
|
||||||
On Windows, it calls [`SetWindowDisplayAffinity`](https://learn.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-setwindowdisplayaffinity) with `WDA_EXCLUDEFROMCAPTURE`.
|
On macOS it sets the NSWindow's sharingType to NSWindowSharingNone.
|
||||||
|
On Windows it calls SetWindowDisplayAffinity with `WDA_EXCLUDEFROMCAPTURE`.
|
||||||
For Windows 10 version 2004 and up the window will be removed from capture entirely,
|
For Windows 10 version 2004 and up the window will be removed from capture entirely,
|
||||||
older Windows versions behave as if `WDA_MONITOR` is applied capturing a black window.
|
older Windows versions behave as if `WDA_MONITOR` is applied capturing a black window.
|
||||||
|
|
||||||
On macOS, it sets the `NSWindow`'s
|
|
||||||
[`sharingType`](https://developer.apple.com/documentation/appkit/nswindow/sharingtype-swift.property?language=objc)
|
|
||||||
to
|
|
||||||
[`NSWindowSharingNone`](https://developer.apple.com/documentation/appkit/nswindow/sharingtype-swift.enum/none?language=objc).
|
|
||||||
Unfortunately, due to an intentional change in macOS, newer Mac applications that use
|
|
||||||
`ScreenCaptureKit` will capture your window despite `win.setContentProtection(true)`.
|
|
||||||
See [here](https://github.com/electron/electron/issues/48258#issuecomment-3269893618).
|
|
||||||
|
|
||||||
#### `win.isContentProtected()` _macOS_ _Windows_
|
#### `win.isContentProtected()` _macOS_ _Windows_
|
||||||
|
|
||||||
Returns `boolean` - whether or not content protection is currently enabled.
|
Returns `boolean` - whether or not content protection is currently enabled.
|
||||||
|
|||||||
@@ -25,11 +25,6 @@ following properties:
|
|||||||
with which the request is associated. Defaults to the empty string. The
|
with which the request is associated. Defaults to the empty string. The
|
||||||
`session` option supersedes `partition`. Thus if a `session` is explicitly
|
`session` option supersedes `partition`. Thus if a `session` is explicitly
|
||||||
specified, `partition` is ignored.
|
specified, `partition` is ignored.
|
||||||
* `bypassCustomProtocolHandlers` boolean (optional) - When set to `true`,
|
|
||||||
custom protocol handlers registered for the request's URL scheme will not be
|
|
||||||
called. This allows forwarding an intercepted request to the built-in
|
|
||||||
handler. [webRequest](web-request.md) handlers will still be triggered
|
|
||||||
when bypassing custom protocols. Defaults to `false`.
|
|
||||||
* `credentials` string (optional) - Can be `include`, `omit` or
|
* `credentials` string (optional) - Can be `include`, `omit` or
|
||||||
`same-origin`. Whether to send
|
`same-origin`. Whether to send
|
||||||
[credentials](https://fetch.spec.whatwg.org/#credentials) with this
|
[credentials](https://fetch.spec.whatwg.org/#credentials) with this
|
||||||
|
|||||||
@@ -2,16 +2,7 @@
|
|||||||
|
|
||||||
> Perform copy and paste operations on the system clipboard.
|
> Perform copy and paste operations on the system clipboard.
|
||||||
|
|
||||||
Process: [Main](../glossary.md#main-process), [Renderer](../glossary.md#renderer-process) _Deprecated_ (non-sandboxed only)
|
Process: [Main](../glossary.md#main-process), [Renderer](../glossary.md#renderer-process) (non-sandboxed only)
|
||||||
|
|
||||||
> [!NOTE]
|
|
||||||
> Using the `clipoard` API from the renderer process is deprecated.
|
|
||||||
|
|
||||||
> [!IMPORTANT]
|
|
||||||
> If you want to call this API from a renderer process,
|
|
||||||
> place the API call in your preload script and
|
|
||||||
> [expose](../tutorial/context-isolation.md#after-context-isolation-enabled) it using the
|
|
||||||
> [`contextBridge`](context-bridge.md) API.
|
|
||||||
|
|
||||||
On Linux, there is also a `selection` clipboard. To manipulate it
|
On Linux, there is also a `selection` clipboard. To manipulate it
|
||||||
you need to pass `selection` to each method:
|
you need to pass `selection` to each method:
|
||||||
|
|||||||
@@ -86,7 +86,7 @@ Field trials to be forcefully enabled or disabled.
|
|||||||
|
|
||||||
For example: `WebRTC-Audio-Red-For-Opus/Enabled/`
|
For example: `WebRTC-Audio-Red-For-Opus/Enabled/`
|
||||||
|
|
||||||
### --host-rules=`rules` _Deprecated_
|
### --host-rules=`rules`
|
||||||
|
|
||||||
A comma-separated list of `rules` that control how hostnames are mapped.
|
A comma-separated list of `rules` that control how hostnames are mapped.
|
||||||
|
|
||||||
@@ -104,23 +104,9 @@ These mappings apply to the endpoint host in a net request (the TCP connect
|
|||||||
and host resolver in a direct connection, and the `CONNECT` in an HTTP proxy
|
and host resolver in a direct connection, and the `CONNECT` in an HTTP proxy
|
||||||
connection, and the endpoint host in a `SOCKS` proxy connection).
|
connection, and the endpoint host in a `SOCKS` proxy connection).
|
||||||
|
|
||||||
**Deprecated:** Use the `--host-resolver-rules` switch instead.
|
|
||||||
|
|
||||||
### --host-resolver-rules=`rules`
|
### --host-resolver-rules=`rules`
|
||||||
|
|
||||||
A comma-separated list of `rules` that control how hostnames are mapped.
|
Like `--host-rules` but these `rules` only apply to the host resolver.
|
||||||
|
|
||||||
For example:
|
|
||||||
|
|
||||||
* `MAP * 127.0.0.1` Forces all hostnames to be mapped to 127.0.0.1
|
|
||||||
* `MAP *.google.com proxy` Forces all google.com subdomains to be resolved to
|
|
||||||
"proxy".
|
|
||||||
* `MAP test.com [::1]:77` Forces "test.com" to resolve to IPv6 loopback. Will
|
|
||||||
also force the port of the resulting socket address to be 77.
|
|
||||||
* `MAP * baz, EXCLUDE www.google.com` Remaps everything to "baz", except for
|
|
||||||
"www.google.com".
|
|
||||||
|
|
||||||
These `rules` only apply to the host resolver.
|
|
||||||
|
|
||||||
### --ignore-certificate-errors
|
### --ignore-certificate-errors
|
||||||
|
|
||||||
@@ -193,11 +179,6 @@ Disables the Chromium [sandbox](https://www.chromium.org/developers/design-docum
|
|||||||
Forces renderer process and Chromium helper processes to run un-sandboxed.
|
Forces renderer process and Chromium helper processes to run un-sandboxed.
|
||||||
Should only be used for testing.
|
Should only be used for testing.
|
||||||
|
|
||||||
### --no-stdio-init
|
|
||||||
|
|
||||||
Disable stdio initialization during node initialization.
|
|
||||||
Used to avoid node initialization crash when the nul device is disabled on Windows platform.
|
|
||||||
|
|
||||||
### --proxy-bypass-list=`hosts`
|
### --proxy-bypass-list=`hosts`
|
||||||
|
|
||||||
Instructs Electron to bypass the proxy server for the given semi-colon-separated
|
Instructs Electron to bypass the proxy server for the given semi-colon-separated
|
||||||
@@ -311,7 +292,7 @@ Specify ways of the inspector web socket url exposure.
|
|||||||
|
|
||||||
By default inspector websocket url is available in stderr and under /json/list endpoint on `http://host:port/json/list`.
|
By default inspector websocket url is available in stderr and under /json/list endpoint on `http://host:port/json/list`.
|
||||||
|
|
||||||
### `--experimental-network-inspection`
|
### `--experimental-network-inspector`
|
||||||
|
|
||||||
Enable support for devtools network inspector events, for visibility into requests made by the nodejs `http` and `https` modules.
|
Enable support for devtools network inspector events, for visibility into requests made by the nodejs `http` and `https` modules.
|
||||||
|
|
||||||
@@ -346,26 +327,6 @@ Set the directory to which all Node.js diagnostic output files are written. Defa
|
|||||||
|
|
||||||
Affects the default output directory of [v8.setHeapSnapshotNearHeapLimit](https://nodejs.org/docs/latest/api/v8.html#v8setheapsnapshotnearheaplimitlimit).
|
Affects the default output directory of [v8.setHeapSnapshotNearHeapLimit](https://nodejs.org/docs/latest/api/v8.html#v8setheapsnapshotnearheaplimitlimit).
|
||||||
|
|
||||||
### `--no-experimental-global-navigator`
|
|
||||||
|
|
||||||
Disable exposition of [Navigator API][] on the global scope from Node.js.
|
|
||||||
|
|
||||||
## Chromium Flags
|
|
||||||
|
|
||||||
There isn't a documented list of all Chromium switches, but there are a few ways to find them.
|
|
||||||
|
|
||||||
The easiest way is through Chromium's flags page, which you can access at `about://flags`. These flags don't directly match switch names, but they show up in the process's command-line arguments.
|
|
||||||
|
|
||||||
To see these arguments, enable a flag in `about://flags`, then go to `about://version` in Chromium. You'll find a list of command-line arguments, including `--flag-switches-begin --your --list --flag-switches-end`, which contains the list of your flag enabled switches.
|
|
||||||
|
|
||||||
Most flags are included as part of `--enable-features=`, but some are standalone switches, like `--enable-experimental-web-platform-features`.
|
|
||||||
|
|
||||||
A complete list of flags exists in [Chromium's flag metadata page](https://source.chromium.org/chromium/chromium/src/+/main:chrome/browser/flag-metadata.json), but this list includes platform, environment and GPU specific, expired and potentially non-functional flags, so many of them might not always work in every situation.
|
|
||||||
|
|
||||||
Keep in mind that standalone switches can sometimes be split into individual features, so there's no fully complete list of switches.
|
|
||||||
|
|
||||||
Finally, you'll need to ensure that the version of Chromium in Electron matches the version of the browser you're using to cross-reference the switches.
|
|
||||||
|
|
||||||
[app]: app.md
|
[app]: app.md
|
||||||
[append-switch]: command-line.md#commandlineappendswitchswitch-value
|
[append-switch]: command-line.md#commandlineappendswitchswitch-value
|
||||||
[debugging-main-process]: ../tutorial/debugging-main-process.md
|
[debugging-main-process]: ../tutorial/debugging-main-process.md
|
||||||
@@ -374,4 +335,3 @@ Finally, you'll need to ensure that the version of Chromium in Electron matches
|
|||||||
[play-silent-audio]: https://github.com/atom/atom/pull/9485/files
|
[play-silent-audio]: https://github.com/atom/atom/pull/9485/files
|
||||||
[ready]: app.md#event-ready
|
[ready]: app.md#event-ready
|
||||||
[severities]: https://source.chromium.org/chromium/chromium/src/+/main:base/logging.h?q=logging::LogSeverity&ss=chromium
|
[severities]: https://source.chromium.org/chromium/chromium/src/+/main:base/logging.h?q=logging::LogSeverity&ss=chromium
|
||||||
[Navigator API]: https://github.com/nodejs/node/blob/main/doc/api/globals.md#navigator
|
|
||||||
|
|||||||
@@ -157,7 +157,6 @@ has been included below for completeness:
|
|||||||
| [Cloneable Types](https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Structured_clone_algorithm) | Simple | ✅ | ✅ | See the linked document on cloneable types |
|
| [Cloneable Types](https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Structured_clone_algorithm) | Simple | ✅ | ✅ | See the linked document on cloneable types |
|
||||||
| `Element` | Complex | ✅ | ✅ | Prototype modifications are dropped. Sending custom elements will not work. |
|
| `Element` | Complex | ✅ | ✅ | Prototype modifications are dropped. Sending custom elements will not work. |
|
||||||
| `Blob` | Complex | ✅ | ✅ | N/A |
|
| `Blob` | Complex | ✅ | ✅ | N/A |
|
||||||
| `VideoFrame` | Complex | ✅ | ✅ | N/A |
|
|
||||||
| `Symbol` | N/A | ❌ | ❌ | Symbols cannot be copied across contexts so they are dropped |
|
| `Symbol` | N/A | ❌ | ❌ | Symbols cannot be copied across contexts so they are dropped |
|
||||||
|
|
||||||
If the type you care about is not in the above table, it is probably not supported.
|
If the type you care about is not in the above table, it is probably not supported.
|
||||||
|
|||||||
@@ -51,17 +51,19 @@ Use the `system-ui` keyword to match the smoothness to the OS design language.
|
|||||||
|
|
||||||
### Controlling availibility
|
### Controlling availibility
|
||||||
|
|
||||||
This CSS rule can be disabled using the Blink feature flag `ElectronCSSCornerSmoothing`.
|
This CSS rule can be disabled by setting [the `cornerSmoothingCSS` web preference](./structures/web-preferences.md) to `false`.
|
||||||
|
|
||||||
```js
|
```js
|
||||||
const myWindow = new BrowserWindow({
|
const myWindow = new BrowserWindow({
|
||||||
// [...]
|
// [...]
|
||||||
webPreferences: {
|
webPreferences: {
|
||||||
disableBlinkFeatures: 'ElectronCSSCornerSmoothing' // Disables the `-electron-corner-smoothing` CSS rule
|
enableCornerSmoothingCSS: false // Disables the `-electron-corner-smoothing` CSS rule
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
```
|
```
|
||||||
|
|
||||||
|
The CSS rule will still parse, but will have no visual effect.
|
||||||
|
|
||||||
### Formal reference
|
### Formal reference
|
||||||
|
|
||||||
* **Initial value**: `0%`
|
* **Initial value**: `0%`
|
||||||
|
|||||||
@@ -4,12 +4,6 @@
|
|||||||
|
|
||||||
Process: [Main](../glossary.md#main-process), [Renderer](../glossary.md#renderer-process)
|
Process: [Main](../glossary.md#main-process), [Renderer](../glossary.md#renderer-process)
|
||||||
|
|
||||||
> [!IMPORTANT]
|
|
||||||
> If you want to call this API from a renderer process with context isolation enabled,
|
|
||||||
> place the API call in your preload script and
|
|
||||||
> [expose](../tutorial/context-isolation.md#after-context-isolation-enabled) it using the
|
|
||||||
> [`contextBridge`](context-bridge.md) API.
|
|
||||||
|
|
||||||
The following is an example of setting up Electron to automatically submit
|
The following is an example of setting up Electron to automatically submit
|
||||||
crash reports to a remote server:
|
crash reports to a remote server:
|
||||||
|
|
||||||
@@ -69,7 +63,7 @@ The `crashReporter` module has the following methods:
|
|||||||
* `extra` Record\<string, string\> (optional) - Extra string key/value
|
* `extra` Record\<string, string\> (optional) - Extra string key/value
|
||||||
annotations that will be sent along with crash reports that are generated
|
annotations that will be sent along with crash reports that are generated
|
||||||
in the main process. Only string values are supported. Crashes generated in
|
in the main process. Only string values are supported. Crashes generated in
|
||||||
child processes will not include these extra parameters. To add extra
|
child processes will not contain these extra
|
||||||
parameters to crash reports generated from child processes, call
|
parameters to crash reports generated from child processes, call
|
||||||
[`addExtraParameter`](#crashreporteraddextraparameterkey-value) from the
|
[`addExtraParameter`](#crashreporteraddextraparameterkey-value) from the
|
||||||
child process.
|
child process.
|
||||||
|
|||||||
@@ -102,10 +102,6 @@ Returns `Promise<DesktopCapturerSource[]>` - Resolves with an array of [`Desktop
|
|||||||
|
|
||||||
## Caveats
|
## Caveats
|
||||||
|
|
||||||
`desktopCapturer.getSources(options)` only returns a single source on Linux when using Pipewire.
|
|
||||||
|
|
||||||
PipeWire supports a single capture for both screens and windows. If you request the window and screen type, the selected source will be returned as a window capture.
|
|
||||||
|
|
||||||
`navigator.mediaDevices.getUserMedia` does not work on macOS for audio capture due to a fundamental limitation whereby apps that want to access the system's audio require a [signed kernel extension](https://developer.apple.com/library/archive/documentation/Security/Conceptual/System_Integrity_Protection_Guide/KernelExtensions/KernelExtensions.html). Chromium, and by extension Electron, does not provide this.
|
`navigator.mediaDevices.getUserMedia` does not work on macOS for audio capture due to a fundamental limitation whereby apps that want to access the system's audio require a [signed kernel extension](https://developer.apple.com/library/archive/documentation/Security/Conceptual/System_Integrity_Protection_Guide/KernelExtensions/KernelExtensions.html). Chromium, and by extension Electron, does not provide this.
|
||||||
|
|
||||||
It is possible to circumvent this limitation by capturing system audio with another macOS app like Soundflower and passing it through a virtual audio input device. This virtual device can then be queried with `navigator.mediaDevices.getUserMedia`.
|
It is possible to circumvent this limitation by capturing system audio with another macOS app like Soundflower and passing it through a virtual audio input device. This virtual device can then be queried with `navigator.mediaDevices.getUserMedia`.
|
||||||
|
|||||||
@@ -5,8 +5,13 @@
|
|||||||
Process: [Main](../glossary.md#main-process)<br />
|
Process: [Main](../glossary.md#main-process)<br />
|
||||||
_This class is not exported from the `'electron'` module. It is only available as a return value of other methods in the Electron API._
|
_This class is not exported from the `'electron'` module. It is only available as a return value of other methods in the Electron API._
|
||||||
|
|
||||||
> [!TIP]
|
The following example shows how to bounce your icon on the dock.
|
||||||
> See also: [A detailed guide about how to implement Dock menus](../tutorial/macos-dock.md).
|
|
||||||
|
```js
|
||||||
|
const { app } = require('electron')
|
||||||
|
|
||||||
|
app.dock?.bounce()
|
||||||
|
```
|
||||||
|
|
||||||
### Instance Methods
|
### Instance Methods
|
||||||
|
|
||||||
@@ -45,9 +50,6 @@ Bounces the Downloads stack if the filePath is inside the Downloads folder.
|
|||||||
|
|
||||||
Sets the string to be displayed in the dock’s badging area.
|
Sets the string to be displayed in the dock’s badging area.
|
||||||
|
|
||||||
> [!IMPORTANT]
|
|
||||||
> You need to ensure that your application has the permission to display notifications for this method to work.
|
|
||||||
|
|
||||||
#### `dock.getBadge()` _macOS_
|
#### `dock.getBadge()` _macOS_
|
||||||
|
|
||||||
Returns `string` - The badge string of the dock.
|
Returns `string` - The badge string of the dock.
|
||||||
|
|||||||
@@ -104,7 +104,7 @@ you would when running the normal Node.js executable, with the exception of the
|
|||||||
These flags are disabled owing to the fact that Electron uses BoringSSL instead of OpenSSL when building Node.js'
|
These flags are disabled owing to the fact that Electron uses BoringSSL instead of OpenSSL when building Node.js'
|
||||||
`crypto` module, and so will not work as designed.
|
`crypto` module, and so will not work as designed.
|
||||||
|
|
||||||
If the [`runAsNode` fuse](../tutorial/fuses.md#runasnode) is disabled, `ELECTRON_RUN_AS_NODE` will be ignored.
|
If the [`runAsNode` fuse](../tutorial/fuses.md#L13) is disabled, `ELECTRON_RUN_AS_NODE` will be ignored.
|
||||||
|
|
||||||
### `ELECTRON_NO_ATTACH_CONSOLE` _Windows_
|
### `ELECTRON_NO_ATTACH_CONSOLE` _Windows_
|
||||||
|
|
||||||
@@ -125,6 +125,16 @@ Options:
|
|||||||
* `kioclient5`
|
* `kioclient5`
|
||||||
* `kioclient`
|
* `kioclient`
|
||||||
|
|
||||||
|
### `ELECTRON_OZONE_PLATFORM_HINT` _Linux_
|
||||||
|
|
||||||
|
Selects the preferred platform backend used on Linux. The default one is `x11`. `auto` selects Wayland if possible, X11 otherwise.
|
||||||
|
|
||||||
|
Options:
|
||||||
|
|
||||||
|
* `auto`
|
||||||
|
* `wayland`
|
||||||
|
* `x11`
|
||||||
|
|
||||||
## Development Variables
|
## Development Variables
|
||||||
|
|
||||||
The following environment variables are intended primarily for development and
|
The following environment variables are intended primarily for development and
|
||||||
@@ -186,3 +196,14 @@ the one downloaded by `npm install`. Usage:
|
|||||||
```sh
|
```sh
|
||||||
export ELECTRON_OVERRIDE_DIST_PATH=/Users/username/projects/electron/out/Testing
|
export ELECTRON_OVERRIDE_DIST_PATH=/Users/username/projects/electron/out/Testing
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## Set By Electron
|
||||||
|
|
||||||
|
Electron sets some variables in your environment at runtime.
|
||||||
|
|
||||||
|
### `ORIGINAL_XDG_CURRENT_DESKTOP`
|
||||||
|
|
||||||
|
This variable is set to the value of `XDG_CURRENT_DESKTOP` that your application
|
||||||
|
originally launched with. Electron sometimes modifies the value of `XDG_CURRENT_DESKTOP`
|
||||||
|
to affect other logic within Chromium so if you want access to the _original_ value
|
||||||
|
you should look up this environment variable instead.
|
||||||
|
|||||||
@@ -46,16 +46,13 @@ app.on('will-quit', () => {
|
|||||||
})
|
})
|
||||||
```
|
```
|
||||||
|
|
||||||
> [!TIP]
|
|
||||||
> See also: [A detailed guide on Keyboard Shortcuts](../tutorial/keyboard-shortcuts.md).
|
|
||||||
|
|
||||||
## Methods
|
## Methods
|
||||||
|
|
||||||
The `globalShortcut` module has the following methods:
|
The `globalShortcut` module has the following methods:
|
||||||
|
|
||||||
### `globalShortcut.register(accelerator, callback)`
|
### `globalShortcut.register(accelerator, callback)`
|
||||||
|
|
||||||
* `accelerator` string - An [accelerator](../tutorial/keyboard-shortcuts.md#accelerators) shortcut.
|
* `accelerator` [Accelerator](accelerator.md)
|
||||||
* `callback` Function
|
* `callback` Function
|
||||||
|
|
||||||
Returns `boolean` - Whether or not the shortcut was registered successfully.
|
Returns `boolean` - Whether or not the shortcut was registered successfully.
|
||||||
@@ -77,7 +74,7 @@ the app has been authorized as a [trusted accessibility client](https://develope
|
|||||||
|
|
||||||
### `globalShortcut.registerAll(accelerators, callback)`
|
### `globalShortcut.registerAll(accelerators, callback)`
|
||||||
|
|
||||||
* `accelerators` string[] - An array of [accelerator](../tutorial/keyboard-shortcuts.md#accelerators) shortcuts.
|
* `accelerators` [Accelerator](accelerator.md)[] - an array of [Accelerator](accelerator.md)s.
|
||||||
* `callback` Function
|
* `callback` Function
|
||||||
|
|
||||||
Registers a global shortcut of all `accelerator` items in `accelerators`. The `callback` is called when any of the registered shortcuts are pressed by the user.
|
Registers a global shortcut of all `accelerator` items in `accelerators`. The `callback` is called when any of the registered shortcuts are pressed by the user.
|
||||||
@@ -96,7 +93,7 @@ the app has been authorized as a [trusted accessibility client](https://develope
|
|||||||
|
|
||||||
### `globalShortcut.isRegistered(accelerator)`
|
### `globalShortcut.isRegistered(accelerator)`
|
||||||
|
|
||||||
* `accelerator` string - An [accelerator](../tutorial/keyboard-shortcuts.md#accelerators) shortcut.
|
* `accelerator` [Accelerator](accelerator.md)
|
||||||
|
|
||||||
Returns `boolean` - Whether this application has registered `accelerator`.
|
Returns `boolean` - Whether this application has registered `accelerator`.
|
||||||
|
|
||||||
@@ -106,7 +103,7 @@ don't want applications to fight for global shortcuts.
|
|||||||
|
|
||||||
### `globalShortcut.unregister(accelerator)`
|
### `globalShortcut.unregister(accelerator)`
|
||||||
|
|
||||||
* `accelerator` string - An [accelerator](../tutorial/keyboard-shortcuts.md#accelerators) shortcut.
|
* `accelerator` [Accelerator](accelerator.md)
|
||||||
|
|
||||||
Unregisters the global shortcut of `accelerator`.
|
Unregisters the global shortcut of `accelerator`.
|
||||||
|
|
||||||
|
|||||||
@@ -43,10 +43,6 @@ Process: [Main](../glossary.md#main-process)
|
|||||||
|
|
||||||
`ImageView` is an [EventEmitter][event-emitter].
|
`ImageView` is an [EventEmitter][event-emitter].
|
||||||
|
|
||||||
> [!WARNING]
|
|
||||||
> Electron's built-in classes cannot be subclassed in user code.
|
|
||||||
> For more information, see [the FAQ](../faq.md#class-inheritance-does-not-work-with-electron-built-in-modules).
|
|
||||||
|
|
||||||
### `new ImageView()` _Experimental_
|
### `new ImageView()` _Experimental_
|
||||||
|
|
||||||
Creates an ImageView.
|
Creates an ImageView.
|
||||||
|
|||||||
@@ -11,10 +11,6 @@ Process: [Main](../glossary.md#main-process)
|
|||||||
|
|
||||||
<!-- TODO(samuelmaddock): refactor doc gen to allow generics to reduce duplication -->
|
<!-- TODO(samuelmaddock): refactor doc gen to allow generics to reduce duplication -->
|
||||||
|
|
||||||
> [!WARNING]
|
|
||||||
> Electron's built-in classes cannot be subclassed in user code.
|
|
||||||
> For more information, see [the FAQ](../faq.md#class-inheritance-does-not-work-with-electron-built-in-modules).
|
|
||||||
|
|
||||||
### Instance Methods
|
### Instance Methods
|
||||||
|
|
||||||
#### `ipcMainServiceWorker.on(channel, listener)`
|
#### `ipcMainServiceWorker.on(channel, listener)`
|
||||||
|
|||||||
@@ -20,12 +20,6 @@ changes:
|
|||||||
|
|
||||||
Process: [Renderer](../glossary.md#renderer-process)
|
Process: [Renderer](../glossary.md#renderer-process)
|
||||||
|
|
||||||
> [!IMPORTANT]
|
|
||||||
> If you want to call this API from a renderer process with context isolation enabled,
|
|
||||||
> place the API call in your preload script and
|
|
||||||
> [expose](../tutorial/context-isolation.md#after-context-isolation-enabled) it using the
|
|
||||||
> [`contextBridge`](context-bridge.md) API.
|
|
||||||
|
|
||||||
The `ipcRenderer` module is an [EventEmitter][event-emitter]. It provides a few
|
The `ipcRenderer` module is an [EventEmitter][event-emitter]. It provides a few
|
||||||
methods so you can send synchronous and asynchronous messages from the render
|
methods so you can send synchronous and asynchronous messages from the render
|
||||||
process (web page) to the main process. You can also receive replies from the
|
process (web page) to the main process. You can also receive replies from the
|
||||||
|
|||||||
@@ -1,5 +1,3 @@
|
|||||||
# MenuItem
|
|
||||||
|
|
||||||
## Class: MenuItem
|
## Class: MenuItem
|
||||||
|
|
||||||
> Add items to native application menus and context menus.
|
> Add items to native application menus and context menus.
|
||||||
@@ -8,10 +6,6 @@ Process: [Main](../glossary.md#main-process)
|
|||||||
|
|
||||||
See [`Menu`](menu.md) for examples.
|
See [`Menu`](menu.md) for examples.
|
||||||
|
|
||||||
> [!WARNING]
|
|
||||||
> Electron's built-in classes cannot be subclassed in user code.
|
|
||||||
> For more information, see [the FAQ](../faq.md#class-inheritance-does-not-work-with-electron-built-in-modules).
|
|
||||||
|
|
||||||
### `new MenuItem(options)`
|
### `new MenuItem(options)`
|
||||||
|
|
||||||
* `options` Object
|
* `options` Object
|
||||||
@@ -21,7 +15,7 @@ See [`Menu`](menu.md) for examples.
|
|||||||
* `window` [BaseWindow](base-window.md) | undefined - This will not be defined if no window is open.
|
* `window` [BaseWindow](base-window.md) | undefined - This will not be defined if no window is open.
|
||||||
* `event` [KeyboardEvent](structures/keyboard-event.md)
|
* `event` [KeyboardEvent](structures/keyboard-event.md)
|
||||||
* `role` string (optional) - Can be `undo`, `redo`, `cut`, `copy`, `paste`, `pasteAndMatchStyle`, `delete`, `selectAll`, `reload`, `forceReload`, `toggleDevTools`, `resetZoom`, `zoomIn`, `zoomOut`, `toggleSpellChecker`, `togglefullscreen`, `window`, `minimize`, `close`, `help`, `about`, `services`, `hide`, `hideOthers`, `unhide`, `quit`, `showSubstitutions`, `toggleSmartQuotes`, `toggleSmartDashes`, `toggleTextReplacement`, `startSpeaking`, `stopSpeaking`, `zoom`, `front`, `appMenu`, `fileMenu`, `editMenu`, `viewMenu`, `shareMenu`, `recentDocuments`, `toggleTabBar`, `selectNextTab`, `selectPreviousTab`, `showAllTabs`, `mergeAllWindows`, `clearRecentDocuments`, `moveTabToNewWindow` or `windowMenu` - Define the action of the menu item, when specified the
|
* `role` string (optional) - Can be `undo`, `redo`, `cut`, `copy`, `paste`, `pasteAndMatchStyle`, `delete`, `selectAll`, `reload`, `forceReload`, `toggleDevTools`, `resetZoom`, `zoomIn`, `zoomOut`, `toggleSpellChecker`, `togglefullscreen`, `window`, `minimize`, `close`, `help`, `about`, `services`, `hide`, `hideOthers`, `unhide`, `quit`, `showSubstitutions`, `toggleSmartQuotes`, `toggleSmartDashes`, `toggleTextReplacement`, `startSpeaking`, `stopSpeaking`, `zoom`, `front`, `appMenu`, `fileMenu`, `editMenu`, `viewMenu`, `shareMenu`, `recentDocuments`, `toggleTabBar`, `selectNextTab`, `selectPreviousTab`, `showAllTabs`, `mergeAllWindows`, `clearRecentDocuments`, `moveTabToNewWindow` or `windowMenu` - Define the action of the menu item, when specified the
|
||||||
`click` property will be ignored. See [roles](../tutorial/menus.md#roles).
|
`click` property will be ignored. See [roles](#roles).
|
||||||
* `type` string (optional)
|
* `type` string (optional)
|
||||||
* `normal`
|
* `normal`
|
||||||
* `separator`
|
* `separator`
|
||||||
@@ -33,9 +27,8 @@ See [`Menu`](menu.md) for examples.
|
|||||||
* `label` string (optional)
|
* `label` string (optional)
|
||||||
* `sublabel` string (optional) _macOS_ - Available in macOS >= 14.4
|
* `sublabel` string (optional) _macOS_ - Available in macOS >= 14.4
|
||||||
* `toolTip` string (optional) _macOS_ - Hover text for this menu item.
|
* `toolTip` string (optional) _macOS_ - Hover text for this menu item.
|
||||||
* `accelerator` string (optional) - An [Accelerator](../tutorial/keyboard-shortcuts.md#accelerators) string.
|
* `accelerator` [Accelerator](accelerator.md) (optional)
|
||||||
* `icon` ([NativeImage](native-image.md) | string) (optional) - Can be a
|
* `icon` ([NativeImage](native-image.md) | string) (optional)
|
||||||
[NativeImage](native-image.md) or the file path of an icon.
|
|
||||||
* `enabled` boolean (optional) - If false, the menu item will be greyed out and
|
* `enabled` boolean (optional) - If false, the menu item will be greyed out and
|
||||||
unclickable.
|
unclickable.
|
||||||
* `acceleratorWorksWhenHidden` boolean (optional) _macOS_ - default is `true`, and when `false` will prevent the accelerator from triggering the item if the item is not visible.
|
* `acceleratorWorksWhenHidden` boolean (optional) _macOS_ - default is `true`, and when `false` will prevent the accelerator from triggering the item if the item is not visible.
|
||||||
@@ -67,13 +60,88 @@ See [`Menu`](menu.md) for examples.
|
|||||||
> [!NOTE]
|
> [!NOTE]
|
||||||
> `acceleratorWorksWhenHidden` is specified as being macOS-only because accelerators always work when items are hidden on Windows and Linux. The option is exposed to users to give them the option to turn it off, as this is possible in native macOS development.
|
> `acceleratorWorksWhenHidden` is specified as being macOS-only because accelerators always work when items are hidden on Windows and Linux. The option is exposed to users to give them the option to turn it off, as this is possible in native macOS development.
|
||||||
|
|
||||||
|
### Roles
|
||||||
|
|
||||||
|
Roles allow menu items to have predefined behaviors.
|
||||||
|
|
||||||
|
It is best to specify `role` for any menu item that matches a standard role,
|
||||||
|
rather than trying to manually implement the behavior in a `click` function.
|
||||||
|
The built-in `role` behavior will give the best native experience.
|
||||||
|
|
||||||
|
The `label` and `accelerator` values are optional when using a `role` and will
|
||||||
|
default to appropriate values for each platform.
|
||||||
|
|
||||||
|
Every menu item must have either a `role`, `label`, or in the case of a separator
|
||||||
|
a `type`.
|
||||||
|
|
||||||
|
The `role` property can have following values:
|
||||||
|
|
||||||
|
* `undo`
|
||||||
|
* `about` - Trigger a native about panel (custom message box on Window, which does not provide its own).
|
||||||
|
* `redo`
|
||||||
|
* `cut`
|
||||||
|
* `copy`
|
||||||
|
* `paste`
|
||||||
|
* `pasteAndMatchStyle`
|
||||||
|
* `selectAll`
|
||||||
|
* `delete`
|
||||||
|
* `minimize` - Minimize current window.
|
||||||
|
* `close` - Close current window.
|
||||||
|
* `quit` - Quit the application.
|
||||||
|
* `reload` - Reload the current window.
|
||||||
|
* `forceReload` - Reload the current window ignoring the cache.
|
||||||
|
* `toggleDevTools` - Toggle developer tools in the current window.
|
||||||
|
* `togglefullscreen` - Toggle full screen mode on the current window.
|
||||||
|
* `resetZoom` - Reset the focused page's zoom level to the original size.
|
||||||
|
* `zoomIn` - Zoom in the focused page by 10%.
|
||||||
|
* `zoomOut` - Zoom out the focused page by 10%.
|
||||||
|
* `toggleSpellChecker` - Enable/disable builtin spell checker.
|
||||||
|
* `fileMenu` - Whole default "File" menu (Close / Quit)
|
||||||
|
* `editMenu` - Whole default "Edit" menu (Undo, Copy, etc.).
|
||||||
|
* `viewMenu` - Whole default "View" menu (Reload, Toggle Developer Tools, etc.)
|
||||||
|
* `windowMenu` - Whole default "Window" menu (Minimize, Zoom, etc.).
|
||||||
|
|
||||||
|
The following additional roles are available on _macOS_:
|
||||||
|
|
||||||
|
* `appMenu` - Whole default "App" menu (About, Services, etc.)
|
||||||
|
* `hide` - Map to the `hide` action.
|
||||||
|
* `hideOthers` - Map to the `hideOtherApplications` action.
|
||||||
|
* `unhide` - Map to the `unhideAllApplications` action.
|
||||||
|
* `showSubstitutions` - Map to the `orderFrontSubstitutionsPanel` action.
|
||||||
|
* `toggleSmartQuotes` - Map to the `toggleAutomaticQuoteSubstitution` action.
|
||||||
|
* `toggleSmartDashes` - Map to the `toggleAutomaticDashSubstitution` action.
|
||||||
|
* `toggleTextReplacement` - Map to the `toggleAutomaticTextReplacement` action.
|
||||||
|
* `startSpeaking` - Map to the `startSpeaking` action.
|
||||||
|
* `stopSpeaking` - Map to the `stopSpeaking` action.
|
||||||
|
* `front` - Map to the `arrangeInFront` action.
|
||||||
|
* `zoom` - Map to the `performZoom` action.
|
||||||
|
* `toggleTabBar` - Map to the `toggleTabBar` action.
|
||||||
|
* `selectNextTab` - Map to the `selectNextTab` action.
|
||||||
|
* `selectPreviousTab` - Map to the `selectPreviousTab` action.
|
||||||
|
* `showAllTabs` - Map to the `showAllTabs` action.
|
||||||
|
* `mergeAllWindows` - Map to the `mergeAllWindows` action.
|
||||||
|
* `moveTabToNewWindow` - Map to the `moveTabToNewWindow` action.
|
||||||
|
* `window` - The submenu is a "Window" menu.
|
||||||
|
* `help` - The submenu is a "Help" menu.
|
||||||
|
* `services` - The submenu is a ["Services"](https://developer.apple.com/documentation/appkit/nsapplication/1428608-servicesmenu?language=objc) menu. This is only intended for use in the Application Menu and is _not_ the same as the "Services" submenu used in context menus in macOS apps, which is not implemented in Electron.
|
||||||
|
* `recentDocuments` - The submenu is an "Open Recent" menu.
|
||||||
|
* `clearRecentDocuments` - Map to the `clearRecentDocuments` action.
|
||||||
|
* `shareMenu` - The submenu is [share menu][ShareMenu]. The `sharingItem` property must also be set to indicate the item to share.
|
||||||
|
|
||||||
|
When specifying a `role` on macOS, `label` and `accelerator` are the only
|
||||||
|
options that will affect the menu item. All other options will be ignored.
|
||||||
|
Lowercase `role`, e.g. `toggledevtools`, is still supported.
|
||||||
|
|
||||||
|
> [!NOTE]
|
||||||
|
> The `enabled` and `visibility` properties are not available for top-level menu items in the tray on macOS.
|
||||||
|
|
||||||
### Instance Properties
|
### Instance Properties
|
||||||
|
|
||||||
The following properties are available on instances of `MenuItem`:
|
The following properties are available on instances of `MenuItem`:
|
||||||
|
|
||||||
#### `menuItem.id`
|
#### `menuItem.id`
|
||||||
|
|
||||||
A `string` indicating the item's unique id. This property can be
|
A `string` indicating the item's unique id, this property can be
|
||||||
dynamically changed.
|
dynamically changed.
|
||||||
|
|
||||||
#### `menuItem.label`
|
#### `menuItem.label`
|
||||||
@@ -131,17 +199,17 @@ A `string` indicating the item's hover text.
|
|||||||
|
|
||||||
#### `menuItem.enabled`
|
#### `menuItem.enabled`
|
||||||
|
|
||||||
A `boolean` indicating whether the item is enabled. This property can be
|
A `boolean` indicating whether the item is enabled, this property can be
|
||||||
dynamically changed.
|
dynamically changed.
|
||||||
|
|
||||||
#### `menuItem.visible`
|
#### `menuItem.visible`
|
||||||
|
|
||||||
A `boolean` indicating whether the item is visible. This property can be
|
A `boolean` indicating whether the item is visible, this property can be
|
||||||
dynamically changed.
|
dynamically changed.
|
||||||
|
|
||||||
#### `menuItem.checked`
|
#### `menuItem.checked`
|
||||||
|
|
||||||
A `boolean` indicating whether the item is checked. This property can be
|
A `boolean` indicating whether the item is checked, this property can be
|
||||||
dynamically changed.
|
dynamically changed.
|
||||||
|
|
||||||
A `checkbox` menu item will toggle the `checked` property on and off when
|
A `checkbox` menu item will toggle the `checked` property on and off when
|
||||||
@@ -172,3 +240,5 @@ A `number` indicating an item's sequential unique id.
|
|||||||
#### `menuItem.menu`
|
#### `menuItem.menu`
|
||||||
|
|
||||||
A `Menu` that the item is a part of.
|
A `Menu` that the item is a part of.
|
||||||
|
|
||||||
|
[ShareMenu]: https://developer.apple.com/design/human-interface-guidelines/macos/extensions/share-extensions/
|
||||||
|
|||||||
343
docs/api/menu.md
343
docs/api/menu.md
@@ -6,13 +6,6 @@
|
|||||||
|
|
||||||
Process: [Main](../glossary.md#main-process)
|
Process: [Main](../glossary.md#main-process)
|
||||||
|
|
||||||
> [!TIP]
|
|
||||||
> See also: [A detailed guide about how to implement menus in your application](../tutorial/menus.md).
|
|
||||||
|
|
||||||
> [!WARNING]
|
|
||||||
> Electron's built-in classes cannot be subclassed in user code.
|
|
||||||
> For more information, see [the FAQ](../faq.md#class-inheritance-does-not-work-with-electron-built-in-modules).
|
|
||||||
|
|
||||||
### `new Menu()`
|
### `new Menu()`
|
||||||
|
|
||||||
Creates a new menu.
|
Creates a new menu.
|
||||||
@@ -23,7 +16,7 @@ The `Menu` class has the following static methods:
|
|||||||
|
|
||||||
#### `Menu.setApplicationMenu(menu)`
|
#### `Menu.setApplicationMenu(menu)`
|
||||||
|
|
||||||
- `menu` Menu | null
|
* `menu` Menu | null
|
||||||
|
|
||||||
Sets `menu` as the application menu on macOS. On Windows and Linux, the
|
Sets `menu` as the application menu on macOS. On Windows and Linux, the
|
||||||
`menu` will be set as each window's top menu.
|
`menu` will be set as each window's top menu.
|
||||||
@@ -54,18 +47,18 @@ Returns `Menu | null` - The application menu, if set, or `null`, if not set.
|
|||||||
|
|
||||||
#### `Menu.sendActionToFirstResponder(action)` _macOS_
|
#### `Menu.sendActionToFirstResponder(action)` _macOS_
|
||||||
|
|
||||||
- `action` string
|
* `action` string
|
||||||
|
|
||||||
Sends the `action` to the first responder of application. This is used for
|
Sends the `action` to the first responder of application. This is used for
|
||||||
emulating default macOS menu behaviors. Usually you would use the
|
emulating default macOS menu behaviors. Usually you would use the
|
||||||
[`role`](../tutorial/menus.md#roles) property of a [`MenuItem`](menu-item.md).
|
[`role`](menu-item.md#roles) property of a [`MenuItem`](menu-item.md).
|
||||||
|
|
||||||
See the [macOS Cocoa Event Handling Guide](https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/EventOverview/EventArchitecture/EventArchitecture.html#//apple_ref/doc/uid/10000060i-CH3-SW7)
|
See the [macOS Cocoa Event Handling Guide](https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/EventOverview/EventArchitecture/EventArchitecture.html#//apple_ref/doc/uid/10000060i-CH3-SW7)
|
||||||
for more information on macOS' native actions.
|
for more information on macOS' native actions.
|
||||||
|
|
||||||
#### `Menu.buildFromTemplate(template)`
|
#### `Menu.buildFromTemplate(template)`
|
||||||
|
|
||||||
- `template` (MenuItemConstructorOptions | MenuItem)[]
|
* `template` (MenuItemConstructorOptions | MenuItem)[]
|
||||||
|
|
||||||
Returns `Menu`
|
Returns `Menu`
|
||||||
|
|
||||||
@@ -80,50 +73,47 @@ The `menu` object has the following instance methods:
|
|||||||
|
|
||||||
#### `menu.popup([options])`
|
#### `menu.popup([options])`
|
||||||
|
|
||||||
- `options` Object (optional)
|
* `options` Object (optional)
|
||||||
- `window` [BaseWindow](base-window.md) (optional) - Default is the focused window.
|
* `window` [BaseWindow](base-window.md) (optional) - Default is the focused window.
|
||||||
- `frame` [WebFrameMain](web-frame-main.md) (optional) - Provide the relevant frame
|
* `frame` [WebFrameMain](web-frame-main.md) (optional) - Provide the relevant frame
|
||||||
if you want certain OS-level features such as Writing Tools on macOS to function correctly. Typically, this should be `params.frame` from the [`context-menu` event](web-contents.md#event-context-menu) on a WebContents, or the [`focusedFrame` property](web-contents.md#contentsfocusedframe-readonly) of a WebContents.
|
if you want certain OS-level features such as Writing Tools on macOS to function correctly. Typically, this should be `params.frame` from the [`context-menu` event](web-contents.md#event-context-menu) on a WebContents, or the [`focusedFrame` property](web-contents.md#contentsfocusedframe-readonly) of a WebContents.
|
||||||
- `x` number (optional) - Default is the current mouse cursor position.
|
* `x` number (optional) - Default is the current mouse cursor position.
|
||||||
Must be declared if `y` is declared.
|
Must be declared if `y` is declared.
|
||||||
- `y` number (optional) - Default is the current mouse cursor position.
|
* `y` number (optional) - Default is the current mouse cursor position.
|
||||||
Must be declared if `x` is declared.
|
Must be declared if `x` is declared.
|
||||||
- `positioningItem` number (optional) _macOS_ - The index of the menu item to
|
* `positioningItem` number (optional) _macOS_ - The index of the menu item to
|
||||||
be positioned under the mouse cursor at the specified coordinates. Default
|
be positioned under the mouse cursor at the specified coordinates. Default
|
||||||
is -1.
|
is -1.
|
||||||
- `sourceType` string (optional) _Windows_ _Linux_ - This should map to the `menuSourceType`
|
* `sourceType` string (optional) _Windows_ _Linux_ - This should map to the `menuSourceType`
|
||||||
provided by the `context-menu` event. It is not recommended to set this value manually,
|
provided by the `context-menu` event. It is not recommended to set this value manually,
|
||||||
only provide values you receive from other APIs or leave it `undefined`.
|
only provide values you receive from other APIs or leave it `undefined`.
|
||||||
Can be `none`, `mouse`, `keyboard`, `touch`, `touchMenu`, `longPress`, `longTap`, `touchHandle`, `stylus`, `adjustSelection`, or `adjustSelectionReset`.
|
Can be `none`, `mouse`, `keyboard`, `touch`, `touchMenu`, `longPress`, `longTap`, `touchHandle`, `stylus`, `adjustSelection`, or `adjustSelectionReset`.
|
||||||
- `callback` Function (optional) - Called when menu is closed.
|
* `callback` Function (optional) - Called when menu is closed.
|
||||||
|
|
||||||
Pops up this menu as a context menu in the [`BaseWindow`](base-window.md).
|
Pops up this menu as a context menu in the [`BaseWindow`](base-window.md).
|
||||||
|
|
||||||
> [!TIP]
|
|
||||||
> For more details, see the [Context Menu](../tutorial/context-menu.md) guide.
|
|
||||||
|
|
||||||
#### `menu.closePopup([window])`
|
#### `menu.closePopup([window])`
|
||||||
|
|
||||||
- `window` [BaseWindow](base-window.md) (optional) - Default is the focused window.
|
* `window` [BaseWindow](base-window.md) (optional) - Default is the focused window.
|
||||||
|
|
||||||
Closes the context menu in the `window`.
|
Closes the context menu in the `window`.
|
||||||
|
|
||||||
#### `menu.append(menuItem)`
|
#### `menu.append(menuItem)`
|
||||||
|
|
||||||
- `menuItem` [MenuItem](menu-item.md)
|
* `menuItem` [MenuItem](menu-item.md)
|
||||||
|
|
||||||
Appends the `menuItem` to the menu.
|
Appends the `menuItem` to the menu.
|
||||||
|
|
||||||
#### `menu.getMenuItemById(id)`
|
#### `menu.getMenuItemById(id)`
|
||||||
|
|
||||||
- `id` string
|
* `id` string
|
||||||
|
|
||||||
Returns `MenuItem | null` the item with the specified `id`
|
Returns `MenuItem | null` the item with the specified `id`
|
||||||
|
|
||||||
#### `menu.insert(pos, menuItem)`
|
#### `menu.insert(pos, menuItem)`
|
||||||
|
|
||||||
- `pos` Integer
|
* `pos` Integer
|
||||||
- `menuItem` [MenuItem](menu-item.md)
|
* `menuItem` [MenuItem](menu-item.md)
|
||||||
|
|
||||||
Inserts the `menuItem` to the `pos` position of the menu.
|
Inserts the `menuItem` to the `pos` position of the menu.
|
||||||
|
|
||||||
@@ -139,7 +129,7 @@ Objects created with `new Menu` or returned by `Menu.buildFromTemplate` emit the
|
|||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
|
|
||||||
- `event` Event
|
* `event` Event
|
||||||
|
|
||||||
Emitted when `menu.popup()` is called.
|
Emitted when `menu.popup()` is called.
|
||||||
|
|
||||||
@@ -147,7 +137,7 @@ Emitted when `menu.popup()` is called.
|
|||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
|
|
||||||
- `event` Event
|
* `event` Event
|
||||||
|
|
||||||
Emitted when a popup is closed either manually or with `menu.closePopup()`.
|
Emitted when a popup is closed either manually or with `menu.closePopup()`.
|
||||||
|
|
||||||
@@ -159,5 +149,296 @@ Emitted when a popup is closed either manually or with `menu.closePopup()`.
|
|||||||
|
|
||||||
A `MenuItem[]` array containing the menu's items.
|
A `MenuItem[]` array containing the menu's items.
|
||||||
|
|
||||||
Each `Menu` consists of multiple [`MenuItem`](menu-item.md) instances and each `MenuItem`
|
Each `Menu` consists of multiple [`MenuItem`](menu-item.md)s and each `MenuItem`
|
||||||
can nest a `Menu` into its `submenu` property.
|
can have a submenu.
|
||||||
|
|
||||||
|
## Examples
|
||||||
|
|
||||||
|
An example of creating the application menu with the simple template API:
|
||||||
|
|
||||||
|
```js @ts-expect-error=[107]
|
||||||
|
const { app, Menu } = require('electron')
|
||||||
|
|
||||||
|
const isMac = process.platform === 'darwin'
|
||||||
|
|
||||||
|
const template = [
|
||||||
|
// { role: 'appMenu' }
|
||||||
|
...(isMac
|
||||||
|
? [{
|
||||||
|
label: app.name,
|
||||||
|
submenu: [
|
||||||
|
{ role: 'about' },
|
||||||
|
{ type: 'separator' },
|
||||||
|
{ role: 'services' },
|
||||||
|
{ type: 'separator' },
|
||||||
|
{ role: 'hide' },
|
||||||
|
{ role: 'hideOthers' },
|
||||||
|
{ role: 'unhide' },
|
||||||
|
{ type: 'separator' },
|
||||||
|
{ role: 'quit' }
|
||||||
|
]
|
||||||
|
}]
|
||||||
|
: []),
|
||||||
|
// { role: 'fileMenu' }
|
||||||
|
{
|
||||||
|
label: 'File',
|
||||||
|
submenu: [
|
||||||
|
isMac ? { role: 'close' } : { role: 'quit' }
|
||||||
|
]
|
||||||
|
},
|
||||||
|
// { role: 'editMenu' }
|
||||||
|
{
|
||||||
|
label: 'Edit',
|
||||||
|
submenu: [
|
||||||
|
{ role: 'undo' },
|
||||||
|
{ role: 'redo' },
|
||||||
|
{ type: 'separator' },
|
||||||
|
{ role: 'cut' },
|
||||||
|
{ role: 'copy' },
|
||||||
|
{ role: 'paste' },
|
||||||
|
...(isMac
|
||||||
|
? [
|
||||||
|
{ role: 'pasteAndMatchStyle' },
|
||||||
|
{ role: 'delete' },
|
||||||
|
{ role: 'selectAll' },
|
||||||
|
{ type: 'separator' },
|
||||||
|
{
|
||||||
|
label: 'Speech',
|
||||||
|
submenu: [
|
||||||
|
{ role: 'startSpeaking' },
|
||||||
|
{ role: 'stopSpeaking' }
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
: [
|
||||||
|
{ role: 'delete' },
|
||||||
|
{ type: 'separator' },
|
||||||
|
{ role: 'selectAll' }
|
||||||
|
])
|
||||||
|
]
|
||||||
|
},
|
||||||
|
// { role: 'viewMenu' }
|
||||||
|
{
|
||||||
|
label: 'View',
|
||||||
|
submenu: [
|
||||||
|
{ role: 'reload' },
|
||||||
|
{ role: 'forceReload' },
|
||||||
|
{ role: 'toggleDevTools' },
|
||||||
|
{ type: 'separator' },
|
||||||
|
{ role: 'resetZoom' },
|
||||||
|
{ role: 'zoomIn' },
|
||||||
|
{ role: 'zoomOut' },
|
||||||
|
{ type: 'separator' },
|
||||||
|
{ role: 'togglefullscreen' }
|
||||||
|
]
|
||||||
|
},
|
||||||
|
// { role: 'windowMenu' }
|
||||||
|
{
|
||||||
|
label: 'Window',
|
||||||
|
submenu: [
|
||||||
|
{ role: 'minimize' },
|
||||||
|
{ role: 'zoom' },
|
||||||
|
...(isMac
|
||||||
|
? [
|
||||||
|
{ type: 'separator' },
|
||||||
|
{ role: 'front' },
|
||||||
|
{ type: 'separator' },
|
||||||
|
{ role: 'window' }
|
||||||
|
]
|
||||||
|
: [
|
||||||
|
{ role: 'close' }
|
||||||
|
])
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
role: 'help',
|
||||||
|
submenu: [
|
||||||
|
{
|
||||||
|
label: 'Learn More',
|
||||||
|
click: async () => {
|
||||||
|
const { shell } = require('electron')
|
||||||
|
await shell.openExternal('https://electronjs.org')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
|
const menu = Menu.buildFromTemplate(template)
|
||||||
|
Menu.setApplicationMenu(menu)
|
||||||
|
```
|
||||||
|
|
||||||
|
### Render process
|
||||||
|
|
||||||
|
To create menus initiated by the renderer process, send the required
|
||||||
|
information to the main process using IPC and have the main process display the
|
||||||
|
menu on behalf of the renderer.
|
||||||
|
|
||||||
|
Below is an example of showing a menu when the user right clicks the page:
|
||||||
|
|
||||||
|
```js @ts-expect-error=[21]
|
||||||
|
// renderer
|
||||||
|
window.addEventListener('contextmenu', (e) => {
|
||||||
|
e.preventDefault()
|
||||||
|
ipcRenderer.send('show-context-menu')
|
||||||
|
})
|
||||||
|
|
||||||
|
ipcRenderer.on('context-menu-command', (e, command) => {
|
||||||
|
// ...
|
||||||
|
})
|
||||||
|
|
||||||
|
// main
|
||||||
|
ipcMain.on('show-context-menu', (event) => {
|
||||||
|
const template = [
|
||||||
|
{
|
||||||
|
label: 'Menu Item 1',
|
||||||
|
click: () => { event.sender.send('context-menu-command', 'menu-item-1') }
|
||||||
|
},
|
||||||
|
{ type: 'separator' },
|
||||||
|
{ label: 'Menu Item 2', type: 'checkbox', checked: true }
|
||||||
|
]
|
||||||
|
const menu = Menu.buildFromTemplate(template)
|
||||||
|
menu.popup({ window: BrowserWindow.fromWebContents(event.sender) })
|
||||||
|
})
|
||||||
|
```
|
||||||
|
|
||||||
|
## Notes on macOS Application Menu
|
||||||
|
|
||||||
|
macOS has a completely different style of application menu from Windows and
|
||||||
|
Linux. Here are some notes on making your app's menu more native-like.
|
||||||
|
|
||||||
|
### Standard Menus
|
||||||
|
|
||||||
|
On macOS there are many system-defined standard menus, like the [`Services`](https://developer.apple.com/documentation/appkit/nsapplication/1428608-servicesmenu?language=objc) and
|
||||||
|
`Windows` menus. To make your menu a standard menu, you should set your menu's
|
||||||
|
`role` to one of the following and Electron will recognize them and make them
|
||||||
|
become standard menus:
|
||||||
|
|
||||||
|
* `window`
|
||||||
|
* `help`
|
||||||
|
* `services`
|
||||||
|
|
||||||
|
### Standard Menu Item Actions
|
||||||
|
|
||||||
|
macOS has provided standard actions for some menu items, like `About xxx`,
|
||||||
|
`Hide xxx`, and `Hide Others`. To set the action of a menu item to a standard
|
||||||
|
action, you should set the `role` attribute of the menu item.
|
||||||
|
|
||||||
|
### Main Menu's Name
|
||||||
|
|
||||||
|
On macOS the label of the application menu's first item is always your app's
|
||||||
|
name, no matter what label you set. To change it, modify your app bundle's
|
||||||
|
`Info.plist` file. See
|
||||||
|
[About Information Property List Files][AboutInformationPropertyListFiles]
|
||||||
|
for more information.
|
||||||
|
|
||||||
|
### Menu Sublabels
|
||||||
|
|
||||||
|
Menu sublabels, or [subtitles](https://developer.apple.com/documentation/appkit/nsmenuitem/subtitle?language=objc), can be added to menu items using the `sublabel` option. Below is an example based on the renderer example above:
|
||||||
|
|
||||||
|
```js @ts-expect-error=[12]
|
||||||
|
// main
|
||||||
|
ipcMain.on('show-context-menu', (event) => {
|
||||||
|
const template = [
|
||||||
|
{
|
||||||
|
label: 'Menu Item 1',
|
||||||
|
sublabel: 'Subtitle 1',
|
||||||
|
click: () => { event.sender.send('context-menu-command', 'menu-item-1') }
|
||||||
|
},
|
||||||
|
{ type: 'separator' },
|
||||||
|
{ label: 'Menu Item 2', sublabel: 'Subtitle 2', type: 'checkbox', checked: true }
|
||||||
|
]
|
||||||
|
const menu = Menu.buildFromTemplate(template)
|
||||||
|
menu.popup({ window: BrowserWindow.fromWebContents(event.sender) })
|
||||||
|
})
|
||||||
|
```
|
||||||
|
|
||||||
|
## Setting Menu for Specific Browser Window (_Linux_ _Windows_)
|
||||||
|
|
||||||
|
The [`setMenu` method][setMenu] of browser windows can set the menu of certain
|
||||||
|
browser windows.
|
||||||
|
|
||||||
|
## Menu Item Position
|
||||||
|
|
||||||
|
You can make use of `before`, `after`, `beforeGroupContaining`, `afterGroupContaining` and `id` to control how the item will be placed when building a menu with `Menu.buildFromTemplate`.
|
||||||
|
|
||||||
|
* `before` - Inserts this item before the item with the specified id. If the
|
||||||
|
referenced item doesn't exist the item will be inserted at the end of
|
||||||
|
the menu. Also implies that the menu item in question should be placed in the same “group” as the item.
|
||||||
|
* `after` - Inserts this item after the item with the specified id. If the
|
||||||
|
referenced item doesn't exist the item will be inserted at the end of
|
||||||
|
the menu. Also implies that the menu item in question should be placed in the same “group” as the item.
|
||||||
|
* `beforeGroupContaining` - Provides a means for a single context menu to declare
|
||||||
|
the placement of their containing group before the containing group of the item with the specified id.
|
||||||
|
* `afterGroupContaining` - Provides a means for a single context menu to declare
|
||||||
|
the placement of their containing group after the containing group of the item with the specified id.
|
||||||
|
|
||||||
|
By default, items will be inserted in the order they exist in the template unless one of the specified positioning keywords is used.
|
||||||
|
|
||||||
|
### Examples
|
||||||
|
|
||||||
|
Template:
|
||||||
|
|
||||||
|
```js
|
||||||
|
[
|
||||||
|
{ id: '1', label: 'one' },
|
||||||
|
{ id: '2', label: 'two' },
|
||||||
|
{ id: '3', label: 'three' },
|
||||||
|
{ id: '4', label: 'four' }
|
||||||
|
]
|
||||||
|
```
|
||||||
|
|
||||||
|
Menu:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
- 1
|
||||||
|
- 2
|
||||||
|
- 3
|
||||||
|
- 4
|
||||||
|
```
|
||||||
|
|
||||||
|
Template:
|
||||||
|
|
||||||
|
```js
|
||||||
|
[
|
||||||
|
{ id: '1', label: 'one' },
|
||||||
|
{ type: 'separator' },
|
||||||
|
{ id: '3', label: 'three', beforeGroupContaining: ['1'] },
|
||||||
|
{ id: '4', label: 'four', afterGroupContaining: ['2'] },
|
||||||
|
{ type: 'separator' },
|
||||||
|
{ id: '2', label: 'two' }
|
||||||
|
]
|
||||||
|
```
|
||||||
|
|
||||||
|
Menu:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
- 3
|
||||||
|
- 4
|
||||||
|
- ---
|
||||||
|
- 1
|
||||||
|
- ---
|
||||||
|
- 2
|
||||||
|
```
|
||||||
|
|
||||||
|
Template:
|
||||||
|
|
||||||
|
```js
|
||||||
|
[
|
||||||
|
{ id: '1', label: 'one', after: ['3'] },
|
||||||
|
{ id: '2', label: 'two', before: ['1'] },
|
||||||
|
{ id: '3', label: 'three' }
|
||||||
|
]
|
||||||
|
```
|
||||||
|
|
||||||
|
Menu:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
- ---
|
||||||
|
- 3
|
||||||
|
- 2
|
||||||
|
- 1
|
||||||
|
```
|
||||||
|
|
||||||
|
[AboutInformationPropertyListFiles]: https://developer.apple.com/library/ios/documentation/general/Reference/InfoPlistKeyReference/Articles/AboutInformationPropertyListFiles.html
|
||||||
|
[setMenu]: browser-window.md#winsetmenumenu-linux-windows
|
||||||
|
|||||||
@@ -37,10 +37,6 @@ ipcRenderer.on('port', (e) => {
|
|||||||
})
|
})
|
||||||
```
|
```
|
||||||
|
|
||||||
> [!WARNING]
|
|
||||||
> Electron's built-in classes cannot be subclassed in user code.
|
|
||||||
> For more information, see [the FAQ](../faq.md#class-inheritance-does-not-work-with-electron-built-in-modules).
|
|
||||||
|
|
||||||
### Instance Properties
|
### Instance Properties
|
||||||
|
|
||||||
#### `channel.port1`
|
#### `channel.port1`
|
||||||
|
|||||||
@@ -4,12 +4,6 @@
|
|||||||
|
|
||||||
Process: [Main](../glossary.md#main-process), [Renderer](../glossary.md#renderer-process)
|
Process: [Main](../glossary.md#main-process), [Renderer](../glossary.md#renderer-process)
|
||||||
|
|
||||||
> [!IMPORTANT]
|
|
||||||
> If you want to call this API from a renderer process with context isolation enabled,
|
|
||||||
> place the API call in your preload script and
|
|
||||||
> [expose](../tutorial/context-isolation.md#after-context-isolation-enabled) it using the
|
|
||||||
> [`contextBridge`](context-bridge.md) API.
|
|
||||||
|
|
||||||
The `nativeImage` module provides a unified interface for manipulating
|
The `nativeImage` module provides a unified interface for manipulating
|
||||||
system images. These can be handy if you want to provide multiple scaled
|
system images. These can be handy if you want to provide multiple scaled
|
||||||
versions of the same icon or take advantage of macOS [template images][template-image].
|
versions of the same icon or take advantage of macOS [template images][template-image].
|
||||||
@@ -202,7 +196,8 @@ Creates a new `NativeImage` instance from `dataUrl`, a base 64 encoded [Data URL
|
|||||||
Returns `NativeImage`
|
Returns `NativeImage`
|
||||||
|
|
||||||
Creates a new `NativeImage` instance from the `NSImage` that maps to the
|
Creates a new `NativeImage` instance from the `NSImage` that maps to the
|
||||||
given image name. See Apple's [`NSImageName`](https://developer.apple.com/documentation/appkit/nsimagename#2901388) documentation and [SF Symbols](https://developer.apple.com/sf-symbols/) for a list of possible values.
|
given image name. See Apple's [`NSImageName`](https://developer.apple.com/documentation/appkit/nsimagename#2901388)
|
||||||
|
documentation for a list of possible values.
|
||||||
|
|
||||||
The `hslShift` is applied to the image with the following rules:
|
The `hslShift` is applied to the image with the following rules:
|
||||||
|
|
||||||
@@ -230,15 +225,6 @@ echo -e '#import <Cocoa/Cocoa.h>\nint main() { NSLog(@"%@", SYSTEM_IMAGE_NAME);
|
|||||||
|
|
||||||
where `SYSTEM_IMAGE_NAME` should be replaced with any value from [this list](https://developer.apple.com/documentation/appkit/nsimagename?language=objc).
|
where `SYSTEM_IMAGE_NAME` should be replaced with any value from [this list](https://developer.apple.com/documentation/appkit/nsimagename?language=objc).
|
||||||
|
|
||||||
For SF Symbols, usage looks as follows:
|
|
||||||
|
|
||||||
```js
|
|
||||||
const image = nativeImage.createFromNamedImage('square.and.pencil')
|
|
||||||
```
|
|
||||||
|
|
||||||
where `'square.and.pencil'` is the symbol name from the
|
|
||||||
[SF Symbols app](https://developer.apple.com/sf-symbols/).
|
|
||||||
|
|
||||||
## Class: NativeImage
|
## Class: NativeImage
|
||||||
|
|
||||||
> Natively wrap images such as tray, dock, and application icons.
|
> Natively wrap images such as tray, dock, and application icons.
|
||||||
|
|||||||
@@ -4,9 +4,12 @@
|
|||||||
|
|
||||||
Process: [Main](../glossary.md#main-process)
|
Process: [Main](../glossary.md#main-process)
|
||||||
|
|
||||||
> [!NOTE]
|
:::info Renderer process notifications
|
||||||
> If you want to show notifications from a renderer process you should use the
|
|
||||||
> [web Notifications API](../tutorial/notifications.md)
|
If you want to show notifications from a renderer process you should use the
|
||||||
|
[web Notifications API](../tutorial/notifications.md)
|
||||||
|
|
||||||
|
:::
|
||||||
|
|
||||||
## Class: Notification
|
## Class: Notification
|
||||||
|
|
||||||
@@ -18,10 +21,6 @@ Process: [Main](../glossary.md#main-process)
|
|||||||
|
|
||||||
It creates a new `Notification` with native properties as set by the `options`.
|
It creates a new `Notification` with native properties as set by the `options`.
|
||||||
|
|
||||||
> [!WARNING]
|
|
||||||
> Electron's built-in classes cannot be subclassed in user code.
|
|
||||||
> For more information, see [the FAQ](../faq.md#class-inheritance-does-not-work-with-electron-built-in-modules).
|
|
||||||
|
|
||||||
### Static Methods
|
### Static Methods
|
||||||
|
|
||||||
The `Notification` class has the following static methods:
|
The `Notification` class has the following static methods:
|
||||||
|
|||||||
@@ -211,10 +211,6 @@ Returns `Object`:
|
|||||||
system.
|
system.
|
||||||
* `free` Integer - The total amount of memory not being used by applications or disk
|
* `free` Integer - The total amount of memory not being used by applications or disk
|
||||||
cache.
|
cache.
|
||||||
* `fileBacked` Integer _macOS_ - The amount of memory that currently has been paged out to storage.
|
|
||||||
Includes memory for file caches, network buffers, and other system services.
|
|
||||||
* `purgeable` Integer _macOS_ - The amount of memory that is marked as "purgeable". The system can reclaim it
|
|
||||||
if memory pressure increases.
|
|
||||||
* `swapTotal` Integer _Windows_ _Linux_ - The total amount of swap memory in Kilobytes available to the
|
* `swapTotal` Integer _Windows_ _Linux_ - The total amount of swap memory in Kilobytes available to the
|
||||||
system.
|
system.
|
||||||
* `swapFree` Integer _Windows_ _Linux_ - The free amount of swap memory in Kilobytes available to the
|
* `swapFree` Integer _Windows_ _Linux_ - The free amount of swap memory in Kilobytes available to the
|
||||||
|
|||||||
@@ -73,6 +73,5 @@ command line flag is provided `--password-store="basic"`.
|
|||||||
is provided `--password-store="kwallet"`.
|
is provided `--password-store="kwallet"`.
|
||||||
* `kwallet5` - When the desktop session is `kde5` or if the following command line flag
|
* `kwallet5` - When the desktop session is `kde5` or if the following command line flag
|
||||||
is provided `--password-store="kwallet5"`.
|
is provided `--password-store="kwallet5"`.
|
||||||
* `kwallet6` - When the desktop session is `kde6` or if the following command line flag
|
* `kwallet6` - When the desktop session is `kde6`.
|
||||||
is provided `--password-store="kwallet6"`.
|
|
||||||
* `unknown` - When the function is called before app has emitted the `ready` event.
|
* `unknown` - When the function is called before app has emitted the `ready` event.
|
||||||
|
|||||||
@@ -1,7 +1,11 @@
|
|||||||
## Class: ServiceWorkerMain
|
# ServiceWorkerMain
|
||||||
|
|
||||||
> An instance of a Service Worker representing a version of a script for a given scope.
|
> An instance of a Service Worker representing a version of a script for a given scope.
|
||||||
|
|
||||||
|
Process: [Main](../glossary.md#main-process)
|
||||||
|
|
||||||
|
## Class: ServiceWorkerMain
|
||||||
|
|
||||||
Process: [Main](../glossary.md#main-process)<br />
|
Process: [Main](../glossary.md#main-process)<br />
|
||||||
_This class is not exported from the `'electron'` module. It is only available as a return value of other methods in the Electron API._
|
_This class is not exported from the `'electron'` module. It is only available as a return value of other methods in the Electron API._
|
||||||
|
|
||||||
|
|||||||
@@ -66,7 +66,7 @@ The `session` module has the following properties:
|
|||||||
|
|
||||||
### `session.defaultSession`
|
### `session.defaultSession`
|
||||||
|
|
||||||
A `Session` object, the default session object of the app, available after `app.whenReady` is called.
|
A `Session` object, the default session object of the app.
|
||||||
|
|
||||||
## Class: Session
|
## Class: Session
|
||||||
|
|
||||||
@@ -939,18 +939,14 @@ session.fromPartition('some-partition').setPermissionRequestHandler((webContents
|
|||||||
* `top-level-storage-access` - Allow top-level sites to request third-party cookie access on behalf of embedded content originating from another site in the same related website set using the [Storage Access API](https://developer.mozilla.org/en-US/docs/Web/API/Storage_Access_API).
|
* `top-level-storage-access` - Allow top-level sites to request third-party cookie access on behalf of embedded content originating from another site in the same related website set using the [Storage Access API](https://developer.mozilla.org/en-US/docs/Web/API/Storage_Access_API).
|
||||||
* `usb` - Expose non-standard Universal Serial Bus (USB) compatible devices services to the web with the [WebUSB API](https://developer.mozilla.org/en-US/docs/Web/API/WebUSB_API).
|
* `usb` - Expose non-standard Universal Serial Bus (USB) compatible devices services to the web with the [WebUSB API](https://developer.mozilla.org/en-US/docs/Web/API/WebUSB_API).
|
||||||
* `deprecated-sync-clipboard-read` _Deprecated_ - Request access to run `document.execCommand("paste")`
|
* `deprecated-sync-clipboard-read` _Deprecated_ - Request access to run `document.execCommand("paste")`
|
||||||
* `fileSystem` - Access to read, write, and file management capabilities using the [File System API](https://developer.mozilla.org/en-US/docs/Web/API/File_System_API).
|
|
||||||
* `requestingOrigin` string - The origin URL of the permission check
|
* `requestingOrigin` string - The origin URL of the permission check
|
||||||
* `details` Object - Some properties are only available on certain permission types.
|
* `details` Object - Some properties are only available on certain permission types.
|
||||||
* `embeddingOrigin` string (optional) - The origin of the frame embedding the frame that made the permission check. Only set for cross-origin sub frames making permission checks.
|
* `embeddingOrigin` string (optional) - The origin of the frame embedding the frame that made the permission check. Only set for cross-origin sub frames making permission checks.
|
||||||
* `securityOrigin` string (optional) - The security origin of the `media` check.
|
* `securityOrigin` string (optional) - The security origin of the `media` check.
|
||||||
* `mediaType` string (optional) - The type of media access being requested, can be `video`,
|
* `mediaType` string (optional) - The type of media access being requested, can be `video`,
|
||||||
`audio` or `unknown`.
|
`audio` or `unknown`
|
||||||
* `requestingUrl` string (optional) - The last URL the requesting frame loaded. This is not provided for cross-origin sub frames making permission checks.
|
* `requestingUrl` string (optional) - The last URL the requesting frame loaded. This is not provided for cross-origin sub frames making permission checks.
|
||||||
* `isMainFrame` boolean - Whether the frame making the request is the main frame.
|
* `isMainFrame` boolean - Whether the frame making the request is the main frame
|
||||||
* `filePath` string (optional) - The path of a `fileSystem` request.
|
|
||||||
* `isDirectory` boolean (optional) - Whether a `fileSystem` request is a directory.
|
|
||||||
* `fileAccessType` string (optional) - The access type of a `fileSystem` request. Can be `writable` or `readable`.
|
|
||||||
|
|
||||||
Sets the handler which can be used to respond to permission checks for the `session`.
|
Sets the handler which can be used to respond to permission checks for the `session`.
|
||||||
Returning `true` will allow the permission and `false` will reject it. Please note that
|
Returning `true` will allow the permission and `false` will reject it. Please note that
|
||||||
@@ -972,9 +968,6 @@ session.fromPartition('some-partition').setPermissionCheckHandler((webContents,
|
|||||||
})
|
})
|
||||||
```
|
```
|
||||||
|
|
||||||
> [!NOTE]
|
|
||||||
> `isMainFrame` will always be `false` for a `fileSystem` request as a result of Chromium limitations.
|
|
||||||
|
|
||||||
#### `ses.setDisplayMediaRequestHandler(handler[, opts])`
|
#### `ses.setDisplayMediaRequestHandler(handler[, opts])`
|
||||||
|
|
||||||
* `handler` Function | null
|
* `handler` Function | null
|
||||||
|
|||||||
@@ -13,10 +13,6 @@ For including the share menu as a submenu of other menus, please use the
|
|||||||
|
|
||||||
Process: [Main](../glossary.md#main-process)
|
Process: [Main](../glossary.md#main-process)
|
||||||
|
|
||||||
> [!WARNING]
|
|
||||||
> Electron's built-in classes cannot be subclassed in user code.
|
|
||||||
> For more information, see [the FAQ](../faq.md#class-inheritance-does-not-work-with-electron-built-in-modules).
|
|
||||||
|
|
||||||
### `new ShareMenu(sharingItem)`
|
### `new ShareMenu(sharingItem)`
|
||||||
|
|
||||||
* `sharingItem` SharingItem - The item to share.
|
* `sharingItem` SharingItem - The item to share.
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user