mirror of
https://github.com/electron/electron.git
synced 2026-04-10 03:01:51 -04:00
Compare commits
310 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
32d08728ee | ||
|
|
ff3793aa71 | ||
|
|
3225fd9af5 | ||
|
|
9801b99076 | ||
|
|
551d301c98 | ||
|
|
e08f067d53 | ||
|
|
98900a48f2 | ||
|
|
c6e4e4cdd6 | ||
|
|
65d1bf2d44 | ||
|
|
29ec38de49 | ||
|
|
1d946b1aca | ||
|
|
d7c6e0358d | ||
|
|
6dc985382d | ||
|
|
cee1499093 | ||
|
|
c5f4a6c44b | ||
|
|
cea9ebb8e9 | ||
|
|
faf3ff9219 | ||
|
|
2e256e301d | ||
|
|
eee1b523dd | ||
|
|
3980b0f8e4 | ||
|
|
f647a02a1b | ||
|
|
f8bfeb3d61 | ||
|
|
03ceb38f25 | ||
|
|
3b4d991fd4 | ||
|
|
35dd10bd26 | ||
|
|
155359e0de | ||
|
|
ccf3ba075e | ||
|
|
2c52a3d692 | ||
|
|
b3bf094787 | ||
|
|
e2380d5ec3 | ||
|
|
2226d68ced | ||
|
|
7f00c5c00e | ||
|
|
39390d70c0 | ||
|
|
8f8351dbaa | ||
|
|
02d1f557cb | ||
|
|
611b980612 | ||
|
|
0a0c320ca6 | ||
|
|
13ae29f8e1 | ||
|
|
503b5eaad0 | ||
|
|
2c96e1612e | ||
|
|
91e569e822 | ||
|
|
f360dadbb4 | ||
|
|
64a1ede1a6 | ||
|
|
715f15736c | ||
|
|
4dd027fb74 | ||
|
|
61cd32a8bd | ||
|
|
133336f803 | ||
|
|
1c4596e0cf | ||
|
|
24d77baeeb | ||
|
|
dd82356e25 | ||
|
|
9d2e0f688c | ||
|
|
3fa59b9b9c | ||
|
|
be88dbd361 | ||
|
|
ebe380a2fc | ||
|
|
48aba26aac | ||
|
|
dd85ddce20 | ||
|
|
fcf396ff91 | ||
|
|
17a9ae14bc | ||
|
|
5e1d54396d | ||
|
|
4d12984d52 | ||
|
|
eb931e2789 | ||
|
|
d313fc00b4 | ||
|
|
c09f82764a | ||
|
|
0cf9bdcfca | ||
|
|
7cd00f143b | ||
|
|
e672dd4628 | ||
|
|
237e486589 | ||
|
|
39e85d9a50 | ||
|
|
fa20da8fe4 | ||
|
|
4062d18270 | ||
|
|
0af5ec3758 | ||
|
|
0dde916ae5 | ||
|
|
d1fe7d2227 | ||
|
|
e1d9df224c | ||
|
|
7d2d5240bd | ||
|
|
19c8b0f01f | ||
|
|
baeabc03a3 | ||
|
|
f618fb2359 | ||
|
|
2120828e3b | ||
|
|
4286610961 | ||
|
|
217a6c03b2 | ||
|
|
e76893eaed | ||
|
|
8c3b2e7b9d | ||
|
|
ae3d1ccdef | ||
|
|
73e791475b | ||
|
|
90890e20c0 | ||
|
|
0fe5035395 | ||
|
|
f22baeb670 | ||
|
|
cd6e3d720f | ||
|
|
7152209fb5 | ||
|
|
51e31de79e | ||
|
|
fe3467e187 | ||
|
|
d0e24fca25 | ||
|
|
3483cd62d7 | ||
|
|
1ef8b47052 | ||
|
|
71c11496b7 | ||
|
|
bd5c8d7a92 | ||
|
|
52b5d8ab99 | ||
|
|
1329e22fce | ||
|
|
5b9fbb2e19 | ||
|
|
c0e51c8646 | ||
|
|
bf13656e44 | ||
|
|
c014819673 | ||
|
|
f0de0348d5 | ||
|
|
c5a820bd31 | ||
|
|
8255e4e8d2 | ||
|
|
8e03e1d4a9 | ||
|
|
0010d976c5 | ||
|
|
0c42bf5743 | ||
|
|
b293c3b23f | ||
|
|
bc7ab508b1 | ||
|
|
3d658dfa59 | ||
|
|
8b2496af1a | ||
|
|
43e449c8a7 | ||
|
|
14af0370d8 | ||
|
|
72115c1948 | ||
|
|
24874c6adc | ||
|
|
0fd7b33640 | ||
|
|
941965016e | ||
|
|
b88e1aba10 | ||
|
|
e95e6fac0d | ||
|
|
3eb1f02adb | ||
|
|
040e9c317e | ||
|
|
eddae27077 | ||
|
|
5e07ab9728 | ||
|
|
3e4c5dcc28 | ||
|
|
2f20dbea55 | ||
|
|
c9d026e19b | ||
|
|
65cd09ffaf | ||
|
|
c8dc8717a4 | ||
|
|
6e44a274e9 | ||
|
|
743fe6f4b4 | ||
|
|
bd81baaf04 | ||
|
|
6e1d940ef3 | ||
|
|
be69311692 | ||
|
|
fcf0c115cb | ||
|
|
4fad573746 | ||
|
|
c600be6439 | ||
|
|
a7ab89ee9e | ||
|
|
7930412006 | ||
|
|
8b38c78e94 | ||
|
|
f3a2c1dee7 | ||
|
|
50eb34423f | ||
|
|
03acaade4e | ||
|
|
532e5cc1f6 | ||
|
|
ae9f2df082 | ||
|
|
4507774c51 | ||
|
|
4f13824bc9 | ||
|
|
b184a5668b | ||
|
|
828d29526a | ||
|
|
b0614f80d7 | ||
|
|
cab11e6de0 | ||
|
|
d435ff9128 | ||
|
|
a6b34dca26 | ||
|
|
ec070e57e0 | ||
|
|
359cfecce0 | ||
|
|
6b79679e5b | ||
|
|
964c1a1df8 | ||
|
|
3b3f72e974 | ||
|
|
64fd436375 | ||
|
|
34045394e0 | ||
|
|
777d447018 | ||
|
|
e0d14a6d89 | ||
|
|
739df86774 | ||
|
|
9a087b9c56 | ||
|
|
8b3f2c5d7c | ||
|
|
ad9bf6b041 | ||
|
|
32822cd747 | ||
|
|
e1419b2fdf | ||
|
|
11c2b61011 | ||
|
|
6b458c78b0 | ||
|
|
77324ff514 | ||
|
|
63d1d9cb65 | ||
|
|
dd5bce17cb | ||
|
|
258a4a76cf | ||
|
|
f269ca1d93 | ||
|
|
7887395e92 | ||
|
|
9011532b2e | ||
|
|
afce3ce7c7 | ||
|
|
eb90fb3b9e | ||
|
|
6964b79e68 | ||
|
|
5bb1bb9b7a | ||
|
|
78cb71f7b1 | ||
|
|
c9474ef5da | ||
|
|
5244fcecd3 | ||
|
|
af5901bc6a | ||
|
|
4e6e77d696 | ||
|
|
9469efb4c9 | ||
|
|
8cbe09d412 | ||
|
|
e9cb85bea6 | ||
|
|
479caedc8a | ||
|
|
86d86768b3 | ||
|
|
bd0277923f | ||
|
|
dd8c3b8dd9 | ||
|
|
6074f7ed31 | ||
|
|
7b14a305f8 | ||
|
|
0646cbfba6 | ||
|
|
8af5c6d130 | ||
|
|
ac10ddaa48 | ||
|
|
fc9cda72d2 | ||
|
|
52a8d133cd | ||
|
|
e019b37231 | ||
|
|
c8788f8217 | ||
|
|
4d16326b4d | ||
|
|
5836ea1a78 | ||
|
|
d8cd86c4fa | ||
|
|
a44059aa05 | ||
|
|
73c1413374 | ||
|
|
ce2163da2f | ||
|
|
481f9b25a7 | ||
|
|
9ca68e2b8c | ||
|
|
9ef7ec02e5 | ||
|
|
e32e85abb2 | ||
|
|
6973af4f7a | ||
|
|
625d950e32 | ||
|
|
d62097e067 | ||
|
|
ad8f2f8d5d | ||
|
|
53cc8aef9b | ||
|
|
0ffafbc295 | ||
|
|
134176a1d1 | ||
|
|
d2bd4cf91c | ||
|
|
1af736bc15 | ||
|
|
f609d77e29 | ||
|
|
ae6d5c4661 | ||
|
|
cdcfe49592 | ||
|
|
d35b848f95 | ||
|
|
ff65b58e2c | ||
|
|
dddcc09185 | ||
|
|
8fa00dbe1a | ||
|
|
eda8205424 | ||
|
|
c4921d2592 | ||
|
|
723015db29 | ||
|
|
7d108a163f | ||
|
|
7f473f2fba | ||
|
|
95caa1f0bd | ||
|
|
45a7a5d22c | ||
|
|
3232505c55 | ||
|
|
b896dbb103 | ||
|
|
3ee3844bdb | ||
|
|
78ede09ecd | ||
|
|
5c92ea76e9 | ||
|
|
68869c18cd | ||
|
|
d3cfe7aacb | ||
|
|
753cf3d409 | ||
|
|
3a4664f836 | ||
|
|
948a28fdb8 | ||
|
|
48d4adedaa | ||
|
|
a27df94f71 | ||
|
|
888928887c | ||
|
|
4ee00641eb | ||
|
|
12bb7093e2 | ||
|
|
6b4f269d22 | ||
|
|
d11c840cf0 | ||
|
|
18bd295873 | ||
|
|
748f293400 | ||
|
|
7a04a77ed0 | ||
|
|
810a6d6ef4 | ||
|
|
27aea84411 | ||
|
|
2aa2611f76 | ||
|
|
57aeb9dfc6 | ||
|
|
454218bd2b | ||
|
|
c56673f83d | ||
|
|
87fc32f0aa | ||
|
|
c7380437aa | ||
|
|
511dece7ff | ||
|
|
12ce546ded | ||
|
|
67da1f2f9f | ||
|
|
8d9ed52c72 | ||
|
|
8d76b8dba9 | ||
|
|
6f68a40430 | ||
|
|
cf8a97a924 | ||
|
|
37a7cb2c11 | ||
|
|
d92770a275 | ||
|
|
60264f30d8 | ||
|
|
b31a4dcdf3 | ||
|
|
1d3200d7da | ||
|
|
bf10a437bc | ||
|
|
60247e685d | ||
|
|
5d340577b6 | ||
|
|
40316df338 | ||
|
|
e92eb210bb | ||
|
|
f30c9120a1 | ||
|
|
986a621bfc | ||
|
|
6172e1d2b9 | ||
|
|
0ee624c308 | ||
|
|
d8e46cdd50 | ||
|
|
bcf948595d | ||
|
|
66fa1f4665 | ||
|
|
1fcd981e5e | ||
|
|
9a3618e912 | ||
|
|
d55e120038 | ||
|
|
26d6f62c01 | ||
|
|
d769f1ea71 | ||
|
|
f08c6f2e85 | ||
|
|
824b1aeb71 | ||
|
|
ddc19e3ea0 | ||
|
|
d9aa185ec5 | ||
|
|
3169351511 | ||
|
|
75ce3ac6a2 | ||
|
|
656a86169a | ||
|
|
e08be7d8ce | ||
|
|
150d332f10 | ||
|
|
85bac873e7 | ||
|
|
706d416284 | ||
|
|
0a1e906aa8 | ||
|
|
cd944384e2 | ||
|
|
dbd7840254 | ||
|
|
6263a39d9a | ||
|
|
5134328872 | ||
|
|
2d240453de |
@@ -1,5 +1,4 @@
|
|||||||
{
|
{
|
||||||
"name": "Electron Core Development Environment",
|
|
||||||
"dockerComposeFile": "docker-compose.yml",
|
"dockerComposeFile": "docker-compose.yml",
|
||||||
"service": "buildtools",
|
"service": "buildtools",
|
||||||
"onCreateCommand": ".devcontainer/on-create-command.sh",
|
"onCreateCommand": ".devcontainer/on-create-command.sh",
|
||||||
@@ -34,15 +33,27 @@
|
|||||||
"surajbarkale.ninja",
|
"surajbarkale.ninja",
|
||||||
"ms-vscode.cpptools",
|
"ms-vscode.cpptools",
|
||||||
"mutantdino.resourcemonitor",
|
"mutantdino.resourcemonitor",
|
||||||
"dsanders11.vscode-electron-build-tools",
|
|
||||||
"dbaeumer.vscode-eslint",
|
"dbaeumer.vscode-eslint",
|
||||||
"shakram02.bash-beautify",
|
"shakram02.bash-beautify",
|
||||||
"marshallofsound.gnls-electron"
|
"marshallofsound.gnls-electron",
|
||||||
],
|
],
|
||||||
"settings": {
|
"settings": {
|
||||||
"editor.tabSize": 2,
|
"editor.tabSize": 2,
|
||||||
"bashBeautify.tabSize": 2,
|
"bashBeautify.tabSize": 2,
|
||||||
"typescript.tsdk": "node_modules/typescript/lib",
|
"typescript.tsdk": "node_modules/typescript/lib",
|
||||||
|
"[gn]": {
|
||||||
|
"editor.formatOnSave": true
|
||||||
|
},
|
||||||
|
"[javascript]": {
|
||||||
|
"editor.codeActionsOnSave": {
|
||||||
|
"source.fixAll.eslint": true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"[typescript]": {
|
||||||
|
"editor.codeActionsOnSave": {
|
||||||
|
"source.fixAll.eslint": true
|
||||||
|
}
|
||||||
|
},
|
||||||
"javascript.preferences.quoteStyle": "single",
|
"javascript.preferences.quoteStyle": "single",
|
||||||
"typescript.preferences.quoteStyle": "single"
|
"typescript.preferences.quoteStyle": "single"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ version: '3'
|
|||||||
|
|
||||||
services:
|
services:
|
||||||
buildtools:
|
buildtools:
|
||||||
image: ghcr.io/electron/devcontainer:a82b87d7a4f5ff0cab61405f8151ac4cf4942aeb
|
image: ghcr.io/electron/devcontainer:77262e58c37631ab082482f42c33cdf68c6c394b
|
||||||
|
|
||||||
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
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
# These env vars are only necessary for creating Electron releases.
|
# These env vars are only necessary for creating Electron releases.
|
||||||
# See docs/development/releasing.md
|
# See docs/development/releasing.md
|
||||||
|
|
||||||
|
APPVEYOR_CLOUD_TOKEN=
|
||||||
ELECTRON_GITHUB_TOKEN=
|
ELECTRON_GITHUB_TOKEN=
|
||||||
|
|||||||
9
.github/CODEOWNERS
vendored
9
.github/CODEOWNERS
vendored
@@ -11,15 +11,12 @@ DEPS @electron/wg-upgrades
|
|||||||
/docs/breaking-changes.md @electron/wg-releases
|
/docs/breaking-changes.md @electron/wg-releases
|
||||||
/npm/ @electron/wg-releases
|
/npm/ @electron/wg-releases
|
||||||
/script/release @electron/wg-releases
|
/script/release @electron/wg-releases
|
||||||
|
appveyor.yml @electron/wg-releases
|
||||||
|
appveyor-bake.yml @electron/wg-releases
|
||||||
|
appveyor-woa.yml @electron/wg-releases
|
||||||
|
|
||||||
# Security WG
|
# Security WG
|
||||||
/lib/browser/devtools.ts @electron/wg-security
|
/lib/browser/devtools.ts @electron/wg-security
|
||||||
/lib/browser/guest-view-manager.ts @electron/wg-security
|
/lib/browser/guest-view-manager.ts @electron/wg-security
|
||||||
/lib/browser/rpc-server.ts @electron/wg-security
|
/lib/browser/rpc-server.ts @electron/wg-security
|
||||||
/lib/renderer/security-warnings.ts @electron/wg-security
|
/lib/renderer/security-warnings.ts @electron/wg-security
|
||||||
|
|
||||||
# Infra WG
|
|
||||||
/.github/actions/ @electron/wg-infra
|
|
||||||
/.github/workflows/*-publish.yml @electron/wg-infra
|
|
||||||
/.github/workflows/build.yml @electron/wg-infra
|
|
||||||
/.github/workflows/pipeline-*.yml @electron/wg-infra
|
|
||||||
|
|||||||
6
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
6
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
@@ -1,6 +1,6 @@
|
|||||||
name: Bug Report
|
name: Bug Report
|
||||||
description: Report a bug in Electron
|
description: Report an Electron bug
|
||||||
type: 'bug'
|
title: "[Bug]: "
|
||||||
labels: "bug :beetle:"
|
labels: "bug :beetle:"
|
||||||
body:
|
body:
|
||||||
- type: checkboxes
|
- type: checkboxes
|
||||||
@@ -73,7 +73,7 @@ body:
|
|||||||
- type: input
|
- type: input
|
||||||
attributes:
|
attributes:
|
||||||
label: Testcase Gist URL
|
label: Testcase Gist URL
|
||||||
description: Electron maintainers need a standalone test case to reproduce and fix your issue. Please use [Electron Fiddle](https://github.com/electron/fiddle) to create one and to publish it as a [GitHub gist](https://gist.github.com). Then put the gist URL here. Issues without testcase gists receive less attention and might be closed without a maintainer taking a closer look. To maximize how much attention your issue receives, please include a testcase gist right from the start.
|
description: If you can reproduce the issue in a standalone test case, please use [Electron Fiddle](https://github.com/electron/fiddle) to create one and to publish it as a [GitHub gist](https://gist.github.com) and put the gist URL here. This is **the best way** to ensure this issue is triaged quickly.
|
||||||
placeholder: https://gist.github.com/...
|
placeholder: https://gist.github.com/...
|
||||||
- type: textarea
|
- type: textarea
|
||||||
attributes:
|
attributes:
|
||||||
|
|||||||
1
.github/ISSUE_TEMPLATE/config.yml
vendored
1
.github/ISSUE_TEMPLATE/config.yml
vendored
@@ -1,4 +1,3 @@
|
|||||||
blank_issues_enabled: false
|
|
||||||
contact_links:
|
contact_links:
|
||||||
- name: Discord Chat
|
- name: Discord Chat
|
||||||
url: https://discord.gg/APGC3k5yaH
|
url: https://discord.gg/APGC3k5yaH
|
||||||
|
|||||||
2
.github/ISSUE_TEMPLATE/feature_request.yml
vendored
2
.github/ISSUE_TEMPLATE/feature_request.yml
vendored
@@ -1,6 +1,6 @@
|
|||||||
name: Feature Request
|
name: Feature Request
|
||||||
description: Suggest an idea for Electron
|
description: Suggest an idea for Electron
|
||||||
type: 'enhancement'
|
title: "[Feature Request]: "
|
||||||
labels: "enhancement :sparkles:"
|
labels: "enhancement :sparkles:"
|
||||||
body:
|
body:
|
||||||
- type: checkboxes
|
- type: checkboxes
|
||||||
|
|||||||
14
.github/ISSUE_TEMPLATE/maintainer_issue.yml
vendored
14
.github/ISSUE_TEMPLATE/maintainer_issue.yml
vendored
@@ -1,14 +0,0 @@
|
|||||||
name: Maintainer Issue (not for public use)
|
|
||||||
description: Only to be created by Electron maintainers
|
|
||||||
body:
|
|
||||||
- type: checkboxes
|
|
||||||
attributes:
|
|
||||||
label: Confirmation
|
|
||||||
options:
|
|
||||||
- label: I am a [maintainer](https://github.com/orgs/electron/people) of the Electron project. (If not, please create a [different issue type](https://github.com/electron/electron/issues/new/).)
|
|
||||||
required: true
|
|
||||||
- type: textarea
|
|
||||||
attributes:
|
|
||||||
label: Description
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
2
.github/PULL_REQUEST_TEMPLATE.md
vendored
2
.github/PULL_REQUEST_TEMPLATE.md
vendored
@@ -13,7 +13,7 @@ Contributors guide: https://github.com/electron/electron/blob/main/CONTRIBUTING.
|
|||||||
- [ ] PR description included and stakeholders cc'd
|
- [ ] PR description included and stakeholders cc'd
|
||||||
- [ ] `npm test` passes
|
- [ ] `npm test` passes
|
||||||
- [ ] tests are [changed or added](https://github.com/electron/electron/blob/main/docs/development/testing.md)
|
- [ ] tests are [changed or added](https://github.com/electron/electron/blob/main/docs/development/testing.md)
|
||||||
- [ ] relevant API documentation, tutorials, and examples are updated and follow the [documentation style guide](https://github.com/electron/electron/blob/main/docs/development/style-guide.md)
|
- [ ] relevant documentation, tutorials, templates and examples are changed or added
|
||||||
- [ ] [PR release notes](https://github.com/electron/clerk/blob/main/README.md) describe the change in a way relevant to app developers, and are [capitalized, punctuated, and past tense](https://github.com/electron/clerk/blob/main/README.md#examples).
|
- [ ] [PR release notes](https://github.com/electron/clerk/blob/main/README.md) describe the change in a way relevant to app developers, and are [capitalized, punctuated, and past tense](https://github.com/electron/clerk/blob/main/README.md#examples).
|
||||||
|
|
||||||
#### Release Notes
|
#### Release Notes
|
||||||
|
|||||||
118
.github/actions/build-electron/action.yml
vendored
118
.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,15 +38,6 @@ 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
|
|
||||||
shell: bash
|
|
||||||
run: echo "::add-matcher::src/electron/.github/problem-matchers/clang.json"
|
|
||||||
- name: Build Electron ${{ inputs.step-suffix }}
|
- name: Build Electron ${{ inputs.step-suffix }}
|
||||||
shell: bash
|
shell: bash
|
||||||
run: |
|
run: |
|
||||||
@@ -60,24 +54,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
|
run: |
|
||||||
else
|
cd src
|
||||||
echo "Skipping build-stats.mjs upload because DD_API_KEY is not set"
|
electron/script/copy-debug-symbols.py --target-cpu="${{ inputs.target-arch }}" --out-dir=out/Default/debug --compress
|
||||||
fi
|
electron/script/strip-binaries.py --target-cpu="${{ inputs.target-arch }}" --verbose
|
||||||
- name: Verify dist.zip ${{ inputs.step-suffix }}
|
electron/script/add-debug-link.py --target-cpu="${{ inputs.target-arch }}" --debug-dir=out/Default/debug
|
||||||
|
- name: Build Electron 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
|
||||||
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
|
||||||
@@ -85,10 +77,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"
|
||||||
@@ -98,6 +91,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
|
||||||
@@ -131,7 +138,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 }}
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
cd src
|
||||||
|
e build --target electron:node_headers
|
||||||
- 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' }}
|
||||||
@@ -151,11 +164,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
|
||||||
@@ -166,21 +185,29 @@ 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: Remove Clang problem matcher
|
- name: Generate Hunspell Dictionaries ${{ inputs.step-suffix }}
|
||||||
shell: bash
|
shell: bash
|
||||||
run: echo "::remove-matcher owner=clang::"
|
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: Generate TypeScript Definitions ${{ inputs.step-suffix }}
|
- name: Generate TypeScript Definitions ${{ inputs.step-suffix }}
|
||||||
if: ${{ inputs.is-release == 'true' }}
|
if: ${{ inputs.is-release == 'true' }}
|
||||||
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
|
||||||
id: github-upload
|
|
||||||
run: |
|
run: |
|
||||||
rm -rf src/out/Default/obj
|
rm -rf src/out/Default/obj
|
||||||
cd src/electron
|
cd src/electron
|
||||||
@@ -191,34 +218,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 artifact attestation
|
|
||||||
if: ${{ inputs.is-release == 'true' }}
|
|
||||||
uses: actions/attest-build-provenance@96278af6caaf10aea03fd8d33a09a777ca52d62f # v3.2.0
|
|
||||||
with:
|
|
||||||
subject-path: ${{ steps.github-upload.outputs.UPLOADED_PATHS }}
|
|
||||||
- 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
|
||||||
@@ -230,11 +230,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
|
|
||||||
103
.github/actions/checkout/action.yml
vendored
103
.github/actions/checkout/action.yml
vendored
@@ -9,8 +9,6 @@ inputs:
|
|||||||
description: 'Whether to persist the cache to the shared drive'
|
description: 'Whether to persist the cache to the shared drive'
|
||||||
required: false
|
required: false
|
||||||
default: 'true'
|
default: 'true'
|
||||||
target-platform:
|
|
||||||
description: 'Target platform, should be linux, win, macos'
|
|
||||||
runs:
|
runs:
|
||||||
using: "composite"
|
using: "composite"
|
||||||
steps:
|
steps:
|
||||||
@@ -20,34 +18,40 @@ 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
|
|
||||||
uses: ./src/electron/.github/actions/set-chromium-cookie
|
|
||||||
- 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: Set Chromium Git Cookie
|
||||||
|
uses: ./src/electron/.github/actions/set-chromium-cookie
|
||||||
|
- name: Get Depot Tools
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
if [[ ! -d depot_tools ]]; then
|
||||||
|
git clone --depth=1 https://chromium.googlesource.com/chromium/tools/depot_tools.git
|
||||||
|
|
||||||
|
# Ensure depot_tools does not update.
|
||||||
|
test -d depot_tools && cd depot_tools
|
||||||
|
touch .disable_auto_update
|
||||||
|
fi
|
||||||
|
- name: Add Depot Tools to PATH
|
||||||
|
shell: bash
|
||||||
|
run: echo "$(pwd)/depot_tools" >> $GITHUB_PATH
|
||||||
- name: Generate DEPS Hash
|
- name: Generate DEPS Hash
|
||||||
shell: bash
|
shell: bash
|
||||||
run: |
|
run: |
|
||||||
node src/electron/script/generate-deps-hash.js
|
node src/electron/script/generate-deps-hash.js
|
||||||
DEPSHASH="v1-src-cache-$(cat src/electron/.depshash)"
|
echo "DEPSHASH=v1-src-cache-$(cat src/electron/.depshash)" >> $GITHUB_ENV
|
||||||
echo "DEPSHASH=$DEPSHASH" >> $GITHUB_ENV
|
|
||||||
echo "CACHE_FILE=$DEPSHASH.tar" >> $GITHUB_ENV
|
|
||||||
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: Generate SAS Key
|
- name: Generate SAS Key
|
||||||
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/$DEPSHASH.tar" > 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@1bd1e32a3bdc45362d1e726936510720a7c30a57
|
||||||
with:
|
with:
|
||||||
path: sas-token
|
path: |
|
||||||
key: sas-key-${{ inputs.target-platform }}-${{ github.run_number }}-${{ github.run_attempt }}
|
sas-token
|
||||||
enableCrossOsArchive: true
|
key: sas-key-${{ github.run_number }}-${{ github.run_attempt }}
|
||||||
- name: Check If Cache Exists
|
- name: Check If Cache Exists
|
||||||
id: check-cache
|
id: check-cache
|
||||||
shell: bash
|
shell: bash
|
||||||
@@ -56,7 +60,7 @@ runs:
|
|||||||
echo "Not using cache this time..."
|
echo "Not using cache this time..."
|
||||||
echo "cache_exists=false" >> $GITHUB_OUTPUT
|
echo "cache_exists=false" >> $GITHUB_OUTPUT
|
||||||
else
|
else
|
||||||
cache_path=$CACHE_DRIVE/$CACHE_FILE
|
cache_path=/mnt/cross-instance-cache/$DEPSHASH.tar
|
||||||
echo "Using cache key: $DEPSHASH"
|
echo "Using cache key: $DEPSHASH"
|
||||||
echo "Checking for cache in: $cache_path"
|
echo "Checking for cache in: $cache_path"
|
||||||
if [ ! -f "$cache_path" ] || [ `du $cache_path | cut -f1` = "0" ]; then
|
if [ ! -f "$cache_path" ] || [ `du $cache_path | cut -f1` = "0" ]; then
|
||||||
@@ -72,29 +76,14 @@ runs:
|
|||||||
shell: bash
|
shell: bash
|
||||||
run: |
|
run: |
|
||||||
# if there is less than 35 GB free space then creating the cache might fail so exit early
|
# 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=`df -m /mnt/cross-instance-cache | grep -w /mnt/cross-instance-cache | awk '{print $4}'`
|
||||||
freespace_human=`df -h $CACHE_DRIVE | grep -w $CACHE_DRIVE | awk '{print $4}'`
|
freespace_human=`df -h /mnt/cross-instance-cache | grep -w /mnt/cross-instance-cache | awk '{print $4}'`
|
||||||
if [ $freespace -le 35000 ]; then
|
if [ $freespace -le 35000 ]; then
|
||||||
echo "The cross mount cache has $freespace_human free space which is not enough - exiting"
|
echo "The cross mount cache has $freespace_human free space which is not enough - exiting"
|
||||||
exit 1
|
exit 1
|
||||||
else
|
else
|
||||||
echo "The cross mount cache has $freespace_human free space - continuing"
|
echo "The cross mount cache has $freespace_human free space - continuing"
|
||||||
fi
|
fi
|
||||||
- name: Add patch conflict problem matcher
|
|
||||||
shell: bash
|
|
||||||
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
|
||||||
@@ -110,14 +99,19 @@ runs:
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
ELECTRON_USE_THREE_WAY_MERGE_FOR_PATCHES=1 e d gclient sync --with_branch_heads --with_tags -vv
|
ELECTRON_USE_THREE_WAY_MERGE_FOR_PATCHES=1 e d gclient sync --with_branch_heads --with_tags -vv
|
||||||
if [[ "${{ inputs.is-release }}" != "true" ]]; then
|
if [ "${{ inputs.is-release }}" != "true" && -n "${{ env.PATCH_UP_APP_CREDS }}" ]; then
|
||||||
# Re-export all the patches to check if there were changes.
|
# Re-export all the patches to check if there were changes.
|
||||||
python3 src/electron/script/export_all_patches.py src/electron/patches/config.json
|
python3 src/electron/script/export_all_patches.py src/electron/patches/config.json
|
||||||
cd src/electron
|
cd src/electron
|
||||||
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 +119,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."
|
||||||
@@ -139,21 +128,9 @@ runs:
|
|||||||
cat ../../patches/update-patches.patch
|
cat ../../patches/update-patches.patch
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
else
|
|
||||||
echo "No changes to patches detected"
|
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
- name: Remove patch conflict problem matchers
|
|
||||||
shell: bash
|
|
||||||
run: |
|
|
||||||
echo "::remove-matcher owner=merge-conflict::"
|
|
||||||
echo "::remove-matcher owner=patch-conflict::"
|
|
||||||
echo "::remove-matcher owner=patch-needs-update::"
|
|
||||||
- name: Upload patches stats
|
|
||||||
if: ${{ inputs.target-platform == 'linux' && github.ref == 'refs/heads/main' }}
|
|
||||||
shell: bash
|
|
||||||
run: |
|
|
||||||
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
|
||||||
@@ -188,14 +165,14 @@ runs:
|
|||||||
shell: bash
|
shell: bash
|
||||||
run: |
|
run: |
|
||||||
echo "Uncompressed src size: $(du -sh src | cut -f1 -d' ')"
|
echo "Uncompressed src size: $(du -sh src | cut -f1 -d' ')"
|
||||||
tar -cf $CACHE_FILE src
|
tar -cf $DEPSHASH.tar src
|
||||||
echo "Compressed src to $(du -sh $CACHE_FILE | cut -f1 -d' ')"
|
echo "Compressed src to $(du -sh $DEPSHASH.tar | cut -f1 -d' ')"
|
||||||
cp ./$CACHE_FILE $CACHE_DRIVE/
|
cp ./$DEPSHASH.tar /mnt/cross-instance-cache/
|
||||||
- name: Persist Src Cache
|
- name: Persist Src Cache
|
||||||
if: ${{ steps.check-cache.outputs.cache_exists == 'false' && inputs.use-cache == 'true' }}
|
if: ${{ steps.check-cache.outputs.cache_exists == 'false' && inputs.use-cache == 'true' }}
|
||||||
shell: bash
|
shell: bash
|
||||||
run: |
|
run: |
|
||||||
final_cache_path=$CACHE_DRIVE/$CACHE_FILE
|
final_cache_path=/mnt/cross-instance-cache/$DEPSHASH.tar
|
||||||
echo "Using cache key: $DEPSHASH"
|
echo "Using cache key: $DEPSHASH"
|
||||||
echo "Checking path: $final_cache_path"
|
echo "Checking path: $final_cache_path"
|
||||||
if [ ! -f "$final_cache_path" ]; then
|
if [ ! -f "$final_cache_path" ]; then
|
||||||
@@ -204,11 +181,3 @@ runs:
|
|||||||
else
|
else
|
||||||
echo "Cache key persisted in $final_cache_path"
|
echo "Cache key persisted in $final_cache_path"
|
||||||
fi
|
fi
|
||||||
- name: Wait for active SSH sessions
|
|
||||||
shell: bash
|
|
||||||
if: always() && !cancelled()
|
|
||||||
run: |
|
|
||||||
while [ -f /var/.ssh-lock ]
|
|
||||||
do
|
|
||||||
sleep 60
|
|
||||||
done
|
|
||||||
|
|||||||
51
.github/actions/cipd-install/action.yml
vendored
51
.github/actions/cipd-install/action.yml
vendored
@@ -1,51 +0,0 @@
|
|||||||
name: 'CIPD install'
|
|
||||||
description: 'Installs the specified CIPD package'
|
|
||||||
inputs:
|
|
||||||
cipd-root-prefix-path:
|
|
||||||
description: 'Path to prepend to installation directory'
|
|
||||||
default: ''
|
|
||||||
dependency:
|
|
||||||
description: 'Name of dependency to install'
|
|
||||||
deps-file:
|
|
||||||
description: 'Location of DEPS file that defines the dependency'
|
|
||||||
installation-dir:
|
|
||||||
description: 'Location to install dependency'
|
|
||||||
target-platform:
|
|
||||||
description: 'Target platform, should be linux, win, macos'
|
|
||||||
package:
|
|
||||||
description: 'Package to install'
|
|
||||||
dependency-version:
|
|
||||||
description: 'Version of the dependency to install'
|
|
||||||
default: ''
|
|
||||||
runs:
|
|
||||||
using: "composite"
|
|
||||||
steps:
|
|
||||||
- name: Delete wrong ${{ inputs.dependency }}
|
|
||||||
shell: bash
|
|
||||||
run : |
|
|
||||||
rm -rf ${{ inputs.cipd-root-prefix-path }}${{ inputs.installation-dir }}
|
|
||||||
- name: Create ensure file for ${{ inputs.dependency }}
|
|
||||||
if: ${{ inputs.dependency-version == '' }}
|
|
||||||
shell: bash
|
|
||||||
run: |
|
|
||||||
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
|
|
||||||
|
|
||||||
- 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)
|
|
||||||
if: ${{ inputs.target-platform != 'win' }}
|
|
||||||
shell: bash
|
|
||||||
run: |
|
|
||||||
echo "ensuring ${{ inputs.dependency }}"
|
|
||||||
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)
|
|
||||||
if: ${{ inputs.target-platform == 'win' }}
|
|
||||||
shell: powershell
|
|
||||||
run: |
|
|
||||||
echo "ensuring ${{ inputs.dependency }} on Windows"
|
|
||||||
e d cipd ensure --root ${{ inputs.cipd-root-prefix-path }}${{ inputs.installation-dir }} -ensure-file ${{ inputs.dependency }}_ensure_file
|
|
||||||
61
.github/actions/fix-sync-macos/action.yml
vendored
Normal file
61
.github/actions/fix-sync-macos/action.yml
vendored
Normal file
@@ -0,0 +1,61 @@
|
|||||||
|
name: 'Fix Sync macOS'
|
||||||
|
description: 'Checks out Electron and stores it in the AKS Cache'
|
||||||
|
runs:
|
||||||
|
using: "composite"
|
||||||
|
steps:
|
||||||
|
- name: Fix Sync
|
||||||
|
shell: bash
|
||||||
|
# This step is required to correct for differences between "gclient sync"
|
||||||
|
# on Linux and the expected state on macOS. This requires:
|
||||||
|
# 1. Fixing Clang Install (wrong binary)
|
||||||
|
# 2. Fixing esbuild (wrong binary)
|
||||||
|
# 3. Fixing rustc (wrong binary)
|
||||||
|
# 4. Fixing gn (wrong binary)
|
||||||
|
# 5. Fix reclient (wrong binary)
|
||||||
|
# 6. Fixing dsymutil (wrong binary)
|
||||||
|
# 7. Ensuring we are using the correct ninja and adding it to PATH
|
||||||
|
# 8. Fixing angle (wrong remote)
|
||||||
|
run : |
|
||||||
|
SEDOPTION="-i ''"
|
||||||
|
rm -rf src/third_party/llvm-build
|
||||||
|
python3 src/tools/clang/scripts/update.py
|
||||||
|
|
||||||
|
echo 'infra/3pp/tools/esbuild/${platform}' `gclient getdep --deps-file=src/third_party/devtools-frontend/src/DEPS -r 'third_party/esbuild:infra/3pp/tools/esbuild/${platform}'` > esbuild_ensure_file
|
||||||
|
# Remove extra output from calling gclient getdep which always calls update_depot_tools
|
||||||
|
sed -i '' "s/Updating depot_tools... //g" esbuild_ensure_file
|
||||||
|
cipd ensure --root src/third_party/devtools-frontend/src/third_party/esbuild -ensure-file esbuild_ensure_file
|
||||||
|
|
||||||
|
rm -rf src/third_party/rust-toolchain
|
||||||
|
python3 src/tools/rust/update_rust.py
|
||||||
|
|
||||||
|
# Prevent calling gclient getdep which always calls update_depot_tools
|
||||||
|
echo 'gn/gn/mac-${arch}' `gclient getdep --deps-file=src/DEPS -r 'src/buildtools/mac:gn/gn/mac-${arch}'` > gn_ensure_file
|
||||||
|
sed -i '' "s/Updating depot_tools... //g" gn_ensure_file
|
||||||
|
cipd ensure --root src/buildtools/mac -ensure-file gn_ensure_file
|
||||||
|
|
||||||
|
# Prevent calling gclient getdep which always calls update_depot_tools
|
||||||
|
echo 'infra/rbe/client/${platform}' `gclient getdep --deps-file=src/DEPS -r 'src/buildtools/reclient:infra/rbe/client/${platform}'` > gn_ensure_file
|
||||||
|
sed -i '' "s/Updating depot_tools... //g" gn_ensure_file
|
||||||
|
cipd ensure --root src/buildtools/reclient -ensure-file gn_ensure_file
|
||||||
|
python3 src/buildtools/reclient_cfgs/configure_reclient_cfgs.py --rbe_instance "projects/rbe-chrome-untrusted/instances/default_instance" --reproxy_cfg_template reproxy.cfg.template --rewrapper_cfg_project "" --skip_remoteexec_cfg_fetch
|
||||||
|
|
||||||
|
if [ "${{ env.TARGET_ARCH }}" == "arm64" ]; then
|
||||||
|
DSYM_SHA_FILE=src/tools/clang/dsymutil/bin/dsymutil.arm64.sha1
|
||||||
|
else
|
||||||
|
DSYM_SHA_FILE=src/tools/clang/dsymutil/bin/dsymutil.x64.sha1
|
||||||
|
fi
|
||||||
|
python3 src/third_party/depot_tools/download_from_google_storage.py --no_resume --no_auth --bucket chromium-browser-clang -s $DSYM_SHA_FILE -o src/tools/clang/dsymutil/bin/dsymutil
|
||||||
|
|
||||||
|
echo 'infra/3pp/tools/ninja/${platform}' `gclient getdep --deps-file=src/DEPS -r 'src/third_party/ninja:infra/3pp/tools/ninja/${platform}'` > ninja_ensure_file
|
||||||
|
sed $SEDOPTION "s/Updating depot_tools... //g" ninja_ensure_file
|
||||||
|
cipd ensure --root src/third_party/ninja -ensure-file ninja_ensure_file
|
||||||
|
|
||||||
|
echo "$(pwd)/src/third_party/ninja" >> $GITHUB_PATH
|
||||||
|
|
||||||
|
cd src/third_party/angle
|
||||||
|
rm -f .git/objects/info/alternates
|
||||||
|
git remote set-url origin https://chromium.googlesource.com/angle/angle.git
|
||||||
|
cp .git/config .git/config.backup
|
||||||
|
git remote remove origin
|
||||||
|
mv .git/config.backup .git/config
|
||||||
|
git fetch
|
||||||
138
.github/actions/fix-sync/action.yml
vendored
138
.github/actions/fix-sync/action.yml
vendored
@@ -1,138 +0,0 @@
|
|||||||
name: 'Fix Sync'
|
|
||||||
description: 'Ensures proper binaries are in place'
|
|
||||||
# This action is required to correct for differences between "gclient sync"
|
|
||||||
# on Linux and the expected state on macOS/windows. This requires:
|
|
||||||
# 1. Fixing Clang Install (wrong binary)
|
|
||||||
# 2. Fixing esbuild (wrong binary)
|
|
||||||
# 3. Fixing rustc (wrong binary)
|
|
||||||
# 4. Fixing gn (wrong binary)
|
|
||||||
# 5. Fix reclient (wrong binary)
|
|
||||||
# 6. Fixing dsymutil (wrong binary)
|
|
||||||
# 7. Ensuring we are using the correct ninja and adding it to PATH
|
|
||||||
# 8. Fixing angle (wrong remote)
|
|
||||||
# 9. Install windows toolchain on Windows
|
|
||||||
# 10. Fix node binary on Windows
|
|
||||||
# 11. Fix rc binary on Windows
|
|
||||||
inputs:
|
|
||||||
target-platform:
|
|
||||||
description: 'Target platform, should be linux, win, macos'
|
|
||||||
runs:
|
|
||||||
using: "composite"
|
|
||||||
steps:
|
|
||||||
- name: Fix llvm toolchain
|
|
||||||
if: ${{ inputs.target-platform != 'linux' }}
|
|
||||||
shell: bash
|
|
||||||
run : |
|
|
||||||
rm -rf src/third_party/llvm-build
|
|
||||||
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
|
|
||||||
if: ${{ inputs.target-platform != 'linux' }}
|
|
||||||
uses: ./src/electron/.github/actions/cipd-install
|
|
||||||
with:
|
|
||||||
cipd-root-prefix-path: src/third_party/devtools-frontend/src/
|
|
||||||
dependency: esbuild
|
|
||||||
deps-file: src/third_party/devtools-frontend/src/DEPS
|
|
||||||
installation-dir: third_party/esbuild
|
|
||||||
target-platform: ${{ inputs.target-platform }}
|
|
||||||
package: infra/3pp/tools/esbuild/${platform}
|
|
||||||
- name: Fix rustc
|
|
||||||
if: ${{ inputs.target-platform != 'linux' }}
|
|
||||||
shell: bash
|
|
||||||
run : |
|
|
||||||
rm -rf src/third_party/rust-toolchain
|
|
||||||
python3 src/tools/rust/update_rust.py
|
|
||||||
- name: Fix gn (macOS)
|
|
||||||
if: ${{ inputs.target-platform == 'macos' }}
|
|
||||||
uses: ./src/electron/.github/actions/cipd-install
|
|
||||||
with:
|
|
||||||
dependency: gn
|
|
||||||
deps-file: src/DEPS
|
|
||||||
installation-dir: src/buildtools/mac
|
|
||||||
target-platform: ${{ inputs.target-platform }}
|
|
||||||
package: gn/gn/mac-${arch}
|
|
||||||
- name: Fix gn (Windows)
|
|
||||||
if: ${{ inputs.target-platform == 'win' }}
|
|
||||||
uses: ./src/electron/.github/actions/cipd-install
|
|
||||||
with:
|
|
||||||
dependency: gn
|
|
||||||
deps-file: src/DEPS
|
|
||||||
installation-dir: src/buildtools/win
|
|
||||||
target-platform: ${{ inputs.target-platform }}
|
|
||||||
package: gn/gn/windows-amd64
|
|
||||||
- name: Fix reclient
|
|
||||||
if: ${{ inputs.target-platform != 'linux' }}
|
|
||||||
uses: ./src/electron/.github/actions/cipd-install
|
|
||||||
with:
|
|
||||||
dependency: reclient
|
|
||||||
deps-file: src/DEPS
|
|
||||||
installation-dir: src/buildtools/reclient
|
|
||||||
target-platform: ${{ inputs.target-platform }}
|
|
||||||
package: infra/rbe/client/${platform}
|
|
||||||
- name: Configure reclient configs
|
|
||||||
if: ${{ inputs.target-platform != 'linux' }}
|
|
||||||
shell: bash
|
|
||||||
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
|
|
||||||
- name: Fix dsymutil (macOS)
|
|
||||||
if: ${{ inputs.target-platform == 'macos' }}
|
|
||||||
shell: bash
|
|
||||||
run : |
|
|
||||||
# Fix dsymutil
|
|
||||||
if [ "${{ inputs.target-platform }}" = "macos" ]; then
|
|
||||||
if [ "${{ env.TARGET_ARCH }}" == "arm64" ]; then
|
|
||||||
DSYM_SHA_FILE=src/tools/clang/dsymutil/bin/dsymutil.arm64.sha1
|
|
||||||
else
|
|
||||||
DSYM_SHA_FILE=src/tools/clang/dsymutil/bin/dsymutil.x64.sha1
|
|
||||||
fi
|
|
||||||
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
|
|
||||||
- name: Fix ninja
|
|
||||||
if: ${{ inputs.target-platform != 'linux' }}
|
|
||||||
uses: ./src/electron/.github/actions/cipd-install
|
|
||||||
with:
|
|
||||||
dependency: ninja
|
|
||||||
deps-file: src/DEPS
|
|
||||||
installation-dir: src/third_party/ninja
|
|
||||||
target-platform: ${{ inputs.target-platform }}
|
|
||||||
package: infra/3pp/tools/ninja/${platform}
|
|
||||||
- name: Set ninja in path
|
|
||||||
if: ${{ inputs.target-platform != 'linux' }}
|
|
||||||
shell: bash
|
|
||||||
run : |
|
|
||||||
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
|
|
||||||
if: ${{ inputs.target-platform != 'linux' }}
|
|
||||||
shell: bash
|
|
||||||
run : |
|
|
||||||
cd src/third_party/angle
|
|
||||||
rm -f .git/objects/info/alternates
|
|
||||||
git remote set-url origin https://chromium.googlesource.com/angle/angle.git
|
|
||||||
cp .git/config .git/config.backup
|
|
||||||
git remote remove origin
|
|
||||||
mv .git/config.backup .git/config
|
|
||||||
git fetch
|
|
||||||
- name: Get Windows toolchain
|
|
||||||
if: ${{ inputs.target-platform == 'win' }}
|
|
||||||
shell: powershell
|
|
||||||
run: e d vpython3 src\build\vs_toolchain.py update --force
|
|
||||||
- name: Download nodejs
|
|
||||||
if: ${{ inputs.target-platform == 'win' }}
|
|
||||||
shell: powershell
|
|
||||||
run: |
|
|
||||||
$nodedeps = e d gclient getdep --deps-file=src/DEPS -r src/third_party/node/win | ConvertFrom-JSON
|
|
||||||
python3 src\third_party\depot_tools\download_from_google_storage.py --no_resume --no_auth --bucket chromium-nodejs -o src\third_party\node\win\node.exe $nodedeps.object_name
|
|
||||||
- name: Install rc
|
|
||||||
if: ${{ inputs.target-platform == 'win' }}
|
|
||||||
shell: bash
|
|
||||||
run: |
|
|
||||||
python3 src/third_party/depot_tools/download_from_google_storage.py --no_resume --no_auth --bucket chromium-browser-clang/rc -s src/build/toolchain/win/rc/win/rc.exe.sha1
|
|
||||||
11
.github/actions/free-space-macos/action.yml
vendored
11
.github/actions/free-space-macos/action.yml
vendored
@@ -57,19 +57,8 @@ 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.3.app
|
|
||||||
sudo rm -rf /Applications/Xcode_16.2.app
|
|
||||||
sudo rm -rf /Applications/Google Chrome.app
|
|
||||||
sudo rm -rf /Applications/Xcode_16.4.app
|
|
||||||
sudo rm -rf /Applications/Google Chrome for Testing.app
|
|
||||||
sudo rm -rf /Applications/Firefox.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
|
|
||||||
|
|
||||||
# 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
|
||||||
|
|||||||
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
|
||||||
|
|||||||
16
.github/actions/install-build-tools/action.yml
vendored
16
.github/actions/install-build-tools/action.yml
vendored
@@ -10,23 +10,11 @@ runs:
|
|||||||
git config --global core.filemode false
|
git config --global core.filemode false
|
||||||
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.longpaths true
|
|
||||||
git config --global core.preloadindex true
|
|
||||||
git config --global core.longpaths true
|
|
||||||
fi
|
fi
|
||||||
export BUILD_TOOLS_SHA=a0cc95a1884a631559bcca0c948465b725d9295a
|
export BUILD_TOOLS_SHA=8246e57791b0af4ae5975eb96f09855f9269b1cd
|
||||||
npm i -g @electron/build-tools
|
npm i -g @electron/build-tools
|
||||||
# Update depot_tools to ensure python
|
|
||||||
e d update_depot_tools
|
|
||||||
e auto-update disable
|
e auto-update disable
|
||||||
# Disable further updates of depot_tools
|
|
||||||
e d auto-update disable
|
|
||||||
if [ "$(expr substr $(uname -s) 1 10)" == "MSYS_NT-10" ]; then
|
if [ "$(expr substr $(uname -s) 1 10)" == "MSYS_NT-10" ]; then
|
||||||
e d cipd.bat --version
|
e d cipd.bat --version
|
||||||
cp "C:\Python311\python.exe" "C:\Python311\python3.exe"
|
cp "C:\Python311\python.exe" "C:\Python311\python3.exe"
|
||||||
echo "C:\Users\ContainerAdministrator\.electron_build_tools\third_party\depot_tools" >> $GITHUB_PATH
|
fi
|
||||||
else
|
|
||||||
echo "$HOME/.electron_build_tools/third_party/depot_tools" >> $GITHUB_PATH
|
|
||||||
echo "$HOME/.electron_build_tools/third_party/depot_tools/python-bin" >> $GITHUB_PATH
|
|
||||||
fi
|
|
||||||
|
|||||||
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
|
|
||||||
|
|||||||
10
.github/actions/restore-cache-aks/action.yml
vendored
10
.github/actions/restore-cache-aks/action.yml
vendored
@@ -1,20 +1,12 @@
|
|||||||
name: 'Restore Cache AKS'
|
name: 'Restore Cache AKS'
|
||||||
description: 'Restores Electron src cache via AKS'
|
description: 'Restores Electron src cache via AKS'
|
||||||
inputs:
|
|
||||||
target-platform:
|
|
||||||
description: 'Target platform, should be linux, win, macos'
|
|
||||||
runs:
|
runs:
|
||||||
using: "composite"
|
using: "composite"
|
||||||
steps:
|
steps:
|
||||||
- name: Restore and Ensure Src Cache
|
- name: Restore and Ensure Src Cache
|
||||||
shell: bash
|
shell: bash
|
||||||
run: |
|
run: |
|
||||||
if [ "${{ inputs.target-platform }}" = "win" ]; then
|
cache_path=/mnt/cross-instance-cache/$DEPSHASH.tar
|
||||||
cache_path=/mnt/win-cache/$DEPSHASH.tar
|
|
||||||
else
|
|
||||||
cache_path=/mnt/cross-instance-cache/$DEPSHASH.tar
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "Using cache key: $DEPSHASH"
|
echo "Using cache key: $DEPSHASH"
|
||||||
echo "Checking for cache in: $cache_path"
|
echo "Checking for cache in: $cache_path"
|
||||||
if [ ! -f "$cache_path" ]; then
|
if [ ! -f "$cache_path" ]; then
|
||||||
|
|||||||
82
.github/actions/restore-cache-azcopy/action.yml
vendored
82
.github/actions/restore-cache-azcopy/action.yml
vendored
@@ -1,25 +1,22 @@
|
|||||||
name: 'Restore Cache AZCopy'
|
name: 'Restore Cache AZCopy'
|
||||||
description: 'Restores Electron src cache via AZCopy'
|
description: 'Restores Electron src cache via AZCopy'
|
||||||
inputs:
|
|
||||||
target-platform:
|
|
||||||
description: 'Target platform, should be linux, win, macos'
|
|
||||||
runs:
|
runs:
|
||||||
using: "composite"
|
using: "composite"
|
||||||
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@1bd1e32a3bdc45362d1e726936510720a7c30a57
|
||||||
with:
|
with:
|
||||||
path: sas-token
|
path: |
|
||||||
key: sas-key-${{ inputs.target-platform }}-${{ github.run_number }}-1
|
sas-token
|
||||||
enableCrossOsArchive: true
|
key: sas-key-${{ github.run_number }}-1
|
||||||
- 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@1bd1e32a3bdc45362d1e726936510720a7c30a57
|
||||||
with:
|
with:
|
||||||
path: sas-token
|
path: |
|
||||||
key: sas-key-${{ inputs.target-platform }}-${{ github.run_number }}-${{ github.run_attempt }}
|
sas-token
|
||||||
enableCrossOsArchive: true
|
key: sas-key-${{ github.run_number }}-${{ github.run_attempt }}
|
||||||
- name: Download Src Cache from AKS
|
- name: Download Src Cache from AKS
|
||||||
# The cache will always exist here as a result of the checkout job
|
# The cache will always exist here as a result of the checkout job
|
||||||
# Either it was uploaded to Azure in the checkout job for this commit
|
# Either it was uploaded to Azure in the checkout job for this commit
|
||||||
@@ -29,31 +26,21 @@ runs:
|
|||||||
timeout_minutes: 30
|
timeout_minutes: 30
|
||||||
max_attempts: 3
|
max_attempts: 3
|
||||||
retry_on: error
|
retry_on: error
|
||||||
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
|
|
||||||
sas_token=$(jq -r '.sasToken' sas-token)
|
|
||||||
account_name=$(jq -r '.accountName' sas-token)
|
|
||||||
if [ "${{ inputs.target-platform }}" = "win" ]; then
|
|
||||||
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
|
|
||||||
else
|
|
||||||
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
|
|
||||||
fi
|
|
||||||
fi
|
fi
|
||||||
|
azcopy copy --log-level=ERROR \
|
||||||
|
"https://${{ env.AZURE_AKS_CACHE_STORAGE_ACCOUNT }}.file.core.windows.net/${{ env.AZURE_AKS_CACHE_SHARE_NAME }}/${{ env.CACHE_PATH }}?$sas_token" $DEPSHASH.tar
|
||||||
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
|
||||||
- name: Clean SAS Key
|
- name: Clean SAS Key
|
||||||
shell: bash
|
shell: bash
|
||||||
run: rm -f sas-token
|
run: rm -f sas-token
|
||||||
- name: Unzip and Ensure Src Cache
|
- name: Unzip and Ensure Src Cache
|
||||||
if: ${{ inputs.target-platform == 'macos' }}
|
|
||||||
shell: bash
|
shell: bash
|
||||||
run: |
|
run: |
|
||||||
echo "Downloaded cache is $(du -sh $DEPSHASH.tar | cut -f1)"
|
echo "Downloaded cache is $(du -sh $DEPSHASH.tar | cut -f1)"
|
||||||
@@ -81,45 +68,4 @@ runs:
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
echo "Wiping Electron Directory"
|
echo "Wiping Electron Directory"
|
||||||
rm -rf src/electron
|
rm -rf src/electron
|
||||||
|
|
||||||
- name: Unzip and Ensure Src Cache (Windows)
|
|
||||||
if: ${{ inputs.target-platform == 'win' }}
|
|
||||||
shell: powershell
|
|
||||||
run: |
|
|
||||||
$src_cache = "$env:DEPSHASH.tar"
|
|
||||||
$cache_size = $(Get-Item $src_cache).length
|
|
||||||
Write-Host "Downloaded cache is $cache_size"
|
|
||||||
if ($cache_size -eq 0) {
|
|
||||||
Write-Host "Cache is empty - exiting"
|
|
||||||
exit 1
|
|
||||||
}
|
|
||||||
|
|
||||||
$TEMP_DIR=New-Item -ItemType Directory -Path temp-cache
|
|
||||||
$TEMP_DIR_PATH = $TEMP_DIR.FullName
|
|
||||||
C:\ProgramData\Chocolatey\bin\7z.exe -y -snld20 x $src_cache -o"$TEMP_DIR_PATH"
|
|
||||||
|
|
||||||
- name: Move Src Cache (Windows)
|
|
||||||
if: ${{ inputs.target-platform == 'win' }}
|
|
||||||
uses: nick-fields/retry@7152eba30c6575329ac0576536151aca5a72780e # v3.0.0
|
|
||||||
with:
|
|
||||||
timeout_minutes: 30
|
|
||||||
max_attempts: 3
|
|
||||||
retry_on: error
|
|
||||||
shell: powershell
|
|
||||||
command: |
|
|
||||||
if (Test-Path "temp-cache\src") {
|
|
||||||
Write-Host "Relocating Cache"
|
|
||||||
Remove-Item -Recurse -Force src
|
|
||||||
Move-Item temp-cache\src src
|
|
||||||
|
|
||||||
Write-Host "Deleting zip file"
|
|
||||||
Remove-Item -Force $src_cache
|
|
||||||
}
|
|
||||||
if (-Not (Test-Path "src\third_party\blink")) {
|
|
||||||
Write-Host "Cache was not correctly restored - exiting"
|
|
||||||
exit 1
|
|
||||||
}
|
|
||||||
|
|
||||||
Write-Host "Wiping Electron Directory"
|
|
||||||
Remove-Item -Recurse -Force src\electron
|
|
||||||
36
.github/actions/set-chromium-cookie/action.yml
vendored
36
.github/actions/set-chromium-cookie/action.yml
vendored
@@ -4,14 +4,9 @@ runs:
|
|||||||
using: "composite"
|
using: "composite"
|
||||||
steps:
|
steps:
|
||||||
- name: Set the git cookie from chromium.googlesource.com (Unix)
|
- name: Set the git cookie from chromium.googlesource.com (Unix)
|
||||||
if: ${{ runner.os != 'Windows' }}
|
if: ${{ runner.os != 'Windows' && env.CHROMIUM_GIT_COOKIE }}
|
||||||
shell: bash
|
shell: bash
|
||||||
run: |
|
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
|
eval 'set +o history' 2>/dev/null || setopt HIST_IGNORE_SPACE 2>/dev/null
|
||||||
touch ~/.gitcookies
|
touch ~/.gitcookies
|
||||||
chmod 0600 ~/.gitcookies
|
chmod 0600 ~/.gitcookies
|
||||||
@@ -22,37 +17,10 @@ runs:
|
|||||||
${{ env.CHROMIUM_GIT_COOKIE }}
|
${{ env.CHROMIUM_GIT_COOKIE }}
|
||||||
__END__
|
__END__
|
||||||
eval 'set -o history' 2>/dev/null || unsetopt HIST_IGNORE_SPACE 2>/dev/null
|
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)
|
- name: Set the git cookie from chromium.googlesource.com (Windows)
|
||||||
if: ${{ runner.os == 'Windows' }}
|
if: ${{ runner.os == 'Windows' && env.CHROMIUM_GIT_COOKIE_WINDOWS_STRING }}
|
||||||
shell: cmd
|
shell: cmd
|
||||||
run: |
|
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"
|
git config --global http.cookiefile "%USERPROFILE%\.gitcookies"
|
||||||
powershell -noprofile -nologo -command Write-Output "${{ env.CHROMIUM_GIT_COOKIE_WINDOWS_STRING }}" >>"%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
|
|
||||||
|
|||||||
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
|
|
||||||
9
.github/config.yml
vendored
9
.github/config.yml
vendored
@@ -2,8 +2,6 @@
|
|||||||
newPRWelcomeComment: |
|
newPRWelcomeComment: |
|
||||||
💖 Thanks for opening this pull request! 💖
|
💖 Thanks for opening this pull request! 💖
|
||||||
|
|
||||||
### Semantic PR titles
|
|
||||||
|
|
||||||
We use [semantic commit messages](https://github.com/electron/electron/blob/main/docs/development/pull-requests.md#commit-message-guidelines) to streamline the release process. Before your pull request can be merged, you should **update your pull request title** to start with a semantic prefix.
|
We use [semantic commit messages](https://github.com/electron/electron/blob/main/docs/development/pull-requests.md#commit-message-guidelines) to streamline the release process. Before your pull request can be merged, you should **update your pull request title** to start with a semantic prefix.
|
||||||
|
|
||||||
Examples of commit messages with semantic prefixes:
|
Examples of commit messages with semantic prefixes:
|
||||||
@@ -12,13 +10,6 @@ newPRWelcomeComment: |
|
|||||||
- `feat: add app.isPackaged() method`
|
- `feat: add app.isPackaged() method`
|
||||||
- `docs: app.isDefaultProtocolClient is now available on Linux`
|
- `docs: app.isDefaultProtocolClient is now available on Linux`
|
||||||
|
|
||||||
### Commit signing
|
|
||||||
|
|
||||||
This repo enforces [commit signatures](https://docs.github.com/en/authentication/managing-commit-signature-verification/signing-commits) for all incoming PRs.
|
|
||||||
To sign your commits, see GitHub's documentation on [Telling Git about your signing key](https://docs.github.com/en/authentication/managing-commit-signature-verification/telling-git-about-your-signing-key).
|
|
||||||
|
|
||||||
### PR tips
|
|
||||||
|
|
||||||
Things that will help get your PR across the finish line:
|
Things that will help get your PR across the finish line:
|
||||||
|
|
||||||
- Follow the JavaScript, C++, and Python [coding style](https://github.com/electron/electron/blob/main/docs/development/coding-style.md).
|
- Follow the JavaScript, C++, and Python [coding style](https://github.com/electron/electron/blob/main/docs/development/coding-style.md).
|
||||||
|
|||||||
122
.github/copilot-instructions.md
vendored
122
.github/copilot-instructions.md
vendored
@@ -1,122 +0,0 @@
|
|||||||
# Copilot Instructions for Electron
|
|
||||||
|
|
||||||
## Build System
|
|
||||||
|
|
||||||
Electron uses `@electron/build-tools` (`e` CLI). Install with `npm i -g @electron/build-tools`.
|
|
||||||
|
|
||||||
```bash
|
|
||||||
e sync # Fetch sources and apply patches
|
|
||||||
e build # Build Electron (GN + Ninja)
|
|
||||||
e build -k 999 # Build, continuing through errors
|
|
||||||
e start # Run built Electron
|
|
||||||
e start --version # Verify Electron launches
|
|
||||||
e test # Run full test suite
|
|
||||||
e debug # Run in debugger (lldb on macOS, gdb on Linux)
|
|
||||||
```
|
|
||||||
|
|
||||||
### Linting
|
|
||||||
|
|
||||||
```bash
|
|
||||||
npm run lint # Run all linters (JS, C++, Python, GN, docs)
|
|
||||||
npm run lint:js # JavaScript/TypeScript only
|
|
||||||
npm run lint:clang-format # C++ formatting only
|
|
||||||
npm run lint:cpp # C++ linting only
|
|
||||||
npm run lint:docs # Documentation only
|
|
||||||
```
|
|
||||||
|
|
||||||
### Running a Single Test
|
|
||||||
|
|
||||||
```bash
|
|
||||||
npm run test -- -g "pattern" # Run tests matching a regex pattern
|
|
||||||
# Example: npm run test -- -g "ipc"
|
|
||||||
```
|
|
||||||
|
|
||||||
### Running a Single Node.js Test
|
|
||||||
|
|
||||||
```bash
|
|
||||||
node script/node-spec-runner.js parallel/test-crypto-keygen
|
|
||||||
```
|
|
||||||
|
|
||||||
## Architecture
|
|
||||||
|
|
||||||
Electron embeds Chromium (rendering) and Node.js (backend) to enable desktop apps with web technologies. The parent directory (`../`) is the Chromium source tree.
|
|
||||||
|
|
||||||
### Process Model
|
|
||||||
|
|
||||||
Electron has two primary process types, mirroring Chromium:
|
|
||||||
|
|
||||||
- **Main process** (`shell/browser/` + `lib/browser/`): Controls app lifecycle, creates windows, system APIs
|
|
||||||
- **Renderer process** (`shell/renderer/` + `lib/renderer/`): Runs web content in BrowserWindows
|
|
||||||
|
|
||||||
### Native ↔ JavaScript Bridge
|
|
||||||
|
|
||||||
Each API is implemented as a C++/JS pair:
|
|
||||||
|
|
||||||
- C++ side: `shell/browser/api/electron_api_{name}.cc/.h` — uses `gin::Wrappable` and `ObjectTemplateBuilder`
|
|
||||||
- JS side: `lib/browser/api/{name}.ts` — exports the module, registered in `lib/browser/api/module-list.ts`
|
|
||||||
- Binding: `NODE_LINKED_BINDING_CONTEXT_AWARE(electron_browser_{name}, Initialize)` in C++ and registered in `shell/common/node_bindings.cc`
|
|
||||||
- Type declaration: `typings/internal-ambient.d.ts` maps `process._linkedBinding('electron_browser_{name}')`
|
|
||||||
|
|
||||||
### Patches System
|
|
||||||
|
|
||||||
Electron patches upstream dependencies (Chromium, Node.js, V8, etc.) rather than forking them. Patches live in `patches/` organized by target, with `patches/config.json` mapping directories to repos.
|
|
||||||
|
|
||||||
```text
|
|
||||||
patches/{target}/*.patch → [e sync] → target repo commits
|
|
||||||
← [e patches] ←
|
|
||||||
```
|
|
||||||
|
|
||||||
Key rules:
|
|
||||||
|
|
||||||
- Fix existing patches rather than creating new ones
|
|
||||||
- Preserve original authorship in TODO comments — never change `TODO(name)` assignees
|
|
||||||
- Each patch commit message must explain why the patch exists
|
|
||||||
- After modifying patches, run `e patches {target}` to export
|
|
||||||
|
|
||||||
When working on the `roller/chromium/main` branch for Chromium upgrades, use `e sync --3` for 3-way merge conflict resolution.
|
|
||||||
|
|
||||||
## Conventions
|
|
||||||
|
|
||||||
### File Naming
|
|
||||||
|
|
||||||
- JS/TS files: kebab-case (`file-name.ts`)
|
|
||||||
- C++ files: snake_case with `electron_api_` prefix (`electron_api_safe_storage.cc`)
|
|
||||||
- Test files: `api-{module-name}-spec.ts` in `spec/`
|
|
||||||
- Source file lists are maintained in `filenames.gni` (with platform-specific sections)
|
|
||||||
|
|
||||||
### JavaScript/TypeScript
|
|
||||||
|
|
||||||
- Semicolons required (`"semi": ["error", "always"]`)
|
|
||||||
- `const` and `let` only (no `var`)
|
|
||||||
- Arrow functions preferred
|
|
||||||
- Import order enforced: `@electron/internal` → `@electron` → `electron` → external → builtin → relative
|
|
||||||
- API naming: `PascalCase` for classes (`BrowserWindow`), `camelCase` for module APIs (`globalShortcut`)
|
|
||||||
- Prefer getters/setters over jQuery-style `.text([text])` patterns
|
|
||||||
|
|
||||||
### C++
|
|
||||||
|
|
||||||
- Follows Chromium coding style, enforced by `clang-format` and `clang-tidy`
|
|
||||||
- Uses Chromium abstractions (`base::`, `content::`, etc.)
|
|
||||||
- Header guards: `#ifndef ELECTRON_SHELL_BROWSER_API_ELECTRON_API_{NAME}_H_`
|
|
||||||
- Platform-specific files: `_mac.mm`, `_win.cc`, `_linux.cc`
|
|
||||||
|
|
||||||
### Testing
|
|
||||||
|
|
||||||
- Framework: Mocha + Chai + Sinon
|
|
||||||
- Test helpers in `spec/lib/` (e.g., `spec-helpers.ts`, `window-helpers.ts`)
|
|
||||||
- Use `defer()` from spec-helpers for cleanup, `closeAllWindows()` for window teardown
|
|
||||||
- Tests import from `electron/main` or `electron/renderer`
|
|
||||||
|
|
||||||
### Documentation
|
|
||||||
|
|
||||||
- API docs in `docs/api/` as Markdown, parsed by `@electron/docs-parser` to generate `electron.d.ts`
|
|
||||||
- API history tracked via YAML blocks in HTML comments within doc files
|
|
||||||
- Docs must pass `npm run lint:docs`
|
|
||||||
|
|
||||||
### Build Configuration
|
|
||||||
|
|
||||||
- `BUILD.gn`: Main GN build config
|
|
||||||
- `buildflags/buildflags.gni`: Feature flags (PDF viewer, extensions, spellchecker)
|
|
||||||
- `build/args/`: Build argument profiles (`testing.gn`, `release.gn`, `all.gn`)
|
|
||||||
- `DEPS`: Dependency versions and checkout paths
|
|
||||||
- `chromium_src/`: Chromium source file overrides (compiled instead of originals)
|
|
||||||
56
.github/dependabot.yml
vendored
56
.github/dependabot.yml
vendored
@@ -10,59 +10,3 @@ updates:
|
|||||||
labels:
|
labels:
|
||||||
- "no-backport"
|
- "no-backport"
|
||||||
- "semver/none"
|
- "semver/none"
|
||||||
target-branch: main
|
|
||||||
- package-ecosystem: npm
|
|
||||||
directories:
|
|
||||||
- /
|
|
||||||
- /spec
|
|
||||||
- /npm
|
|
||||||
schedule:
|
|
||||||
interval: daily
|
|
||||||
labels:
|
|
||||||
- "no-backport"
|
|
||||||
open-pull-requests-limit: 2
|
|
||||||
target-branch: main
|
|
||||||
- package-ecosystem: npm
|
|
||||||
directories:
|
|
||||||
- /
|
|
||||||
- /spec
|
|
||||||
- /npm
|
|
||||||
schedule:
|
|
||||||
interval: daily
|
|
||||||
labels:
|
|
||||||
- "backport-check-skip"
|
|
||||||
open-pull-requests-limit: 0
|
|
||||||
target-branch: 33-x-y
|
|
||||||
- package-ecosystem: npm
|
|
||||||
directories:
|
|
||||||
- /
|
|
||||||
- /spec
|
|
||||||
- /npm
|
|
||||||
schedule:
|
|
||||||
interval: daily
|
|
||||||
labels:
|
|
||||||
- "backport-check-skip"
|
|
||||||
open-pull-requests-limit: 0
|
|
||||||
target-branch: 32-x-y
|
|
||||||
- package-ecosystem: npm
|
|
||||||
directories:
|
|
||||||
- /
|
|
||||||
- /spec
|
|
||||||
- /npm
|
|
||||||
schedule:
|
|
||||||
interval: daily
|
|
||||||
labels:
|
|
||||||
- "backport-check-skip"
|
|
||||||
open-pull-requests-limit: 0
|
|
||||||
target-branch: 31-x-y
|
|
||||||
- package-ecosystem: npm
|
|
||||||
directories:
|
|
||||||
- /
|
|
||||||
- /spec
|
|
||||||
- /npm
|
|
||||||
schedule:
|
|
||||||
interval: daily
|
|
||||||
labels:
|
|
||||||
- "backport-check-skip"
|
|
||||||
open-pull-requests-limit: 0
|
|
||||||
target-branch: 30-x-y
|
|
||||||
18
.github/problem-matchers/clang.json
vendored
18
.github/problem-matchers/clang.json
vendored
@@ -1,18 +0,0 @@
|
|||||||
{
|
|
||||||
"problemMatcher": [
|
|
||||||
{
|
|
||||||
"owner": "clang",
|
|
||||||
"fromPath": "src/out/Default/args.gn",
|
|
||||||
"pattern": [
|
|
||||||
{
|
|
||||||
"regexp": "^(.+)[(:](\\d+)[:,](\\d+)\\)?:\\s+(warning|error):\\s+(.*)$",
|
|
||||||
"file": 1,
|
|
||||||
"line": 2,
|
|
||||||
"column": 3,
|
|
||||||
"severity": 4,
|
|
||||||
"message": 5
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
22
.github/problem-matchers/eslint-stylish.json
vendored
22
.github/problem-matchers/eslint-stylish.json
vendored
@@ -1,22 +0,0 @@
|
|||||||
{
|
|
||||||
"problemMatcher": [
|
|
||||||
{
|
|
||||||
"owner": "eslint-stylish",
|
|
||||||
"pattern": [
|
|
||||||
{
|
|
||||||
"regexp": "^\\s*([^\\s].*)$",
|
|
||||||
"file": 1
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"regexp": "^\\s+(\\d+):(\\d+)\\s+(error|warning|info)\\s+(.*)\\s\\s+(.*)$",
|
|
||||||
"line": 1,
|
|
||||||
"column": 2,
|
|
||||||
"severity": 3,
|
|
||||||
"message": 4,
|
|
||||||
"code": 5,
|
|
||||||
"loop": true
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
34
.github/problem-matchers/patch-conflict.json
vendored
34
.github/problem-matchers/patch-conflict.json
vendored
@@ -1,34 +0,0 @@
|
|||||||
{
|
|
||||||
"problemMatcher": [
|
|
||||||
{
|
|
||||||
"owner": "merge-conflict",
|
|
||||||
"pattern": [
|
|
||||||
{
|
|
||||||
"regexp": "^CONFLICT\\s\\(\\S+\\): (Merge conflict in \\S+)$",
|
|
||||||
"message": 1
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"owner": "patch-conflict",
|
|
||||||
"pattern": [
|
|
||||||
{
|
|
||||||
"regexp": "^error: (patch failed: (\\S+):(\\d+))$",
|
|
||||||
"message": 1,
|
|
||||||
"file": 2,
|
|
||||||
"line": 3
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"owner": "patch-needs-update",
|
|
||||||
"pattern": [
|
|
||||||
{
|
|
||||||
"regexp": "^((patches\/.*): needs update)$",
|
|
||||||
"message": 1,
|
|
||||||
"file": 2
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
12
.github/workflows/archaeologist-dig.yml
vendored
12
.github/workflows/archaeologist-dig.yml
vendored
@@ -3,23 +3,15 @@ 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@11bd71901bbe5b1630ceea73d27597364c9af683 #v4.0.2
|
uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 #v4.0.2
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
- name: Setup Node.js/npm
|
|
||||||
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020
|
|
||||||
with:
|
|
||||||
node-version: 20.19.x
|
|
||||||
- name: Setting Up Dig Site
|
- name: Setting Up Dig Site
|
||||||
run: |
|
run: |
|
||||||
echo "remote: ${{ github.event.pull_request.head.repo.clone_url }}"
|
echo "remote: ${{ github.event.pull_request.head.repo.clone_url }}"
|
||||||
@@ -45,7 +37,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@ea165f8d65b6e75b540449e92b4886f43607fa02 #v4.6.2
|
uses: actions/upload-artifact@50769540e7f4bd5e21e526ee35c689e35e0d6874 #v4.4.0
|
||||||
with:
|
with:
|
||||||
name: artifacts
|
name: artifacts
|
||||||
path: electron/artifacts
|
path: electron/artifacts
|
||||||
|
|||||||
145
.github/workflows/audit-branch-ci.yml
vendored
145
.github/workflows/audit-branch-ci.yml
vendored
@@ -1,145 +0,0 @@
|
|||||||
name: Audit CI on Branches
|
|
||||||
|
|
||||||
on:
|
|
||||||
workflow_dispatch:
|
|
||||||
schedule:
|
|
||||||
# Run every 2 hours
|
|
||||||
- cron: '0 */2 * * *'
|
|
||||||
|
|
||||||
permissions: {}
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
audit_branch_ci:
|
|
||||||
name: Audit CI on Branches
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
steps:
|
|
||||||
- run: npm install @actions/cache @electron/fiddle-core
|
|
||||||
- uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1
|
|
||||||
id: audit-errors
|
|
||||||
with:
|
|
||||||
github-token: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
script: |
|
|
||||||
const cache = require('@actions/cache');
|
|
||||||
const { ElectronVersions } = require('@electron/fiddle-core');
|
|
||||||
|
|
||||||
const runsWithErrors = [];
|
|
||||||
|
|
||||||
// Only want the most recent workflow run that wasn't skipped or cancelled
|
|
||||||
const isValidWorkflowRun = (run) => !['skipped', 'cancelled'].includes(run.conclusion);
|
|
||||||
|
|
||||||
const versions = await ElectronVersions.create(undefined, { ignoreCache: true });
|
|
||||||
const branches = versions.supportedMajors.map((branch) => `${branch}-x-y`);
|
|
||||||
|
|
||||||
for (const branch of ["main", ...branches]) {
|
|
||||||
const latestCheckRuns = new Map();
|
|
||||||
const allCheckRuns = await github.paginate(github.rest.checks.listForRef, {
|
|
||||||
owner: "electron",
|
|
||||||
repo: "electron",
|
|
||||||
ref: branch,
|
|
||||||
status: 'completed',
|
|
||||||
});
|
|
||||||
|
|
||||||
// Sort the check runs by completed_at so that multiple check runs on the
|
|
||||||
// same ref (like a scheduled workflow) only looks at the most recent one
|
|
||||||
for (const checkRun of allCheckRuns.filter(
|
|
||||||
(run) => !['skipped', 'cancelled'].includes(run.conclusion),
|
|
||||||
).sort((a, b) => new Date(b.completed_at) - new Date(a.completed_at))) {
|
|
||||||
if (!latestCheckRuns.has(checkRun.name)) {
|
|
||||||
latestCheckRuns.set(checkRun.name, checkRun);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Check for runs which had error annotations
|
|
||||||
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({
|
|
||||||
owner: "electron",
|
|
||||||
repo: "electron",
|
|
||||||
check_run_id: checkRun.id,
|
|
||||||
})).data ?? [];
|
|
||||||
|
|
||||||
if (
|
|
||||||
annotations.find(
|
|
||||||
({ annotation_level, message }) =>
|
|
||||||
annotation_level === "failure" &&
|
|
||||||
!message.startsWith("Process completed with exit code") &&
|
|
||||||
!message.startsWith("Response status code does not indicate success") &&
|
|
||||||
!/Unable to make request/.test(message) &&
|
|
||||||
!/The requested URL returned error/.test(message),
|
|
||||||
)
|
|
||||||
) {
|
|
||||||
checkRun.hasErrorAnnotations = true;
|
|
||||||
} else {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Check if this is a known failure from a previous audit run
|
|
||||||
const cacheKey = `check-run-error-annotations-${checkRun.id}`;
|
|
||||||
const cacheHit =
|
|
||||||
(await cache.restoreCache(['/dev/null'], cacheKey, undefined, {
|
|
||||||
lookupOnly: true,
|
|
||||||
})) !== undefined;
|
|
||||||
|
|
||||||
if (cacheHit) {
|
|
||||||
checkRun.isStale = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
checkRun.branch = branch;
|
|
||||||
runsWithErrors.push(checkRun);
|
|
||||||
|
|
||||||
// Create a cache entry (only the name matters) to keep track of
|
|
||||||
// failures we've seen from previous runs to mark them as stale
|
|
||||||
if (!cacheHit) {
|
|
||||||
await cache.saveCache(['/dev/null'], cacheKey);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (runsWithErrors.length > 0) {
|
|
||||||
core.setOutput('errorsFound', true);
|
|
||||||
core.summary.addHeading('⚠️ Runs with Errors');
|
|
||||||
core.summary.addTable([
|
|
||||||
[
|
|
||||||
{ data: 'Branch', header: true },
|
|
||||||
{ data: 'Workflow Run', header: true },
|
|
||||||
{ data: 'Status', header: true },
|
|
||||||
],
|
|
||||||
...runsWithErrors
|
|
||||||
.sort(
|
|
||||||
(a, b) =>
|
|
||||||
a.branch.localeCompare(b.branch) ||
|
|
||||||
a.name.localeCompare(b.name),
|
|
||||||
)
|
|
||||||
.map((run) => [
|
|
||||||
run.branch,
|
|
||||||
`<a href="${run.html_url}">${run.name}</a>`,
|
|
||||||
run.isStale
|
|
||||||
? '📅 Stale'
|
|
||||||
: run.hasErrorAnnotations
|
|
||||||
? '⚠️ Errors'
|
|
||||||
: '✅ Succeeded',
|
|
||||||
]),
|
|
||||||
]);
|
|
||||||
|
|
||||||
// Set this as failed so it's easy to scan runs to find failures
|
|
||||||
if (runsWithErrors.find((run) => !run.isStale)) {
|
|
||||||
process.exitCode = 1;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
core.summary.addRaw('🎉 No runs with errors');
|
|
||||||
}
|
|
||||||
|
|
||||||
await core.summary.write();
|
|
||||||
- name: Send Slack message if errors
|
|
||||||
if: ${{ always() && steps.audit-errors.outputs.errorsFound && github.ref == 'refs/heads/main' }}
|
|
||||||
uses: slackapi/slack-github-action@b0fa283ad8fea605de13dc3f449259339835fc52 # v2.1.0
|
|
||||||
with:
|
|
||||||
payload: |
|
|
||||||
link: "https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}"
|
|
||||||
webhook: ${{ secrets.CI_ERRORS_SLACK_WEBHOOK_URL }}
|
|
||||||
webhook-type: webhook-trigger
|
|
||||||
15
.github/workflows/branch-created.yml
vendored
15
.github/workflows/branch-created.yml
vendored
@@ -23,13 +23,11 @@ jobs:
|
|||||||
steps:
|
steps:
|
||||||
- name: Determine Major Version
|
- name: Determine Major Version
|
||||||
id: check-major-version
|
id: check-major-version
|
||||||
env:
|
|
||||||
BRANCH_NAME: ${{ github.event.inputs.branch-name || github.event.ref }}
|
|
||||||
run: |
|
run: |
|
||||||
if [[ "$BRANCH_NAME" =~ ^([0-9]+)-x-y$ ]]; then
|
if [[ ${{ github.event.inputs.branch-name || github.event.ref }} =~ ^([0-9]+)-x-y$ ]]; then
|
||||||
echo "MAJOR=${BASH_REMATCH[1]}" >> "$GITHUB_OUTPUT"
|
echo "MAJOR=${BASH_REMATCH[1]}" >> "$GITHUB_OUTPUT"
|
||||||
else
|
else
|
||||||
echo "Not a release branch: $BRANCH_NAME"
|
echo "Not a release branch: ${{ github.event.inputs.branch-name || github.event.ref }}"
|
||||||
fi
|
fi
|
||||||
- name: New Release Branch Tasks
|
- name: New Release Branch Tasks
|
||||||
if: ${{ steps.check-major-version.outputs.MAJOR }}
|
if: ${{ steps.check-major-version.outputs.MAJOR }}
|
||||||
@@ -94,7 +92,7 @@ jobs:
|
|||||||
}))
|
}))
|
||||||
- name: Create Release Project Board
|
- name: Create Release Project Board
|
||||||
if: ${{ steps.check-major-version.outputs.MAJOR }}
|
if: ${{ steps.check-major-version.outputs.MAJOR }}
|
||||||
uses: dsanders11/project-actions/copy-project@2134fe7cc71c58b7ae259c82a8e63c6058255678 # v1.7.0
|
uses: dsanders11/project-actions/copy-project@eb760c48894b5702398529cbb8f6e98378e315d0 # v1.3.0
|
||||||
id: create-release-board
|
id: create-release-board
|
||||||
with:
|
with:
|
||||||
drafts: true
|
drafts: true
|
||||||
@@ -114,15 +112,14 @@ jobs:
|
|||||||
GITHUB_TOKEN: ${{ steps.generate-token.outputs.token }}
|
GITHUB_TOKEN: ${{ steps.generate-token.outputs.token }}
|
||||||
- name: Find Previous Release Project Board
|
- name: Find Previous Release Project Board
|
||||||
if: ${{ steps.check-major-version.outputs.MAJOR }}
|
if: ${{ steps.check-major-version.outputs.MAJOR }}
|
||||||
uses: dsanders11/project-actions/find-project@2134fe7cc71c58b7ae259c82a8e63c6058255678 # v1.7.0
|
uses: dsanders11/project-actions/find-project@eb760c48894b5702398529cbb8f6e98378e315d0 # v1.3.0
|
||||||
id: find-prev-release-board
|
id: find-prev-release-board
|
||||||
with:
|
with:
|
||||||
fail-if-project-not-found: false
|
|
||||||
title: ${{ steps.generate-project-metadata.outputs.prev-prev-major }}-x-y
|
title: ${{ steps.generate-project-metadata.outputs.prev-prev-major }}-x-y
|
||||||
token: ${{ steps.generate-token.outputs.token }}
|
token: ${{ steps.generate-token.outputs.token }}
|
||||||
- name: Close Previous Release Project Board
|
- name: Close Previous Release Project Board
|
||||||
if: ${{ steps.find-prev-release-board.outputs.number }}
|
if: ${{ steps.check-major-version.outputs.MAJOR }}
|
||||||
uses: dsanders11/project-actions/close-project@2134fe7cc71c58b7ae259c82a8e63c6058255678 # v1.7.0
|
uses: dsanders11/project-actions/close-project@eb760c48894b5702398529cbb8f6e98378e315d0 # v1.3.0
|
||||||
with:
|
with:
|
||||||
project-number: ${{ steps.find-prev-release-board.outputs.number }}
|
project-number: ${{ steps.find-prev-release-board.outputs.number }}
|
||||||
token: ${{ steps.generate-token.outputs.token }}
|
token: ${{ steps.generate-token.outputs.token }}
|
||||||
|
|||||||
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:a82b87d7a4f5ff0cab61405f8151ac4cf4942aeb
|
|
||||||
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@11bd71901bbe5b1630ceea73d27597364c9af683
|
|
||||||
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:a82b87d7a4f5ff0cab61405f8151ac4cf4942aeb
|
|
||||||
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@11bd71901bbe5b1630ceea73d27597364c9af683
|
|
||||||
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:a82b87d7a4f5ff0cab61405f8151ac4cf4942aeb
|
|
||||||
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@11bd71901bbe5b1630ceea73d27597364c9af683
|
|
||||||
with:
|
|
||||||
path: src/electron
|
|
||||||
fetch-depth: 0
|
|
||||||
- name: Build Git Cache
|
|
||||||
uses: ./src/electron/.github/actions/build-git-cache
|
|
||||||
with:
|
|
||||||
target-platform: macos
|
|
||||||
109
.github/workflows/build.yml
vendored
109
.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: 'a82b87d7a4f5ff0cab61405f8151ac4cf4942aeb'
|
default: 'bc2f48b2415a670de18d13605b1cf0eb5fdbaae1'
|
||||||
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 }}
|
||||||
@@ -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=a82b87d7a4f5ff0cab61405f8151ac4cf4942aeb" >> "$GITHUB_OUTPUT"
|
echo "build-image-sha=bc2f48b2415a670de18d13605b1cf0eb5fdbaae1" >> "$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
|
||||||
@@ -124,7 +106,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@11bd71901bbe5b1630ceea73d27597364c9af683
|
uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938
|
||||||
with:
|
with:
|
||||||
path: src/electron
|
path: src/electron
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
@@ -133,14 +115,11 @@ jobs:
|
|||||||
uses: ./src/electron/.github/actions/checkout
|
uses: ./src/electron/.github/actions/checkout
|
||||||
with:
|
with:
|
||||||
generate-sas-token: 'true'
|
generate-sas-token: 'true'
|
||||||
target-platform: macos
|
|
||||||
|
|
||||||
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
|
||||||
@@ -149,35 +128,29 @@ jobs:
|
|||||||
- /var/run/sas:/var/run/sas
|
- /var/run/sas:/var/run/sas
|
||||||
env:
|
env:
|
||||||
CHROMIUM_GIT_COOKIE: ${{ secrets.CHROMIUM_GIT_COOKIE }}
|
CHROMIUM_GIT_COOKIE: ${{ secrets.CHROMIUM_GIT_COOKIE }}
|
||||||
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 }}
|
||||||
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@11bd71901bbe5b1630ceea73d27597364c9af683
|
uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938
|
||||||
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: Checkout & Sync & Save
|
- name: Checkout & Sync & Save
|
||||||
uses: ./src/electron/.github/actions/checkout
|
uses: ./src/electron/.github/actions/checkout
|
||||||
with:
|
|
||||||
target-platform: linux
|
|
||||||
|
|
||||||
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
|
||||||
volumes:
|
volumes:
|
||||||
- /mnt/win-cache:/mnt/win-cache
|
- /mnt/cross-instance-cache:/mnt/cross-instance-cache
|
||||||
- /var/run/sas:/var/run/sas
|
|
||||||
env:
|
env:
|
||||||
CHROMIUM_GIT_COOKIE: ${{ secrets.CHROMIUM_GIT_COOKIE }}
|
CHROMIUM_GIT_COOKIE: ${{ secrets.CHROMIUM_GIT_COOKIE }}
|
||||||
CHROMIUM_GIT_COOKIE_WINDOWS_STRING: ${{ secrets.CHROMIUM_GIT_COOKIE_WINDOWS_STRING }}
|
CHROMIUM_GIT_COOKIE_WINDOWS_STRING: ${{ secrets.CHROMIUM_GIT_COOKIE_WINDOWS_STRING }}
|
||||||
@@ -188,22 +161,17 @@ 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@11bd71901bbe5b1630ceea73d27597364c9af683
|
uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29
|
||||||
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: Checkout & Sync & Save
|
- name: Checkout & Sync & Save
|
||||||
uses: ./src/electron/.github/actions/checkout
|
uses: ./src/electron/.github/actions/checkout
|
||||||
with:
|
|
||||||
generate-sas-token: 'true'
|
|
||||||
target-platform: win
|
|
||||||
|
|
||||||
# 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
|
||||||
@@ -214,28 +182,23 @@ jobs:
|
|||||||
|
|
||||||
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/cross-instance-cache:/mnt/cross-instance-cache"]}'
|
||||||
gn-build-type: testing
|
gn-build-type: testing
|
||||||
secrets: inherit
|
secrets: inherit
|
||||||
|
|
||||||
@@ -249,14 +212,13 @@ jobs:
|
|||||||
needs: checkout-macos
|
needs: checkout-macos
|
||||||
with:
|
with:
|
||||||
build-runs-on: macos-14-xlarge
|
build-runs-on: macos-14-xlarge
|
||||||
test-runs-on: macos-14-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:
|
||||||
@@ -275,7 +237,6 @@ jobs:
|
|||||||
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 +246,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 +266,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 +287,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 +307,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
|
||||||
@@ -369,10 +326,10 @@ jobs:
|
|||||||
issues: read
|
issues: read
|
||||||
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-windows
|
needs: setup
|
||||||
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
|
||||||
@@ -388,10 +345,10 @@ jobs:
|
|||||||
issues: read
|
issues: read
|
||||||
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-windows
|
needs: setup
|
||||||
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
|
||||||
@@ -407,11 +364,11 @@ jobs:
|
|||||||
issues: read
|
issues: read
|
||||||
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-windows
|
needs: setup
|
||||||
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 +380,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:
|
||||||
|
|||||||
16
.github/workflows/clean-src-cache.yml
vendored
16
.github/workflows/clean-src-cache.yml
vendored
@@ -1,26 +1,21 @@
|
|||||||
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
|
||||||
volumes:
|
volumes:
|
||||||
- /mnt/cross-instance-cache:/mnt/cross-instance-cache
|
- /mnt/cross-instance-cache:/mnt/cross-instance-cache
|
||||||
- /mnt/win-cache:/mnt/win-cache
|
|
||||||
steps:
|
steps:
|
||||||
- name: Cleanup Source Cache
|
- name: Cleanup Source Cache
|
||||||
shell: bash
|
shell: bash
|
||||||
@@ -28,6 +23,3 @@ jobs:
|
|||||||
df -h /mnt/cross-instance-cache
|
df -h /mnt/cross-instance-cache
|
||||||
find /mnt/cross-instance-cache -type f -mtime +15 -delete
|
find /mnt/cross-instance-cache -type f -mtime +15 -delete
|
||||||
df -h /mnt/cross-instance-cache
|
df -h /mnt/cross-instance-cache
|
||||||
df -h /mnt/win-cache
|
|
||||||
find /mnt/win-cache -type f -mtime +15 -delete
|
|
||||||
df -h /mnt/win-cache
|
|
||||||
|
|||||||
6
.github/workflows/issue-commented.yml
vendored
6
.github/workflows/issue-commented.yml
vendored
@@ -9,8 +9,8 @@ permissions: {}
|
|||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
issue-commented:
|
issue-commented:
|
||||||
name: Remove blocked/{need-info,need-repro} on comment
|
name: Remove blocked/need-repro on comment
|
||||||
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' }}
|
if: ${{ contains(github.event.issue.labels.*.name, 'blocked/need-repro') && !contains(fromJSON('["MEMBER", "OWNER"]'), github.event.comment.author_association) && github.event.comment.user.type != 'Bot' }}
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Generate GitHub App token
|
- name: Generate GitHub App token
|
||||||
@@ -23,4 +23,4 @@ jobs:
|
|||||||
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 }}
|
||||||
run: |
|
run: |
|
||||||
gh issue edit $ISSUE_URL --remove-label 'blocked/need-repro','blocked/need-info ❌'
|
gh issue edit $ISSUE_URL --remove-label 'blocked/need-repro'
|
||||||
|
|||||||
13
.github/workflows/issue-labeled.yml
vendored
13
.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
|
||||||
@@ -21,19 +20,16 @@ jobs:
|
|||||||
creds: ${{ secrets.ISSUE_TRIAGE_GH_APP_CREDS }}
|
creds: ${{ secrets.ISSUE_TRIAGE_GH_APP_CREDS }}
|
||||||
org: electron
|
org: electron
|
||||||
- name: Set status
|
- name: Set status
|
||||||
uses: dsanders11/project-actions/edit-item@2134fe7cc71c58b7ae259c82a8e63c6058255678 # v1.7.0
|
uses: dsanders11/project-actions/edit-item@eb760c48894b5702398529cbb8f6e98378e315d0 # v1.3.0
|
||||||
with:
|
with:
|
||||||
token: ${{ steps.generate-token.outputs.token }}
|
token: ${{ steps.generate-token.outputs.token }}
|
||||||
project-number: 90
|
project-number: 90
|
||||||
field: Status
|
field: Status
|
||||||
field-value: ✅ Triaged
|
field-value: ✅ Triaged
|
||||||
fail-if-item-not-found: false
|
|
||||||
issue-labeled-blocked:
|
issue-labeled-blocked:
|
||||||
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
|
||||||
@@ -42,13 +38,12 @@ jobs:
|
|||||||
creds: ${{ secrets.ISSUE_TRIAGE_GH_APP_CREDS }}
|
creds: ${{ secrets.ISSUE_TRIAGE_GH_APP_CREDS }}
|
||||||
org: electron
|
org: electron
|
||||||
- name: Set status
|
- name: Set status
|
||||||
uses: dsanders11/project-actions/edit-item@2134fe7cc71c58b7ae259c82a8e63c6058255678 # v1.7.0
|
uses: dsanders11/project-actions/edit-item@eb760c48894b5702398529cbb8f6e98378e315d0 # v1.3.0
|
||||||
with:
|
with:
|
||||||
token: ${{ steps.generate-token.outputs.token }}
|
token: ${{ steps.generate-token.outputs.token }}
|
||||||
project-number: 90
|
project-number: 90
|
||||||
field: Status
|
field: Status
|
||||||
field-value: 🛑 Blocked
|
field-value: 🛑 Blocked
|
||||||
fail-if-item-not-found: false
|
|
||||||
issue-labeled-blocked-need-repro:
|
issue-labeled-blocked-need-repro:
|
||||||
name: blocked/need-repro label added
|
name: blocked/need-repro label added
|
||||||
if: github.event.label.name == 'blocked/need-repro'
|
if: github.event.label.name == 'blocked/need-repro'
|
||||||
|
|||||||
55
.github/workflows/issue-opened.yml
vendored
55
.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
|
||||||
@@ -20,7 +19,7 @@ jobs:
|
|||||||
creds: ${{ secrets.ISSUE_TRIAGE_GH_APP_CREDS }}
|
creds: ${{ secrets.ISSUE_TRIAGE_GH_APP_CREDS }}
|
||||||
org: electron
|
org: electron
|
||||||
- name: Add to Issue Triage
|
- name: Add to Issue Triage
|
||||||
uses: dsanders11/project-actions/add-item@2134fe7cc71c58b7ae259c82a8e63c6058255678 # v1.7.0
|
uses: dsanders11/project-actions/add-item@eb760c48894b5702398529cbb8f6e98378e315d0 # v1.3.0
|
||||||
with:
|
with:
|
||||||
field: Reporter
|
field: Reporter
|
||||||
field-value: ${{ github.event.issue.user.login }}
|
field-value: ${{ github.event.issue.user.login }}
|
||||||
@@ -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
|
||||||
@@ -59,42 +57,33 @@ jobs:
|
|||||||
|
|
||||||
const electronVersion = select('heading:has(> text[value="Electron Version"]) + paragraph > text', tree)?.value.trim();
|
const electronVersion = select('heading:has(> text[value="Electron Version"]) + paragraph > text', tree)?.value.trim();
|
||||||
if (electronVersion !== undefined) {
|
if (electronVersion !== undefined) {
|
||||||
// It's possible for multiple versions to be listed -
|
const major = semver.parse(electronVersion)?.major;
|
||||||
// for now check for comma or space separated version.
|
if (major) {
|
||||||
const versions = electronVersion.split(/, | /);
|
const versionLabel = `${major}-x-y`;
|
||||||
let hasSupportedVersion = false;
|
let labelExists = false;
|
||||||
|
|
||||||
for (const version of versions) {
|
try {
|
||||||
const major = semver.coerce(version, { loose: true })?.major;
|
await github.rest.issues.getLabel({
|
||||||
if (major) {
|
owner,
|
||||||
const versionLabel = `${major}-x-y`;
|
repo,
|
||||||
let labelExists = false;
|
name: versionLabel,
|
||||||
|
});
|
||||||
try {
|
labelExists = true;
|
||||||
await github.rest.issues.getLabel({
|
} catch {}
|
||||||
owner,
|
|
||||||
repo,
|
|
||||||
name: versionLabel,
|
|
||||||
});
|
|
||||||
labelExists = true;
|
|
||||||
} catch {}
|
|
||||||
|
|
||||||
|
if (labelExists) {
|
||||||
|
// Check if it's an unsupported major
|
||||||
const { ElectronVersions } = await import('${{ github.workspace }}/node_modules/@electron/fiddle-core/dist/index.js');
|
const { ElectronVersions } = await import('${{ github.workspace }}/node_modules/@electron/fiddle-core/dist/index.js');
|
||||||
const electronVersions = await ElectronVersions.create(undefined, { ignoreCache: true });
|
const versions = await ElectronVersions.create(undefined, { ignoreCache: true });
|
||||||
const validVersions = [...electronVersions.supportedMajors, ...electronVersions.prereleaseMajors];
|
|
||||||
|
|
||||||
if (validVersions.includes(major)) {
|
const validVersions = [...versions.supportedMajors, ...versions.prereleaseMajors];
|
||||||
hasSupportedVersion = true;
|
if (!validVersions.includes(major)) {
|
||||||
if (labelExists) {
|
core.setOutput('unsupportedMajor', true);
|
||||||
labels.push(versionLabel);
|
labels.push('blocked/need-info ❌');
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!hasSupportedVersion) {
|
labels.push(versionLabel);
|
||||||
core.setOutput('unsupportedMajor', true);
|
}
|
||||||
labels.push('blocked/need-info ❌');
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
28
.github/workflows/issue-transferred.yml
vendored
28
.github/workflows/issue-transferred.yml
vendored
@@ -1,28 +0,0 @@
|
|||||||
name: Issue Transferred
|
|
||||||
|
|
||||||
on:
|
|
||||||
issues:
|
|
||||||
types: [transferred]
|
|
||||||
|
|
||||||
permissions: {}
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
issue-transferred:
|
|
||||||
name: Issue Transferred
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
permissions: {}
|
|
||||||
if: ${{ !github.event.changes.new_repository.private }}
|
|
||||||
steps:
|
|
||||||
- name: Generate GitHub App token
|
|
||||||
uses: electron/github-app-auth-action@384fd19694fe7b6dcc9a684746c6976ad78228ae # v1.1.1
|
|
||||||
id: generate-token
|
|
||||||
with:
|
|
||||||
creds: ${{ secrets.ISSUE_TRIAGE_GH_APP_CREDS }}
|
|
||||||
org: electron
|
|
||||||
- name: Remove from issue triage
|
|
||||||
uses: dsanders11/project-actions/delete-item@2134fe7cc71c58b7ae259c82a8e63c6058255678 # v1.7.0
|
|
||||||
with:
|
|
||||||
token: ${{ steps.generate-token.outputs.token }}
|
|
||||||
project-number: 90
|
|
||||||
item: ${{ github.event.changes.new_issue.html_url }}
|
|
||||||
fail-if-item-not-found: false
|
|
||||||
8
.github/workflows/issue-unlabeled.yml
vendored
8
.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
|
||||||
@@ -31,10 +30,9 @@ jobs:
|
|||||||
org: electron
|
org: electron
|
||||||
- name: Set status
|
- name: Set status
|
||||||
if: ${{ steps.check-for-blocked-labels.outputs.NOT_BLOCKED }}
|
if: ${{ steps.check-for-blocked-labels.outputs.NOT_BLOCKED }}
|
||||||
uses: dsanders11/project-actions/edit-item@2134fe7cc71c58b7ae259c82a8e63c6058255678 # v1.7.0
|
uses: dsanders11/project-actions/edit-item@eb760c48894b5702398529cbb8f6e98378e315d0 # v1.3.0
|
||||||
with:
|
with:
|
||||||
token: ${{ steps.generate-token.outputs.token }}
|
token: ${{ steps.generate-token.outputs.token }}
|
||||||
project-number: 90
|
project-number: 90
|
||||||
field: Status
|
field: Status
|
||||||
field-value: 📥 Was Blocked
|
field-value: 📥 Was Blocked
|
||||||
fail-if-item-not-found: false
|
|
||||||
|
|||||||
41
.github/workflows/linux-publish.yml
vendored
41
.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: 'a82b87d7a4f5ff0cab61405f8151ac4cf4942aeb'
|
default: 'bc2f48b2415a670de18d13605b1cf0eb5fdbaae1'
|
||||||
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,10 @@ 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 }}
|
|
||||||
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@11bd71901bbe5b1630ceea73d27597364c9af683
|
uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938
|
||||||
with:
|
with:
|
||||||
path: src/electron
|
path: src/electron
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
@@ -43,61 +38,49 @@ jobs:
|
|||||||
uses: ./src/electron/.github/actions/checkout
|
uses: ./src/electron/.github/actions/checkout
|
||||||
|
|
||||||
publish-x64:
|
publish-x64:
|
||||||
uses: ./.github/workflows/pipeline-segment-electron-publish.yml
|
uses: ./.github/workflows/pipeline-segment-electron-build.yml
|
||||||
permissions:
|
|
||||||
artifact-metadata: write
|
|
||||||
attestations: write
|
|
||||||
contents: read
|
|
||||||
id-token: write
|
|
||||||
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-publish.yml
|
uses: ./.github/workflows/pipeline-segment-electron-build.yml
|
||||||
permissions:
|
|
||||||
artifact-metadata: write
|
|
||||||
attestations: write
|
|
||||||
contents: read
|
|
||||||
id-token: write
|
|
||||||
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-publish.yml
|
uses: ./.github/workflows/pipeline-segment-electron-build.yml
|
||||||
permissions:
|
|
||||||
artifact-metadata: write
|
|
||||||
attestations: write
|
|
||||||
contents: read
|
|
||||||
id-token: write
|
|
||||||
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
|
||||||
|
|||||||
40
.github/workflows/macos-publish.yml
vendored
40
.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: 'a82b87d7a4f5ff0cab61405f8151ac4cf4942aeb'
|
default: 'bc2f48b2415a670de18d13605b1cf0eb5fdbaae1'
|
||||||
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,10 @@ 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 }}
|
|
||||||
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@11bd71901bbe5b1630ceea73d27597364c9af683
|
uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938
|
||||||
with:
|
with:
|
||||||
path: src/electron
|
path: src/electron
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
@@ -44,15 +39,9 @@ jobs:
|
|||||||
uses: ./src/electron/.github/actions/checkout
|
uses: ./src/electron/.github/actions/checkout
|
||||||
with:
|
with:
|
||||||
generate-sas-token: 'true'
|
generate-sas-token: 'true'
|
||||||
target-platform: macos
|
|
||||||
|
|
||||||
publish-x64-darwin:
|
publish-x64-darwin:
|
||||||
uses: ./.github/workflows/pipeline-segment-electron-publish.yml
|
uses: ./.github/workflows/pipeline-segment-electron-build.yml
|
||||||
permissions:
|
|
||||||
artifact-metadata: write
|
|
||||||
attestations: write
|
|
||||||
contents: read
|
|
||||||
id-token: write
|
|
||||||
needs: checkout-macos
|
needs: checkout-macos
|
||||||
with:
|
with:
|
||||||
environment: production-release
|
environment: production-release
|
||||||
@@ -67,12 +56,7 @@ jobs:
|
|||||||
secrets: inherit
|
secrets: inherit
|
||||||
|
|
||||||
publish-x64-mas:
|
publish-x64-mas:
|
||||||
uses: ./.github/workflows/pipeline-segment-electron-publish.yml
|
uses: ./.github/workflows/pipeline-segment-electron-build.yml
|
||||||
permissions:
|
|
||||||
artifact-metadata: write
|
|
||||||
attestations: write
|
|
||||||
contents: read
|
|
||||||
id-token: write
|
|
||||||
needs: checkout-macos
|
needs: checkout-macos
|
||||||
with:
|
with:
|
||||||
environment: production-release
|
environment: production-release
|
||||||
@@ -87,12 +71,7 @@ jobs:
|
|||||||
secrets: inherit
|
secrets: inherit
|
||||||
|
|
||||||
publish-arm64-darwin:
|
publish-arm64-darwin:
|
||||||
uses: ./.github/workflows/pipeline-segment-electron-publish.yml
|
uses: ./.github/workflows/pipeline-segment-electron-build.yml
|
||||||
permissions:
|
|
||||||
artifact-metadata: write
|
|
||||||
attestations: write
|
|
||||||
contents: read
|
|
||||||
id-token: write
|
|
||||||
needs: checkout-macos
|
needs: checkout-macos
|
||||||
with:
|
with:
|
||||||
environment: production-release
|
environment: production-release
|
||||||
@@ -107,12 +86,7 @@ jobs:
|
|||||||
secrets: inherit
|
secrets: inherit
|
||||||
|
|
||||||
publish-arm64-mas:
|
publish-arm64-mas:
|
||||||
uses: ./.github/workflows/pipeline-segment-electron-publish.yml
|
uses: ./.github/workflows/pipeline-segment-electron-build.yml
|
||||||
permissions:
|
|
||||||
artifact-metadata: write
|
|
||||||
attestations: write
|
|
||||||
contents: read
|
|
||||||
id-token: write
|
|
||||||
needs: checkout-macos
|
needs: checkout-macos
|
||||||
with:
|
with:
|
||||||
environment: production-release
|
environment: production-release
|
||||||
|
|||||||
@@ -1,20 +1,16 @@
|
|||||||
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: ${{ !contains(fromJSON('["MEMBER", "OWNER"]'), github.event.pull_request.author_association) && 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
|
||||||
@@ -28,7 +24,7 @@ jobs:
|
|||||||
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
|
||||||
@@ -38,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@11bd71901bbe5b1630ceea73d27597364c9af683
|
uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938
|
||||||
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@11bd71901bbe5b1630ceea73d27597364c9af683
|
|
||||||
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
|
||||||
|
|||||||
27
.github/workflows/pipeline-electron-lint.yml
vendored
27
.github/workflows/pipeline-electron-lint.yml
vendored
@@ -8,8 +8,6 @@ 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 }}
|
||||||
@@ -20,14 +18,12 @@ env:
|
|||||||
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@11bd71901bbe5b1630ceea73d27597364c9af683
|
uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938
|
||||||
with:
|
with:
|
||||||
path: src/electron
|
path: src/electron
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
@@ -46,7 +42,7 @@ jobs:
|
|||||||
shell: bash
|
shell: bash
|
||||||
run: |
|
run: |
|
||||||
chromium_revision="$(grep -A1 chromium_version src/electron/DEPS | tr -d '\n' | cut -d\' -f4)"
|
chromium_revision="$(grep -A1 chromium_version src/electron/DEPS | tr -d '\n' | cut -d\' -f4)"
|
||||||
gn_version="$(curl -sL -b ~/.gitcookies "https://chromium.googlesource.com/chromium/src/+/${chromium_revision}/DEPS?format=TEXT" | base64 -d | grep gn_version | head -n1 | cut -d\' -f4)"
|
gn_version="$(curl -sL "https://chromium.googlesource.com/chromium/src/+/${chromium_revision}/DEPS?format=TEXT" | base64 -d | grep gn_version | head -n1 | cut -d\' -f4)"
|
||||||
|
|
||||||
cipd ensure -ensure-file - -root . <<-CIPD
|
cipd ensure -ensure-file - -root . <<-CIPD
|
||||||
\$ServiceURL https://chrome-infra-packages.appspot.com/
|
\$ServiceURL https://chrome-infra-packages.appspot.com/
|
||||||
@@ -62,12 +58,9 @@ jobs:
|
|||||||
chromium_revision="$(grep -A1 chromium_version src/electron/DEPS | tr -d '\n' | cut -d\' -f4)"
|
chromium_revision="$(grep -A1 chromium_version src/electron/DEPS | tr -d '\n' | cut -d\' -f4)"
|
||||||
|
|
||||||
mkdir -p src/buildtools
|
mkdir -p src/buildtools
|
||||||
curl -sL -b ~/.gitcookies "https://chromium.googlesource.com/chromium/src/+/${chromium_revision}/buildtools/DEPS?format=TEXT" | base64 -d > src/buildtools/DEPS
|
curl -sL "https://chromium.googlesource.com/chromium/src/+/${chromium_revision}/buildtools/DEPS?format=TEXT" | base64 -d > src/buildtools/DEPS
|
||||||
|
|
||||||
gclient sync --spec="solutions=[{'name':'src/buildtools','url':None,'deps_file':'DEPS','custom_vars':{'process_deps':True},'managed':False}]"
|
gclient sync --spec="solutions=[{'name':'src/buildtools','url':None,'deps_file':'DEPS','custom_vars':{'process_deps':True},'managed':False}]"
|
||||||
- name: Add ESLint problem matcher
|
|
||||||
shell: bash
|
|
||||||
run: echo "::add-matcher::src/electron/.github/problem-matchers/eslint-stylish.json"
|
|
||||||
- name: Run Lint
|
- name: Run Lint
|
||||||
shell: bash
|
shell: bash
|
||||||
run: |
|
run: |
|
||||||
@@ -78,15 +71,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
|
||||||
- name: Check GHA Workflows
|
|
||||||
shell: bash
|
|
||||||
run: |
|
|
||||||
cd src/electron
|
|
||||||
node script/copy-pipeline-segment-publish.js --check
|
|
||||||
|
|||||||
@@ -48,18 +48,17 @@ 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 }}
|
||||||
@@ -68,14 +67,12 @@ concurrency:
|
|||||||
env:
|
env:
|
||||||
CHROMIUM_GIT_COOKIE: ${{ secrets.CHROMIUM_GIT_COOKIE }}
|
CHROMIUM_GIT_COOKIE: ${{ secrets.CHROMIUM_GIT_COOKIE }}
|
||||||
CHROMIUM_GIT_COOKIE_WINDOWS_STRING: ${{ secrets.CHROMIUM_GIT_COOKIE_WINDOWS_STRING }}
|
CHROMIUM_GIT_COOKIE_WINDOWS_STRING: ${{ secrets.CHROMIUM_GIT_COOKIE_WINDOWS_STRING }}
|
||||||
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@11bd71901bbe5b1630ceea73d27597364c9af683
|
uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938
|
||||||
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,9 +102,9 @@ 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@49933ea5288caeca8642d1e84afbd3f7d6820020
|
uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6
|
||||||
with:
|
with:
|
||||||
node-version: 20.19.x
|
node-version: 20.11.x
|
||||||
cache: yarn
|
cache: yarn
|
||||||
cache-dependency-path: src/electron/yarn.lock
|
cache-dependency-path: src/electron/yarn.lock
|
||||||
- name: Install Dependencies
|
- name: Install Dependencies
|
||||||
@@ -146,8 +129,24 @@ jobs:
|
|||||||
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 Cookie
|
||||||
uses: ./src/electron/.github/actions/set-chromium-cookie
|
uses: ./src/electron/.github/actions/set-chromium-cookie
|
||||||
- name: Install Build Tools
|
- name: Get Depot Tools
|
||||||
uses: ./src/electron/.github/actions/install-build-tools
|
timeout-minutes: 5
|
||||||
|
run: |
|
||||||
|
git clone --filter=tree:0 https://chromium.googlesource.com/chromium/tools/depot_tools.git
|
||||||
|
|
||||||
|
SEDOPTION="-i"
|
||||||
|
if [ "`uname`" = "Darwin" ]; then
|
||||||
|
SEDOPTION="-i ''"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# remove ninjalog_uploader_wrapper.py from autoninja since we don't use it and it causes problems
|
||||||
|
sed $SEDOPTION '/ninjalog_uploader_wrapper.py/d' ./depot_tools/autoninja
|
||||||
|
|
||||||
|
# Ensure depot_tools does not update.
|
||||||
|
test -d depot_tools && cd depot_tools
|
||||||
|
touch .disable_auto_update
|
||||||
|
- name: Add Depot Tools to PATH
|
||||||
|
run: echo "$(pwd)/depot_tools" >> $GITHUB_PATH
|
||||||
- name: Generate DEPS Hash
|
- name: Generate DEPS Hash
|
||||||
run: |
|
run: |
|
||||||
node src/electron/script/generate-deps-hash.js
|
node src/electron/script/generate-deps-hash.js
|
||||||
@@ -155,29 +154,27 @@ jobs:
|
|||||||
echo "DEPSHASH=$DEPSHASH" >> $GITHUB_ENV
|
echo "DEPSHASH=$DEPSHASH" >> $GITHUB_ENV
|
||||||
echo "CACHE_PATH=$DEPSHASH.tar" >> $GITHUB_ENV
|
echo "CACHE_PATH=$DEPSHASH.tar" >> $GITHUB_ENV
|
||||||
- name: Restore src cache via AZCopy
|
- name: Restore src cache via AZCopy
|
||||||
if: ${{ inputs.target-platform != 'linux' }}
|
if: ${{ inputs.target-platform == 'macos' }}
|
||||||
uses: ./src/electron/.github/actions/restore-cache-azcopy
|
uses: ./src/electron/.github/actions/restore-cache-azcopy
|
||||||
with:
|
|
||||||
target-platform: ${{ inputs.target-platform }}
|
|
||||||
- name: Restore src cache via AKS
|
- name: Restore src cache via AKS
|
||||||
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 src via gclient sync
|
||||||
|
if: ${{ inputs.target-platform == 'win' }}
|
||||||
|
uses: ./src/electron/.github/actions/checkout
|
||||||
|
with:
|
||||||
|
use-cache: 'false'
|
||||||
- name: Checkout Electron
|
- name: Checkout Electron
|
||||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
|
uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938
|
||||||
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: Fix Sync
|
- name: Install Build Tools
|
||||||
if: ${{ inputs.target-platform != 'linux' }}
|
uses: ./src/electron/.github/actions/install-build-tools
|
||||||
uses: ./src/electron/.github/actions/fix-sync
|
|
||||||
with:
|
|
||||||
target-platform: ${{ inputs.target-platform }}
|
|
||||||
env:
|
|
||||||
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 +184,12 @@ 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: Fix Sync (macOS)
|
||||||
|
if: ${{ inputs.target-platform == 'macos' }}
|
||||||
|
uses: ./src/electron/.github/actions/fix-sync-macos
|
||||||
|
- 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 +202,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@11bd71901bbe5b1630ceea73d27597364c9af683
|
uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938
|
||||||
with:
|
with:
|
||||||
path: src/electron
|
path: src/electron
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
@@ -69,9 +65,7 @@ jobs:
|
|||||||
sudo rm -rf $TMPDIR/del-target
|
sudo rm -rf $TMPDIR/del-target
|
||||||
- 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
|
|
||||||
uses: ./src/electron/.github/actions/set-chromium-cookie
|
|
||||||
- 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
|
||||||
@@ -87,13 +81,9 @@ jobs:
|
|||||||
- name: Restore src cache via AZCopy
|
- name: Restore src cache via AZCopy
|
||||||
if: ${{ inputs.target-platform == 'macos' }}
|
if: ${{ inputs.target-platform == 'macos' }}
|
||||||
uses: ./src/electron/.github/actions/restore-cache-azcopy
|
uses: ./src/electron/.github/actions/restore-cache-azcopy
|
||||||
with:
|
|
||||||
target-platform: ${{ inputs.target-platform }}
|
|
||||||
- name: Restore src cache via AKS
|
- name: Restore src cache via AKS
|
||||||
if: ${{ inputs.target-platform == 'linux' || inputs.target-platform == 'win' }}
|
if: ${{ inputs.target-platform == 'linux' || inputs.target-platform == 'win' }}
|
||||||
uses: ./src/electron/.github/actions/restore-cache-aks
|
uses: ./src/electron/.github/actions/restore-cache-aks
|
||||||
with:
|
|
||||||
target-platform: ${{ inputs.target-platform }}
|
|
||||||
- name: Run Electron Only Hooks
|
- name: Run Electron Only Hooks
|
||||||
run: |
|
run: |
|
||||||
echo "solutions=[{'name':'src/electron','url':None,'deps_file':'DEPS','custom_vars':{'process_deps':False},'managed':False}]" > tmpgclient
|
echo "solutions=[{'name':'src/electron','url':None,'deps_file':'DEPS','custom_vars':{'process_deps':False},'managed':False}]" > tmpgclient
|
||||||
@@ -115,7 +105,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@11bd71901bbe5b1630ceea73d27597364c9af683
|
uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938
|
||||||
with:
|
with:
|
||||||
path: src/electron
|
path: src/electron
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
|
|||||||
@@ -1,237 +0,0 @@
|
|||||||
# AUTOGENERATED FILE - DO NOT EDIT MANUALLY
|
|
||||||
# ONLY EDIT .github/workflows/pipeline-segment-electron-build.yml
|
|
||||||
|
|
||||||
name: Pipeline Segment - Electron Build
|
|
||||||
on:
|
|
||||||
workflow_call:
|
|
||||||
inputs:
|
|
||||||
environment:
|
|
||||||
description: using the production or testing environment
|
|
||||||
required: false
|
|
||||||
type: string
|
|
||||||
target-platform:
|
|
||||||
type: string
|
|
||||||
description: Platform to run on, can be macos, win or linux
|
|
||||||
required: true
|
|
||||||
target-arch:
|
|
||||||
type: string
|
|
||||||
description: Arch to build for, can be x64, arm64, ia32 or arm
|
|
||||||
required: true
|
|
||||||
target-variant:
|
|
||||||
type: string
|
|
||||||
description: Variant to build for, no effect on non-macOS target platforms. Can
|
|
||||||
be darwin, mas or all.
|
|
||||||
default: all
|
|
||||||
build-runs-on:
|
|
||||||
type: string
|
|
||||||
description: What host to run the build
|
|
||||||
required: true
|
|
||||||
build-container:
|
|
||||||
type: string
|
|
||||||
description: JSON container information for aks runs-on
|
|
||||||
required: false
|
|
||||||
default: '{"image":null}'
|
|
||||||
is-release:
|
|
||||||
description: Whether this build job is a release job
|
|
||||||
required: true
|
|
||||||
type: boolean
|
|
||||||
default: false
|
|
||||||
gn-build-type:
|
|
||||||
description: The gn build type - testing or release
|
|
||||||
required: true
|
|
||||||
type: string
|
|
||||||
default: testing
|
|
||||||
generate-symbols:
|
|
||||||
description: Whether or not to generate symbols
|
|
||||||
required: true
|
|
||||||
type: boolean
|
|
||||||
default: false
|
|
||||||
upload-to-storage:
|
|
||||||
description: Whether or not to upload build artifacts to external storage
|
|
||||||
required: true
|
|
||||||
type: string
|
|
||||||
default: "0"
|
|
||||||
is-asan:
|
|
||||||
description: Building the Address Sanitizer (ASan) Linux build
|
|
||||||
required: false
|
|
||||||
type: boolean
|
|
||||||
default: false
|
|
||||||
enable-ssh:
|
|
||||||
description: Enable SSH debugging
|
|
||||||
required: false
|
|
||||||
type: boolean
|
|
||||||
default: false
|
|
||||||
permissions: {}
|
|
||||||
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 }}
|
|
||||||
cancel-in-progress: ${{ github.ref_protected != true }}
|
|
||||||
env:
|
|
||||||
CHROMIUM_GIT_COOKIE: ${{ secrets.CHROMIUM_GIT_COOKIE }}
|
|
||||||
CHROMIUM_GIT_COOKIE_WINDOWS_STRING: ${{ secrets.CHROMIUM_GIT_COOKIE_WINDOWS_STRING }}
|
|
||||||
DD_API_KEY: ${{ secrets.DD_API_KEY }}
|
|
||||||
ELECTRON_ARTIFACTS_BLOB_STORAGE: ${{ secrets.ELECTRON_ARTIFACTS_BLOB_STORAGE }}
|
|
||||||
ELECTRON_RBE_JWT: ${{ secrets.ELECTRON_RBE_JWT }}
|
|
||||||
SUDOWOODO_EXCHANGE_URL: ${{ secrets.SUDOWOODO_EXCHANGE_URL }}
|
|
||||||
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' }}
|
|
||||||
ELECTRON_OUT_DIR: Default
|
|
||||||
ACTIONS_STEP_DEBUG: ${{ secrets.ACTIONS_STEP_DEBUG }}
|
|
||||||
jobs:
|
|
||||||
build:
|
|
||||||
defaults:
|
|
||||||
run:
|
|
||||||
shell: bash
|
|
||||||
runs-on: ${{ inputs.build-runs-on }}
|
|
||||||
permissions:
|
|
||||||
artifact-metadata: write
|
|
||||||
attestations: write
|
|
||||||
contents: read
|
|
||||||
id-token: write
|
|
||||||
container: ${{ fromJSON(inputs.build-container) }}
|
|
||||||
environment: ${{ inputs.environment }}
|
|
||||||
env:
|
|
||||||
TARGET_ARCH: ${{ inputs.target-arch }}
|
|
||||||
TARGET_PLATFORM: ${{ inputs.target-platform }}
|
|
||||||
steps:
|
|
||||||
- name: Create src dir
|
|
||||||
run: |
|
|
||||||
mkdir src
|
|
||||||
- name: Checkout Electron
|
|
||||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
|
|
||||||
with:
|
|
||||||
path: src/electron
|
|
||||||
fetch-depth: 0
|
|
||||||
ref: ${{ github.event.pull_request.head.sha }}
|
|
||||||
- name: Setup SSH Debugging
|
|
||||||
if: ${{ inputs.target-platform == 'macos' && (inputs.enable-ssh ||
|
|
||||||
env.ACTIONS_STEP_DEBUG == 'true') }}
|
|
||||||
uses: ./src/electron/.github/actions/ssh-debug
|
|
||||||
with:
|
|
||||||
tunnel: "true"
|
|
||||||
env:
|
|
||||||
CLOUDFLARE_TUNNEL_CERT: ${{ secrets.CLOUDFLARE_TUNNEL_CERT }}
|
|
||||||
CLOUDFLARE_TUNNEL_HOSTNAME: ${{ vars.CLOUDFLARE_TUNNEL_HOSTNAME }}
|
|
||||||
CLOUDFLARE_USER_CA_CERT: ${{ secrets.CLOUDFLARE_USER_CA_CERT }}
|
|
||||||
AUTHORIZED_USERS: ${{ secrets.SSH_DEBUG_AUTHORIZED_USERS }}
|
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
- name: Free up space (macOS)
|
|
||||||
if: ${{ inputs.target-platform == 'macos' }}
|
|
||||||
uses: ./src/electron/.github/actions/free-space-macos
|
|
||||||
- name: Check disk space after freeing up space
|
|
||||||
if: ${{ inputs.target-platform == 'macos' }}
|
|
||||||
run: df -h
|
|
||||||
- name: Setup Node.js/npm
|
|
||||||
if: ${{ inputs.target-platform == 'macos' }}
|
|
||||||
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020
|
|
||||||
with:
|
|
||||||
node-version: 20.19.x
|
|
||||||
cache: yarn
|
|
||||||
cache-dependency-path: src/electron/yarn.lock
|
|
||||||
- name: Install Dependencies
|
|
||||||
uses: ./src/electron/.github/actions/install-dependencies
|
|
||||||
- name: Install AZCopy
|
|
||||||
if: ${{ inputs.target-platform == 'macos' }}
|
|
||||||
run: brew install azcopy
|
|
||||||
- name: Set GN_EXTRA_ARGS for Linux
|
|
||||||
if: ${{ inputs.target-platform == 'linux' }}
|
|
||||||
run: >
|
|
||||||
if [ "${{ inputs.target-arch }}" = "arm" ]; then
|
|
||||||
if [ "${{ inputs.is-release }}" = true ]; then
|
|
||||||
GN_EXTRA_ARGS='target_cpu="arm" build_tflite_with_xnnpack=false symbol_level=1'
|
|
||||||
else
|
|
||||||
GN_EXTRA_ARGS='target_cpu="arm" build_tflite_with_xnnpack=false'
|
|
||||||
fi
|
|
||||||
elif [ "${{ inputs.target-arch }}" = "arm64" ]; then
|
|
||||||
GN_EXTRA_ARGS='target_cpu="arm64" fatal_linker_warnings=false enable_linux_installer=false'
|
|
||||||
elif [ "${{ inputs.is-asan }}" = true ]; then
|
|
||||||
GN_EXTRA_ARGS='is_asan=true'
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "GN_EXTRA_ARGS=$GN_EXTRA_ARGS" >> $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: 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 AZCopy
|
|
||||||
if: ${{ inputs.target-platform != 'linux' }}
|
|
||||||
uses: ./src/electron/.github/actions/restore-cache-azcopy
|
|
||||||
with:
|
|
||||||
target-platform: ${{ inputs.target-platform }}
|
|
||||||
- name: Restore src cache via AKS
|
|
||||||
if: ${{ inputs.target-platform == 'linux' }}
|
|
||||||
uses: ./src/electron/.github/actions/restore-cache-aks
|
|
||||||
- name: Checkout Electron
|
|
||||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
|
|
||||||
with:
|
|
||||||
path: src/electron
|
|
||||||
fetch-depth: 0
|
|
||||||
ref: ${{ github.event.pull_request.head.sha }}
|
|
||||||
- name: Fix Sync
|
|
||||||
if: ${{ inputs.target-platform != 'linux' }}
|
|
||||||
uses: ./src/electron/.github/actions/fix-sync
|
|
||||||
with:
|
|
||||||
target-platform: ${{ inputs.target-platform }}
|
|
||||||
env:
|
|
||||||
ELECTRON_DEPOT_TOOLS_DISABLE_LOG: true
|
|
||||||
- name: Init Build Tools
|
|
||||||
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
|
|
||||||
- name: Run Electron Only Hooks
|
|
||||||
run: |
|
|
||||||
e d gclient runhooks --spec="solutions=[{'name':'src/electron','url':None,'deps_file':'DEPS','custom_vars':{'process_deps':False},'managed':False}]"
|
|
||||||
- name: Regenerate DEPS Hash
|
|
||||||
run: >
|
|
||||||
(cd src/electron && git checkout .) && node
|
|
||||||
src/electron/script/generate-deps-hash.js
|
|
||||||
|
|
||||||
echo "DEPSHASH=$(cat src/electron/.depshash)" >> $GITHUB_ENV
|
|
||||||
- name: Add CHROMIUM_BUILDTOOLS_PATH to env
|
|
||||||
run: echo "CHROMIUM_BUILDTOOLS_PATH=$(pwd)/src/buildtools" >> $GITHUB_ENV
|
|
||||||
- name: Free up space (macOS)
|
|
||||||
if: ${{ inputs.target-platform == 'macos' }}
|
|
||||||
uses: ./src/electron/.github/actions/free-space-macos
|
|
||||||
- name: Build Electron
|
|
||||||
if: ${{ inputs.target-platform != 'macos' || (inputs.target-variant == 'all' ||
|
|
||||||
inputs.target-variant == 'darwin') }}
|
|
||||||
uses: ./src/electron/.github/actions/build-electron
|
|
||||||
with:
|
|
||||||
target-arch: ${{ inputs.target-arch }}
|
|
||||||
target-platform: ${{ inputs.target-platform }}
|
|
||||||
artifact-platform: ${{ inputs.target-platform == 'macos' && 'darwin' ||
|
|
||||||
inputs.target-platform }}
|
|
||||||
is-release: ${{ inputs.is-release }}
|
|
||||||
generate-symbols: ${{ inputs.generate-symbols }}
|
|
||||||
upload-to-storage: ${{ inputs.upload-to-storage }}
|
|
||||||
is-asan: ${{ inputs.is-asan }}
|
|
||||||
- name: Set GN_EXTRA_ARGS for MAS Build
|
|
||||||
if: ${{ inputs.target-platform == 'macos' && (inputs.target-variant == 'all' ||
|
|
||||||
inputs.target-variant == 'mas') }}
|
|
||||||
run: |
|
|
||||||
echo "MAS_BUILD=true" >> $GITHUB_ENV
|
|
||||||
GN_EXTRA_ARGS='is_mas_build=true'
|
|
||||||
echo "GN_EXTRA_ARGS=$GN_EXTRA_ARGS" >> $GITHUB_ENV
|
|
||||||
- name: Build Electron (MAS)
|
|
||||||
if: ${{ inputs.target-platform == 'macos' && (inputs.target-variant == 'all' ||
|
|
||||||
inputs.target-variant == 'mas') }}
|
|
||||||
uses: ./src/electron/.github/actions/build-electron
|
|
||||||
with:
|
|
||||||
target-arch: ${{ inputs.target-arch }}
|
|
||||||
target-platform: ${{ inputs.target-platform }}
|
|
||||||
artifact-platform: mas
|
|
||||||
is-release: ${{ inputs.is-release }}
|
|
||||||
generate-symbols: ${{ inputs.generate-symbols }}
|
|
||||||
upload-to-storage: ${{ inputs.upload-to-storage }}
|
|
||||||
step-suffix: (mas)
|
|
||||||
@@ -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_COOKIE: ${{ secrets.CHROMIUM_GIT_COOKIE }}
|
||||||
CHROMIUM_GIT_COOKIE_WINDOWS_STRING: ${{ secrets.CHROMIUM_GIT_COOKIE_WINDOWS_STRING }}
|
CHROMIUM_GIT_COOKIE_WINDOWS_STRING: ${{ secrets.CHROMIUM_GIT_COOKIE_WINDOWS_STRING }}
|
||||||
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,11 +62,26 @@ 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/
|
||||||
|
- 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@49933ea5288caeca8642d1e84afbd3f7d6820020
|
uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6
|
||||||
with:
|
with:
|
||||||
node-version: 20.19.x
|
node-version: 20.11.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: |
|
||||||
@@ -92,9 +100,9 @@ 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"
|
|
||||||
)
|
)
|
||||||
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
|
||||||
@@ -107,26 +115,12 @@ jobs:
|
|||||||
configure_sys_tccdb "$values"
|
configure_sys_tccdb "$values"
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
- name: Turn off the unexpectedly quit dialog on macOS
|
|
||||||
if: ${{ inputs.target-platform == 'macos' }}
|
|
||||||
run: defaults write com.apple.CrashReporter DialogType server
|
|
||||||
- name: Checkout Electron
|
- name: Checkout Electron
|
||||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
|
uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938
|
||||||
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: 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 Cookie
|
||||||
@@ -137,10 +131,6 @@ jobs:
|
|||||||
git config --global core.filemode false
|
git config --global core.filemode false
|
||||||
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.longpaths true
|
|
||||||
git config --global core.preloadindex true
|
|
||||||
git config --global core.longpaths true
|
|
||||||
git clone --filter=tree:0 https://chromium.googlesource.com/chromium/tools/depot_tools.git
|
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
|
||||||
@@ -154,41 +144,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@d3f86a106a0bac45b974a628896c90dbdf5c8093
|
uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16
|
||||||
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@d3f86a106a0bac45b974a628896c90dbdf5c8093
|
uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16
|
||||||
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
|
||||||
|
unzip -:o chromedriver.zip
|
||||||
|
unzip -:o mksnapshot.zip
|
||||||
- name: Import & Trust Self-Signed Codesigning Cert on MacOS
|
- name: Import & Trust Self-Signed Codesigning Cert on MacOS
|
||||||
if: ${{ inputs.target-platform == 'macos' && inputs.target-arch == 'x64' }}
|
if: ${{ inputs.target-platform == 'macos' && inputs.target-arch == 'x64' }}
|
||||||
run: |
|
run: |
|
||||||
sudo security authorizationdb write com.apple.trust-settings.admin allow
|
sudo security authorizationdb write com.apple.trust-settings.admin allow
|
||||||
cd src/electron
|
cd src/electron
|
||||||
./script/codesign/generate-identity.sh
|
./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: |
|
||||||
@@ -208,7 +207,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 .
|
||||||
@@ -225,14 +224,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
|
||||||
@@ -244,14 +238,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@ea165f8d65b6e75b540449e92b4886f43607fa02
|
uses: actions/upload-artifact@50769540e7f4bd5e21e526ee35c689e35e0d6874
|
||||||
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,8 +26,6 @@ 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 }}
|
||||||
@@ -40,9 +38,7 @@ env:
|
|||||||
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 +46,11 @@ jobs:
|
|||||||
container: ${{ fromJSON(inputs.test-container) }}
|
container: ${{ fromJSON(inputs.test-container) }}
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout Electron
|
- name: Checkout Electron
|
||||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
|
uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938
|
||||||
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
|
|
||||||
uses: ./src/electron/.github/actions/set-chromium-cookie
|
|
||||||
- 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
|
||||||
@@ -64,13 +58,24 @@ jobs:
|
|||||||
e init -f --root=$(pwd) --out=Default ${{ inputs.gn-build-type }} --import ${{ inputs.gn-build-type }} --target-cpu ${{ inputs.target-arch }}
|
e init -f --root=$(pwd) --out=Default ${{ inputs.gn-build-type }} --import ${{ inputs.gn-build-type }} --target-cpu ${{ inputs.target-arch }}
|
||||||
- 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
|
||||||
|
uses: ./src/electron/.github/actions/set-chromium-cookie
|
||||||
|
- name: Get Depot Tools
|
||||||
|
timeout-minutes: 5
|
||||||
|
run: |
|
||||||
|
git clone --filter=tree:0 https://chromium.googlesource.com/chromium/tools/depot_tools.git
|
||||||
|
# Ensure depot_tools does not update.
|
||||||
|
test -d depot_tools && cd depot_tools
|
||||||
|
touch .disable_auto_update
|
||||||
|
- name: Add Depot Tools to PATH
|
||||||
|
run: echo "$(pwd)/depot_tools" >> $GITHUB_PATH
|
||||||
- name: Download Generated Artifacts
|
- name: Download Generated Artifacts
|
||||||
uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093
|
uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16
|
||||||
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@d3f86a106a0bac45b974a628896c90dbdf5c8093
|
uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16
|
||||||
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 +101,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 +109,11 @@ jobs:
|
|||||||
container: ${{ fromJSON(inputs.test-container) }}
|
container: ${{ fromJSON(inputs.test-container) }}
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout Electron
|
- name: Checkout Electron
|
||||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
|
uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938
|
||||||
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
|
|
||||||
uses: ./src/electron/.github/actions/set-chromium-cookie
|
|
||||||
- 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
|
||||||
@@ -120,13 +121,24 @@ jobs:
|
|||||||
e init -f --root=$(pwd) --out=Default ${{ inputs.gn-build-type }}
|
e init -f --root=$(pwd) --out=Default ${{ inputs.gn-build-type }}
|
||||||
- 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
|
||||||
|
uses: ./src/electron/.github/actions/set-chromium-cookie
|
||||||
|
- name: Get Depot Tools
|
||||||
|
timeout-minutes: 5
|
||||||
|
run: |
|
||||||
|
git clone --filter=tree:0 https://chromium.googlesource.com/chromium/tools/depot_tools.git
|
||||||
|
# Ensure depot_tools does not update.
|
||||||
|
test -d depot_tools && cd depot_tools
|
||||||
|
touch .disable_auto_update
|
||||||
|
- name: Add Depot Tools to PATH
|
||||||
|
run: echo "$(pwd)/depot_tools" >> $GITHUB_PATH
|
||||||
- name: Download Generated Artifacts
|
- name: Download Generated Artifacts
|
||||||
uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093
|
uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16
|
||||||
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@d3f86a106a0bac45b974a628896c90dbdf5c8093
|
uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16
|
||||||
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 +150,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()
|
||||||
|
|||||||
15
.github/workflows/pull-request-labeled.yml
vendored
15
.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@b0fa283ad8fea605de13dc3f449259339835fc52 # v2.1.0
|
uses: slackapi/slack-github-action@37ebaef184d7626c5f204ab8d3baff4262dd30f0 # v1.27.0
|
||||||
with:
|
with:
|
||||||
webhook: ${{ secrets.BACKPORT_REQUESTED_SLACK_WEBHOOK_URL }}
|
|
||||||
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) }}
|
|
||||||
}
|
}
|
||||||
|
env:
|
||||||
|
SLACK_WEBHOOK_URL: ${{ secrets.BACKPORT_REQUESTED_SLACK_WEBHOOK_URL }}
|
||||||
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
|
||||||
@@ -38,7 +33,7 @@ jobs:
|
|||||||
creds: ${{ secrets.RELEASE_BOARD_GH_APP_CREDS }}
|
creds: ${{ secrets.RELEASE_BOARD_GH_APP_CREDS }}
|
||||||
org: electron
|
org: electron
|
||||||
- name: Set status
|
- name: Set status
|
||||||
uses: dsanders11/project-actions/edit-item@2134fe7cc71c58b7ae259c82a8e63c6058255678 # v1.7.0
|
uses: dsanders11/project-actions/edit-item@eb760c48894b5702398529cbb8f6e98378e315d0 # v1.3.0
|
||||||
with:
|
with:
|
||||||
token: ${{ steps.generate-token.outputs.token }}
|
token: ${{ steps.generate-token.outputs.token }}
|
||||||
project-number: 94
|
project-number: 94
|
||||||
|
|||||||
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@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0
|
||||||
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@05b42c624433fc40578a4040d5cf5e36ddca8cde # v2.4.2
|
uses: ossf/scorecard-action@62b2cac7ed8198b15735ed49ab1e5cf35480ba46 # v2.4.0
|
||||||
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@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
|
uses: actions/upload-artifact@50769540e7f4bd5e21e526ee35c689e35e0d6874 # v4.4.0
|
||||||
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@ce28f5bb42b7a9f2c824e633a3f6ee835bab6858 # v3.29.0
|
uses: github/codeql-action/upload-sarif@e2b3eafc8d227b0241d48be5f425d47c2d750a13 # v3.26.10
|
||||||
with:
|
with:
|
||||||
sarif_file: results.sarif
|
sarif_file: results.sarif
|
||||||
|
|||||||
3
.github/workflows/semantic.yml
vendored
3
.github/workflows/semantic.yml
vendored
@@ -7,7 +7,8 @@ on:
|
|||||||
- edited
|
- edited
|
||||||
- synchronize
|
- synchronize
|
||||||
|
|
||||||
permissions: {}
|
permissions:
|
||||||
|
contents: read
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
main:
|
main:
|
||||||
|
|||||||
3
.github/workflows/stable-prep-items.yml
vendored
3
.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
|
||||||
@@ -28,7 +27,7 @@ jobs:
|
|||||||
PROJECT_NUMBER=$(gh project list --owner electron --format json | jq -r '.projects | map(select(.title | test("^[0-9]+-x-y$"))) | max_by(.number) | .number')
|
PROJECT_NUMBER=$(gh project list --owner electron --format json | jq -r '.projects | map(select(.title | test("^[0-9]+-x-y$"))) | max_by(.number) | .number')
|
||||||
echo "PROJECT_NUMBER=$PROJECT_NUMBER" >> "$GITHUB_OUTPUT"
|
echo "PROJECT_NUMBER=$PROJECT_NUMBER" >> "$GITHUB_OUTPUT"
|
||||||
- name: Update Completed Stable Prep Items
|
- name: Update Completed Stable Prep Items
|
||||||
uses: dsanders11/project-actions/completed-by@2134fe7cc71c58b7ae259c82a8e63c6058255678 # v1.7.0
|
uses: dsanders11/project-actions/completed-by@eb760c48894b5702398529cbb8f6e98378e315d0 # v1.3.0
|
||||||
with:
|
with:
|
||||||
field: Prep Status
|
field: Prep Status
|
||||||
field-value: ✅ Complete
|
field-value: ✅ Complete
|
||||||
|
|||||||
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@5bef64f19d7facfb25b37b414482c7164d639639 # tag: v9.1.0
|
- uses: actions/stale@28ca1036281a5e5922ead5184a1bbf96e5fc984e # tag: v9.0.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"
|
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@5bef64f19d7facfb25b37b414482c7164d639639 # tag: v9.1.0
|
- uses: actions/stale@28ca1036281a5e5922ead5184a1bbf96e5fc984e # tag: v9.0.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
|
||||||
|
|||||||
44
.github/workflows/windows-publish.yml
vendored
44
.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: 'a82b87d7a4f5ff0cab61405f8151ac4cf4942aeb'
|
default: 'bc2f48b2415a670de18d13605b1cf0eb5fdbaae1'
|
||||||
required: true
|
required: true
|
||||||
upload-to-storage:
|
upload-to-storage:
|
||||||
description: 'Uploads to Azure storage'
|
description: 'Uploads to Azure storage'
|
||||||
@@ -18,21 +18,15 @@ 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
|
||||||
volumes:
|
volumes:
|
||||||
- /mnt/win-cache:/mnt/win-cache
|
- /mnt/cross-instance-cache:/mnt/cross-instance-cache
|
||||||
- /var/run/sas:/var/run/sas
|
|
||||||
env:
|
env:
|
||||||
CHROMIUM_GIT_COOKIE_WINDOWS_STRING: ${{ secrets.CHROMIUM_GIT_COOKIE_WINDOWS_STRING }}
|
|
||||||
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,27 +34,19 @@ 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@11bd71901bbe5b1630ceea73d27597364c9af683
|
uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29
|
||||||
with:
|
with:
|
||||||
path: src/electron
|
path: src/electron
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
- name: Checkout & Sync & Save
|
- name: Checkout & Sync & Save
|
||||||
uses: ./src/electron/.github/actions/checkout
|
uses: ./src/electron/.github/actions/checkout
|
||||||
with:
|
|
||||||
generate-sas-token: 'true'
|
|
||||||
target-platform: win
|
|
||||||
|
|
||||||
publish-x64-win:
|
publish-x64-win:
|
||||||
uses: ./.github/workflows/pipeline-segment-electron-publish.yml
|
uses: ./.github/workflows/pipeline-segment-electron-build.yml
|
||||||
permissions:
|
|
||||||
artifact-metadata: write
|
|
||||||
attestations: write
|
|
||||||
contents: read
|
|
||||||
id-token: write
|
|
||||||
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
|
||||||
@@ -70,16 +56,11 @@ jobs:
|
|||||||
secrets: inherit
|
secrets: inherit
|
||||||
|
|
||||||
publish-arm64-win:
|
publish-arm64-win:
|
||||||
uses: ./.github/workflows/pipeline-segment-electron-publish.yml
|
uses: ./.github/workflows/pipeline-segment-electron-build.yml
|
||||||
permissions:
|
|
||||||
artifact-metadata: write
|
|
||||||
attestations: write
|
|
||||||
contents: read
|
|
||||||
id-token: write
|
|
||||||
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
|
||||||
@@ -89,16 +70,11 @@ jobs:
|
|||||||
secrets: inherit
|
secrets: inherit
|
||||||
|
|
||||||
publish-x86-win:
|
publish-x86-win:
|
||||||
uses: ./.github/workflows/pipeline-segment-electron-publish.yml
|
uses: ./.github/workflows/pipeline-segment-electron-build.yml
|
||||||
permissions:
|
|
||||||
artifact-metadata: write
|
|
||||||
attestations: write
|
|
||||||
contents: read
|
|
||||||
id-token: write
|
|
||||||
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
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
{
|
{
|
||||||
"config": {
|
"config": {
|
||||||
"extends": "@electron/lint-roller/configs/markdownlint.json",
|
"extends": "@electron/lint-roller/configs/markdownlint.json",
|
||||||
"descriptive-link-text": false,
|
|
||||||
"link-image-style": {
|
"link-image-style": {
|
||||||
"autolink": false,
|
"autolink": false,
|
||||||
"shortcut": false
|
"shortcut": false
|
||||||
@@ -21,14 +20,12 @@
|
|||||||
"ul",
|
"ul",
|
||||||
"unknown",
|
"unknown",
|
||||||
"Tabs",
|
"Tabs",
|
||||||
"TabItem",
|
"TabItem"
|
||||||
"DocCardList",
|
|
||||||
"kbd"
|
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"no-newline-in-links": true
|
"no-newline-in-links": true
|
||||||
},
|
},
|
||||||
"customRules": [
|
"customRules": [
|
||||||
"./node_modules/@electron/lint-roller/markdownlint-rules/index.mjs"
|
"@electron/lint-roller/markdownlint-rules/"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
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
|
|
||||||
235
BUILD.gn
235
BUILD.gn
@@ -4,12 +4,12 @@ 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/electron_node.gni")
|
||||||
import("//third_party/ffmpeg/ffmpeg_options.gni")
|
import("//third_party/ffmpeg/ffmpeg_options.gni")
|
||||||
import("//tools/generate_library_loader/generate_library_loader.gni")
|
import("//tools/generate_library_loader/generate_library_loader.gni")
|
||||||
import("//tools/grit/grit_rule.gni")
|
import("//tools/grit/grit_rule.gni")
|
||||||
@@ -17,19 +17,19 @@ import("//tools/grit/repack.gni")
|
|||||||
import("//tools/v8_context_snapshot/v8_context_snapshot.gni")
|
import("//tools/v8_context_snapshot/v8_context_snapshot.gni")
|
||||||
import("//v8/gni/snapshot_toolchain.gni")
|
import("//v8/gni/snapshot_toolchain.gni")
|
||||||
import("build/asar.gni")
|
import("build/asar.gni")
|
||||||
import("build/electron_paks.gni")
|
|
||||||
import("build/extract_symbols.gni")
|
import("build/extract_symbols.gni")
|
||||||
import("build/js2c_toolchain.gni")
|
|
||||||
import("build/npm.gni")
|
import("build/npm.gni")
|
||||||
import("build/templated_file.gni")
|
import("build/templated_file.gni")
|
||||||
import("build/tsc.gni")
|
import("build/tsc.gni")
|
||||||
import("build/webpack/webpack.gni")
|
import("build/webpack/webpack.gni")
|
||||||
import("buildflags/buildflags.gni")
|
import("buildflags/buildflags.gni")
|
||||||
|
import("electron_paks.gni")
|
||||||
import("filenames.auto.gni")
|
import("filenames.auto.gni")
|
||||||
import("filenames.gni")
|
import("filenames.gni")
|
||||||
import("filenames.hunspell.gni")
|
import("filenames.hunspell.gni")
|
||||||
import("filenames.libcxx.gni")
|
import("filenames.libcxx.gni")
|
||||||
import("filenames.libcxxabi.gni")
|
import("filenames.libcxxabi.gni")
|
||||||
|
import("js2c_toolchain.gni")
|
||||||
|
|
||||||
if (is_mac) {
|
if (is_mac) {
|
||||||
import("//build/config/mac/rules.gni")
|
import("//build/config/mac/rules.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") {
|
||||||
@@ -85,10 +84,7 @@ if (is_linux) {
|
|||||||
# from the gtk library. Function signatures for which stubs are
|
# from the gtk library. Function signatures for which stubs are
|
||||||
# required should be declared in the sig files.
|
# required should be declared in the sig files.
|
||||||
generate_stubs("electron_gtk_stubs") {
|
generate_stubs("electron_gtk_stubs") {
|
||||||
sigs = [
|
sigs = [ "shell/browser/ui/electron_gdk_pixbuf.sigs" ]
|
||||||
"shell/browser/ui/electron_gdk.sigs",
|
|
||||||
"shell/browser/ui/electron_gdk_pixbuf.sigs",
|
|
||||||
]
|
|
||||||
extra_header = "shell/browser/ui/electron_gtk.fragment"
|
extra_header = "shell/browser/ui/electron_gtk.fragment"
|
||||||
output_name = "electron_gtk_stubs"
|
output_name = "electron_gtk_stubs"
|
||||||
public_deps = [ "//ui/gtk:gtk_config" ]
|
public_deps = [ "//ui/gtk:gtk_config" ]
|
||||||
@@ -225,21 +221,11 @@ webpack_build("electron_utility_bundle") {
|
|||||||
out_file = "$target_gen_dir/js2c/utility_init.js"
|
out_file = "$target_gen_dir/js2c/utility_init.js"
|
||||||
}
|
}
|
||||||
|
|
||||||
webpack_build("electron_preload_realm_bundle") {
|
|
||||||
deps = [ ":build_electron_definitions" ]
|
|
||||||
|
|
||||||
inputs = auto_filenames.preload_realm_bundle_deps
|
|
||||||
|
|
||||||
config_file = "//electron/build/webpack/webpack.config.preload_realm.js"
|
|
||||||
out_file = "$target_gen_dir/js2c/preload_realm_bundle.js"
|
|
||||||
}
|
|
||||||
|
|
||||||
action("electron_js2c") {
|
action("electron_js2c") {
|
||||||
deps = [
|
deps = [
|
||||||
":electron_browser_bundle",
|
":electron_browser_bundle",
|
||||||
":electron_isolated_renderer_bundle",
|
":electron_isolated_renderer_bundle",
|
||||||
":electron_node_bundle",
|
":electron_node_bundle",
|
||||||
":electron_preload_realm_bundle",
|
|
||||||
":electron_renderer_bundle",
|
":electron_renderer_bundle",
|
||||||
":electron_sandboxed_renderer_bundle",
|
":electron_sandboxed_renderer_bundle",
|
||||||
":electron_utility_bundle",
|
":electron_utility_bundle",
|
||||||
@@ -251,7 +237,6 @@ action("electron_js2c") {
|
|||||||
"$target_gen_dir/js2c/browser_init.js",
|
"$target_gen_dir/js2c/browser_init.js",
|
||||||
"$target_gen_dir/js2c/isolated_bundle.js",
|
"$target_gen_dir/js2c/isolated_bundle.js",
|
||||||
"$target_gen_dir/js2c/node_init.js",
|
"$target_gen_dir/js2c/node_init.js",
|
||||||
"$target_gen_dir/js2c/preload_realm_bundle.js",
|
|
||||||
"$target_gen_dir/js2c/renderer_init.js",
|
"$target_gen_dir/js2c/renderer_init.js",
|
||||||
"$target_gen_dir/js2c/sandbox_bundle.js",
|
"$target_gen_dir/js2c/sandbox_bundle.js",
|
||||||
"$target_gen_dir/js2c/utility_init.js",
|
"$target_gen_dir/js2c/utility_init.js",
|
||||||
@@ -315,7 +300,7 @@ asar("default_app_asar") {
|
|||||||
}
|
}
|
||||||
|
|
||||||
grit("resources") {
|
grit("resources") {
|
||||||
source = "build/electron_resources.grd"
|
source = "electron_resources.grd"
|
||||||
|
|
||||||
outputs = [
|
outputs = [
|
||||||
"grit/electron_resources.h",
|
"grit/electron_resources.h",
|
||||||
@@ -423,7 +408,7 @@ action("electron_generate_node_defines") {
|
|||||||
source_set("electron_lib") {
|
source_set("electron_lib") {
|
||||||
configs += [
|
configs += [
|
||||||
"//v8:external_startup_data",
|
"//v8:external_startup_data",
|
||||||
"//third_party/electron_node:node_external_config",
|
"//third_party/electron_node:node_internals",
|
||||||
]
|
]
|
||||||
|
|
||||||
public_configs = [
|
public_configs = [
|
||||||
@@ -452,8 +437,8 @@ source_set("electron_lib") {
|
|||||||
"//components/autofill/core/common:features",
|
"//components/autofill/core/common:features",
|
||||||
"//components/certificate_transparency",
|
"//components/certificate_transparency",
|
||||||
"//components/compose:buildflags",
|
"//components/compose:buildflags",
|
||||||
"//components/embedder_support:user_agent",
|
"//components/embedder_support:browser_util",
|
||||||
"//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",
|
||||||
@@ -486,7 +471,7 @@ source_set("electron_lib") {
|
|||||||
"//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",
|
||||||
@@ -499,7 +484,7 @@ source_set("electron_lib") {
|
|||||||
"//third_party/blink/public:blink_devtools_inspector_resources",
|
"//third_party/blink/public:blink_devtools_inspector_resources",
|
||||||
"//third_party/blink/public/platform/media",
|
"//third_party/blink/public/platform/media",
|
||||||
"//third_party/boringssl",
|
"//third_party/boringssl",
|
||||||
"//third_party/electron_node:libnode",
|
"//third_party/electron_node:node_lib",
|
||||||
"//third_party/inspector_protocol:crdtp",
|
"//third_party/inspector_protocol:crdtp",
|
||||||
"//third_party/leveldatabase",
|
"//third_party/leveldatabase",
|
||||||
"//third_party/libyuv",
|
"//third_party/libyuv",
|
||||||
@@ -519,10 +504,6 @@ 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",
|
||||||
@@ -538,10 +519,7 @@ source_set("electron_lib") {
|
|||||||
"//third_party/blink/renderer",
|
"//third_party/blink/renderer",
|
||||||
]
|
]
|
||||||
|
|
||||||
defines = [
|
defines = [ "V8_DEPRECATION_WARNINGS" ]
|
||||||
"BLINK_MOJO_IMPL=1",
|
|
||||||
"V8_DEPRECATION_WARNINGS",
|
|
||||||
]
|
|
||||||
libs = []
|
libs = []
|
||||||
|
|
||||||
if (is_linux) {
|
if (is_linux) {
|
||||||
@@ -555,7 +533,7 @@ source_set("electron_lib") {
|
|||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
||||||
deps += [ "//electron/build/config:generate_mas_config" ]
|
configs += [ "//electron/build/config:mas_build" ]
|
||||||
|
|
||||||
sources = filenames.lib_sources
|
sources = filenames.lib_sources
|
||||||
if (is_win) {
|
if (is_win) {
|
||||||
@@ -655,7 +633,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",
|
||||||
@@ -676,8 +653,6 @@ source_set("electron_lib") {
|
|||||||
sources += [
|
sources += [
|
||||||
"shell/browser/certificate_manager_model.cc",
|
"shell/browser/certificate_manager_model.cc",
|
||||||
"shell/browser/certificate_manager_model.h",
|
"shell/browser/certificate_manager_model.h",
|
||||||
"shell/browser/linux/x11_util.cc",
|
|
||||||
"shell/browser/linux/x11_util.h",
|
|
||||||
"shell/browser/ui/gtk_util.cc",
|
"shell/browser/ui/gtk_util.cc",
|
||||||
"shell/browser/ui/gtk_util.h",
|
"shell/browser/ui/gtk_util.h",
|
||||||
]
|
]
|
||||||
@@ -688,7 +663,6 @@ 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/native_theme:native_theme_browser",
|
||||||
"//ui/wm",
|
"//ui/wm",
|
||||||
"//ui/wm/public",
|
"//ui/wm/public",
|
||||||
@@ -734,7 +708,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",
|
||||||
@@ -779,14 +753,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) + 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"
|
||||||
@@ -830,7 +796,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 {
|
||||||
@@ -900,7 +866,6 @@ if (is_mac) {
|
|||||||
":electron_framework_resources",
|
":electron_framework_resources",
|
||||||
":electron_swiftshader_library",
|
":electron_swiftshader_library",
|
||||||
":electron_xibs",
|
":electron_xibs",
|
||||||
"//third_party/electron_node:libnode",
|
|
||||||
]
|
]
|
||||||
if (!is_mas_build) {
|
if (!is_mas_build) {
|
||||||
deps += [ ":electron_crashpad_helper" ]
|
deps += [ ":electron_crashpad_helper" ]
|
||||||
@@ -944,18 +909,17 @@ if (is_mac) {
|
|||||||
assert(defined(invoker.helper_name_suffix))
|
assert(defined(invoker.helper_name_suffix))
|
||||||
|
|
||||||
output_name = electron_helper_name + invoker.helper_name_suffix
|
output_name = electron_helper_name + invoker.helper_name_suffix
|
||||||
deps = [
|
deps = [ ":electron_framework+link" ]
|
||||||
":electron_framework+link",
|
|
||||||
"//electron/build/config:generate_mas_config",
|
|
||||||
]
|
|
||||||
if (!is_mas_build) {
|
if (!is_mas_build) {
|
||||||
deps += [ "//sandbox/mac:seatbelt" ]
|
deps += [ "//sandbox/mac:seatbelt" ]
|
||||||
}
|
}
|
||||||
defines = [ "HELPER_EXECUTABLE" ]
|
defines = [ "HELPER_EXECUTABLE" ]
|
||||||
|
configs += [ "//electron/build/config:mas_build" ]
|
||||||
sources = [
|
sources = [
|
||||||
"shell/app/electron_main_mac.cc",
|
"shell/app/electron_main_mac.cc",
|
||||||
"shell/app/uv_stdio_fix.cc",
|
"shell/app/uv_stdio_fix.cc",
|
||||||
"shell/app/uv_stdio_fix.h",
|
"shell/app/uv_stdio_fix.h",
|
||||||
|
"shell/common/electron_constants.cc",
|
||||||
]
|
]
|
||||||
include_dirs = [ "." ]
|
include_dirs = [ "." ]
|
||||||
info_plist = "shell/renderer/resources/mac/Info.plist"
|
info_plist = "shell/renderer/resources/mac/Info.plist"
|
||||||
@@ -1106,7 +1070,6 @@ if (is_mac) {
|
|||||||
":electron_app_plist",
|
":electron_app_plist",
|
||||||
":electron_app_resources",
|
":electron_app_resources",
|
||||||
":electron_fuses",
|
":electron_fuses",
|
||||||
"//electron/build/config:generate_mas_config",
|
|
||||||
"//electron/buildflags",
|
"//electron/buildflags",
|
||||||
]
|
]
|
||||||
if (is_mas_build) {
|
if (is_mas_build) {
|
||||||
@@ -1121,6 +1084,7 @@ if (is_mac) {
|
|||||||
"-rpath",
|
"-rpath",
|
||||||
"@executable_path/../Frameworks",
|
"@executable_path/../Frameworks",
|
||||||
]
|
]
|
||||||
|
configs += [ "//electron/build/config:mas_build" ]
|
||||||
}
|
}
|
||||||
|
|
||||||
if (enable_dsyms) {
|
if (enable_dsyms) {
|
||||||
@@ -1224,7 +1188,6 @@ if (is_mac) {
|
|||||||
"//components/crash/core/app",
|
"//components/crash/core/app",
|
||||||
"//content:sandbox_helper_win",
|
"//content:sandbox_helper_win",
|
||||||
"//electron/buildflags",
|
"//electron/buildflags",
|
||||||
"//third_party/electron_node:libnode",
|
|
||||||
"//ui/strings",
|
"//ui/strings",
|
||||||
]
|
]
|
||||||
|
|
||||||
@@ -1245,7 +1208,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) {
|
||||||
@@ -1263,7 +1226,7 @@ if (is_mac) {
|
|||||||
"//components/crash/core/app:run_as_crashpad_handler",
|
"//components/crash/core/app:run_as_crashpad_handler",
|
||||||
]
|
]
|
||||||
|
|
||||||
ldflags = [ "/DELAYLOAD:ffmpeg.dll" ]
|
ldflags = []
|
||||||
|
|
||||||
libs = [
|
libs = [
|
||||||
"comctl32.lib",
|
"comctl32.lib",
|
||||||
@@ -1424,18 +1387,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
|
||||||
@@ -1481,16 +1432,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" ]
|
||||||
}
|
}
|
||||||
@@ -1558,8 +1499,21 @@ group("electron") {
|
|||||||
##### node_headers
|
##### node_headers
|
||||||
|
|
||||||
node_dir = "../third_party/electron_node"
|
node_dir = "../third_party/electron_node"
|
||||||
|
node_files = read_file("$node_dir/filenames.json", "json")
|
||||||
node_headers_dir = "$root_gen_dir/node_headers"
|
node_headers_dir = "$root_gen_dir/node_headers"
|
||||||
|
|
||||||
|
header_group_index = 0
|
||||||
|
header_groups = []
|
||||||
|
foreach(header_group, node_files.headers) {
|
||||||
|
copy("node_headers_${header_group_index}") {
|
||||||
|
sources = rebase_path(header_group.files, ".", node_dir)
|
||||||
|
outputs =
|
||||||
|
[ "$node_headers_dir/${header_group.dest_dir}/{{source_file_part}}" ]
|
||||||
|
}
|
||||||
|
header_groups += [ ":node_headers_${header_group_index}" ]
|
||||||
|
header_group_index += 1
|
||||||
|
}
|
||||||
|
|
||||||
copy("zlib_headers") {
|
copy("zlib_headers") {
|
||||||
sources = [
|
sources = [
|
||||||
"$node_dir/deps/zlib/zconf.h",
|
"$node_dir/deps/zlib/zconf.h",
|
||||||
@@ -1580,19 +1534,13 @@ copy("node_gypi_headers") {
|
|||||||
action("node_version_header") {
|
action("node_version_header") {
|
||||||
inputs = [ "$node_dir/src/node_version.h" ]
|
inputs = [ "$node_dir/src/node_version.h" ]
|
||||||
outputs = [ "$node_headers_dir/include/node/node_version.h" ]
|
outputs = [ "$node_headers_dir/include/node/node_version.h" ]
|
||||||
script = "script/node/generate_node_version_header.py"
|
script = "script/generate_node_version_header.py"
|
||||||
args = rebase_path(inputs) + rebase_path(outputs)
|
args = rebase_path(inputs) + rebase_path(outputs)
|
||||||
if (node_module_version != "") {
|
if (node_module_version != "") {
|
||||||
args += [ "$node_module_version" ]
|
args += [ "$node_module_version" ]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
action("generate_node_headers") {
|
|
||||||
deps = [ ":generate_config_gypi" ]
|
|
||||||
script = "script/node/generate_node_headers.py"
|
|
||||||
outputs = [ "$root_gen_dir/node_headers.json" ]
|
|
||||||
}
|
|
||||||
|
|
||||||
action("tar_node_headers") {
|
action("tar_node_headers") {
|
||||||
deps = [ ":copy_node_headers" ]
|
deps = [ ":copy_node_headers" ]
|
||||||
outputs = [ "$root_gen_dir/node_headers.tar.gz" ]
|
outputs = [ "$root_gen_dir/node_headers.tar.gz" ]
|
||||||
@@ -1604,112 +1552,13 @@ action("tar_node_headers") {
|
|||||||
}
|
}
|
||||||
|
|
||||||
group("copy_node_headers") {
|
group("copy_node_headers") {
|
||||||
public_deps = [
|
public_deps = header_groups + [
|
||||||
":generate_node_headers",
|
":node_gypi_headers",
|
||||||
":node_gypi_headers",
|
":node_version_header",
|
||||||
":node_version_header",
|
":zlib_headers",
|
||||||
":zlib_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
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -71,4 +71,4 @@ See [Coding Style](https://electronjs.org/docs/development/coding-style) for inf
|
|||||||
## Further Reading
|
## Further Reading
|
||||||
|
|
||||||
For more in-depth guides on developing Electron, see
|
For more in-depth guides on developing Electron, see
|
||||||
[/docs/development](/docs/development/README.md).
|
[/docs/development](/docs/development/README.md)
|
||||||
|
|||||||
15
DEPS
15
DEPS
@@ -2,9 +2,9 @@ gclient_gn_args_from = 'src'
|
|||||||
|
|
||||||
vars = {
|
vars = {
|
||||||
'chromium_version':
|
'chromium_version':
|
||||||
'140.0.7339.249',
|
'130.0.6723.191',
|
||||||
'node_version':
|
'node_version':
|
||||||
'v22.22.0',
|
'v20.18.3',
|
||||||
'nan_version':
|
'nan_version':
|
||||||
'e14bdcd1f72d62bca1d541b66da43130384ec213',
|
'e14bdcd1f72d62bca1d541b66da43130384ec213',
|
||||||
'squirrel.mac_version':
|
'squirrel.mac_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,
|
||||||
|
|
||||||
@@ -59,6 +62,10 @@ vars = {
|
|||||||
|
|
||||||
'checkout_nacl':
|
'checkout_nacl':
|
||||||
False,
|
False,
|
||||||
|
'checkout_libaom':
|
||||||
|
True,
|
||||||
|
'checkout_oculus_sdk':
|
||||||
|
False,
|
||||||
'checkout_openxr':
|
'checkout_openxr':
|
||||||
False,
|
False,
|
||||||
'build_with_chromium':
|
'build_with_chromium':
|
||||||
@@ -67,6 +74,8 @@ vars = {
|
|||||||
False,
|
False,
|
||||||
'checkout_android_native_support':
|
'checkout_android_native_support':
|
||||||
False,
|
False,
|
||||||
|
'checkout_google_benchmark':
|
||||||
|
False,
|
||||||
'checkout_clang_tidy':
|
'checkout_clang_tidy':
|
||||||
True,
|
True,
|
||||||
}
|
}
|
||||||
@@ -152,7 +161,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"]);',
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|||||||
17
README.md
17
README.md
@@ -1,6 +1,7 @@
|
|||||||
[](https://electronjs.org)
|
[](https://electronjs.org)
|
||||||
|
|
||||||
[](https://github.com/electron/electron/actions/workflows/build.yml)
|
[](https://github.com/electron/electron/actions/workflows/build.yml)
|
||||||
|
[](https://ci.appveyor.com/project/electron-bot/electron-ljo26/branch/main)
|
||||||
[](https://discord.gg/electronjs)
|
[](https://discord.gg/electronjs)
|
||||||
|
|
||||||
:memo: Available Translations: 🇨🇳 🇧🇷 🇪🇸 🇯🇵 🇷🇺 🇫🇷 🇺🇸 🇩🇪.
|
:memo: Available Translations: 🇨🇳 🇧🇷 🇪🇸 🇯🇵 🇷🇺 🇫🇷 🇺🇸 🇩🇪.
|
||||||
@@ -39,22 +40,34 @@ Each Electron release provides binaries for macOS, Windows, and Linux.
|
|||||||
|
|
||||||
* macOS (Big Sur 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
|
||||||
|
|||||||
@@ -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 = 139
|
node_module_version = 130
|
||||||
|
|
||||||
v8_promise_internal_field_count = 1
|
v8_promise_internal_field_count = 1
|
||||||
v8_embedder_string = "-electron.0"
|
v8_embedder_string = "-electron.0"
|
||||||
@@ -14,8 +14,8 @@ v8_enable_snapshot_native_code_counters = false
|
|||||||
v8_enable_javascript_promise_hooks = true
|
v8_enable_javascript_promise_hooks = true
|
||||||
|
|
||||||
enable_cdm_host_verification = false
|
enable_cdm_host_verification = false
|
||||||
ffmpeg_branding = "Chrome"
|
|
||||||
proprietary_codecs = true
|
proprietary_codecs = true
|
||||||
|
ffmpeg_branding = "Chrome"
|
||||||
|
|
||||||
enable_printing = true
|
enable_printing = true
|
||||||
|
|
||||||
@@ -24,6 +24,10 @@ enable_printing = true
|
|||||||
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.
|
||||||
@@ -44,8 +48,7 @@ enable_cet_shadow_stack = false
|
|||||||
is_cfi = false
|
is_cfi = false
|
||||||
|
|
||||||
# TODO: fix this once sysroots have been updated.
|
# TODO: fix this once sysroots have been updated.
|
||||||
use_qt5 = false
|
use_qt = false
|
||||||
use_qt6 = false
|
|
||||||
|
|
||||||
# Disables the builtins PGO for V8
|
# Disables the builtins PGO for V8
|
||||||
v8_builtins_profiling_log_file = ""
|
v8_builtins_profiling_log_file = ""
|
||||||
@@ -62,12 +65,15 @@ v8_enable_private_mapping_fork_optimization = true
|
|||||||
# Expose public V8 symbols for native modules.
|
# Expose public V8 symbols for native modules.
|
||||||
v8_expose_public_symbols = true
|
v8_expose_public_symbols = true
|
||||||
|
|
||||||
|
# Disables unsafe-buffers-usage plugin due to incompatibilities with our reclient implementation
|
||||||
|
# Ref: https://chromium-review.googlesource.com/c/chromium/src/+/5426599
|
||||||
|
# Ref: https://github.com/electron/electron/commit/8e20f16ea35eeaeb149ae63bad3703d782665f6a
|
||||||
|
clang_unsafe_buffers_paths = ""
|
||||||
|
|
||||||
# Disable snapshotting a page when printing for its content to be analyzed for
|
# Disable snapshotting a page when printing for its content to be analyzed for
|
||||||
# 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,7 +1,7 @@
|
|||||||
import("//electron/build/args/all.gn")
|
import("all.gn")
|
||||||
is_component_build = false
|
is_component_build = false
|
||||||
is_component_ffmpeg = true
|
is_component_ffmpeg = true
|
||||||
is_official_build = true
|
is_official_build = true
|
||||||
|
proprietary_codecs = false
|
||||||
ffmpeg_branding = "Chromium"
|
ffmpeg_branding = "Chromium"
|
||||||
enable_dsyms = false
|
enable_dsyms = false
|
||||||
proprietary_codecs = false
|
|
||||||
|
|||||||
@@ -1,7 +1,14 @@
|
|||||||
import("//electron/build/args/all.gn")
|
import("all.gn")
|
||||||
is_component_build = false
|
is_component_build = false
|
||||||
is_official_build = true
|
is_official_build = true
|
||||||
|
|
||||||
|
# This may be guarded behind is_chrome_branded alongside
|
||||||
|
# proprietary_codecs https://webrtc-review.googlesource.com/c/src/+/36321,
|
||||||
|
# explicitly override here to build OpenH264 encoder/FFmpeg decoder.
|
||||||
|
# The initialization of the decoder depends on whether ffmpeg has
|
||||||
|
# been built with H.264 support.
|
||||||
|
rtc_use_h264 = proprietary_codecs
|
||||||
|
|
||||||
# By default, Electron builds ffmpeg with proprietary codecs enabled. In order
|
# By default, Electron builds ffmpeg with proprietary codecs enabled. In order
|
||||||
# to facilitate users who don't want to ship proprietary codecs in ffmpeg, or
|
# to facilitate users who don't want to ship proprietary codecs in ffmpeg, or
|
||||||
# who have an LGPL requirement to ship ffmpeg as a dynamically linked library,
|
# who have an LGPL requirement to ship ffmpeg as a dynamically linked library,
|
||||||
|
|||||||
@@ -1,7 +1,14 @@
|
|||||||
import("//electron/build/args/all.gn")
|
import("all.gn")
|
||||||
is_debug = false
|
is_debug = false
|
||||||
is_component_build = false
|
is_component_build = false
|
||||||
is_component_ffmpeg = true
|
is_component_ffmpeg = true
|
||||||
is_official_build = false
|
is_official_build = false
|
||||||
dcheck_always_on = true
|
dcheck_always_on = true
|
||||||
symbol_level = 1
|
symbol_level = 1
|
||||||
|
|
||||||
|
# This may be guarded behind is_chrome_branded alongside
|
||||||
|
# proprietary_codecs https://webrtc-review.googlesource.com/c/src/+/36321,
|
||||||
|
# explicitly override here to build OpenH264 encoder/FFmpeg decoder.
|
||||||
|
# The initialization of the decoder depends on whether ffmpeg has
|
||||||
|
# been built with H.264 support.
|
||||||
|
rtc_use_h264 = proprietary_codecs
|
||||||
|
|||||||
@@ -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 {
|
|
||||||
|
|
||||||
const std::string 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,11 +1,8 @@
|
|||||||
action("generate_mas_config") {
|
# For MAS build, we force defining "MAS_BUILD".
|
||||||
outputs = [ "$target_gen_dir/../../mas.h" ]
|
config("mas_build") {
|
||||||
script = "../../script/generate-mas-config.py"
|
|
||||||
if (is_mas_build) {
|
if (is_mas_build) {
|
||||||
args = [ "true" ]
|
defines = [ "IS_MAS_BUILD()=1" ]
|
||||||
} else {
|
} else {
|
||||||
args = [ "false" ]
|
defines = [ "IS_MAS_BUILD()=0" ]
|
||||||
}
|
}
|
||||||
|
|
||||||
args += rebase_path(outputs)
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -36,6 +36,7 @@ TEMPLATE_CC = """
|
|||||||
|
|
||||||
#if DCHECK_IS_ON()
|
#if DCHECK_IS_ON()
|
||||||
#include "base/command_line.h"
|
#include "base/command_line.h"
|
||||||
|
#include "base/strings/string_util.h"
|
||||||
#include <string>
|
#include <string>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|||||||
@@ -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())
|
|
||||||
@@ -45,7 +45,7 @@ def windows_profile():
|
|||||||
win_sdk_dir = SetEnvironmentAndGetSDKDir()
|
win_sdk_dir = SetEnvironmentAndGetSDKDir()
|
||||||
path = NormalizePath(os.environ['GYP_MSVS_OVERRIDE_PATH'])
|
path = NormalizePath(os.environ['GYP_MSVS_OVERRIDE_PATH'])
|
||||||
|
|
||||||
# since current windows executable are symbols path dependent,
|
# since current windows executable are symbols path dependant,
|
||||||
# profile the current directory too
|
# profile the current directory too
|
||||||
return {
|
return {
|
||||||
'pwd': os.getcwd(),
|
'pwd': os.getcwd(),
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ template("compile_ib_files") {
|
|||||||
|
|
||||||
_output_extension = invoker.output_extension
|
_output_extension = invoker.output_extension
|
||||||
|
|
||||||
script = "//build/config/apple/compile_ib_files.py"
|
script = "//build/config/ios/compile_ib_files.py"
|
||||||
sources = invoker.sources
|
sources = invoker.sources
|
||||||
outputs = [
|
outputs = [
|
||||||
"$target_gen_dir/$target_name/{{source_name_part}}.$_output_extension",
|
"$target_gen_dir/$target_name/{{source_name_part}}.$_output_extension",
|
||||||
|
|||||||
@@ -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
|
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
}]
|
}]
|
||||||
|
|||||||
@@ -1,6 +0,0 @@
|
|||||||
module.exports = require('./webpack.config.base')({
|
|
||||||
target: 'preload_realm',
|
|
||||||
alwaysHasNode: false,
|
|
||||||
wrapInitWithProfilingTimeout: true,
|
|
||||||
wrapInitWithTryCatch: true
|
|
||||||
});
|
|
||||||
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):
|
||||||
|
|||||||
@@ -30,10 +30,10 @@ static_library("chrome") {
|
|||||||
"//chrome/browser/devtools/devtools_file_system_indexer.cc",
|
"//chrome/browser/devtools/devtools_file_system_indexer.cc",
|
||||||
"//chrome/browser/devtools/devtools_file_system_indexer.h",
|
"//chrome/browser/devtools/devtools_file_system_indexer.h",
|
||||||
"//chrome/browser/devtools/devtools_settings.h",
|
"//chrome/browser/devtools/devtools_settings.h",
|
||||||
"//chrome/browser/devtools/features.cc",
|
|
||||||
"//chrome/browser/devtools/features.h",
|
|
||||||
"//chrome/browser/devtools/visual_logging.cc",
|
"//chrome/browser/devtools/visual_logging.cc",
|
||||||
"//chrome/browser/devtools/visual_logging.h",
|
"//chrome/browser/devtools/visual_logging.h",
|
||||||
|
"//chrome/browser/extensions/global_shortcut_listener.cc",
|
||||||
|
"//chrome/browser/extensions/global_shortcut_listener.h",
|
||||||
"//chrome/browser/file_system_access/file_system_access_features.cc",
|
"//chrome/browser/file_system_access/file_system_access_features.cc",
|
||||||
"//chrome/browser/file_system_access/file_system_access_features.h",
|
"//chrome/browser/file_system_access/file_system_access_features.h",
|
||||||
"//chrome/browser/icon_loader.cc",
|
"//chrome/browser/icon_loader.cc",
|
||||||
@@ -66,23 +66,23 @@ 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.h",
|
|
||||||
"//chrome/browser/picture_in_picture/scoped_picture_in_picture_occlusion_observation.cc",
|
"//chrome/browser/picture_in_picture/scoped_picture_in_picture_occlusion_observation.cc",
|
||||||
"//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",
|
||||||
"//chrome/browser/serial/serial_blocklist.cc",
|
|
||||||
"//chrome/browser/serial/serial_blocklist.h",
|
|
||||||
"//chrome/browser/themes/browser_theme_pack.cc",
|
"//chrome/browser/themes/browser_theme_pack.cc",
|
||||||
"//chrome/browser/themes/browser_theme_pack.h",
|
"//chrome/browser/themes/browser_theme_pack.h",
|
||||||
"//chrome/browser/themes/custom_theme_supplier.cc",
|
"//chrome/browser/themes/custom_theme_supplier.cc",
|
||||||
@@ -124,12 +124,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",
|
||||||
@@ -142,22 +138,12 @@ static_library("chrome") {
|
|||||||
"//chrome/browser/ui/views/overlay/toggle_camera_button.h",
|
"//chrome/browser/ui/views/overlay/toggle_camera_button.h",
|
||||||
"//chrome/browser/ui/views/overlay/toggle_microphone_button.cc",
|
"//chrome/browser/ui/views/overlay/toggle_microphone_button.cc",
|
||||||
"//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_native_widget_mac.h",
|
|
||||||
"//chrome/browser/ui/views/overlay/video_overlay_window_native_widget_mac.mm",
|
|
||||||
"//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.h",
|
|
||||||
"//extensions/browser/app_window/size_constraints.cc",
|
"//extensions/browser/app_window/size_constraints.cc",
|
||||||
"//extensions/browser/app_window/size_constraints.h",
|
"//extensions/browser/app_window/size_constraints.h",
|
||||||
"//ui/base/accelerators/global_accelerator_listener/global_accelerator_listener.cc",
|
|
||||||
"//ui/base/accelerators/global_accelerator_listener/global_accelerator_listener.h",
|
|
||||||
"//ui/views/native_window_tracker.h",
|
"//ui/views/native_window_tracker.h",
|
||||||
]
|
]
|
||||||
|
|
||||||
@@ -167,6 +153,8 @@ static_library("chrome") {
|
|||||||
|
|
||||||
if (is_win) {
|
if (is_win) {
|
||||||
sources += [
|
sources += [
|
||||||
|
"//chrome/browser/extensions/global_shortcut_listener_win.cc",
|
||||||
|
"//chrome/browser/extensions/global_shortcut_listener_win.h",
|
||||||
"//chrome/browser/icon_loader_win.cc",
|
"//chrome/browser/icon_loader_win.cc",
|
||||||
"//chrome/browser/media/webrtc/window_icon_util_win.cc",
|
"//chrome/browser/media/webrtc/window_icon_util_win.cc",
|
||||||
"//chrome/browser/process_singleton_win.cc",
|
"//chrome/browser/process_singleton_win.cc",
|
||||||
@@ -188,15 +176,16 @@ static_library("chrome") {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public_deps = [
|
public_deps = [
|
||||||
|
"//chrome/browser:dev_ui_browser_resources",
|
||||||
"//chrome/browser/resources/accessibility:resources",
|
"//chrome/browser/resources/accessibility:resources",
|
||||||
"//chrome/browser/ui/color:color_headers",
|
"//chrome/browser/ui/color:color_headers",
|
||||||
"//chrome/browser/ui/color:mixers",
|
"//chrome/browser/ui/color:mixers",
|
||||||
"//chrome/common",
|
"//chrome/common",
|
||||||
"//chrome/common:version_header",
|
"//chrome/common:version_header",
|
||||||
"//components/global_media_controls",
|
|
||||||
"//components/keyed_service/content",
|
"//components/keyed_service/content",
|
||||||
"//components/paint_preview/buildflags",
|
"//components/paint_preview/buildflags",
|
||||||
"//components/proxy_config",
|
"//components/proxy_config",
|
||||||
|
"//components/services/language_detection/public/mojom",
|
||||||
"//content/public/browser",
|
"//content/public/browser",
|
||||||
"//services/strings",
|
"//services/strings",
|
||||||
]
|
]
|
||||||
@@ -205,16 +194,11 @@ static_library("chrome") {
|
|||||||
"//chrome/app/vector_icons",
|
"//chrome/app/vector_icons",
|
||||||
"//chrome/browser:resource_prefetch_predictor_proto",
|
"//chrome/browser:resource_prefetch_predictor_proto",
|
||||||
"//chrome/browser/resource_coordinator:mojo_bindings",
|
"//chrome/browser/resource_coordinator:mojo_bindings",
|
||||||
"//chrome/browser/task_manager/common:impl",
|
|
||||||
"//chrome/browser/ui/webui/tab_search:mojo_bindings",
|
|
||||||
"//chrome/browser/web_applications/mojom:mojom_web_apps_enum",
|
"//chrome/browser/web_applications/mojom:mojom_web_apps_enum",
|
||||||
"//components/enterprise/buildflags",
|
"//components/enterprise/buildflags",
|
||||||
"//components/enterprise/common/proto:browser_events_proto",
|
|
||||||
"//components/enterprise/common/proto:connectors_proto",
|
"//components/enterprise/common/proto:connectors_proto",
|
||||||
"//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/snapshot",
|
"//ui/snapshot",
|
||||||
"//ui/views/controls/webview",
|
"//ui/views/controls/webview",
|
||||||
]
|
]
|
||||||
@@ -223,18 +207,21 @@ 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" ]
|
||||||
}
|
}
|
||||||
|
|
||||||
if (is_linux) {
|
if (is_linux) {
|
||||||
sources += [
|
sources += [ "//chrome/browser/icon_loader_auralinux.cc" ]
|
||||||
"//chrome/browser/icon_loader_auralinux.cc",
|
if (use_ozone) {
|
||||||
"//ui/base/accelerators/global_accelerator_listener/global_accelerator_listener_linux.cc",
|
deps += [ "//ui/ozone" ]
|
||||||
"//ui/base/accelerators/global_accelerator_listener/global_accelerator_listener_linux.h",
|
sources += [
|
||||||
]
|
"//chrome/browser/extensions/global_shortcut_listener_ozone.cc",
|
||||||
|
"//chrome/browser/extensions/global_shortcut_listener_ozone.h",
|
||||||
|
]
|
||||||
|
}
|
||||||
sources += [
|
sources += [
|
||||||
"//chrome/browser/ui/views/status_icons/concat_menu_model.cc",
|
"//chrome/browser/ui/views/status_icons/concat_menu_model.cc",
|
||||||
"//chrome/browser/ui/views/status_icons/concat_menu_model.h",
|
"//chrome/browser/ui/views/status_icons/concat_menu_model.h",
|
||||||
@@ -245,7 +232,10 @@ static_library("chrome") {
|
|||||||
"//chrome/browser/ui/views/dark_mode_manager_linux.cc",
|
"//chrome/browser/ui/views/dark_mode_manager_linux.cc",
|
||||||
"//chrome/browser/ui/views/dark_mode_manager_linux.h",
|
"//chrome/browser/ui/views/dark_mode_manager_linux.h",
|
||||||
]
|
]
|
||||||
public_deps += [ "//components/dbus" ]
|
public_deps += [
|
||||||
|
"//components/dbus/menu",
|
||||||
|
"//components/dbus/thread_linux",
|
||||||
|
]
|
||||||
}
|
}
|
||||||
|
|
||||||
if (is_win) {
|
if (is_win) {
|
||||||
@@ -267,6 +257,8 @@ static_library("chrome") {
|
|||||||
|
|
||||||
if (is_mac) {
|
if (is_mac) {
|
||||||
sources += [
|
sources += [
|
||||||
|
"//chrome/browser/extensions/global_shortcut_listener_mac.h",
|
||||||
|
"//chrome/browser/extensions/global_shortcut_listener_mac.mm",
|
||||||
"//chrome/browser/icon_loader_mac.mm",
|
"//chrome/browser/icon_loader_mac.mm",
|
||||||
"//chrome/browser/media/webrtc/system_media_capture_permissions_mac.h",
|
"//chrome/browser/media/webrtc/system_media_capture_permissions_mac.h",
|
||||||
"//chrome/browser/media/webrtc/system_media_capture_permissions_mac.mm",
|
"//chrome/browser/media/webrtc/system_media_capture_permissions_mac.mm",
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
{
|
{
|
||||||
"plugins": [
|
"plugins": [
|
||||||
"import"
|
"unicorn"
|
||||||
],
|
],
|
||||||
"rules": {
|
"rules": {
|
||||||
"import/enforce-node-protocol-usage": ["error", "always"]
|
"unicorn/prefer-node-protocol": "error"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -93,7 +93,9 @@ async function loadApplicationPackage (packagePath: string) {
|
|||||||
try {
|
try {
|
||||||
process.emitWarning = () => {};
|
process.emitWarning = () => {};
|
||||||
packageJson = (await import(url.pathToFileURL(packageJsonPath).toString(), {
|
packageJson = (await import(url.pathToFileURL(packageJsonPath).toString(), {
|
||||||
with: { type: 'json' }
|
assert: {
|
||||||
|
type: 'json'
|
||||||
|
}
|
||||||
})).default;
|
})).default;
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
showErrorMessage(`Unable to parse ${packageJsonPath}\n\n${(e as Error).message}`);
|
showErrorMessage(`Unable to parse ${packageJsonPath}\n\n${(e as Error).message}`);
|
||||||
|
|||||||
@@ -34,25 +34,18 @@ async function loadSVG (element: HTMLSpanElement) {
|
|||||||
|
|
||||||
async function initialize () {
|
async function initialize () {
|
||||||
const electronPath = await ipcRenderer.invoke('bootstrap');
|
const electronPath = await ipcRenderer.invoke('bootstrap');
|
||||||
function replaceText (selector: string, text: string, link?: string) {
|
|
||||||
|
function replaceText (selector: string, text: string) {
|
||||||
const element = document.querySelector<HTMLElement>(selector);
|
const element = document.querySelector<HTMLElement>(selector);
|
||||||
if (element) {
|
if (element) {
|
||||||
if (link) {
|
element.innerText = text;
|
||||||
const anchor = document.createElement('a');
|
|
||||||
anchor.textContent = text;
|
|
||||||
anchor.href = link;
|
|
||||||
anchor.target = '_blank';
|
|
||||||
element.appendChild(anchor);
|
|
||||||
} else {
|
|
||||||
element.innerText = text;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
replaceText('.electron-version', `Electron v${process.versions.electron}`, 'https://electronjs.org/docs');
|
replaceText('.electron-version', `Electron v${process.versions.electron}`);
|
||||||
replaceText('.chrome-version', `Chromium v${process.versions.chrome}`, 'https://developer.chrome.com/docs/chromium');
|
replaceText('.chrome-version', `Chromium v${process.versions.chrome}`);
|
||||||
replaceText('.node-version', `Node v${process.versions.node}`, `https://nodejs.org/docs/v${process.versions.node}/api`);
|
replaceText('.node-version', `Node v${process.versions.node}`);
|
||||||
replaceText('.v8-version', `v8 v${process.versions.v8}`, 'https://v8.dev/docs');
|
replaceText('.v8-version', `v8 v${process.versions.v8}`);
|
||||||
replaceText('.command-example', `${electronPath} path-to-app`);
|
replaceText('.command-example', `${electronPath} path-to-app`);
|
||||||
|
|
||||||
for (const element of document.querySelectorAll<HTMLSpanElement>('.octicon')) {
|
for (const element of document.querySelectorAll<HTMLSpanElement>('.octicon')) {
|
||||||
|
|||||||
@@ -1,35 +0,0 @@
|
|||||||
{
|
|
||||||
"extends": "standard",
|
|
||||||
"plugins": [
|
|
||||||
"import",
|
|
||||||
"markdown"
|
|
||||||
],
|
|
||||||
"overrides": [
|
|
||||||
{
|
|
||||||
"files": ["*.md", "**/*.md"],
|
|
||||||
"processor": "markdown/markdown"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"rules": {
|
|
||||||
"@typescript-eslint/no-unused-vars": "off",
|
|
||||||
"import/order": ["error", {
|
|
||||||
"alphabetize": {
|
|
||||||
"order": "asc"
|
|
||||||
},
|
|
||||||
"newlines-between": "always",
|
|
||||||
"pathGroups": [
|
|
||||||
{
|
|
||||||
"pattern": "{electron,electron/**}",
|
|
||||||
"group": "builtin",
|
|
||||||
"position": "before"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"pathGroupsExcludedImportTypes": []
|
|
||||||
}],
|
|
||||||
"n/no-callback-literal": "off",
|
|
||||||
"no-undef": "off",
|
|
||||||
"no-unused-expressions": "off",
|
|
||||||
"no-unused-vars": "off",
|
|
||||||
"import/enforce-node-protocol-usage": ["error", "always"]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -21,6 +21,7 @@ an issue:
|
|||||||
### Getting started
|
### Getting started
|
||||||
|
|
||||||
* [Introduction](tutorial/introduction.md)
|
* [Introduction](tutorial/introduction.md)
|
||||||
|
* [Quick Start](tutorial/quick-start.md)
|
||||||
* [Process Model](tutorial/process-model.md)
|
* [Process Model](tutorial/process-model.md)
|
||||||
|
|
||||||
### Learning the basics
|
### Learning the basics
|
||||||
@@ -96,9 +97,8 @@ These individual tutorials expand on topics discussed in the guide above.
|
|||||||
* [Chrome Extensions Support](api/extensions.md)
|
* [Chrome Extensions Support](api/extensions.md)
|
||||||
* [Breaking API Changes](breaking-changes.md)
|
* [Breaking API Changes](breaking-changes.md)
|
||||||
|
|
||||||
### Custom Web Features:
|
### Custom DOM Elements:
|
||||||
|
|
||||||
* [`-electron-corner-smoothing` CSS Rule](api/corner-smoothing-css.md)
|
|
||||||
* [`<webview>` Tag](api/webview-tag.md)
|
* [`<webview>` Tag](api/webview-tag.md)
|
||||||
* [`window.open` Function](api/window-open.md)
|
* [`window.open` Function](api/window-open.md)
|
||||||
|
|
||||||
@@ -113,7 +113,6 @@ These individual tutorials expand on topics discussed in the guide above.
|
|||||||
* [dialog](api/dialog.md)
|
* [dialog](api/dialog.md)
|
||||||
* [globalShortcut](api/global-shortcut.md)
|
* [globalShortcut](api/global-shortcut.md)
|
||||||
* [inAppPurchase](api/in-app-purchase.md)
|
* [inAppPurchase](api/in-app-purchase.md)
|
||||||
* [ImageView](api/image-view.md)
|
|
||||||
* [ipcMain](api/ipc-main.md)
|
* [ipcMain](api/ipc-main.md)
|
||||||
* [Menu](api/menu.md)
|
* [Menu](api/menu.md)
|
||||||
* [MenuItem](api/menu-item.md)
|
* [MenuItem](api/menu-item.md)
|
||||||
@@ -129,7 +128,6 @@ These individual tutorials expand on topics discussed in the guide above.
|
|||||||
* [pushNotifications](api/push-notifications.md)
|
* [pushNotifications](api/push-notifications.md)
|
||||||
* [safeStorage](api/safe-storage.md)
|
* [safeStorage](api/safe-storage.md)
|
||||||
* [screen](api/screen.md)
|
* [screen](api/screen.md)
|
||||||
* [ServiceWorkerMain](api/service-worker-main.md)
|
|
||||||
* [session](api/session.md)
|
* [session](api/session.md)
|
||||||
* [ShareMenu](api/share-menu.md)
|
* [ShareMenu](api/share-menu.md)
|
||||||
* [systemPreferences](api/system-preferences.md)
|
* [systemPreferences](api/system-preferences.md)
|
||||||
|
|||||||
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
|
||||||
308
docs/api/app.md
308
docs/api/app.md
@@ -9,7 +9,6 @@ closed:
|
|||||||
|
|
||||||
```js
|
```js
|
||||||
const { app } = require('electron')
|
const { app } = require('electron')
|
||||||
|
|
||||||
app.on('window-all-closed', () => {
|
app.on('window-all-closed', () => {
|
||||||
app.quit()
|
app.quit()
|
||||||
})
|
})
|
||||||
@@ -42,10 +41,9 @@ that was used to open the application, if it was launched from Notification Cent
|
|||||||
You can also call `app.isReady()` to check if this event has already fired and `app.whenReady()`
|
You can also call `app.isReady()` to check if this event has already fired and `app.whenReady()`
|
||||||
to get a Promise that is fulfilled when Electron is initialized.
|
to get a Promise that is fulfilled when Electron is initialized.
|
||||||
|
|
||||||
> [!NOTE]
|
**Note**: The `ready` event is only fired after the main process has finished running the first
|
||||||
> The `ready` event is only fired after the main process has finished running the first
|
tick of the event loop. If an Electron API needs to be called before the `ready` event, ensure
|
||||||
> tick of the event loop. If an Electron API needs to be called before the `ready` event, ensure
|
that it is called synchronously in the top-level context of the main process.
|
||||||
> that it is called synchronously in the top-level context of the main process.
|
|
||||||
|
|
||||||
### Event: 'window-all-closed'
|
### Event: 'window-all-closed'
|
||||||
|
|
||||||
@@ -68,14 +66,12 @@ Emitted before the application starts closing its windows.
|
|||||||
Calling `event.preventDefault()` will prevent the default behavior, which is
|
Calling `event.preventDefault()` will prevent the default behavior, which is
|
||||||
terminating the application.
|
terminating the application.
|
||||||
|
|
||||||
> [!NOTE]
|
**Note:** If application quit was initiated by `autoUpdater.quitAndInstall()`,
|
||||||
> If application quit was initiated by `autoUpdater.quitAndInstall()`,
|
then `before-quit` is emitted _after_ emitting `close` event on all windows and
|
||||||
> then `before-quit` is emitted _after_ emitting `close` event on all windows and
|
closing them.
|
||||||
> closing them.
|
|
||||||
|
|
||||||
> [!NOTE]
|
**Note:** On Windows, this event will not be emitted if the app is closed due
|
||||||
> On Windows, this event will not be emitted if the app is closed due
|
to a shutdown/restart of the system or a user logout.
|
||||||
> to a shutdown/restart of the system or a user logout.
|
|
||||||
|
|
||||||
### Event: 'will-quit'
|
### Event: 'will-quit'
|
||||||
|
|
||||||
@@ -90,9 +86,8 @@ terminating the application.
|
|||||||
See the description of the `window-all-closed` event for the differences between
|
See the description of the `window-all-closed` event for the differences between
|
||||||
the `will-quit` and `window-all-closed` events.
|
the `will-quit` and `window-all-closed` events.
|
||||||
|
|
||||||
> [!NOTE]
|
**Note:** On Windows, this event will not be emitted if the app is closed due
|
||||||
> On Windows, this event will not be emitted if the app is closed due
|
to a shutdown/restart of the system or a user logout.
|
||||||
> to a shutdown/restart of the system or a user logout.
|
|
||||||
|
|
||||||
### Event: 'quit'
|
### Event: 'quit'
|
||||||
|
|
||||||
@@ -103,9 +98,8 @@ Returns:
|
|||||||
|
|
||||||
Emitted when the application is quitting.
|
Emitted when the application is quitting.
|
||||||
|
|
||||||
> [!NOTE]
|
**Note:** On Windows, this event will not be emitted if the app is closed due
|
||||||
> On Windows, this event will not be emitted if the app is closed due
|
to a shutdown/restart of the system or a user logout.
|
||||||
> to a shutdown/restart of the system or a user logout.
|
|
||||||
|
|
||||||
### Event: 'open-file' _macOS_
|
### Event: 'open-file' _macOS_
|
||||||
|
|
||||||
@@ -476,28 +470,24 @@ and `workingDirectory` is its current working directory. Usually
|
|||||||
applications respond to this by making their primary window focused and
|
applications respond to this by making their primary window focused and
|
||||||
non-minimized.
|
non-minimized.
|
||||||
|
|
||||||
> [!NOTE]
|
**Note:** `argv` will not be exactly the same list of arguments as those passed
|
||||||
> `argv` will not be exactly the same list of arguments as those passed
|
to the second instance. The order might change and additional arguments might be appended.
|
||||||
> to the second instance. The order might change and additional arguments might be appended.
|
If you need to maintain the exact same arguments, it's advised to use `additionalData` instead.
|
||||||
> If you need to maintain the exact same arguments, it's advised to use `additionalData` instead.
|
|
||||||
|
|
||||||
> [!NOTE]
|
**Note:** If the second instance is started by a different user than the first, the `argv` array will not include the arguments.
|
||||||
> If the second instance is started by a different user than the first, the `argv` array will not include the arguments.
|
|
||||||
|
|
||||||
This event is guaranteed to be emitted after the `ready` event of `app`
|
This event is guaranteed to be emitted after the `ready` event of `app`
|
||||||
gets emitted.
|
gets emitted.
|
||||||
|
|
||||||
> [!NOTE]
|
**Note:** Extra command line arguments might be added by Chromium,
|
||||||
> Extra command line arguments might be added by Chromium,
|
such as `--original-process-start-time`.
|
||||||
> such as `--original-process-start-time`.
|
|
||||||
|
|
||||||
## Methods
|
## Methods
|
||||||
|
|
||||||
The `app` object has the following methods:
|
The `app` object has the following methods:
|
||||||
|
|
||||||
> [!NOTE]
|
**Note:** Some methods are only available on specific operating systems and are
|
||||||
> Some methods are only available on specific operating systems and are
|
labeled as such.
|
||||||
> labeled as such.
|
|
||||||
|
|
||||||
### `app.quit()`
|
### `app.quit()`
|
||||||
|
|
||||||
@@ -524,20 +514,20 @@ and `will-quit` events will not be emitted.
|
|||||||
* `args` string[] (optional)
|
* `args` string[] (optional)
|
||||||
* `execPath` string (optional)
|
* `execPath` string (optional)
|
||||||
|
|
||||||
Relaunches the app when the current instance exits.
|
Relaunches the app when current instance exits.
|
||||||
|
|
||||||
By default, the new instance will use the same working directory and command line
|
By default, the new instance will use the same working directory and command line
|
||||||
arguments as the current instance. When `args` is specified, the `args` will be
|
arguments with current instance. When `args` is specified, the `args` will be
|
||||||
passed as the command line arguments instead. When `execPath` is specified, the
|
passed as command line arguments instead. When `execPath` is specified, the
|
||||||
`execPath` will be executed for the relaunch instead of the current app.
|
`execPath` will be executed for relaunch instead of current app.
|
||||||
|
|
||||||
Note that this method does not quit the app when executed. You have to call
|
Note that this method does not quit the app when executed, you have to call
|
||||||
`app.quit` or `app.exit` after calling `app.relaunch` to make the app restart.
|
`app.quit` or `app.exit` after calling `app.relaunch` to make the app restart.
|
||||||
|
|
||||||
When `app.relaunch` is called multiple times, multiple instances will be
|
When `app.relaunch` is called for multiple times, multiple instances will be
|
||||||
started after the current instance exits.
|
started after current instance exited.
|
||||||
|
|
||||||
An example of restarting the current instance immediately and adding a new command
|
An example of restarting current instance immediately and adding a new command
|
||||||
line argument to the new instance:
|
line argument to the new instance:
|
||||||
|
|
||||||
```js
|
```js
|
||||||
@@ -602,7 +592,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
|
||||||
@@ -617,7 +606,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.
|
||||||
@@ -690,8 +679,7 @@ preferred over `name` by Electron.
|
|||||||
|
|
||||||
Overrides the current application's name.
|
Overrides the current application's name.
|
||||||
|
|
||||||
> [!NOTE]
|
**Note:** This function overrides the name used internally by Electron; it does not affect the name that the OS uses.
|
||||||
> This function overrides the name used internally by Electron; it does not affect the name that the OS uses.
|
|
||||||
|
|
||||||
### `app.getLocale()`
|
### `app.getLocale()`
|
||||||
|
|
||||||
@@ -700,22 +688,18 @@ Possible return values are documented [here](https://source.chromium.org/chromiu
|
|||||||
|
|
||||||
To set the locale, you'll want to use a command line switch at app startup, which may be found [here](command-line-switches.md).
|
To set the locale, you'll want to use a command line switch at app startup, which may be found [here](command-line-switches.md).
|
||||||
|
|
||||||
> [!NOTE]
|
**Note:** When distributing your packaged app, you have to also ship the
|
||||||
> When distributing your packaged app, you have to also ship the
|
`locales` folder.
|
||||||
> `locales` folder.
|
|
||||||
|
|
||||||
> [!NOTE]
|
**Note:** This API must be called after the `ready` event is emitted.
|
||||||
> This API must be called after the `ready` event is emitted.
|
|
||||||
|
|
||||||
> [!NOTE]
|
**Note:** To see example return values of this API compared to other locale and language APIs, see [`app.getPreferredSystemLanguages()`](#appgetpreferredsystemlanguages).
|
||||||
> To see example return values of this API compared to other locale and language APIs, see [`app.getPreferredSystemLanguages()`](#appgetpreferredsystemlanguages).
|
|
||||||
|
|
||||||
### `app.getLocaleCountryCode()`
|
### `app.getLocaleCountryCode()`
|
||||||
|
|
||||||
Returns `string` - User operating system's locale two-letter [ISO 3166](https://www.iso.org/iso-3166-country-codes.html) country code. The value is taken from native OS APIs.
|
Returns `string` - User operating system's locale two-letter [ISO 3166](https://www.iso.org/iso-3166-country-codes.html) country code. The value is taken from native OS APIs.
|
||||||
|
|
||||||
> [!NOTE]
|
**Note:** When unable to detect locale country code, it returns empty string.
|
||||||
> When unable to detect locale country code, it returns empty string.
|
|
||||||
|
|
||||||
### `app.getSystemLocale()`
|
### `app.getSystemLocale()`
|
||||||
|
|
||||||
@@ -728,11 +712,9 @@ Different operating systems also use the regional data differently:
|
|||||||
|
|
||||||
Therefore, this API can be used for purposes such as choosing a format for rendering dates and times in a calendar app, especially when the developer wants the format to be consistent with the OS.
|
Therefore, this API can be used for purposes such as choosing a format for rendering dates and times in a calendar app, especially when the developer wants the format to be consistent with the OS.
|
||||||
|
|
||||||
> [!NOTE]
|
**Note:** This API must be called after the `ready` event is emitted.
|
||||||
> This API must be called after the `ready` event is emitted.
|
|
||||||
|
|
||||||
> [!NOTE]
|
**Note:** To see example return values of this API compared to other locale and language APIs, see [`app.getPreferredSystemLanguages()`](#appgetpreferredsystemlanguages).
|
||||||
> To see example return values of this API compared to other locale and language APIs, see [`app.getPreferredSystemLanguages()`](#appgetpreferredsystemlanguages).
|
|
||||||
|
|
||||||
### `app.getPreferredSystemLanguages()`
|
### `app.getPreferredSystemLanguages()`
|
||||||
|
|
||||||
@@ -777,22 +759,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,
|
||||||
@@ -811,18 +777,16 @@ Once registered, all links with `your-protocol://` will be opened with the
|
|||||||
current executable. The whole link, including protocol, will be passed to your
|
current executable. The whole link, including protocol, will be passed to your
|
||||||
application as a parameter.
|
application as a parameter.
|
||||||
|
|
||||||
> [!NOTE]
|
**Note:** On macOS, you can only register protocols that have been added to
|
||||||
> On macOS, you can only register protocols that have been added to
|
your app's `info.plist`, which cannot be modified at runtime. However, you can
|
||||||
> your app's `info.plist`, which cannot be modified at runtime. However, you can
|
change the file during build time via [Electron Forge][electron-forge],
|
||||||
> change the file during build time via [Electron Forge][electron-forge],
|
[Electron Packager][electron-packager], or by editing `info.plist` with a text
|
||||||
> [Electron Packager][electron-packager], or by editing `info.plist` with a text
|
editor. Please refer to [Apple's documentation][CFBundleURLTypes] for details.
|
||||||
> editor. Please refer to [Apple's documentation][CFBundleURLTypes] for details.
|
|
||||||
|
|
||||||
> [!NOTE]
|
**Note:** In a Windows Store environment (when packaged as an `appx`) this API
|
||||||
> In a Windows Store environment (when packaged as an `appx`) this API
|
will return `true` for all calls but the registry key it sets won't be accessible
|
||||||
> will return `true` for all calls but the registry key it sets won't be accessible
|
by other applications. In order to register your Windows Store application
|
||||||
> by other applications. In order to register your Windows Store application
|
as a default protocol handler you must [declare the protocol in your manifest](https://learn.microsoft.com/en-us/uwp/schemas/appxpackage/uapmanifestschema/element-uap-protocol).
|
||||||
> as a default protocol handler you must [declare the protocol in your manifest](https://learn.microsoft.com/en-us/uwp/schemas/appxpackage/uapmanifestschema/element-uap-protocol).
|
|
||||||
|
|
||||||
The API uses the Windows Registry and `LSSetDefaultHandlerForURLScheme` internally.
|
The API uses the Windows Registry and `LSSetDefaultHandlerForURLScheme` internally.
|
||||||
|
|
||||||
@@ -846,12 +810,11 @@ protocol (aka URI scheme). If so, it will remove the app as the default handler.
|
|||||||
Returns `boolean` - Whether the current executable is the default handler for a
|
Returns `boolean` - Whether the current executable is the default handler for a
|
||||||
protocol (aka URI scheme).
|
protocol (aka URI scheme).
|
||||||
|
|
||||||
> [!NOTE]
|
**Note:** On macOS, you can use this method to check if the app has been
|
||||||
> On macOS, you can use this method to check if the app has been
|
registered as the default protocol handler for a protocol. You can also verify
|
||||||
> registered as the default protocol handler for a protocol. You can also verify
|
this by checking `~/Library/Preferences/com.apple.LaunchServices.plist` on the
|
||||||
> this by checking `~/Library/Preferences/com.apple.LaunchServices.plist` on the
|
macOS machine. Please refer to
|
||||||
> macOS machine. Please refer to
|
[Apple's documentation][LSCopyDefaultHandlerForURLScheme] for details.
|
||||||
> [Apple's documentation][LSCopyDefaultHandlerForURLScheme] for details.
|
|
||||||
|
|
||||||
The API uses the Windows Registry and `LSCopyDefaultHandlerForURLScheme` internally.
|
The API uses the Windows Registry and `LSCopyDefaultHandlerForURLScheme` internally.
|
||||||
|
|
||||||
@@ -895,9 +858,8 @@ Adds `tasks` to the [Tasks][tasks] category of the Jump List on Windows.
|
|||||||
|
|
||||||
Returns `boolean` - Whether the call succeeded.
|
Returns `boolean` - Whether the call succeeded.
|
||||||
|
|
||||||
> [!NOTE]
|
**Note:** If you'd like to customize the Jump List even more use
|
||||||
> If you'd like to customize the Jump List even more use
|
`app.setJumpList(categories)` instead.
|
||||||
> `app.setJumpList(categories)` instead.
|
|
||||||
|
|
||||||
### `app.getJumpListSettings()` _Windows_
|
### `app.getJumpListSettings()` _Windows_
|
||||||
|
|
||||||
@@ -935,24 +897,21 @@ following strings:
|
|||||||
If `categories` is `null` the previously set custom Jump List (if any) will be
|
If `categories` is `null` the previously set custom Jump List (if any) will be
|
||||||
replaced by the standard Jump List for the app (managed by Windows).
|
replaced by the standard Jump List for the app (managed by Windows).
|
||||||
|
|
||||||
> [!NOTE]
|
**Note:** If a `JumpListCategory` object has neither the `type` nor the `name`
|
||||||
> If a `JumpListCategory` object has neither the `type` nor the `name`
|
property set then its `type` is assumed to be `tasks`. If the `name` property
|
||||||
> property set then its `type` is assumed to be `tasks`. If the `name` property
|
|
||||||
is set but the `type` property is omitted then the `type` is assumed to be
|
is set but the `type` property is omitted then the `type` is assumed to be
|
||||||
`custom`.
|
`custom`.
|
||||||
|
|
||||||
> [!NOTE]
|
**Note:** Users can remove items from custom categories, and Windows will not
|
||||||
> Users can remove items from custom categories, and Windows will not
|
allow a removed item to be added back into a custom category until **after**
|
||||||
> allow a removed item to be added back into a custom category until **after**
|
the next successful call to `app.setJumpList(categories)`. Any attempt to
|
||||||
> the next successful call to `app.setJumpList(categories)`. Any attempt to
|
re-add a removed item to a custom category earlier than that will result in the
|
||||||
> re-add a removed item to a custom category earlier than that will result in the
|
entire custom category being omitted from the Jump List. The list of removed
|
||||||
> entire custom category being omitted from the Jump List. The list of removed
|
items can be obtained using `app.getJumpListSettings()`.
|
||||||
> items can be obtained using `app.getJumpListSettings()`.
|
|
||||||
|
|
||||||
> [!NOTE]
|
**Note:** The maximum length of a Jump List item's `description` property is
|
||||||
> The maximum length of a Jump List item's `description` property is
|
260 characters. Beyond this limit, the item will not be added to the Jump
|
||||||
> 260 characters. Beyond this limit, the item will not be added to the Jump
|
List, nor will it be displayed.
|
||||||
> List, nor will it be displayed.
|
|
||||||
|
|
||||||
Here's a very simple example of creating a custom Jump List:
|
Here's a very simple example of creating a custom Jump List:
|
||||||
|
|
||||||
@@ -1041,7 +1000,6 @@ starts:
|
|||||||
|
|
||||||
```js
|
```js
|
||||||
const { app, BrowserWindow } = require('electron')
|
const { app, BrowserWindow } = require('electron')
|
||||||
|
|
||||||
let myWindow = null
|
let myWindow = null
|
||||||
|
|
||||||
const additionalData = { myKey: 'myValue' }
|
const additionalData = { myKey: 'myValue' }
|
||||||
@@ -1152,11 +1110,6 @@ indicates success while any other value indicates failure according to Chromium
|
|||||||
resolver will attempt to use the system's DNS settings to do DNS lookups
|
resolver will attempt to use the system's DNS settings to do DNS lookups
|
||||||
itself. Enabled by default on macOS, disabled by default on Windows and
|
itself. Enabled by default on macOS, disabled by default on Windows and
|
||||||
Linux.
|
Linux.
|
||||||
* `enableHappyEyeballs` boolean (optional) - Whether the
|
|
||||||
[Happy Eyeballs V3][happy-eyeballs-v3] algorithm should be used in creating
|
|
||||||
network connections. When enabled, hostnames resolving to multiple IP
|
|
||||||
addresses will be attempted in parallel to have a chance at establishing a
|
|
||||||
connection more quickly.
|
|
||||||
* `secureDnsMode` string (optional) - Can be 'off', 'automatic' or 'secure'.
|
* `secureDnsMode` string (optional) - Can be 'off', 'automatic' or 'secure'.
|
||||||
Configures the DNS-over-HTTP mode. When 'off', no DoH lookups will be
|
Configures the DNS-over-HTTP mode. When 'off', no DoH lookups will be
|
||||||
performed. When 'automatic', DoH lookups will be performed first if DoH is
|
performed. When 'automatic', DoH lookups will be performed first if DoH is
|
||||||
@@ -1214,13 +1167,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 disabled.
|
|
||||||
|
|
||||||
> [!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
|
||||||
@@ -1237,8 +1183,7 @@ Returns [`ProcessMetric[]`](structures/process-metric.md): Array of `ProcessMetr
|
|||||||
|
|
||||||
Returns [`GPUFeatureStatus`](structures/gpu-feature-status.md) - The Graphics Feature Status from `chrome://gpu/`.
|
Returns [`GPUFeatureStatus`](structures/gpu-feature-status.md) - The Graphics Feature Status from `chrome://gpu/`.
|
||||||
|
|
||||||
> [!NOTE]
|
**Note:** This information is only usable after the `gpu-info-update` event is emitted.
|
||||||
> This information is only usable after the `gpu-info-update` event is emitted.
|
|
||||||
|
|
||||||
### `app.getGPUInfo(infoType)`
|
### `app.getGPUInfo(infoType)`
|
||||||
|
|
||||||
@@ -1252,8 +1197,6 @@ For `infoType` equal to `complete`:
|
|||||||
For `infoType` equal to `basic`:
|
For `infoType` equal to `basic`:
|
||||||
Promise is fulfilled with `Object` containing fewer attributes than when requested with `complete`. Here's an example of basic response:
|
Promise is fulfilled with `Object` containing fewer attributes than when requested with `complete`. Here's an example of basic response:
|
||||||
|
|
||||||
<!-- eslint-skip -->
|
|
||||||
|
|
||||||
```js
|
```js
|
||||||
{
|
{
|
||||||
auxAttributes:
|
auxAttributes:
|
||||||
@@ -1294,13 +1237,11 @@ badge.
|
|||||||
|
|
||||||
On macOS, it shows on the dock icon. On Linux, it only works for Unity launcher.
|
On macOS, it shows on the dock icon. On Linux, it only works for Unity launcher.
|
||||||
|
|
||||||
> [!NOTE]
|
**Note:** Unity launcher requires a `.desktop` file to work. For more information,
|
||||||
> Unity launcher requires a `.desktop` file to work. For more information,
|
please read the [Unity integration documentation][unity-requirement].
|
||||||
> please read the [Unity integration documentation][unity-requirement].
|
|
||||||
|
|
||||||
> [!NOTE]
|
**Note:** On macOS, you need to ensure that your application has the permission
|
||||||
> On macOS, you need to ensure that your application has the permission
|
to display notifications for this method to work.
|
||||||
> to display notifications for this method to work.
|
|
||||||
|
|
||||||
### `app.getBadgeCount()` _Linux_ _macOS_
|
### `app.getBadgeCount()` _Linux_ _macOS_
|
||||||
|
|
||||||
@@ -1361,25 +1302,23 @@ Returns `Object`:
|
|||||||
Set the app's login item settings.
|
Set the app's login item settings.
|
||||||
|
|
||||||
To work with Electron's `autoUpdater` on Windows, which uses [Squirrel][Squirrel-Windows],
|
To work with Electron's `autoUpdater` on Windows, which uses [Squirrel][Squirrel-Windows],
|
||||||
you'll want to set the launch path to your executable's name but a directory up, which is
|
you'll want to set the launch path to Update.exe, and pass arguments that specify your
|
||||||
a stub application automatically generated by Squirrel which will automatically launch the
|
application name. For example:
|
||||||
latest version.
|
|
||||||
|
|
||||||
``` js
|
``` js
|
||||||
const { app } = require('electron')
|
const { app } = require('electron')
|
||||||
|
|
||||||
const path = require('node:path')
|
const path = require('node:path')
|
||||||
|
|
||||||
const appFolder = path.dirname(process.execPath)
|
const appFolder = path.dirname(process.execPath)
|
||||||
const ourExeName = path.basename(process.execPath)
|
const updateExe = path.resolve(appFolder, '..', 'Update.exe')
|
||||||
const stubLauncher = path.resolve(appFolder, '..', ourExeName)
|
const exeName = path.basename(process.execPath)
|
||||||
|
|
||||||
app.setLoginItemSettings({
|
app.setLoginItemSettings({
|
||||||
openAtLogin: true,
|
openAtLogin: true,
|
||||||
path: stubLauncher,
|
path: updateExe,
|
||||||
args: [
|
args: [
|
||||||
// You might want to pass a parameter here indicating that this
|
'--processStart', `"${exeName}"`,
|
||||||
// app was launched via login, but you don't have to
|
'--process-start-args', '"--hidden"'
|
||||||
]
|
]
|
||||||
})
|
})
|
||||||
```
|
```
|
||||||
@@ -1403,76 +1342,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.
|
||||||
> 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`.
|
|
||||||
|
|
||||||
### `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()`
|
||||||
|
|
||||||
@@ -1510,7 +1380,6 @@ Returns `Function` - This function **must** be called once you have finished acc
|
|||||||
|
|
||||||
```js
|
```js
|
||||||
const { app, dialog } = require('electron')
|
const { app, dialog } = require('electron')
|
||||||
|
|
||||||
const fs = require('node:fs')
|
const fs = require('node:fs')
|
||||||
|
|
||||||
let filepath
|
let filepath
|
||||||
@@ -1601,8 +1470,7 @@ By using this API, important information such as password and other sensitive in
|
|||||||
See [Apple's documentation](https://developer.apple.com/library/archive/technotes/tn2150/_index.html) for more
|
See [Apple's documentation](https://developer.apple.com/library/archive/technotes/tn2150/_index.html) for more
|
||||||
details.
|
details.
|
||||||
|
|
||||||
> [!NOTE]
|
**Note:** Enable `Secure Keyboard Entry` only when it is needed and disable it when it is no longer needed.
|
||||||
> Enable `Secure Keyboard Entry` only when it is needed and disable it when it is no longer needed.
|
|
||||||
|
|
||||||
### `app.setProxy(config)`
|
### `app.setProxy(config)`
|
||||||
|
|
||||||
@@ -1616,7 +1484,7 @@ and internal requests made by the runtime (ex: geolocation queries).
|
|||||||
|
|
||||||
This method can only be called after app is ready.
|
This method can only be called after app is ready.
|
||||||
|
|
||||||
### `app.resolveProxy(url)`
|
#### `app.resolveProxy(url)`
|
||||||
|
|
||||||
* `url` URL
|
* `url` URL
|
||||||
|
|
||||||
@@ -1664,8 +1532,7 @@ See [Chromium's accessibility docs](https://www.chromium.org/developers/design-d
|
|||||||
|
|
||||||
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.
|
||||||
> Rendering accessibility tree can significantly affect the performance of your app. It should not be enabled by default.
|
|
||||||
|
|
||||||
### `app.applicationMenu`
|
### `app.applicationMenu`
|
||||||
|
|
||||||
@@ -1678,13 +1545,11 @@ An `Integer` property that returns the badge count for current app. Setting the
|
|||||||
|
|
||||||
On macOS, setting this with any nonzero integer shows on the dock icon. On Linux, this property only works for Unity launcher.
|
On macOS, setting this with any nonzero integer shows on the dock icon. On Linux, this property only works for Unity launcher.
|
||||||
|
|
||||||
> [!NOTE]
|
**Note:** Unity launcher requires a `.desktop` file to work. For more information,
|
||||||
> Unity launcher requires a `.desktop` file to work. For more information,
|
please read the [Unity integration documentation][unity-requirement].
|
||||||
> please read the [Unity integration documentation][unity-requirement].
|
|
||||||
|
|
||||||
> [!NOTE]
|
**Note:** On macOS, you need to ensure that your application has the permission
|
||||||
> On macOS, you need to ensure that your application has the permission
|
to display notifications for this property to take effect.
|
||||||
> to display notifications for this property to take effect.
|
|
||||||
|
|
||||||
### `app.commandLine` _Readonly_
|
### `app.commandLine` _Readonly_
|
||||||
|
|
||||||
@@ -1693,8 +1558,8 @@ command line arguments that Chromium uses.
|
|||||||
|
|
||||||
### `app.dock` _macOS_ _Readonly_
|
### `app.dock` _macOS_ _Readonly_
|
||||||
|
|
||||||
A `Dock | undefined` property ([`Dock`](./dock.md) on macOS, `undefined` on all other
|
A [`Dock`](./dock.md) `| undefined` object that allows you to perform actions on your app icon in the user's
|
||||||
platforms) that allows you to perform actions on your app icon in the user's dock.
|
dock on macOS.
|
||||||
|
|
||||||
### `app.isPackaged` _Readonly_
|
### `app.isPackaged` _Readonly_
|
||||||
|
|
||||||
@@ -1713,7 +1578,6 @@ A `boolean` property that returns `true` if the app is packaged, `false` otherw
|
|||||||
[Squirrel-Windows]: https://github.com/Squirrel/Squirrel.Windows
|
[Squirrel-Windows]: https://github.com/Squirrel/Squirrel.Windows
|
||||||
[JumpListBeginListMSDN]: https://learn.microsoft.com/en-us/windows/win32/api/shobjidl_core/nf-shobjidl_core-icustomdestinationlist-beginlist
|
[JumpListBeginListMSDN]: https://learn.microsoft.com/en-us/windows/win32/api/shobjidl_core/nf-shobjidl_core-icustomdestinationlist-beginlist
|
||||||
[about-panel-options]: https://developer.apple.com/reference/appkit/nsapplication/1428479-orderfrontstandardaboutpanelwith?language=objc
|
[about-panel-options]: https://developer.apple.com/reference/appkit/nsapplication/1428479-orderfrontstandardaboutpanelwith?language=objc
|
||||||
[happy-eyeballs-v3]: https://datatracker.ietf.org/doc/draft-pauly-happy-happyeyeballs-v3/
|
|
||||||
|
|
||||||
### `app.name`
|
### `app.name`
|
||||||
|
|
||||||
|
|||||||
@@ -26,9 +26,8 @@ requirements, you can read [Server Support][server-support]. Note that
|
|||||||
update process. Apps that need to disable ATS can add the
|
update process. Apps that need to disable ATS can add the
|
||||||
`NSAllowsArbitraryLoads` key to their app's plist.
|
`NSAllowsArbitraryLoads` key to their app's plist.
|
||||||
|
|
||||||
> [!IMPORTANT]
|
**Note:** Your application must be signed for automatic updates on macOS.
|
||||||
> Your application must be signed for automatic updates on macOS.
|
This is a requirement of `Squirrel.Mac`.
|
||||||
> This is a requirement of `Squirrel.Mac`.
|
|
||||||
|
|
||||||
### Windows
|
### Windows
|
||||||
|
|
||||||
@@ -69,7 +68,7 @@ Emitted when there is an error while updating.
|
|||||||
|
|
||||||
### Event: 'checking-for-update'
|
### Event: 'checking-for-update'
|
||||||
|
|
||||||
Emitted when checking for an available update has started.
|
Emitted when checking if an update has started.
|
||||||
|
|
||||||
### Event: 'update-available'
|
### Event: 'update-available'
|
||||||
|
|
||||||
@@ -94,9 +93,8 @@ Emitted when an update has been downloaded.
|
|||||||
|
|
||||||
On Windows only `releaseName` is available.
|
On Windows only `releaseName` is available.
|
||||||
|
|
||||||
> [!NOTE]
|
**Note:** It is not strictly necessary to handle this event. A successfully
|
||||||
> It is not strictly necessary to handle this event. A successfully
|
downloaded update will still be applied the next time the application starts.
|
||||||
> downloaded update will still be applied the next time the application starts.
|
|
||||||
|
|
||||||
### Event: 'before-quit-for-update'
|
### Event: 'before-quit-for-update'
|
||||||
|
|
||||||
@@ -127,9 +125,8 @@ Returns `string` - The current update feed URL.
|
|||||||
Asks the server whether there is an update. You must call `setFeedURL` before
|
Asks the server whether there is an update. You must call `setFeedURL` before
|
||||||
using this API.
|
using this API.
|
||||||
|
|
||||||
> [!NOTE]
|
**Note:** If an update is available it will be downloaded automatically.
|
||||||
> If an update is available it will be downloaded automatically.
|
Calling `autoUpdater.checkForUpdates()` twice will download the update two times.
|
||||||
> Calling `autoUpdater.checkForUpdates()` twice will download the update two times.
|
|
||||||
|
|
||||||
### `autoUpdater.quitAndInstall()`
|
### `autoUpdater.quitAndInstall()`
|
||||||
|
|
||||||
@@ -140,10 +137,9 @@ Under the hood calling `autoUpdater.quitAndInstall()` will close all application
|
|||||||
windows first, and automatically call `app.quit()` after all windows have been
|
windows first, and automatically call `app.quit()` after all windows have been
|
||||||
closed.
|
closed.
|
||||||
|
|
||||||
> [!NOTE]
|
**Note:** It is not strictly necessary to call this function to apply an update,
|
||||||
> It is not strictly necessary to call this function to apply an update,
|
as a successfully downloaded update will always be applied the next time the
|
||||||
> as a successfully downloaded update will always be applied the next time the
|
application starts.
|
||||||
> application starts.
|
|
||||||
|
|
||||||
[squirrel-mac]: https://github.com/Squirrel/Squirrel.Mac
|
[squirrel-mac]: https://github.com/Squirrel/Squirrel.Mac
|
||||||
[server-support]: https://github.com/Squirrel/Squirrel.Mac#server-support
|
[server-support]: https://github.com/Squirrel/Squirrel.Mac#server-support
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
Process: [Main](../glossary.md#main-process)
|
Process: [Main](../glossary.md#main-process)
|
||||||
|
|
||||||
> [!NOTE]
|
> **Note**
|
||||||
> `BaseWindow` provides a flexible way to compose multiple web views in a
|
> `BaseWindow` provides a flexible way to compose multiple web views in a
|
||||||
> single window. For windows with only a single, full-size web view, the
|
> single window. For windows with only a single, full-size web view, the
|
||||||
> [`BrowserWindow`](browser-window.md) class may be a simpler option.
|
> [`BrowserWindow`](browser-window.md) class may be a simpler option.
|
||||||
@@ -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)
|
||||||
@@ -111,9 +107,8 @@ It creates a new `BaseWindow` with native properties as set by the `options`.
|
|||||||
|
|
||||||
Objects created with `new BaseWindow` emit the following events:
|
Objects created with `new BaseWindow` emit the following events:
|
||||||
|
|
||||||
> [!NOTE]
|
**Note:** Some events are only available on specific operating systems and are
|
||||||
> Some events are only available on specific operating systems and are
|
labeled as such.
|
||||||
> labeled as such.
|
|
||||||
|
|
||||||
#### Event: 'close'
|
#### Event: 'close'
|
||||||
|
|
||||||
@@ -142,35 +137,17 @@ window.onbeforeunload = (e) => {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
> [!NOTE]
|
_**Note**: There is a subtle difference between the behaviors of `window.onbeforeunload = handler` and `window.addEventListener('beforeunload', handler)`. It is recommended to always set the `event.returnValue` explicitly, instead of only returning a value, as the former works more consistently within Electron._
|
||||||
> There is a subtle difference between the behaviors of `window.onbeforeunload = handler` and
|
|
||||||
> `window.addEventListener('beforeunload', handler)`. It is recommended to always set the
|
|
||||||
> `event.returnValue` explicitly, instead of only returning a value, as the former works more
|
|
||||||
> consistently within Electron.
|
|
||||||
|
|
||||||
#### Event: 'closed'
|
#### Event: 'closed'
|
||||||
|
|
||||||
Emitted when the window is closed. After you have received this event you should
|
Emitted when the window is closed. After you have received this event you should
|
||||||
remove the reference to the window and avoid using it any more.
|
remove the reference to the window and avoid using it any more.
|
||||||
|
|
||||||
#### Event: 'query-session-end' _Windows_
|
|
||||||
|
|
||||||
Returns:
|
|
||||||
|
|
||||||
* `event` [WindowSessionEndEvent][window-session-end-event]
|
|
||||||
|
|
||||||
Emitted when a session is about to end due to a shutdown, machine restart, or user log-off.
|
|
||||||
Calling `event.preventDefault()` can delay the system shutdown, though it’s generally best
|
|
||||||
to respect the user’s choice to end the session. However, you may choose to use it if
|
|
||||||
ending the session puts the user at risk of losing data.
|
|
||||||
|
|
||||||
#### Event: 'session-end' _Windows_
|
#### Event: 'session-end' _Windows_
|
||||||
|
|
||||||
Returns:
|
Emitted when window session is going to end due to force shutdown or machine restart
|
||||||
|
or session log off.
|
||||||
* `event` [WindowSessionEndEvent][window-session-end-event]
|
|
||||||
|
|
||||||
Emitted when a session is about to end due to a shutdown, machine restart, or user log-off. Once this event fires, there is no way to prevent the session from ending.
|
|
||||||
|
|
||||||
#### Event: 'blur'
|
#### Event: 'blur'
|
||||||
|
|
||||||
@@ -261,8 +238,7 @@ Emitted when the window is being moved to a new position.
|
|||||||
|
|
||||||
Emitted once when the window is moved to a new position.
|
Emitted once when the window is moved to a new position.
|
||||||
|
|
||||||
> [!NOTE]
|
**Note**: On macOS this event is an alias of `move`.
|
||||||
> On macOS, this event is an alias of `move`.
|
|
||||||
|
|
||||||
#### Event: 'enter-full-screen'
|
#### Event: 'enter-full-screen'
|
||||||
|
|
||||||
@@ -298,7 +274,6 @@ e.g. `APPCOMMAND_BROWSER_BACKWARD` is emitted as `browser-backward`.
|
|||||||
|
|
||||||
```js
|
```js
|
||||||
const { BaseWindow } = require('electron')
|
const { BaseWindow } = require('electron')
|
||||||
|
|
||||||
const win = new BaseWindow()
|
const win = new BaseWindow()
|
||||||
win.on('app-command', (e, cmd) => {
|
win.on('app-command', (e, cmd) => {
|
||||||
// Navigate the window back when the user hits their mouse back button
|
// Navigate the window back when the user hits their mouse back button
|
||||||
@@ -353,12 +328,12 @@ Emitted when the window has closed a sheet.
|
|||||||
|
|
||||||
Emitted when the native new tab button is clicked.
|
Emitted when the native new tab button is clicked.
|
||||||
|
|
||||||
#### Event: 'system-context-menu' _Windows_ _Linux_
|
#### Event: 'system-context-menu' _Windows_
|
||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
|
|
||||||
* `event` Event
|
* `event` Event
|
||||||
* `point` [Point](structures/point.md) - The screen coordinates where the context menu was triggered.
|
* `point` [Point](structures/point.md) - The screen coordinates the context menu was triggered at
|
||||||
|
|
||||||
Emitted when the system context menu is triggered on the window, this is
|
Emitted when the system context menu is triggered on the window, this is
|
||||||
normally only triggered when the user right clicks on the non-client area
|
normally only triggered when the user right clicks on the non-client area
|
||||||
@@ -367,8 +342,6 @@ as `-webkit-app-region: drag` in a frameless window.
|
|||||||
|
|
||||||
Calling `event.preventDefault()` will prevent the menu from being displayed.
|
Calling `event.preventDefault()` will prevent the menu from being displayed.
|
||||||
|
|
||||||
To convert `point` to DIP, use [`screen.screenToDipPoint(point)`](./screen.md#screenscreentodippointpoint-windows-linux).
|
|
||||||
|
|
||||||
### Static Methods
|
### Static Methods
|
||||||
|
|
||||||
The `BaseWindow` class has the following static methods:
|
The `BaseWindow` class has the following static methods:
|
||||||
@@ -409,7 +382,7 @@ A `View` property for the content view of the window.
|
|||||||
|
|
||||||
A `string` (optional) property that is equal to the `tabbingIdentifier` passed to the `BrowserWindow` constructor or `undefined` if none was set.
|
A `string` (optional) property that is equal to the `tabbingIdentifier` passed to the `BrowserWindow` constructor or `undefined` if none was set.
|
||||||
|
|
||||||
#### `win.autoHideMenuBar` _Linux_ _Windows_
|
#### `win.autoHideMenuBar`
|
||||||
|
|
||||||
A `boolean` property that determines whether the window menu bar should hide itself automatically. Once set, the menu bar will only show when users press the single `Alt` key.
|
A `boolean` property that determines whether the window menu bar should hide itself automatically. Once set, the menu bar will only show when users press the single `Alt` key.
|
||||||
|
|
||||||
@@ -432,8 +405,7 @@ A `boolean` property that determines whether the window is focusable.
|
|||||||
|
|
||||||
A `boolean` property that determines whether the window is visible on all workspaces.
|
A `boolean` property that determines whether the window is visible on all workspaces.
|
||||||
|
|
||||||
> [!NOTE]
|
**Note:** Always returns false on Windows.
|
||||||
> Always returns false on Windows.
|
|
||||||
|
|
||||||
#### `win.shadow`
|
#### `win.shadow`
|
||||||
|
|
||||||
@@ -443,8 +415,7 @@ A `boolean` property that determines whether the window has a shadow.
|
|||||||
|
|
||||||
A `boolean` property that determines whether the menu bar should be visible.
|
A `boolean` property that determines whether the menu bar should be visible.
|
||||||
|
|
||||||
> [!NOTE]
|
**Note:** If the menu bar is auto-hide, users can still bring up the menu bar by pressing the single `Alt` key.
|
||||||
> If the menu bar is auto-hide, users can still bring up the menu bar by pressing the single `Alt` key.
|
|
||||||
|
|
||||||
#### `win.kiosk`
|
#### `win.kiosk`
|
||||||
|
|
||||||
@@ -465,8 +436,7 @@ and the icon of the file will show in window's title bar.
|
|||||||
|
|
||||||
A `string` property that determines the title of the native window.
|
A `string` property that determines the title of the native window.
|
||||||
|
|
||||||
> [!NOTE]
|
**Note:** The title of the web page can be different from the title of the native window.
|
||||||
> The title of the web page can be different from the title of the native window.
|
|
||||||
|
|
||||||
#### `win.minimizable` _macOS_ _Windows_
|
#### `win.minimizable` _macOS_ _Windows_
|
||||||
|
|
||||||
@@ -507,7 +477,6 @@ A `boolean` property that determines whether the window is excluded from the app
|
|||||||
|
|
||||||
```js @ts-expect-error=[12]
|
```js @ts-expect-error=[12]
|
||||||
const { Menu, BaseWindow } = require('electron')
|
const { Menu, BaseWindow } = require('electron')
|
||||||
|
|
||||||
const win = new BaseWindow({ height: 600, width: 600 })
|
const win = new BaseWindow({ height: 600, width: 600 })
|
||||||
|
|
||||||
const template = [
|
const template = [
|
||||||
@@ -528,17 +497,12 @@ A `string` property that defines an alternative title provided only to
|
|||||||
accessibility tools such as screen readers. This string is not directly
|
accessibility tools such as screen readers. This string is not directly
|
||||||
visible to users.
|
visible to users.
|
||||||
|
|
||||||
#### `win.snapped` _Windows_ _Readonly_
|
|
||||||
|
|
||||||
A `boolean` property that indicates whether the window is arranged via [Snap.](https://support.microsoft.com/en-us/windows/snap-your-windows-885a9b1e-a983-a3b1-16cd-c531795e6241)
|
|
||||||
|
|
||||||
### Instance Methods
|
### Instance Methods
|
||||||
|
|
||||||
Objects created with `new BaseWindow` have the following instance methods:
|
Objects created with `new BaseWindow` have the following instance methods:
|
||||||
|
|
||||||
> [!NOTE]
|
**Note:** Some methods are only available on specific operating systems and are
|
||||||
> Some methods are only available on specific operating systems and are
|
labeled as such.
|
||||||
> labeled as such.
|
|
||||||
|
|
||||||
#### `win.setContentView(view)`
|
#### `win.setContentView(view)`
|
||||||
|
|
||||||
@@ -630,8 +594,7 @@ Returns `boolean` - Whether the window is minimized.
|
|||||||
|
|
||||||
Sets whether the window should be in fullscreen mode.
|
Sets whether the window should be in fullscreen mode.
|
||||||
|
|
||||||
> [!NOTE]
|
**Note:** On macOS, fullscreen transitions take place asynchronously. If further actions depend on the fullscreen state, use the ['enter-full-screen'](base-window.md#event-enter-full-screen) or ['leave-full-screen'](base-window.md#event-leave-full-screen) events.
|
||||||
> On macOS, fullscreen transitions take place asynchronously. If further actions depend on the fullscreen state, use the ['enter-full-screen'](base-window.md#event-enter-full-screen) or > ['leave-full-screen'](base-window.md#event-leave-full-screen) events.
|
|
||||||
|
|
||||||
#### `win.isFullScreen()`
|
#### `win.isFullScreen()`
|
||||||
|
|
||||||
@@ -733,7 +696,6 @@ Resizes and moves the window to the supplied bounds. Any properties that are not
|
|||||||
|
|
||||||
```js
|
```js
|
||||||
const { BaseWindow } = require('electron')
|
const { BaseWindow } = require('electron')
|
||||||
|
|
||||||
const win = new BaseWindow()
|
const win = new BaseWindow()
|
||||||
|
|
||||||
// set all bounds properties
|
// set all bounds properties
|
||||||
@@ -746,15 +708,13 @@ win.setBounds({ width: 100 })
|
|||||||
console.log(win.getBounds())
|
console.log(win.getBounds())
|
||||||
```
|
```
|
||||||
|
|
||||||
> [!NOTE]
|
**Note:** On macOS, the y-coordinate value cannot be smaller than the [Tray](tray.md) height. The tray height has changed over time and depends on the operating system, but is between 20-40px. Passing a value lower than the tray height will result in a window that is flush to the tray.
|
||||||
> On macOS, the y-coordinate value cannot be smaller than the [Tray](tray.md) height. The tray height has changed over time and depends on the operating system, but is between 20-40px. Passing a value lower than the tray height will result in a window that is flush to the tray.
|
|
||||||
|
|
||||||
#### `win.getBounds()`
|
#### `win.getBounds()`
|
||||||
|
|
||||||
Returns [`Rectangle`](structures/rectangle.md) - The `bounds` of the window as `Object`.
|
Returns [`Rectangle`](structures/rectangle.md) - The `bounds` of the window as `Object`.
|
||||||
|
|
||||||
> [!NOTE]
|
**Note:** On macOS, the y-coordinate value returned will be at minimum the [Tray](tray.md) height. For example, calling `win.setBounds({ x: 25, y: 20, width: 800, height: 600 })` with a tray height of 38 means that `win.getBounds()` will return `{ x: 25, y: 38, width: 800, height: 600 }`.
|
||||||
> On macOS, the y-coordinate value returned will be at minimum the [Tray](tray.md) height. For example, calling `win.setBounds({ x: 25, y: 20, width: 800, height: 600 })` with a tray height of 38 means that `win.getBounds()` will return `{ x: 25, y: 38, width: 800, height: 600 }`.
|
|
||||||
|
|
||||||
#### `win.getBackgroundColor()`
|
#### `win.getBackgroundColor()`
|
||||||
|
|
||||||
@@ -762,8 +722,7 @@ Returns `string` - Gets the background color of the window in Hex (`#RRGGBB`) fo
|
|||||||
|
|
||||||
See [Setting `backgroundColor`](browser-window.md#setting-the-backgroundcolor-property).
|
See [Setting `backgroundColor`](browser-window.md#setting-the-backgroundcolor-property).
|
||||||
|
|
||||||
> [!NOTE]
|
**Note:** The alpha value is _not_ returned alongside the red, green, and blue values.
|
||||||
> The alpha value is _not_ returned alongside the red, green, and blue values.
|
|
||||||
|
|
||||||
#### `win.setContentBounds(bounds[, animate])`
|
#### `win.setContentBounds(bounds[, animate])`
|
||||||
|
|
||||||
@@ -781,8 +740,7 @@ Returns [`Rectangle`](structures/rectangle.md) - The `bounds` of the window's cl
|
|||||||
|
|
||||||
Returns [`Rectangle`](structures/rectangle.md) - Contains the window bounds of the normal state
|
Returns [`Rectangle`](structures/rectangle.md) - Contains the window bounds of the normal state
|
||||||
|
|
||||||
> [!NOTE]
|
**Note:** whatever the current state of the window : maximized, minimized or in fullscreen, this function always returns the position and size of the window in normal state. In normal state, getBounds and getNormalBounds returns the same [`Rectangle`](structures/rectangle.md).
|
||||||
> Whatever the current state of the window : maximized, minimized or in fullscreen, this function always returns the position and size of the window in normal state. In normal state, getBounds and getNormalBounds returns the same [`Rectangle`](structures/rectangle.md).
|
|
||||||
|
|
||||||
#### `win.setEnabled(enable)`
|
#### `win.setEnabled(enable)`
|
||||||
|
|
||||||
@@ -979,9 +937,8 @@ Changes the title of native window to `title`.
|
|||||||
|
|
||||||
Returns `string` - The title of the native window.
|
Returns `string` - The title of the native window.
|
||||||
|
|
||||||
> [!NOTE]
|
**Note:** The title of the web page can be different from the title of the native
|
||||||
> The title of the web page can be different from the title of the native
|
window.
|
||||||
> window.
|
|
||||||
|
|
||||||
#### `win.setSheetOffset(offsetY[, offsetX])` _macOS_
|
#### `win.setSheetOffset(offsetY[, offsetX])` _macOS_
|
||||||
|
|
||||||
@@ -994,7 +951,6 @@ a HTML-rendered toolbar. For example:
|
|||||||
|
|
||||||
```js
|
```js
|
||||||
const { BaseWindow } = require('electron')
|
const { BaseWindow } = require('electron')
|
||||||
|
|
||||||
const win = new BaseWindow()
|
const win = new BaseWindow()
|
||||||
|
|
||||||
const toolbarRect = document.getElementById('toolbar').getBoundingClientRect()
|
const toolbarRect = document.getElementById('toolbar').getBoundingClientRect()
|
||||||
@@ -1256,50 +1212,8 @@ in the taskbar.
|
|||||||
|
|
||||||
Sets the properties for the window's taskbar button.
|
Sets the properties for the window's taskbar button.
|
||||||
|
|
||||||
> [!NOTE]
|
**Note:** `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_
|
||||||
|
|
||||||
@@ -1336,13 +1250,6 @@ Sets whether the menu bar should be visible. If the menu bar is auto-hide, users
|
|||||||
|
|
||||||
Returns `boolean` - Whether the menu bar is visible.
|
Returns `boolean` - Whether the menu bar is visible.
|
||||||
|
|
||||||
#### `win.isSnapped()` _Windows_
|
|
||||||
|
|
||||||
Returns `boolean` - whether the window is arranged via [Snap.](https://support.microsoft.com/en-us/windows/snap-your-windows-885a9b1e-a983-a3b1-16cd-c531795e6241)
|
|
||||||
|
|
||||||
The window is snapped via buttons shown when the mouse is hovered over window
|
|
||||||
maximize button, or by dragging it to the edges of the screen.
|
|
||||||
|
|
||||||
#### `win.setVisibleOnAllWorkspaces(visible[, options])` _macOS_ _Linux_
|
#### `win.setVisibleOnAllWorkspaces(visible[, options])` _macOS_ _Linux_
|
||||||
|
|
||||||
* `visible` boolean
|
* `visible` boolean
|
||||||
@@ -1359,15 +1266,13 @@ maximize button, or by dragging it to the edges of the screen.
|
|||||||
|
|
||||||
Sets whether the window should be visible on all workspaces.
|
Sets whether the window should be visible on all workspaces.
|
||||||
|
|
||||||
> [!NOTE]
|
**Note:** This API does nothing on Windows.
|
||||||
> This API does nothing on Windows.
|
|
||||||
|
|
||||||
#### `win.isVisibleOnAllWorkspaces()` _macOS_ _Linux_
|
#### `win.isVisibleOnAllWorkspaces()` _macOS_ _Linux_
|
||||||
|
|
||||||
Returns `boolean` - Whether the window is visible on all workspaces.
|
Returns `boolean` - Whether the window is visible on all workspaces.
|
||||||
|
|
||||||
> [!NOTE]
|
**Note:** This API always returns false on Windows.
|
||||||
> This API always returns false on Windows.
|
|
||||||
|
|
||||||
#### `win.setIgnoreMouseEvents(ignore[, options])`
|
#### `win.setIgnoreMouseEvents(ignore[, options])`
|
||||||
|
|
||||||
@@ -1395,10 +1300,6 @@ 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.
|
||||||
|
|
||||||
#### `win.isContentProtected()` _macOS_ _Windows_
|
|
||||||
|
|
||||||
Returns `boolean` - whether or not content protection is currently enabled.
|
|
||||||
|
|
||||||
#### `win.setFocusable(focusable)` _macOS_ _Windows_
|
#### `win.setFocusable(focusable)` _macOS_ _Windows_
|
||||||
|
|
||||||
* `focusable` boolean
|
* `focusable` boolean
|
||||||
@@ -1488,8 +1389,7 @@ This method sets the browser window's system-drawn background material, includin
|
|||||||
|
|
||||||
See the [Windows documentation](https://learn.microsoft.com/en-us/windows/win32/api/dwmapi/ne-dwmapi-dwm_systembackdrop_type) for more details.
|
See the [Windows documentation](https://learn.microsoft.com/en-us/windows/win32/api/dwmapi/ne-dwmapi-dwm_systembackdrop_type) for more details.
|
||||||
|
|
||||||
> [!NOTE]
|
**Note:** This method is only supported on Windows 11 22H2 and up.
|
||||||
> This method is only supported on Windows 11 22H2 and up.
|
|
||||||
|
|
||||||
#### `win.setWindowButtonPosition(position)` _macOS_
|
#### `win.setWindowButtonPosition(position)` _macOS_
|
||||||
|
|
||||||
@@ -1511,9 +1411,8 @@ Sets the touchBar layout for the current window. Specifying `null` or
|
|||||||
`undefined` clears the touch bar. This method only has an effect if the
|
`undefined` clears the touch bar. This method only has an effect if the
|
||||||
machine has a touch bar.
|
machine has a touch bar.
|
||||||
|
|
||||||
> [!NOTE]
|
**Note:** The TouchBar API is currently experimental and may change or be
|
||||||
> The TouchBar API is currently experimental and may change or be
|
removed in future Electron releases.
|
||||||
> removed in future Electron releases.
|
|
||||||
|
|
||||||
#### `win.setTitleBarOverlay(options)` _Windows_ _Linux_
|
#### `win.setTitleBarOverlay(options)` _Windows_ _Linux_
|
||||||
|
|
||||||
@@ -1530,4 +1429,3 @@ On Linux, the `symbolColor` is automatically calculated to have minimum accessib
|
|||||||
[vibrancy-docs]: https://developer.apple.com/documentation/appkit/nsvisualeffectview?preferredLanguage=objc
|
[vibrancy-docs]: https://developer.apple.com/documentation/appkit/nsvisualeffectview?preferredLanguage=objc
|
||||||
[window-levels]: https://developer.apple.com/documentation/appkit/nswindow/level
|
[window-levels]: https://developer.apple.com/documentation/appkit/nswindow/level
|
||||||
[event-emitter]: https://nodejs.org/api/events.html#events_class_eventemitter
|
[event-emitter]: https://nodejs.org/api/events.html#events_class_eventemitter
|
||||||
[window-session-end-event]:../api/structures/window-session-end-event.md
|
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user