build: fix macOS tests on GHA (#42524)
* build: use --frozen-lockfile * build: don't include src/electron in src artifacts * Use mac intel runner for mac-x64 tests * test: debug mac tests not exiting * skip navigator.serial tests on GHA * TCC magic * Fix release notes tests needing ELECTRON_GITHUB_TOKEN * Add Azure env vars to gn check pipeline segment * use RO token for tests * temporarily disable codesign tests * test: disable LoginItemSettings on x64 macOS * test: bump up time on protocol test for slower machines * fixup: use RO token for tests --------- Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com> Co-authored-by: John Kleinschmidt <jkleinsc@electronjs.org>
This commit is contained in:
parent
b35adaee2d
commit
a0a13ad623
12 changed files with 82 additions and 16 deletions
2
.github/actions/checkout/action.yml
vendored
2
.github/actions/checkout/action.yml
vendored
|
@ -16,7 +16,7 @@ runs:
|
||||||
shell: bash
|
shell: bash
|
||||||
run: |
|
run: |
|
||||||
cd src/electron
|
cd src/electron
|
||||||
node script/yarn install
|
node script/yarn install --frozen-lockfile
|
||||||
- name: Get Depot Tools
|
- name: Get Depot Tools
|
||||||
shell: bash
|
shell: bash
|
||||||
run: |
|
run: |
|
||||||
|
|
24
.github/workflows/build.yml
vendored
24
.github/workflows/build.yml
vendored
|
@ -109,11 +109,15 @@ jobs:
|
||||||
|
|
||||||
# Build Jobs - These cascade into testing jobs
|
# Build Jobs - These cascade into testing jobs
|
||||||
macos-x64:
|
macos-x64:
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
issues: read
|
||||||
|
pull-requests: read
|
||||||
uses: ./.github/workflows/pipeline-electron-build-and-test.yml
|
uses: ./.github/workflows/pipeline-electron-build-and-test.yml
|
||||||
needs: checkout-macos
|
needs: checkout-macos
|
||||||
with:
|
with:
|
||||||
build-runs-on: macos-14-xlarge
|
build-runs-on: macos-14-xlarge
|
||||||
test-runs-on: macos-14-xlarge
|
test-runs-on: macos-13
|
||||||
target-platform: macos
|
target-platform: macos
|
||||||
target-arch: x64
|
target-arch: x64
|
||||||
is-release: false
|
is-release: false
|
||||||
|
@ -123,11 +127,15 @@ jobs:
|
||||||
secrets: inherit
|
secrets: inherit
|
||||||
|
|
||||||
macos-arm64:
|
macos-arm64:
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
issues: read
|
||||||
|
pull-requests: read
|
||||||
uses: ./.github/workflows/pipeline-electron-build-and-test.yml
|
uses: ./.github/workflows/pipeline-electron-build-and-test.yml
|
||||||
needs: checkout-macos
|
needs: checkout-macos
|
||||||
with:
|
with:
|
||||||
build-runs-on: macos-14-xlarge
|
build-runs-on: macos-14-xlarge
|
||||||
test-runs-on: macos-14-xlarge
|
test-runs-on: macos-14
|
||||||
target-platform: macos
|
target-platform: macos
|
||||||
target-arch: arm64
|
target-arch: arm64
|
||||||
is-release: false
|
is-release: false
|
||||||
|
@ -137,6 +145,10 @@ jobs:
|
||||||
secrets: inherit
|
secrets: inherit
|
||||||
|
|
||||||
linux-x64:
|
linux-x64:
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
issues: 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
|
||||||
with:
|
with:
|
||||||
|
@ -153,6 +165,10 @@ jobs:
|
||||||
secrets: inherit
|
secrets: inherit
|
||||||
|
|
||||||
linux-arm:
|
linux-arm:
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
issues: 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
|
||||||
with:
|
with:
|
||||||
|
@ -169,6 +185,10 @@ jobs:
|
||||||
secrets: inherit
|
secrets: inherit
|
||||||
|
|
||||||
linux-arm64:
|
linux-arm64:
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
issues: 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
|
||||||
with:
|
with:
|
||||||
|
|
|
@ -54,6 +54,11 @@ concurrency:
|
||||||
group: electron-build-and-test-${{ inputs.target-platform }}-${{ inputs.target-arch }}-${{ github.ref }}
|
group: electron-build-and-test-${{ inputs.target-platform }}-${{ inputs.target-arch }}-${{ github.ref }}
|
||||||
cancel-in-progress: ${{ github.ref != 'refs/heads/main' && !endsWith(github.ref, '-x-y') }}
|
cancel-in-progress: ${{ github.ref != 'refs/heads/main' && !endsWith(github.ref, '-x-y') }}
|
||||||
|
|
||||||
|
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
|
||||||
|
|
|
@ -27,7 +27,7 @@ jobs:
|
||||||
- name: Install Dependencies
|
- name: Install Dependencies
|
||||||
run: |
|
run: |
|
||||||
cd src/electron
|
cd src/electron
|
||||||
node script/yarn install
|
node script/yarn install --frozen-lockfile
|
||||||
- name: Run TS/JS compile
|
- name: Run TS/JS compile
|
||||||
shell: bash
|
shell: bash
|
||||||
run: |
|
run: |
|
||||||
|
|
2
.github/workflows/pipeline-electron-lint.yml
vendored
2
.github/workflows/pipeline-electron-lint.yml
vendored
|
@ -27,7 +27,7 @@ jobs:
|
||||||
- name: Install Dependencies
|
- name: Install Dependencies
|
||||||
run: |
|
run: |
|
||||||
cd src/electron
|
cd src/electron
|
||||||
node script/yarn install
|
node script/yarn install --frozen-lockfile
|
||||||
- name: Setup third_party Depot Tools
|
- name: Setup third_party Depot Tools
|
||||||
shell: bash
|
shell: bash
|
||||||
run: |
|
run: |
|
||||||
|
|
|
@ -89,7 +89,7 @@ jobs:
|
||||||
- name: Install Dependencies
|
- name: Install Dependencies
|
||||||
run: |
|
run: |
|
||||||
cd src/electron
|
cd src/electron
|
||||||
node script/yarn install
|
node script/yarn install --frozen-lockfile
|
||||||
- name: Install AZCopy
|
- name: Install AZCopy
|
||||||
if: ${{ inputs.target-platform == 'macos' }}
|
if: ${{ inputs.target-platform == 'macos' }}
|
||||||
run: brew install azcopy
|
run: brew install azcopy
|
||||||
|
|
|
@ -24,9 +24,16 @@ on:
|
||||||
concurrency:
|
concurrency:
|
||||||
group: electron-test-${{ inputs.target-platform }}-${{ inputs.target-arch }}-${{ github.ref }}
|
group: electron-test-${{ inputs.target-platform }}-${{ inputs.target-arch }}-${{ github.ref }}
|
||||||
cancel-in-progress: ${{ github.ref != 'refs/heads/main' && !endsWith(github.ref, '-x-y') }}
|
cancel-in-progress: ${{ github.ref != 'refs/heads/main' && !endsWith(github.ref, '-x-y') }}
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
issues: read
|
||||||
|
pull-requests: read
|
||||||
|
|
||||||
env:
|
env:
|
||||||
ELECTRON_OUT_DIR: Default
|
ELECTRON_OUT_DIR: Default
|
||||||
ELECTRON_RBE_JWT: ${{ secrets.ELECTRON_RBE_JWT }}
|
ELECTRON_RBE_JWT: ${{ secrets.ELECTRON_RBE_JWT }}
|
||||||
|
ELECTRON_GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
test:
|
test:
|
||||||
|
@ -36,7 +43,7 @@ jobs:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
build-type: ${{ inputs.target-platform == 'macos' && fromJSON('["darwin","mas"]') || fromJSON('["linux"]') }}
|
build-type: ${{ inputs.target-platform == 'macos' && fromJSON('["darwin","mas"]') || fromJSON('["linux"]') }}
|
||||||
shard: ${{ inputs.target-platform == 'macos' && fromJSON('[1]') || fromJSON('[1, 2, 3]') }}
|
shard: ${{ inputs.target-platform == 'macos' && fromJSON('[1, 2]') || fromJSON('[1, 2, 3]') }}
|
||||||
env:
|
env:
|
||||||
BUILD_TYPE: ${{ matrix.build-type }}
|
BUILD_TYPE: ${{ matrix.build-type }}
|
||||||
TARGET_ARCH: ${{ inputs.target-arch }}
|
TARGET_ARCH: ${{ inputs.target-arch }}
|
||||||
|
@ -45,6 +52,39 @@ jobs:
|
||||||
if: ${{ inputs.target-arch == 'arm' }}
|
if: ${{ inputs.target-arch == 'arm' }}
|
||||||
run: |
|
run: |
|
||||||
cp $(which node) /mnt/runner-externals/node20/bin/
|
cp $(which node) /mnt/runner-externals/node20/bin/
|
||||||
|
- name: Add TCC permissions on macOS
|
||||||
|
if: ${{ inputs.target-platform == 'macos' }}
|
||||||
|
run: |
|
||||||
|
configure_user_tccdb () {
|
||||||
|
local values=$1
|
||||||
|
local dbPath="$HOME/Library/Application Support/com.apple.TCC/TCC.db"
|
||||||
|
local sqlQuery="INSERT OR REPLACE INTO access VALUES($values);"
|
||||||
|
sqlite3 "$dbPath" "$sqlQuery"
|
||||||
|
}
|
||||||
|
|
||||||
|
configure_sys_tccdb () {
|
||||||
|
local values=$1
|
||||||
|
local dbPath="/Library/Application Support/com.apple.TCC/TCC.db"
|
||||||
|
local sqlQuery="INSERT OR REPLACE INTO access VALUES($values);"
|
||||||
|
sudo sqlite3 "$dbPath" "$sqlQuery"
|
||||||
|
}
|
||||||
|
|
||||||
|
userValuesArray=(
|
||||||
|
"'kTCCServiceMicrophone','/usr/local/opt/runner/provisioner/provisioner',1,2,4,1,NULL,NULL,0,'UNUSED',NULL,0,1687786159"
|
||||||
|
"'kTCCServiceCamera','/usr/local/opt/runner/provisioner/provisioner',1,2,4,1,NULL,NULL,0,'UNUSED',NULL,0,1687786159"
|
||||||
|
"'kTCCServiceBluetoothAlways','/usr/local/opt/runner/provisioner/provisioner',1,2,4,1,NULL,NULL,0,'UNUSED',NULL,0,1687786159"
|
||||||
|
)
|
||||||
|
for values in "${userValuesArray[@]}"; do
|
||||||
|
# Sonoma and higher have a few extra values
|
||||||
|
# Ref: https://github.com/actions/runner-images/blob/main/images/macos/scripts/build/configure-tccdb-macos.sh
|
||||||
|
if [ "$OSTYPE" = "darwin23" ]; then
|
||||||
|
configure_user_tccdb "$values,NULL,NULL,'UNUSED',${values##*,}"
|
||||||
|
configure_sys_tccdb "$values,NULL,NULL,'UNUSED',${values##*,}"
|
||||||
|
else
|
||||||
|
configure_user_tccdb "$values"
|
||||||
|
configure_sys_tccdb "$values"
|
||||||
|
fi
|
||||||
|
done
|
||||||
- name: Checkout Electron
|
- name: Checkout Electron
|
||||||
uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29
|
uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29
|
||||||
with:
|
with:
|
||||||
|
@ -53,7 +93,7 @@ jobs:
|
||||||
- name: Install Dependencies
|
- name: Install Dependencies
|
||||||
run: |
|
run: |
|
||||||
cd src/electron
|
cd src/electron
|
||||||
node script/yarn install
|
node script/yarn install --frozen-lockfile
|
||||||
- name: Get Depot Tools
|
- name: Get Depot Tools
|
||||||
timeout-minutes: 5
|
timeout-minutes: 5
|
||||||
run: |
|
run: |
|
||||||
|
@ -97,6 +137,7 @@ jobs:
|
||||||
# cd src/electron
|
# cd src/electron
|
||||||
# ./script/codesign/generate-identity.sh
|
# ./script/codesign/generate-identity.sh
|
||||||
- name: Run Electron Tests
|
- name: Run Electron Tests
|
||||||
|
shell: bash
|
||||||
env:
|
env:
|
||||||
MOCHA_REPORTER: mocha-multi-reporters
|
MOCHA_REPORTER: mocha-multi-reporters
|
||||||
ELECTRON_TEST_RESULTS_DIR: junit
|
ELECTRON_TEST_RESULTS_DIR: junit
|
||||||
|
@ -107,11 +148,12 @@ jobs:
|
||||||
run: |
|
run: |
|
||||||
cd src/electron
|
cd src/electron
|
||||||
# Get which tests are on this shard
|
# Get which tests are on this shard
|
||||||
tests_files=$(node script/split-tests ${{ matrix.shard }} ${{ inputs.target-platform == 'macos' && 1 || 3 }})
|
tests_files=$(node script/split-tests ${{ matrix.shard }} ${{ inputs.target-platform == 'macos' && 2 || 3 }})
|
||||||
|
|
||||||
# Run tests
|
# Run tests
|
||||||
if [ "`uname`" = "Darwin" ]; then
|
if [ "`uname`" = "Darwin" ]; then
|
||||||
node script/yarn test --runners=main --trace-uncaught --enable-logging
|
echo "About to start tests"
|
||||||
|
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 .
|
||||||
|
|
|
@ -57,7 +57,7 @@ jobs:
|
||||||
- name: Install Dependencies
|
- name: Install Dependencies
|
||||||
run: |
|
run: |
|
||||||
cd src/electron
|
cd src/electron
|
||||||
node script/yarn install
|
node script/yarn install --frozen-lockfile
|
||||||
- name: Get Depot Tools
|
- name: Get Depot Tools
|
||||||
timeout-minutes: 5
|
timeout-minutes: 5
|
||||||
run: |
|
run: |
|
||||||
|
@ -121,7 +121,7 @@ jobs:
|
||||||
- name: Install Dependencies
|
- name: Install Dependencies
|
||||||
run: |
|
run: |
|
||||||
cd src/electron
|
cd src/electron
|
||||||
node script/yarn install
|
node script/yarn install --frozen-lockfile
|
||||||
- name: Get Depot Tools
|
- name: Get Depot Tools
|
||||||
timeout-minutes: 5
|
timeout-minutes: 5
|
||||||
run: |
|
run: |
|
||||||
|
|
|
@ -51,7 +51,6 @@ move_src_dirs_if_exist() {
|
||||||
src/out/Default/overlapped-checker \
|
src/out/Default/overlapped-checker \
|
||||||
src/out/Default/ffmpeg \
|
src/out/Default/ffmpeg \
|
||||||
src/out/Default/hunspell_dictionaries \
|
src/out/Default/hunspell_dictionaries \
|
||||||
src/electron \
|
|
||||||
src/third_party/electron_node \
|
src/third_party/electron_node \
|
||||||
src/third_party/nan \
|
src/third_party/nan \
|
||||||
src/cross-arch-snapshots \
|
src/cross-arch-snapshots \
|
||||||
|
|
|
@ -595,7 +595,7 @@ describe('app module', () => {
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
ifdescribe(process.platform !== 'linux' && !process.mas)('app.get/setLoginItemSettings API', function () {
|
ifdescribe(process.platform !== 'linux' && !process.mas && (process.platform !== 'darwin' || process.arch === 'arm64'))('app.get/setLoginItemSettings API', function () {
|
||||||
const isMac = process.platform === 'darwin';
|
const isMac = process.platform === 'darwin';
|
||||||
const isWin = process.platform === 'win32';
|
const isWin = process.platform === 'win32';
|
||||||
|
|
||||||
|
|
|
@ -1749,7 +1749,7 @@ describe('protocol module', () => {
|
||||||
const end = Date.now();
|
const end = Date.now();
|
||||||
return end - begin;
|
return end - begin;
|
||||||
})();
|
})();
|
||||||
expect(interceptedTime).to.be.lessThan(rawTime * 1.5);
|
expect(interceptedTime).to.be.lessThan(rawTime * 1.6);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
|
@ -8,7 +8,7 @@ const fixturesPath = path.resolve(__dirname, '..', 'fixtures');
|
||||||
|
|
||||||
export const shouldRunCodesignTests =
|
export const shouldRunCodesignTests =
|
||||||
process.platform === 'darwin' &&
|
process.platform === 'darwin' &&
|
||||||
!(process.env.CI && process.arch === 'arm64') &&
|
!process.env.CI &&
|
||||||
!process.mas &&
|
!process.mas &&
|
||||||
!features.isComponentBuild();
|
!features.isComponentBuild();
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue