test: run e2e tests in WebKit on macOS (#40140)

WebKit was removed from the e2e tests in
https://github.com/go-gitea/gitea/pull/37315 because Linux WebKit kept
crashing. `make test-e2e` on macOS now also runs WebKit, which does not
show these crashes there. CI stays on Linux, because macOS runners would
need about an extra GB of cache storage.

1. The bot account test clicks the user type dropdown, Safari only moves
Tab focus between text fields
1. On macOS, Playwright runs with a single libuv thread, concurrent
`getaddrinfo` lookups of `localhost` there sporadically stall for 5s

---------

Signed-off-by: silverwind <me@silverwind.io>
This commit is contained in:
silverwind authored and GitHub committed 2026-10-31 22:44:39 +00:00
1 parent 59cbacc924
commit 5d84bbd525
4 files changed
+16 -5

No files matched your search

+1 -1
View File
@@ -15,7 +15,7 @@ SHELLCHECK_IMAGE ?= docker.io/koalaman/shellcheck:v0.11.0@sha256:61862eba1fcf09a
CONTAINER_RUNTIME ?= $(shell hash docker >/dev/null 2>&1 && echo docker || echo podman)
PLAYWRIGHT_BROWSERS ?= chromium firefox
PLAYWRIGHT_BROWSERS ?= chromium firefox $(if $(filter Darwin,$(shell uname -s 2>/dev/null)),webkit)
PLAYWRIGHT_FLAGS ?=
HAS_GO := $(shell hash $(GO) > /dev/null 2>&1 && echo yes)
+8 -1
View File
@@ -1,4 +1,4 @@
import {env} from 'node:process';
import {env, platform} from 'node:process';
import {defineConfig, devices} from '@playwright/test';
const timeoutFactor = Number(env.GITEA_TEST_E2E_TIMEOUT_FACTOR) || 1;
@@ -41,5 +41,12 @@ export default defineConfig({
},
},
},
...(platform === 'darwin' ? [{ // webkit on linux is unstable
name: 'webkit',
use: {
...devices['Desktop Safari'],
permissions: ['clipboard-read'],
},
}] : []),
],
});
+2 -3
View File
@@ -1,14 +1,13 @@
import {env} from 'node:process';
import {test, expect} from '@playwright/test';
import {login, randomString} from './utils.ts';
import {clickDropdownItem, login, randomString} from './utils.ts';
test('create a bot and manage its access token', async ({page, request}) => {
const botName = `e2e-bot-${randomString(8)}`;
await login(page);
await page.goto('/-/admin/users/new');
await page.getByLabel('Username').fill(botName);
await page.getByLabel('Username').press('Tab');
await page.getByRole('option', {name: 'Bot'}).click();
await clickDropdownItem(page, page.getByRole('combobox').filter({hasText: 'Bot'}), 'Bot');
await page.getByLabel('Email Address').fill(`${botName}@${env.GITEA_TEST_E2E_DOMAIN}`);
await page.getByRole('button', {name: 'Create User Account'}).click();
await page.waitForURL(/\/-\/admin\/users\/\d+$/);
+5
View File
@@ -190,6 +190,11 @@ export GITEA_TEST_E2E_PASSWORD
export GITEA_TEST_E2E_EMAIL
export GITEA_TEST_E2E_TIMEOUT_FACTOR
# concurrent localhost lookups on macOS sporadically stall for 5s
if [ "$(uname -s)" = "Darwin" ]; then
export UV_THREADPOOL_SIZE=1
fi
if [ "$PLAYWRIGHT_MODE" = "container" ]; then
export PW_TEST_CONNECT_WS_ENDPOINT="ws://127.0.0.1:${PLAYWRIGHT_SERVER_PORT}/"
fi