Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
53 commits
Select commit Hold shift + click to select a range
26a68f2
chore(testing): expect 'existing outputs match the cache' for daemon-…
FrozenPandaz Apr 26, 2026
98ed2ef
chore(testing): revert cache.test.ts line-216 assertion to local cache
FrozenPandaz Apr 26, 2026
4dd52c8
chore(repo): parallelize e2e-ci tasks on large/xlarge agents
FrozenPandaz Apr 17, 2026
c33607d
chore(repo): reserve ports via atomic lock file in e2e tests
FrozenPandaz Apr 17, 2026
ed28b23
chore(repo): reserve ports in cypress and playwright e2e tests
FrozenPandaz Apr 17, 2026
ba08a2e
chore(repo): reserve ports in angular, next, and cache e2e tests
FrozenPandaz Apr 17, 2026
e449b1d
chore(repo): revert cypress port override (breaks generator baseUrl)
FrozenPandaz Apr 17, 2026
f512be8
chore(repo): migrate e2e tests from getAvailablePort to reservePort
FrozenPandaz Apr 17, 2026
d76e817
chore(repo): enable nx daemon in e2e and bump e2e-ci parallelism
FrozenPandaz Apr 25, 2026
f44a1cd
chore(repo): drop linux-large e2e-ci parallelism 3->2
FrozenPandaz Apr 26, 2026
134c7c2
chore(repo): reserve remote ports in module-federation e2e tests
FrozenPandaz Apr 26, 2026
91323d5
chore(module-federation): format e2e tests
nx-cloud[bot] Apr 26, 2026
f194071
fix(testing): import updateJson in federate-module e2e tests
FrozenPandaz Apr 26, 2026
1b50fb4
fix(testing): verify OS port is free in reservePort
FrozenPandaz Apr 27, 2026
c4d0107
fix(testing): pin host serve port in angular module-federation-lib e2e
FrozenPandaz Apr 27, 2026
dc9ba49
fix(testing): use correct remote path in misc-rspack-convert-to-rspac…
FrozenPandaz Apr 27, 2026
d5ef823
fix(testing): reserve ports in core-webpack-ssr e2e test
FrozenPandaz Apr 27, 2026
c5907a8
fix(testing): bump release-publishable-libraries beforeAll timeout to…
FrozenPandaz Apr 27, 2026
f624531
fix(testing): pass --bundler=webpack in webpack buildLibsFromSource e…
FrozenPandaz Apr 27, 2026
3c7cdb7
fix(testing): pin staticRemotesPort in angular module-federation-lib e2e
FrozenPandaz Apr 27, 2026
c9ffbe5
fix(testing): reset daemon cache in spread tests
nx-cloud[bot] Apr 27, 2026
c20aa45
fix(testing): reset daemon after pinning ports in module-federation-l…
FrozenPandaz Apr 27, 2026
8efef79
fix(testing): disable daemon for e2e child in module-federation-lib
FrozenPandaz Apr 27, 2026
63d5538
fix(repo): keep e2e-angular tests serial on parallel agents
FrozenPandaz Apr 27, 2026
0773161
fix(gradle): remove gradlew --stop from setup
nx-cloud[bot] Apr 27, 2026
f864ed9
fix(testing): revert NX_DAEMON enablement and module-federation-lib p…
FrozenPandaz Apr 27, 2026
36415bd
Revert "fix(testing): revert NX_DAEMON enablement and module-federati…
FrozenPandaz Apr 27, 2026
60fd5af
fix(testing): pass --baseUrl in module-federation-lib e2e
FrozenPandaz Apr 27, 2026
762b2e5
fix(testing): use CYPRESS_BASE_URL env to override cypress baseUrl
FrozenPandaz Apr 27, 2026
db18531
fix(testing): revert speculative port pinning in module-federation-lib
FrozenPandaz Apr 27, 2026
41df6e6
feat(angular): expose port option on host generator
FrozenPandaz Apr 27, 2026
cef066e
fix(testing): bump runCommandUntil timeout in react independent-deplo…
FrozenPandaz Apr 27, 2026
92f5e03
fix(testing): bump runCommandUntil timeout in react misc-rspack-inter…
FrozenPandaz Apr 27, 2026
aa27349
fix(testing): pass --port=hostPort to angular host generator in MF tests
FrozenPandaz Apr 30, 2026
548cd8e
chore(repo): bump bust to invalidate caches
FrozenPandaz Apr 30, 2026
9c7a9e9
chore(repo): bump bust to invalidate caches
FrozenPandaz Apr 30, 2026
92a11ea
chore(repo): bump bust to invalidate caches [Self-Healing CI Rerun]
nx-cloud[bot] May 1, 2026
4248837
chore(repo): bump bust to invalidate caches
FrozenPandaz May 1, 2026
1f84c8e
fix(testing): isolate reservePort range from framework defaults
FrozenPandaz May 1, 2026
5a87fd3
fix(testing): pin SSR server target port and remote-cache fixture port
FrozenPandaz May 1, 2026
5926f53
chore(repo): bump bust to invalidate caches
FrozenPandaz May 1, 2026
5ea91e0
chore(repo): bump bust to invalidate caches [Self-Healing CI Rerun]
nx-cloud[bot] May 1, 2026
7feb453
chore(repo): bump bust to invalidate caches
FrozenPandaz May 1, 2026
de2bb8d
chore(repo): bump bust to invalidate caches
FrozenPandaz May 1, 2026
5e36c08
fix(testing): pass --no-daemon to gradle setup commands in create-gra…
FrozenPandaz May 2, 2026
f14fce8
fix(testing): pass --no-daemon to gradle setup commands in create-gra…
nx-cloud[bot] May 2, 2026
f8f7179
fix(testing): match nx serve output 'server ready at' instead of stal…
FrozenPandaz May 2, 2026
d0a7744
chore(repo): bump bust to invalidate caches
FrozenPandaz May 2, 2026
98e7b12
chore(repo): bump bust to invalidate caches
FrozenPandaz May 2, 2026
e13ecfb
chore(repo): bump bust to invalidate caches
FrozenPandaz May 2, 2026
9556b87
chore(repo): use os.tmpdir() for e2e port lock dir
FrozenPandaz May 4, 2026
573559a
fix(angular): reserve esbuild port in e2e
nx-cloud[bot] May 4, 2026
74ae9b9
Revert "fix(angular): reserve esbuild port in e2e"
FrozenPandaz May 4, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
50 changes: 1 addition & 49 deletions .nx/workflows/dynamic-changesets.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -5,31 +5,6 @@ distribute-on:
large-changeset: 6 linux-large, 6 linux-extra-large
extra-large-changeset: 8 linux-large, 8 linux-extra-large
assignment-rules:
- projects:
- e2e-gradle
targets:
- e2e-ci**
run-on:
- agent: linux-extra-large
parallelism: 1
- projects:
- e2e-next
- e2e-plugin
targets:
- e2e-ci**
run-on:
- agent: linux-extra-large
parallelism: 2
- projects:
- e2e-angular
- e2e-node
- e2e-react
targets:
- e2e-ci**
run-on:
- agent: linux-extra-large
parallelism: 1

- projects:
- nx
- workspace
Expand All @@ -44,36 +19,13 @@ assignment-rules:
- agent: linux-extra-large
parallelism: 1

- projects:
- e2e-release
- e2e-nuxt
- e2e-web
- e2e-eslint
- e2e-remix
- e2e-cypress
- e2e-docker
- e2e-js
- e2e-nx
- e2e-nx-init
- e2e-dotnet
- e2e-workspace-create
- e2e-rollup
targets:
- e2e-ci**
run-on:
- agent: linux-large
parallelism: 1
- agent: linux-extra-large
parallelism: 2

# All other e2e tests can run in parallel
- targets:
- e2e-ci**
run-on:
- agent: linux-large
parallelism: 2
- agent: linux-extra-large
parallelism: 3
parallelism: 4

- targets:
- bench:*
Expand Down
19 changes: 10 additions & 9 deletions e2e/angular/src/module-federation-host-remote.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import { names } from '@nx/devkit';
import {
checkFilesExist,
killProcessAndPorts,
reservePort,
runCLI,
runCommandUntil,
uniq,
Expand Down Expand Up @@ -30,12 +31,12 @@ describe('Angular Module Federation - Host and Remote', () => {
const sharedLib = uniq('shared-lib');
const wildcardLib = uniq('wildcard-lib');
const secondaryEntry = uniq('secondary');
const hostPort = 4300;
const remotePort = 4301;
const hostPort = await reservePort();
const remotePort = await reservePort();

// generate host app
runCLI(
`generate @nx/angular:host ${hostApp} --style=css --no-standalone --unitTestRunner=jest --no-interactive`
`generate @nx/angular:host ${hostApp} --port=${hostPort} --style=css --no-standalone --unitTestRunner=jest --no-interactive`
);
// generate remote app
runCLI(
Expand Down Expand Up @@ -152,15 +153,15 @@ describe('Angular Module Federation - Host and Remote', () => {
`serve ${hostApp} --port=${hostPort} --dev-remotes=${remoteApp1}`,
(output) =>
!output.includes(`Remote '${remoteApp1}' failed to serve correctly`) &&
output.includes(`listening on localhost:${hostPort}`)
output.includes(`server ready at http://localhost:${hostPort}`)
);
await killProcessAndPorts(processSwc.pid, hostPort, remotePort);

const processTsNode = await runCommandUntil(
`serve ${hostApp} --port=${hostPort} --dev-remotes=${remoteApp1}`,
(output) =>
!output.includes(`Remote '${remoteApp1}' failed to serve correctly`) &&
output.includes(`listening on localhost:${hostPort}`),
output.includes(`server ready at http://localhost:${hostPort}`),
{ env: { NX_PREFER_TS_NODE: 'true' } }
);

Expand All @@ -170,8 +171,8 @@ describe('Angular Module Federation - Host and Remote', () => {
it('should convert apps to MF successfully', async () => {
const app1 = uniq('app1');
const app2 = uniq('app2');
const app1Port = 4400;
const app2Port = 4401;
const app1Port = await reservePort();
const app2Port = await reservePort();

// generate apps
runCLI(
Expand All @@ -193,7 +194,7 @@ describe('Angular Module Federation - Host and Remote', () => {
`serve ${app1} --dev-remotes=${app2}`,
(output) =>
!output.includes(`Remote '${app2}' failed to serve correctly`) &&
output.includes(`listening on localhost:${app1Port}`)
output.includes(`server ready at http://localhost:${app1Port}`)
);

await killProcessAndPorts(processSwc.pid, app1Port, app2Port);
Expand All @@ -202,7 +203,7 @@ describe('Angular Module Federation - Host and Remote', () => {
`serve ${app1} --dev-remotes=${app2}`,
(output) =>
!output.includes(`Remote '${app2}' failed to serve correctly`) &&
output.includes(`listening on localhost:${app1Port}`),
output.includes(`server ready at http://localhost:${app1Port}`),
{ env: { NX_PREFER_TS_NODE: 'true' } }
);

Expand Down
9 changes: 5 additions & 4 deletions e2e/angular/src/module-federation-lib.test.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import {
killProcessAndPorts,
reservePort,
runCLI,
runCommandUntil,
runE2ETests,
Expand Down Expand Up @@ -27,10 +28,10 @@ describe('Angular Module Federation - Federated Libraries', () => {
const module = uniq('module');
const host = uniq('host');

const hostPort = 4200;
const hostPort = await reservePort();

runCLI(
`generate @nx/angular:host ${host} --remotes=${remote} --e2eTestRunner=cypress --no-interactive`
`generate @nx/angular:host ${host} --port=${hostPort} --remotes=${remote} --e2eTestRunner=cypress --no-interactive`
);

runCLI(`generate @nx/js:lib ${lib} --no-interactive`);
Expand Down Expand Up @@ -101,10 +102,10 @@ describe('Angular Module Federation - Federated Libraries', () => {
const childRemote = uniq('childremote');
const module = uniq('module');
const host = uniq('host');
const hostPort = 4200;
const hostPort = await reservePort();

runCLI(
`generate @nx/angular:host ${host} --remotes=${remote} --e2eTestRunner=cypress --no-interactive`
`generate @nx/angular:host ${host} --port=${hostPort} --remotes=${remote} --e2eTestRunner=cypress --no-interactive`
);

runCLI(`generate @nx/js:lib ${lib} --no-interactive`);
Expand Down
8 changes: 5 additions & 3 deletions e2e/angular/src/module-federation-ssr.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import {
killPorts,
killProcessAndPorts,
readJson,
reservePort,
runCLI,
runCommandUntil,
runE2ETests,
Expand Down Expand Up @@ -40,13 +41,14 @@ describe('Angular Module Federation - SSR', () => {
const remote1 = uniq('remote1');
const remote2 = uniq('remote2');

// ports
const hostPort = await reservePort();

// generate remote apps
runCLI(
`generate @nx/angular:host ${host} --ssr --remotes=${remote1},${remote2} --no-interactive`
`generate @nx/angular:host ${host} --port=${hostPort} --ssr --remotes=${remote1},${remote2} --no-interactive`
);

// ports
const hostPort = 4500;
const remote1Port = readJson(join(remote1, 'project.json')).targets.serve
.options.port;
const remote2Port = readJson(join(remote2, 'project.json')).targets.serve
Expand Down
13 changes: 7 additions & 6 deletions e2e/angular/src/module-federation.rspack.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import {
killProcessAndPorts,
newProject,
readFile,
reservePort,
runCLI,
runCommandUntil,
runE2ETests,
Expand Down Expand Up @@ -34,12 +35,12 @@ describe('Angular Module Federation', () => {
const sharedLib = uniq('shared-lib');
const wildcardLib = uniq('wildcard-lib');
const secondaryEntry = uniq('secondary');
const hostPort = 4300;
const remotePort = 4301;
const hostPort = await reservePort();
const remotePort = await reservePort();

// generate host app
runCLI(
`generate @nx/angular:host ${hostApp} --style=css --bundler=rspack --no-standalone --no-interactive`
`generate @nx/angular:host ${hostApp} --port=${hostPort} --style=css --bundler=rspack --no-standalone --no-interactive`
);
let rspackConfigFileContents = readFile(join(hostApp, 'rspack.config.ts'));
let updatedConfigFileContents = rspackConfigFileContents.replace(
Expand Down Expand Up @@ -179,12 +180,12 @@ describe('Angular Module Federation', () => {
it('should load remote app in the browser via ESM module federation', async () => {
const hostApp = uniq('host');
const remoteApp = uniq('remote');
const hostPort = 4200;
const remotePort = 4401;
const hostPort = await reservePort();
const remotePort = await reservePort();

// generate host with playwright e2e runner
runCLI(
`generate @nx/angular:host ${hostApp} --style=css --bundler=rspack --e2eTestRunner=playwright --no-interactive`
`generate @nx/angular:host ${hostApp} --port=${hostPort} --style=css --bundler=rspack --e2eTestRunner=playwright --no-interactive`
);

// generate remote
Expand Down
3 changes: 2 additions & 1 deletion e2e/angular/src/projects-build-and-test.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import {
killPort,
killProcessAndPorts,
readFile,
reservePort,
runCLI,
runCommandUntil,
runE2ETests,
Expand Down Expand Up @@ -95,7 +96,7 @@ describe('Angular Projects - Build and Test', () => {
expect(await killPort(4200)).toBeTruthy();
}

const appPort = 4207;
const appPort = await reservePort();
const process = await runCommandUntil(
`serve ${app1} -- --port=${appPort}`,
(output) => output.includes(`listening on localhost:${appPort}`)
Expand Down
18 changes: 10 additions & 8 deletions e2e/gradle/src/utils/create-gradle-project.ts
Original file line number Diff line number Diff line change
Expand Up @@ -28,14 +28,21 @@ export function createGradleProject(
cwd,
})
);
// Run setup-time gradle commands with --no-daemon so we don't leave a
// long-lived daemon holding inotify watches on the project dir. A daemon
// spawned here outlives the setup phase and interferes with later
// non-gradle filesystem operations (e.g. `nx import` runs `git
// filter-branch --tree-filter`, which fails with "Unable to read current
// working directory" when the daemon is concurrently watching the same
// tree). The actual test-body gradle calls keep daemons enabled.
e2eConsoleLogger(
execSync(`${gradleCommand} help --task :init`, {
execSync(`${gradleCommand} help --task :init --no-daemon`, {
cwd,
}).toString()
);
e2eConsoleLogger(
runCommand(
`${gradleCommand} init --type ${type}-application --dsl ${type} --project-name ${projectName} --package ${packageName} --no-incubating --split-project --overwrite`,
`${gradleCommand} init --type ${type}-application --dsl ${type} --project-name ${projectName} --package ${packageName} --no-incubating --split-project --overwrite --no-daemon`,
{
cwd,
}
Expand All @@ -53,12 +60,7 @@ export function createGradleProject(

try {
e2eConsoleLogger(
runCommand(`${gradleCommand} --stop`, {
cwd,
})
);
e2eConsoleLogger(
runCommand(`${gradleCommand} clean`, {
runCommand(`${gradleCommand} clean --no-daemon`, {
cwd,
})
);
Expand Down
7 changes: 4 additions & 3 deletions e2e/next/src/next-legacy.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import {
newProject,
packageManagerLockFile,
readFile,
reservePort,
runCLI,
runCommand,
runCommandUntil,
Expand Down Expand Up @@ -77,7 +78,7 @@ describe('@nx/next (legacy)', () => {
checkFilesExist(`dist/${appName}/nested/headers-2.js`);
}, 120_000);

it('should build and install pruned lock file', () => {
it('should build and install pruned lock file', async () => {
const appName = uniq('app');
runCLI(`generate @nx/next:app ${appName} --no-interactive --style=css`, {
env: { NX_ADD_PLUGINS: 'false' },
Expand Down Expand Up @@ -250,7 +251,7 @@ describe('@nx/next (legacy)', () => {
expect(nextConfigPath).not.toContain(`require("@nx/`); // dev-only packages

// Check that `nx serve <app> --prod` works with previous production build (e.g. `nx build <app>`).
const prodServePort = 4001;
const prodServePort = await reservePort();
const prodServeProcess = await runCommandUntil(
`run ${appName}:serve --prod --port=${prodServePort}`,
(output) => {
Expand All @@ -259,7 +260,7 @@ describe('@nx/next (legacy)', () => {
);

// Check that the output is self-contained (i.e. can run with its own package.json + node_modules)
const selfContainedPort = 3000;
const selfContainedPort = await reservePort();
runCLI(
`generate @nx/workspace:run-commands serve-prod --project ${appName} --cwd=dist/packages/${appName} --command="npx next start --port=${selfContainedPort}"`,
{
Expand Down
Loading
Loading