ci: use CircleCI hosted macOS arm64 runners for testing (#41649)

This commit is contained in:
John Kleinschmidt 2024-03-21 14:07:18 -04:00 committed by GitHub
parent 587b66acc1
commit 1036d824fe
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 16 additions and 17 deletions

View file

@ -75,10 +75,6 @@ executors:
resource_class: << parameters.size >> resource_class: << parameters.size >>
# Electron Runners # Electron Runners
apple-silicon:
resource_class: electronjs/macos-arm64
machine: true
linux-arm: linux-arm:
resource_class: electronjs/aks-linux-arm-test resource_class: electronjs/aks-linux-arm-test
docker: docker:
@ -2298,8 +2294,10 @@ jobs:
- electron-tests: - electron-tests:
artifact-key: darwin-x64 artifact-key: darwin-x64
darwin-testing-arm64-tests: darwin-testing-arm64-tests:
executor: apple-silicon executor:
name: macos
size: macos.m1.medium.gen1
environment: environment:
<<: *env-mac-large <<: *env-mac-large
<<: *env-stack-dumping <<: *env-stack-dumping
@ -2323,7 +2321,9 @@ jobs:
artifact-key: mas-x64 artifact-key: mas-x64
mas-testing-arm64-tests: mas-testing-arm64-tests:
executor: apple-silicon executor:
name: macos
size: macos.m1.medium.gen1
environment: environment:
<<: *env-mac-large <<: *env-mac-large
<<: *env-stack-dumping <<: *env-stack-dumping

View file

@ -760,7 +760,8 @@ describe('app module', () => {
}).to.throw(/'name' is required when type is not mainAppService/); }).to.throw(/'name' is required when type is not mainAppService/);
}); });
ifit(isVenturaOrHigher)('throws when getting non-default type with no name', () => { // TODO this test does not work on CircleCI arm64 macs
ifit(isVenturaOrHigher && process.arch !== 'arm64')('throws when getting non-default type with no name', () => {
expect(() => { expect(() => {
app.getLoginItemSettings({ app.getLoginItemSettings({
type: 'daemonService' type: 'daemonService'

View file

@ -25,9 +25,7 @@ describe('setDisplayMediaRequestHandler', () => {
// error message: // error message:
// [ERROR:video_capture_device_client.cc(659)] error@ OnStart@content/browser/media/capture/desktop_capture_device_mac.cc:98, CGDisplayStreamCreate failed, OS message: Value too large to be stored in data type (84) // [ERROR:video_capture_device_client.cc(659)] error@ OnStart@content/browser/media/capture/desktop_capture_device_mac.cc:98, CGDisplayStreamCreate failed, OS message: Value too large to be stored in data type (84)
// This is possibly related to the OS/VM setup that CircleCI uses for macOS. // This is possibly related to the OS/VM setup that CircleCI uses for macOS.
// Our arm64 runners are in @jkleinsc's office, and are real machines, so the ifit(process.platform !== 'darwin')('works when calling getDisplayMedia', async function () {
// test works there.
ifit(!(process.platform === 'darwin' && process.arch === 'x64'))('works when calling getDisplayMedia', async function () {
if ((await desktopCapturer.getSources({ types: ['screen'] })).length === 0) { if ((await desktopCapturer.getSources({ types: ['screen'] })).length === 0) {
return this.skip(); return this.skip();
} }
@ -306,7 +304,7 @@ describe('setDisplayMediaRequestHandler', () => {
expect(ok).to.be.true(message); expect(ok).to.be.true(message);
}); });
ifit(!(process.platform === 'darwin' && process.arch === 'x64'))('can supply a screen response to preferCurrentTab', async () => { ifit(process.platform !== 'darwin')('can supply a screen response to preferCurrentTab', async () => {
const ses = session.fromPartition('' + Math.random()); const ses = session.fromPartition('' + Math.random());
let requestHandlerCalled = false; let requestHandlerCalled = false;
ses.setDisplayMediaRequestHandler(async (request, callback) => { ses.setDisplayMediaRequestHandler(async (request, callback) => {

View file

@ -2511,18 +2511,18 @@ describe('webContents module', () => {
it('emits when moveTo is called', async () => { it('emits when moveTo is called', async () => {
const w = new BrowserWindow({ show: false }); const w = new BrowserWindow({ show: false });
w.loadURL('about:blank'); w.loadURL('about:blank');
w.webContents.executeJavaScript('window.moveTo(100, 100)', true); w.webContents.executeJavaScript('window.moveTo(50, 50)', true);
const [, rect] = await once(w.webContents, 'content-bounds-updated') as [any, Electron.Rectangle]; const [, rect] = await once(w.webContents, 'content-bounds-updated') as [any, Electron.Rectangle];
const { width, height } = w.getBounds(); const { width, height } = w.getBounds();
expect(rect).to.deep.equal({ expect(rect).to.deep.equal({
x: 100, x: 50,
y: 100, y: 50,
width, width,
height height
}); });
await new Promise(setImmediate); await new Promise(setImmediate);
expect(w.getBounds().x).to.equal(100); expect(w.getBounds().x).to.equal(50);
expect(w.getBounds().y).to.equal(100); expect(w.getBounds().y).to.equal(50);
}); });
it('emits when resizeTo is called', async () => { it('emits when resizeTo is called', async () => {