diff --git a/package.json b/package.json index 21a75dfea9279..3f94012915c17 100644 --- a/package.json +++ b/package.json @@ -150,6 +150,7 @@ "form-data": "4.0.0", "fs-extra": "9.0.0", "get-port": "5.1.1", + "get-port-please": "3.1.1", "glob": "7.1.6", "gzip-size": "5.1.1", "html-validator": "5.1.18", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9877ca60bcb21..b3568755687db 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -296,6 +296,9 @@ importers: get-port: specifier: 5.1.1 version: 5.1.1 + get-port-please: + specifier: 3.1.1 + version: 3.1.1 glob: specifier: 7.1.6 version: 7.1.6 @@ -14573,6 +14576,10 @@ packages: through2: 2.0.5 dev: true + /get-port-please@3.1.1: + resolution: {integrity: sha512-3UBAyM3u4ZBVYDsxOQfJDxEa6XTbpBDrOjp4mf7ExFRt5BKs/QywQQiJsh2B+hxcZLSapWqCRvElUe8DnKcFHA==} + dev: true + /get-port@5.1.1: resolution: {integrity: sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==} engines: {node: '>=8'} diff --git a/test/lib/next-test-utils.ts b/test/lib/next-test-utils.ts index 09c9736d8c552..2d68d7c045a10 100644 --- a/test/lib/next-test-utils.ts +++ b/test/lib/next-test-utils.ts @@ -13,6 +13,7 @@ import path from 'path' import spawn from 'cross-spawn' import { writeFile } from 'fs-extra' import getPort from 'get-port' +import { getRandomPort, checkPort } from 'get-port-please' import fetch from 'node-fetch' import qs from 'querystring' import treeKill from 'tree-kill' @@ -171,7 +172,18 @@ export function renderViaHTTP( } export function findPort() { - return getPort() + //[NOTE]: What are we doing here? + // There are some fixes related with flaky tests failures caused by `No available ports found` + // from 'get-port'. This may be related / fixed by upstream https://github.com/sindresorhus/get-port/pull/56, + // however it happened after get-port switched to pure esm which is not easy to adapt by bump. + // get-port-please seems to offer the feature parity so we'll try to use it, and leave get-port as fallback + // for a while until we are certain to switch to get-port-please entirely. + try { + return getRandomPort() + } catch (e) { + require('console').warn('get-port-please failed, falling back to get-port') + return getPort() + } } export interface NextOptions {