@@ -19,31 +19,49 @@ export interface E2EServer {
1919 * Find an available port for the web server.
2020 * Uses an ephemeral OS-assigned port to avoid EADDRINUSE races between parallel tests.
2121 */
22- export async function findAvailableServerPort ( _basePort : number = 3100 ) : Promise < number > {
23- return await new Promise ( ( resolve , reject ) => {
24- const server = createServer ( )
25- server . unref ( )
26-
27- server . on ( 'error' , ( error ) => {
28- server . close ( )
29- reject ( error )
30- } )
22+ export async function findAvailableServerPort ( basePort : number = 3100 ) : Promise < number > {
23+ const preferredPort = Number (
24+ process . env . NEXT_PUBLIC_WEB_PORT ||
25+ process . env . PORT ||
26+ basePort ,
27+ )
3128
32- server . listen ( 0 , ( ) => {
33- const address = server . address ( )
34- server . close ( ( closeErr ) => {
35- if ( closeErr ) {
36- reject ( closeErr )
37- return
38- }
39- if ( address && typeof address === 'object' ) {
40- resolve ( ( address as AddressInfo ) . port )
41- return
42- }
43- reject ( new Error ( 'Could not determine an available port' ) )
29+ const reservePort = ( port : number ) : Promise < number > =>
30+ new Promise ( ( resolve , reject ) => {
31+ const server = createServer ( )
32+ server . unref ( )
33+
34+ server . on ( 'error' , ( error ) => {
35+ server . close ( )
36+ reject ( error )
37+ } )
38+
39+ server . listen ( port , ( ) => {
40+ const address = server . address ( )
41+ server . close ( ( closeErr ) => {
42+ if ( closeErr ) {
43+ reject ( closeErr )
44+ return
45+ }
46+ if ( address && typeof address === 'object' ) {
47+ resolve ( ( address as AddressInfo ) . port )
48+ return
49+ }
50+ reject ( new Error ( 'Could not determine an available port' ) )
51+ } )
4452 } )
4553 } )
46- } )
54+
55+ // Try the env-configured port first; fall back to an ephemeral port.
56+ if ( ! Number . isNaN ( preferredPort ) ) {
57+ try {
58+ return await reservePort ( preferredPort )
59+ } catch {
60+ // Fall through to ephemeral assignment
61+ }
62+ }
63+
64+ return await reservePort ( 0 )
4765}
4866
4967/**
0 commit comments